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&delete=true&readLock=changed&readLockCheckInterval=200&readLockMinLength=0&delay=500&maxMessagesPerPoll=100&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&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&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