Logging output to show the problem:
Created MBeanServer with ID: 1f1ad4a:10f0fa38af5:-8000:hvb0396:1
RMIConnectorServer started at:
service:jmx:rmi://localhost/jndi/rmi://localhost:1098/zpvverst
2006-11-22 13:28:34,866 [main] DEBUG
org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource
- Adding transactional method [durchfuehrenFuerEmpfaengerDerMeldeneStelle]
with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
2006-11-22 13:28:36,132 [main] DEBUG
org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource
- Adding transactional method [versenden] with attribute
[PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
2006-11-22 13:28:36,897 [main] DEBUG
org.springframework.transaction.interceptor.TransactionInterceptor - Getting
transaction for
at.sozvers.stp.zpv.bc.verstaend.IVerstaendigungskuvertSender.versenden
2006-11-22 13:28:37,772 [main] DEBUG
org.springframework.transaction.interceptor.TransactionInterceptor -
Invoking commit for transaction on
at.sozvers.stp.zpv.bc.verstaend.IVerstaendigungskuvertSender.versenden
2006-11-22 13:28:37,882 [main] DEBUG
org.springframework.transaction.interceptor.TransactionInterceptor - Getting
transaction for
at.sozvers.stp.zpv.bc.verstaend.IVerstaendigungskuvertSender.versenden
2006-11-22 13:28:38,100 [main] DEBUG
org.springframework.transaction.interceptor.RuleBasedTransactionAttribute -
Applying rules to determine whether transaction should rollback on
java.lang.NullPointerException
2006-11-22 13:28:38,100 [main] DEBUG
org.springframework.transaction.interceptor.RuleBasedTransactionAttribute -
Winning rollback rule is: null
2006-11-22 13:28:38,116 [main] DEBUG
org.springframework.transaction.interceptor.RuleBasedTransactionAttribute -
No relevant rollback rule found: applying superclass default
2006-11-22 13:28:38,132 [main] DEBUG
org.springframework.transaction.interceptor.TransactionInterceptor -
Invoking rollback for transaction on
at.sozvers.stp.zpv.bc.verstaend.IVerstaendigungskuvertSender.versenden due
to throwable [java.lang.NullPointerException]
2006-11-22 13:28:38,132 [main] ERROR
org.springframework.transaction.interceptor.TransactionInterceptor -
Application exception overridden by rollback exception
java.lang.NullPointerException
at
org.apache.activemq.ra.ManagedConnectionProxy.createSessionProxy(ManagedConnectionProxy.java:117)
at
org.apache.activemq.ra.ManagedConnectionProxy.createSession(ManagedConnectionProxy.java:106)
at
org.springframework.jms.core.JmsTemplate.createSession(JmsTemplate.java:771)
at
org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:424)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:486)
at
at.sozvers.stp.zpv.verst.app.JMSKuvertSender.versenden(JMSKuvertSender.java:62)
at
at.sozvers.stp.zpv.verst.app.JMSKuvertSender.versenden(JMSKuvertSender.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy16.versenden(Unknown Source)
at
at.sozvers.stp.zpv.verst.app.TestCaseKuvertSenden.testTXMehrfachVersand(TestCaseKuvertSenden.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
And a second one:
Created MBeanServer with ID: 16cf4f9:10f0f5aad90:-8000:hvb0396:1
RMIConnectorServer started at:
service:jmx:rmi://localhost/jndi/rmi://localhost:1098/zpvverst
2006-11-22 12:09:00,424 [main] DEBUG
org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource
- Adding transactional method [durchfuehrenFuerEmpfaengerDerMeldeneStelle]
with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
2006-11-22 12:09:00,799 [main] DEBUG
org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource
- Adding transactional method [versenden] with attribute
[PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
2006-11-22 12:09:01,534 [main] DEBUG
org.springframework.transaction.interceptor.TransactionInterceptor - Getting
transaction for
at.sozvers.stp.zpv.bc.verstaend.IVerstaendigungskuvertSender.versenden
2006-11-22 12:09:02,440 [main] DEBUG
org.springframework.transaction.interceptor.TransactionInterceptor -
Invoking commit for transaction on
at.sozvers.stp.zpv.bc.verstaend.IVerstaendigungskuvertSender.versenden
2006-11-22 12:09:02,565 [main] DEBUG
org.springframework.transaction.interceptor.TransactionInterceptor - Getting
transaction for
at.sozvers.stp.zpv.bc.verstaend.IVerstaendigungskuvertSender.versenden
2006-11-22 12:09:02,877 [main] DEBUG
org.springframework.transaction.interceptor.RuleBasedTransactionAttribute -
Applying rules to determine whether transaction should rollback on
org.springframework.jms.IllegalStateException: The Session is closed; nested
exception is javax.jms.IllegalStateException: The Session is closed
2006-11-22 12:09:02,877 [main] DEBUG
org.springframework.transaction.interceptor.RuleBasedTransactionAttribute -
Winning rollback rule is: null
2006-11-22 12:09:02,893 [main] DEBUG
org.springframework.transaction.interceptor.RuleBasedTransactionAttribute -
No relevant rollback rule found: applying superclass default
2006-11-22 12:09:02,893 [main] DEBUG
org.springframework.transaction.interceptor.TransactionInterceptor -
Invoking rollback for transaction on
at.sozvers.stp.zpv.bc.verstaend.IVerstaendigungskuvertSender.versenden due
to throwable [org.springframework.jms.IllegalStateException: The Session is
closed; nested exception is javax.jms.IllegalStateException: The Session is
closed]
2006-11-22 12:09:02,893 [main] ERROR
org.springframework.transaction.interceptor.TransactionInterceptor -
Application exception overridden by rollback exception
org.springframework.jms.IllegalStateException: The Session is closed; nested
exception is javax.jms.IllegalStateException: The Session is closed
javax.jms.IllegalStateException: The Session is closed
at
org.apache.activemq.ra.ManagedSessionProxy.getSession(ManagedSessionProxy.java:93)
at
org.apache.activemq.ra.ManagedSessionProxy.createTextMessage(ManagedSessionProxy.java:275)
at
at.sozvers.stp.zpv.verst.app.JMSKuvertSender$1.createMessage(JMSKuvertSender.java:66)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:500)
at
org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:489)
at
org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:432)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:486)
at
at.sozvers.stp.zpv.verst.app.JMSKuvertSender.versenden(JMSKuvertSender.java:62)
at
at.sozvers.stp.zpv.verst.app.JMSKuvertSender.versenden(JMSKuvertSender.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy16.versenden(Unknown Source)
at
at.sozvers.stp.zpv.verst.app.TestCaseKuvertSenden.testTXMehrfachVersand(TestCaseKuvertSenden.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Kind regards
Juergen
Juergen Mayrbaeurl wrote:
>
> We're having problems with Outbound JMS in our application.
>
> The application is a Spring based Java native application that uses Quartz
> to fire triggered jobs that are sending JMS messages to an ActiveMQ
> message broker and writing to an Oracle Database with Hibernate in one
> transaction. Each job is executing the transaction several times. Jobs get
> triggered by Quartz in non concurrent mode.
>
> Components used: JDK 1.4.2, Spring 1.2.8, Quartz 1.5, Hibernate 3.2 and
> Jencks 1.3.
>
> Unfortunately only the first transaction of a job (sending JMS message and
> writting to the database) works correctly. The second transaction of the
> job (executed in the same thread generated by Quartz) fails in method
> execute() of the JMSTemplate class with NPE, because the returned
> ManagedConnectionProxy instance from method createConnection() has a NULL
> value for the attribute 'managedConnection'.
>
> Springs transaction demarcation is used with the
> TransactionProxyFactoryBean class. We're using the JMSTemplate method
> send(String, MessageCreator) for sending the message to the ActiveMQ
> message broker (not embedded).
>
> We tested sending multiple JMS messages without transactions and the same
> setup (see below), too. This works fine. Therefore the problem must come
> from the transaction handling.
>
> Configuration setup looks like:
>
> <!--
> #### Transaction Manager ####
> -->
>
> <bean id="transactionContextManager"
> class="org.jencks.factory.TransactionContextManagerFactoryBean"
> abstract="false" singleton="true" lazy-init="default"
> autowire="default" dependency-check="default" />
>
> <bean id="userTransaction"
>
> class="org.jencks.factory.GeronimoTransactionManagerFactoryBean"
> abstract="false" singleton="true" lazy-init="default"
> autowire="default" dependency-check="default" />
>
> <bean id="transactionManager"
>
> class="org.springframework.transaction.jta.JtaTransactionManager"
> abstract="false" singleton="true" lazy-init="default"
> autowire="default" dependency-check="default">
> <property name="userTransaction" ref="userTransaction" />
> </bean>
>
> <!-- Enhydra JDBC Connection -->
> <bean id="verstDataSource"
> class="org.enhydra.jdbc.pool.StandardXAPoolDataSource"
> destroy-method="shutdown">
>
> <property name="dataSource">
> <bean class="org.enhydra.jdbc.standard.StandardXADataSource"
> destroy-method="shutdown">
>
> <property name="transactionManager" ref="userTransaction"
> />
> <property name="driverName"
> value="oracle.jdbc.driver.OracleDriver" />
> <property name="url"
> value="${verst.db.url}" />
> </bean>
> </property>
> <property name="user" value="${verst.db.username}"/>
> <property name="password" value="${verst.db.password}"/>
> </bean>
>
> <bean id="connectionTracker"
>
> class="org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinator"/>
>
> <!-- Jencks Connection Manager -->
> <bean id="connectionManager"
> class="org.jencks.factory.ConnectionManagerFactoryBean">
> <property name="transactionSupport">
> <bean
> class="org.jencks.factory.XATransactionFactoryBean">
> <property name="useTransactionCaching"
> value="true" />
> <property name="useThreadCaching" value="false"
> />
> </bean>
> </property>
> <property name="poolingSupport">
> <bean class="org.jencks.factory.SinglePoolFactoryBean">
> <property name="maxSize" value="2" />
> <property name="minSize" value="1" />
> <property name="blockingTimeoutMilliseconds"
> value="60" />
> <property name="idleTimeoutMinutes" value="60"
> />
> <property name="matchOne" value="true" />
> <property name="matchAll" value="true" />
> <property name="selectOneAssumeMatch"
> value="true" />
> </bean>
> </property>
>
> <property name="connectionTracker" ref="connectionTracker"/>
> </bean>
>
> <!-- ActiveMQ Connection -->
> <bean id="jmsResourceAdapter"
> class="org.apache.activemq.ra.ActiveMQResourceAdapter">
> <property name="serverUrl">
> <value>${verst.mq.serverUrl}</value>
> </property>
> </bean>
> <bean id="jmsManagedConnectionFactory"
> class="org.apache.activemq.ra.ActiveMQManagedConnectionFactory">
> <property name="resourceAdapter" ref="jmsResourceAdapter" />
> </bean>
> <bean id="jmsConnectionFactory"
>
> class="org.springframework.jca.support.LocalConnectionFactoryBean">
> <property name="managedConnectionFactory"
> ref="jmsManagedConnectionFactory" />
> <property name="connectionManager" ref="connectionManager" />
> </bean>
>
> <bean id="jencksJCAContainer" class="org.jencks.JCAContainer">
> <property name="bootstrapContext">
> <bean class="org.jencks.factory.BootstrapContextFactoryBean">
> <property name="threadPoolSize" value="25"/>
> </bean>
> </property>
> <property name="resourceAdapter" ref="jmsResourceAdapter"/>
> </bean>
>
> <!-- Transactional proxy fuer den Lauf -->
> <bean id="txStdVerstaendigungslauf"
>
> class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
>
> <property name="transactionManager">
> <ref bean="transactionManager"/>
> </property>
>
> <property name="proxyInterfaces">
>
> <value>at.sozvers.stp.zpv.bc.verstaend.impl.schedule.IVerstaendigungslauf</value>
> </property>
>
> <property name="target">
> <ref local="appVerstaendigungslauf"/>
> </property>
>
> <property name="transactionAttributes">
> <props>
> <prop
> key="durchfuehrenFuerEmpfaengerDerMeldeneStelle">
> PROPAGATION_REQUIRED
> </prop>
> </props>
> </property>
>
> <property name="preInterceptors">
> <list>
> <ref bean="einHibernateInterceptor"/>
> </list>
> </property>
>
> </bean>
>
> Kind regards
> Juergen
>
--
View this message in context:
http://www.nabble.com/Problem-with-Outbound-JMS-with-Jencks-XA-Transactions-tf2684706.html#a7502364
Sent from the ActiveMQ - User mailing list archive at Nabble.com.