You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Rob Terpilowski <RO...@Lynden.com> on 2015/04/18 01:21:30 UTC

Using JPA component in EJB application and having issues with null TransactionManager.

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



Re: Using JPA component in EJB application and having issues with null TransactionManager.

Posted by Rob Terpilowski <RO...@Lynden.com>.
Hi Claus,
Ok, this makes sense, but unfortunately I can't figure out how to get the transaction manager.  I attempted to just create a new JtaTransactionManager and pass that into the JPA component, but that produced the following exception.  

org.springframework.transaction.CannotCreateTransactionException: No JTA UserTransaction available - programmatic PlatformTransactionManager.getTransaction usage not supported
	at org.springframework.transaction.jta.JtaTransactionManager.doGetTransaction(JtaTransactionManager.java:782)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:337)
	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
	at org.apache.camel.component.jpa.JpaConsumer.poll(JpaConsumer.java:92)
	at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:174)
	at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:101)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)


I then attempted to do a jndi lookup of of the UserTransaction object and then build a JtaTransactionManager object from that, which I could then pass in to the component, but encountered the following error when attempting to look up the UserTransaction object.
Lookup of java:comp/UserTransaction not allowed for Container managed Transaction beans

The thing is that I don't even care about Transactions for this application and would be happy to disable them if there was a way to do so.  

Have you heard of other experiences from users who are running both EJBs and the JPA component within the same application?  Any other ideas of what I can do to get the JPA component up and running?

Thanks,




________________________________________
From: Claus Ibsen <cl...@gmail.com>
Sent: Monday, April 20, 2015 12:17 AM
To: users@camel.apache.org
Subject: Re: Using JPA component in EJB application and having issues with null TransactionManager.

Hi

You can configure and set the transaction manager and whatnot directly
on the JpaComponent using the setters. Then there is no lookup needed
from Camel which you talk about is causing a problem for you.

On Sat, Apr 18, 2015 at 3:48 PM, Rob Terpilowski <RO...@lynden.com> wrote:
> Thanks Claus,
>
> we are currently not using spring directly in this application, so we don't have a spring.xml file explicitly defined, so I'm not sure if this will be an issue with our EJBs if we set up a different transaction manager.
>
> I was also tried to see if I could set up 2 different persistence units, one with the transactions set to "JTA", which the EJBs could use, and the other persistence unit set to RESOURCE_LOCAL, which the Camel JPA component could use, but issue still exists in that case.
>
> Surely there must be others out there who are using the JPA component in an application that uses EJBs, but I've found very little in my google searches related to running an app with this configuration.
>
> Is there anywhere you could point me to for seeing what it would take to implement this in Java?
>
> We are using Camel 2.15
>
>
> Thanks for your suggestions.
>
> -Rob
> ________________________________________
> From: Claus Ibsen <cl...@gmail.com>
> Sent: Friday, April 17, 2015 10:29 PM
> To: users@camel.apache.org
> Subject: Re: Using JPA component in EJB application and having issues with null TransactionManager.
>
> 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 <RO...@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: cibsen@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/



--
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@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/

Re: Using JPA component in EJB application and having issues with null TransactionManager.

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

You can configure and set the transaction manager and whatnot directly
on the JpaComponent using the setters. Then there is no lookup needed
from Camel which you talk about is causing a problem for you.

On Sat, Apr 18, 2015 at 3:48 PM, Rob Terpilowski <RO...@lynden.com> wrote:
> Thanks Claus,
>
> we are currently not using spring directly in this application, so we don't have a spring.xml file explicitly defined, so I'm not sure if this will be an issue with our EJBs if we set up a different transaction manager.
>
> I was also tried to see if I could set up 2 different persistence units, one with the transactions set to "JTA", which the EJBs could use, and the other persistence unit set to RESOURCE_LOCAL, which the Camel JPA component could use, but issue still exists in that case.
>
> Surely there must be others out there who are using the JPA component in an application that uses EJBs, but I've found very little in my google searches related to running an app with this configuration.
>
> Is there anywhere you could point me to for seeing what it would take to implement this in Java?
>
> We are using Camel 2.15
>
>
> Thanks for your suggestions.
>
> -Rob
> ________________________________________
> From: Claus Ibsen <cl...@gmail.com>
> Sent: Friday, April 17, 2015 10:29 PM
> To: users@camel.apache.org
> Subject: Re: Using JPA component in EJB application and having issues with null TransactionManager.
>
> 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 <RO...@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: cibsen@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/



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@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/

Re: Using JPA component in EJB application and having issues with null TransactionManager.

Posted by Rob Terpilowski <RO...@Lynden.com>.
Thanks Claus,

we are currently not using spring directly in this application, so we don't have a spring.xml file explicitly defined, so I'm not sure if this will be an issue with our EJBs if we set up a different transaction manager.

I was also tried to see if I could set up 2 different persistence units, one with the transactions set to "JTA", which the EJBs could use, and the other persistence unit set to RESOURCE_LOCAL, which the Camel JPA component could use, but issue still exists in that case.  

Surely there must be others out there who are using the JPA component in an application that uses EJBs, but I've found very little in my google searches related to running an app with this configuration.

Is there anywhere you could point me to for seeing what it would take to implement this in Java?

We are using Camel 2.15    


Thanks for your suggestions. 

-Rob
________________________________________
From: Claus Ibsen <cl...@gmail.com>
Sent: Friday, April 17, 2015 10:29 PM
To: users@camel.apache.org
Subject: Re: Using JPA component in EJB application and having issues with null TransactionManager.

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 <RO...@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: cibsen@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/

Re: Using JPA component in EJB application and having issues with null TransactionManager.

Posted by Claus Ibsen <cl...@gmail.com>.
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 <RO...@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: cibsen@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/