cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Wardle <m...@wardle.org>
Subject Re: Batch iteration
Date Sun, 16 Oct 2016 20:45:30 GMT
Thanks John. Interestingly, I did some testing and peer contexts aren’t committed until the
batch iterator JDBC ResultSet is closed at the end of iteration either. This is fine but for
a long running task, I thought that there was a problem (but there wasn’t). I think the
only workarounds are a) to not care [which I think is probably fine or b) do other processing
in another connection. 

Mark

> On 15 Oct 2016, at 22:34, John Huss <johnthuss@gmail.com> wrote:
> 
> I would use a peer context.
> 
> You can create a peer context like this if you runtime has been bound to
> the current thread using
> CayenneRuntime.bindThreadInjector(runtime.getInjector())
> 
> public static ObjectContext newObjectContext() {
> ObjectContextFactory factory = CayenneRuntime.getThreadInjector
> ().getInstance(ObjectContextFactory.class);
> return (factory != null) ? factory.createContext() : null;
> }
> 
> 
> 
> On Sat, Oct 15, 2016 at 2:37 PM Mark Wardle <mark@wardle.org> wrote:
> 
>> Sorry… meant to say using Cayenne M4.0.M3…
>> 
>> Mark
>> 
>>> On 15 Oct 2016, at 20:29, Mark Wardle <mark@wardle.org> wrote:
>>> 
>>> I’m using ResultBatchIterator like this:
>>> 
>>> Consumer<T> forEach = ...
>>> try (ResultBatchIterator<T> iterator = query.batchIterator(context,
>> batchSize)) {
>>>                      for(List<T> batch : iterator) {
>>>                              for (T c : batch) {
>>>                                      forEach.accept(c);
>>>                              }
>>>                      }
>>>              }
>>> 
>>> but I also want to do some processing, inserting rows, editing objects
>> etc. I see lots of SQL in my logs, but the transaction doesn’t get
>> committed until the batch iterator completes, whether I use
>> context.commitChanges() or context.performGenericQuery() on some custom SQL
>> created using SQLTemplate.
>>> 
>>> Is there a way of committing the transaction earlier, or should I use a
>> peer object context? Is there an easy of getting a new peer editing context
>> given a single object context or do I need to inject a ServerRuntime here?
>>> 
>>> Thank you,
>>> 
>>> Mark
>>> 
>>> 
>> 
>> 


Mime
View raw message