You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Leandro Franchi <le...@gmail.com> on 2012/10/30 20:30:12 UTC

JPA Concurrent Producers

Hi,

I'm having some errors when JPA producer is running over a big thread 
pool (I'm using Hibernate).

Actually, I have tree routes, the first, read files from directory and 
send to two SEDA routes to be processed, following:

<route id="fe-dev-147" errorHandlerRef="myErrorHandler" 
shutdownRoute="Defer" autoStartup="true">
     <from 
uri="file:/data?charset=iso-8859-1&amp;delete=true&amp;readLock=changed&amp;readLockCheckInterval=200&amp;readLockMinLength=0&amp;delay=500&amp;maxMessagesPerPoll=100&amp;sortBy=${file:modified}" 
/>
   <choice>
         <when>
             <simple>${file:name} contains '_01.txt'</simple>
             <to uri="seda:fe01" />
         </when>
         <when>
             <simple>${file:name} contains '_02.txt'</simple>
             <to uri="seda:fe02" />
          </when>
     </choice>
</route>

<route id="route01" errorHandlerRef="myErrorHandler" 
shutdownRoute="Defer" autoStartup="true">
     <from 
uri="seda:fe01?concurrentConsumers=20&amp;waitForTaskToComplete=Never" />
     <convertBodyTo type="java.lang.String" />
     <process ref="myProcessor1" />
     <to 
uri="jpa:com.myproject.model.MyDomain1?entityType=java.util.ArrayList" />
     <process ref="myPostProcessor1" />
     <to uri="activemq:queue:alarm" />
</route>

<route id="route02" errorHandlerRef="myErrorHandler" 
shutdownRoute="Defer" autoStartup="true">
     <from 
uri="seda:fe02?concurrentConsumers=20&amp;waitForTaskToComplete=Never" />
     <convertBodyTo type="java.lang.String" />
     <process ref="myProcessor2" />
     <to 
uri="jpa:com.myproject.model.MyDomain2?entityType=java.util.ArrayList" />
     <process ref="myPostProcessor2" />
     <to uri="activemq:queue:alarm" />
</route>

If I increase the concurrentConsumers value, the following error occurs:

org.springframework.orm.hibernate3.HibernateSystemException: Unknown 
service requested 
[org.hibernate.event.service.spi.EventListenerRegistry]; nested 
exception is org.hibernate.service.UnknownServiceException: Unknown 
service requested [org.hibernate.event.service.spi.EventListenerRegistry]
     at 
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)
     at 
org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:102)
     at 
org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
     at 
org.springframework.orm.jpa.JpaAccessor.translateIfNecessary(JpaAccessor.java:152)
     at 
org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:188)
     at 
org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:146)
     at 
org.apache.camel.component.jpa.JpaTemplateTransactionStrategy$1.doInTransaction(JpaTemplateTransactionStrategy.java:80)
     at 
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
     at 
org.apache.camel.component.jpa.JpaTemplateTransactionStrategy.execute(JpaTemplateTransactionStrategy.java:78)
     at 
org.apache.camel.component.jpa.JpaProducer.process(JpaProducer.java:50)
     at 
org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
     at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
     at 
org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:120)
     at 
org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:292)
     at 
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:115)
     at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
     at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
     at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
     at 
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:73)
     at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
     at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
     at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
     at 
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91)
     at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
     at 
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:330)
     at 
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:220)
     at 
org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:52)
     at 
org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45)
     at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
     at 
org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:303)
     at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
     at org.apache.camel.processor.Pipeline.process(Pipeline.java:117)
     at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
     at 
org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45)
     at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
     at 
org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150)
     at 
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117)
     at 
org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:48)
     at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
     at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
     at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
     at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
     at 
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:73)
     at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
     at 
org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:275)
     at 
org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:183)
     at 
org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:139)
     at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
     at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
     at java.lang.Thread.run(Thread.java:722)
Caused by: org.hibernate.service.UnknownServiceException: Unknown 
service requested [org.hibernate.event.service.spi.EventListenerRegistry]
     at 
org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:126)
     at 
org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:176)
     at 
org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:134)
     at 
org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:995)
     at org.hibernate.loader.Loader.doQuery(Loader.java:874)
     at 
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
     at 
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
     at org.hibernate.loader.Loader.loadEntity(Loader.java:2033)
     at 
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
     at 
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
     at 
org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3719)
     at 
org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:449)
     at 
org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:418)
     at 
org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:204)
     at 
org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:251)
     at 
org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148)
     at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1079)
     at org.hibernate.internal.SessionImpl.access$2200(SessionImpl.java:172)
     at 
org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2425)
     at org.hibernate.internal.SessionImpl.get(SessionImpl.java:979)
     at 
org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:271)
     at 
org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:151)
     at 
org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
     at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:904)
     at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:888)
     at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:892)
     at 
org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:879)
     at sun.reflect.GeneratedMethodAccessor167.invoke(Unknown Source)
     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:601)
     at 
org.springframework.orm.jpa.JpaTemplate$CloseSuppressingInvocationHandler.invoke(JpaTemplate.java:425)
     at $Proxy154.merge(Unknown Source)
     at 
org.apache.camel.component.jpa.JpaProducer$1.save(JpaProducer.java:98)
     at 
org.apache.camel.component.jpa.JpaProducer$1.doInJpa(JpaProducer.java:66)
     at 
org.apache.camel.component.jpa.JpaTemplateTransactionStrategy$1$1.doInJpa(JpaTemplateTransactionStrategy.java:82)
     at 
org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:183)
     ... 45 more

I read something about the Hibernate Session isn't thread safe, but I 
don't know how to fix these problem... if is this the problem...


Best Regards
Leandro Franchi