Hi

You can likely configure the transaction manager on the jpa component
directly if you use spring xml

<bean id="jpa" class="org.apache.camel.component.jpa.JpaComponent">
   <property name ..."
   .. configure transaction manager here
</bean>

You can also configure this from java code, but that requires a bit
different work.

Maybe that helps?

And btw what version of Camel do you use?


On Sat, Apr 18, 2015 at 1:21 AM, Rob Terpilowski <r...@lynden.com> wrote:
> Hello,
>
> I have a web application which I am running in Glassfish 4.1, which contains 
> an EJB which is using Hibernate to access a SQL Server DB.  I would also like 
> to use the Camel JPA component for some new functionality, but I am getting 
> NullPointerExceptions complaining about the transaction manager when I 
> attempt to run a JPA consumer in the app.  Details are below:
>
>
> To start with, my persistance.xml contains:
>
> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
> xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
> http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd";>
>   <persistence-unit name="com.lynden.peoplenet.test.pu" 
> transaction-type="JTA">
>     <provider>org.hibernate.ejb.HibernatePersistence</provider>
>     <jta-data-source>PeopleNet</jta-data-source>
>
>     <exclude-unlisted-classes>false</exclude-unlisted-classes>
>     <properties>
>     </properties>
>   </persistence-unit>
> </persistence>
>
>
>
> The URL of the JPA component is:
> jpa://com.lynden.peoplnet.test.bean.AllinboundMessagesSqlBean?consumeDelete=false&consumer.delay=60000&consumer.namedQuery=AllinboundMessagesSqlBean.findByProcessed&maxMessagesPerPoll=10&maximumResults=10&persistenceUnit=com.lynden.peoplenet.test.pu
>
>
> The following exception is being thrown in the web application's log file:
> javax.ejb.EJBTransactionRolledbackException
>         at 
> com.sun.ejb.containers.BaseContainer.mapLocal3xException(BaseContainer.java:2342)
>         at 
> com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2123)
>         at 
> com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2044)
>         at 
> com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220)
>         at 
> com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
>         at com.sun.proxy.$Proxy697.addRoutesToCamelContext(Unknown Source)
>         at 
> com.lynden.esperanto.camel.__EJB31_Generated__DefaultRouteBuilder__Intf____Bean__.addRoutesToCamelContext(Unknown
>  Source)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:497)
>         at 
> org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:414)
>         at 
> org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:127)
>         at 
> org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56)
>         at 
> org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:65)
>         at 
> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)
>         at 
> com.lynden.esperanto.camel.DefaultRouteBuilder$Proxy$_$$_Weld$EnterpriseProxy$.addRoutesToCamelContext(Unknown
>  Source)
>         at 
> org.apache.camel.impl.DefaultCamelContext$1.call(DefaultCamelContext.java:731)
>         at 
> org.apache.camel.impl.DefaultCamelContext$1.call(DefaultCamelContext.java:728)
>         at 
> org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2486)
>         at 
> org.apache.camel.impl.DefaultCamelContext.addRoutes(DefaultCamelContext.java:728)
>         at 
> org.apache.camel.cdi.CdiCamelContext$Proxy$_$$_WeldClientProxy.addRoutes(Unknown
>  Source)
>         at 
> com.lynden.esperanto.DefaultEsperantoService.start(DefaultEsperantoService.java:59)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:497)
>         at 
> com.sun.ejb.containers.interceptors.BeanCallbackInterceptor.intercept(InterceptorManager.java:1035)
>         at 
> com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:72)
>         at 
> com.sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.java:205)
>         at 
> org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:55)
>         at 
> org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52)
>         at sun.reflect.GeneratedMethodAccessor876.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:497)
>         at 
> com.sun.ejb.containers.interceptors.CallbackInterceptor.intercept(InterceptorManager.java:986)
>         at 
> com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:72)
>         at 
> com.sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.java:205)
>         at 
> com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163)
>         at 
> com.sun.ejb.containers.interceptors.SystemInterceptorProxy.init(SystemInterceptorProxy.java:125)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:497)
>         at 
> com.sun.ejb.containers.interceptors.CallbackInterceptor.intercept(InterceptorManager.java:986)
>         at 
> com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:72)
>         at 
> com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:412)
>         at 
> com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:375)
>         at 
> com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:2014)
>         at 
> com.sun.ejb.containers.AbstractSingletonContainer.createSingletonEJB(AbstractSingletonContainer.java:468)
>         at 
> com.sun.ejb.containers.AbstractSingletonContainer.access$000(AbstractSingletonContainer.java:74)
>         at 
> com.sun.ejb.containers.AbstractSingletonContainer$SingletonContextFactory.create(AbstractSingletonContainer.java:647)
>         at 
> com.sun.ejb.containers.AbstractSingletonContainer.instantiateSingletonInstance(AbstractSingletonContainer.java:389)
>         at 
> org.glassfish.ejb.startup.SingletonLifeCycleManager.initializeSingleton(SingletonLifeCycleManager.java:219)
>         at 
> org.glassfish.ejb.startup.SingletonLifeCycleManager.initializeSingleton(SingletonLifeCycleManager.java:180)
>         at 
> org.glassfish.ejb.startup.SingletonLifeCycleManager.doStartup(SingletonLifeCycleManager.java:158)
>         at 
> org.glassfish.ejb.startup.EjbApplication.start(EjbApplication.java:166)
>         at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
>         at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291)
>         at 
> org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:352)
>         at 
> com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:500)
>         at 
> com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
>         at 
> org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
>         at 
> com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
>         at 
> com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.security.auth.Subject.doAs(Subject.java:360)
>         at 
> com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
>         at 
> com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
>         at 
> com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.security.auth.Subject.doAs(Subject.java:360)
>         at 
> com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
>         at 
> com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
>         at 
> com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
>         at 
> com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
>         at 
> com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722)
>         at 
> org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:253)
>         at 
> org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:231)
>         at 
> org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:275)
>         at 
> org.glassfish.admin.rest.resources.TemplateListOfResource.createResource(TemplateListOfResource.java:133)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:497)
>         at 
> org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
>         at 
> org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:151)
>         at 
> org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:171)
>         at 
> org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:152)
>         at 
> org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104)
>         at 
> org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:387)
>         at 
> org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:331)
>         at 
> org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:103)
>         at 
> org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:271)
>         at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
>         at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
>         at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
>         at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
>         at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
>         at 
> org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297)
>         at 
> org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:254)
>         at 
> org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1028)
>         at 
> org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:365)
>         at 
> org.glassfish.admin.rest.adapter.RestAdapter$2.service(RestAdapter.java:316)
>         at 
> org.glassfish.admin.rest.adapter.RestAdapter.service(RestAdapter.java:179)
>         at 
> com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
>         at 
> com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
>         at 
> org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
>         at 
> org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
>         at 
> org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
>         at 
> org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
>         at 
> org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
>         at 
> org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
>         at 
> org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
>         at 
> org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
>         at 
> org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
>         at 
> org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
>         at 
> org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
>         at 
> org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
>         at 
> org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
>         at 
> org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
>         at 
> org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
>         at 
> org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
>         at java.lang.Thread.run(Thread.java:745)
> Caused by: javax.ejb.TransactionRolledbackLocalException: Exception thrown 
> from bean
>         at 
> com.sun.ejb.containers.EJBContainerTransactionManager.checkExceptionClientTx(EJBContainerTransactionManager.java:662)
>         at 
> com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:507)
>         at 
> com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4566)
>         at 
> com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2074)
>         ... 122 more
> Caused by: java.lang.NullPointerException
>         at 
> org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:76)
>         at 
> org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:118)
>         at 
> org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149)
>         at 
> org.hibernate.jpa.spi.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1602)
>         at 
> org.hibernate.jpa.spi.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:210)
>         at 
> org.hibernate.jpa.internal.EntityManagerImpl.<init>(EntityManagerImpl.java:91)
>         at 
> org.hibernate.jpa.internal.EntityManagerFactoryImpl.internalCreateEntityManager(EntityManagerFactoryImpl.java:345)
>         at 
> org.hibernate.jpa.internal.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:313)
>         at 
> org.apache.camel.component.jpa.JpaConsumer.doStart(JpaConsumer.java:503)
>         at 
> org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
>         at 
> org.apache.camel.impl.DefaultCamelContext.startService(DefaultCamelContext.java:2869)
>         at 
> org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRouteConsumers(DefaultCamelContext.java:3163)
>         at 
> org.apache.camel.impl.DefaultCamelContext.doStartRouteConsumers(DefaultCamelContext.java:3099)
>         at 
> org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3029)
>         at 
> org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3042)
>         at 
> org.apache.camel.impl.DefaultCamelContext.startRouteService(DefaultCamelContext.java:2919)
>         at 
> org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:843)
>         at 
> org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:2895)
>         at 
> org.apache.camel.impl.DefaultCamelContext.addRouteDefinitions(DefaultCamelContext.java:775)
>         at 
> org.apache.camel.builder.RouteBuilder.populateRoutes(RouteBuilder.java:397)
>         at 
> org.apache.camel.builder.RouteBuilder.addRoutesToCamelContext(RouteBuilder.java:311)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:497)
>         at 
> org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081)
>         at 
> org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153)
>         at 
> com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4786)
>         at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656)
>         at 
> com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
>         at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
>         at 
> org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46)
>         at 
> org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52)
>         at sun.reflect.GeneratedMethodAccessor876.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:497)
>         at 
> com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
>         at 
> com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
>         at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
>         at 
> com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163)
>         at 
> com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140)
>         at sun.reflect.GeneratedMethodAccessor1069.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:497)
>         at 
> com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
>         at 
> com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
>         at 
> com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369)
>         at 
> com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4758)
>         at 
> com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4746)
>         at 
> com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
>         ... 120 more
>
>
>
> This particular error goes away and the JPA component works if I change the 
> transaction-type property in the persistence.xml file to "RESOURCE_LOCAL", 
> but then, as expected the EJBs no longer work.
>
> The JPA component documentation says that the component will pull the 
> transaction manager out of the CamelContext's registry.  However, when I 
> stepped through the code in the debugger the registry did not have any items 
> that implemented the 
> org.springframework.transaction.PlatformTransactionManager interface that the 
> JPA component appears to be looking for.
>
> I'm hoping I'm just missing some simple configuration tweak, but any 
> help/ideas on where to look next would be greatly appreciated.
>
> Thanks,
> -Rob
>
>



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cib...@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
hawtio: http://hawt.io/
fabric8: http://fabric8.io/

Reply via email to