I tried making two separate transaction managers, 1 for hibernate and 1 for jms and it STILL doesn't work. And I can't use JTA because it is a stand alone app not on an app server.
added in new manager in applicationContext-JMS.xml
Code:
<bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
<property name="connectionFactory" ref="userCredentialsConnectionFactory"/>
</bean>
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">${spring.jndi.initial.context.factory}</prop>
<prop key="java.naming.provider.url">${spring.jndi.provider.url}</prop>
</props>
</property>
</bean>
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="jndiName" value="${tibco.connection.factory}" />
<property name="proxyInterface" value="javax.jms.ConnectionFactory" />
</bean>
<bean id="userCredentialsConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="targetConnectionFactory" ref="connectionFactory" />
<property name="username" value="${spring.jndi.user}" />
<property name="password" value="${spring.jndi.password}" />
</bean>
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="userCredentialsConnectionFactory"/>
<!-- <property name="destinationResolver" ref="destinationResolver"/> -->
<property name="concurrentConsumers" value="${spring.jms.message.listener.container.consumers}"/>
<property name="destinationName" value="${spring.jms.message.listener.container.destination}"/>
<property name="messageListener" ref="messageListener"/>
<property name="sessionTransacted" value="true"/>
<property name="transactionManager" ref="jmsTransactionManager"/>
</bean>
output:
Code:
[NextGenSwak] - 2012-05-23 10:49:54,420 - DEBUG [jmsContainer-1] JmsTransactionManager.doBegin(182) | Created JMS transaction on Session [[com.<removed>.mi.decorator.jms.<removed>JmsVirtualSession(5.0.0 09/30/2010)] decorating multiple classes in distribution [
com.tibco.tibjms.TibjmsxSessionImp] [com.tibco.tibjms.TibjmsxSessionImp@baf589] [NON-Overridable AckMode: javax.jms.Session.SESSION_TRANSACTED]] from Connection [[com.<removed>.mi.decorator.jms.<removed>JmsVirtualConnection(5.0.0 09/30/2010)] decorating multiple classes in distribution [
JMS Server Name: [EMS01-ISDPMI01-ISDPMI02]
Actual connection #0 com.tibco.tibjms.TibjmsConnection [Connection[ClientId=null Connected=tcp://isdpmi01.ground.<removed>.com:48200, URL=tcp://isdpmi01.ground.<removed>.com:48200]]
TIBCO Software Inc. [Server=[4.4.3 V16] Client=[5.1.5 V3]] JMS Specification:[1.1]
Virtual Session #0 stats: ]
[NextGenSwak] - 2012-05-23 10:49:54,420 - TRACE [jmsContainer-1] TransactionSynchronizationManager.bindResource(183) | Bound value [org.springframework.jms.connection.JmsResourceHolder@1d31859] for key [org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter@1e9d9b1] to thread [jmsContainer-1]
[NextGenSwak] - 2012-05-23 10:49:54,420 - TRACE [jmsContainer-1] TransactionSynchronizationManager.getResource(139) | Retrieved value [org.springframework.jms.connection.JmsResourceHolder@1d31859] for key [org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter@1e9d9b1] bound to thread [jmsContainer-1]
[NextGenSwak] - 2012-05-23 10:49:54,436 - DEBUG [jmsContainer-1] DefaultMessageListenerContainer.doReceiveAndExecute(311) | Received message of type [class $Proxy15] from consumer [[com.<removed>.mi.decorator.jms.<removed>JmsVirtualMessageConsumer(5.0.0 09/30/2010)] decorating multiple classes in distribution [
com.tibco.tibjms.TibjmsQueueReceiver] [QueueReceiver[queue=FXGSHIP.FXG.NGSWAK.EPDI.SCANODS]]] of transactional session [[com.<removed>.mi.decorator.jms.<removed>JmsVirtualSession(5.0.0 09/30/2010)] decorating multiple classes in distribution [
com.tibco.tibjms.TibjmsxSessionImp] [com.tibco.tibjms.TibjmsxSessionImp@baf589] [NON-Overridable AckMode: javax.jms.Session.SESSION_TRANSACTED]]
caught a byte.
[NextGenSwak] - 2012-05-23 10:49:54,655 - DEBUG [jmsContainer-1] DefaultListableBeanFactory.doGetBean(242) | Returning cached instance of singleton bean 'org.springframework.transaction.interceptor.TransactionInterceptor#0'
[NextGenSwak] - 2012-05-23 10:49:54,655 - DEBUG [jmsContainer-1] DefaultListableBeanFactory.doGetBean(242) | Returning cached instance of singleton bean 'transactionManager'
[NextGenSwak] - 2012-05-23 10:49:54,655 - DEBUG [jmsContainer-1] HibernateTransactionManager.getTransaction(365) | Creating new transaction with name [com.<removed>.ground.swak.dao.BaseDao.insert]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
[NextGenSwak] - 2012-05-23 10:49:54,717 - DEBUG [jmsContainer-1] HibernateTransactionManager.doBegin(493) | Opened new Session [org.hibernate.impl.SessionImpl@16a4a67] for Hibernate transaction
[NextGenSwak] - 2012-05-23 10:49:54,717 - DEBUG [jmsContainer-1] HibernateTransactionManager.doBegin(504) | Preparing JDBC Connection of Hibernate Session [org.hibernate.impl.SessionImpl@16a4a67]
Wed May 23 10:49:54 EDT 2012 - log: decrypt called PKGAPP_USER(PKGAPP,USER)
Wed May 23 10:49:54 EDT 2012 - log: group (PKGAPP) assigned user(pkgapp)
Wed May 23 10:49:54 EDT 2012 - log: decrypt called PKGAPP_PASSWORD(PKGAPP,PASSWORD)
[NextGenSwak] - 2012-05-23 10:49:54,748 - DEBUG [jmsContainer-1] DriverManagerDataSource.getConnectionFromDriver(162) | Creating new JDBC DriverManager Connection to [jdbc:oracle:thin:@ldap://oidprd.gss.ground.<removed>.com:389/DSSDEV09,cn=OracleContext,dc=ground,dc=<removed>,dc=com]
[NextGenSwak] - 2012-05-23 10:50:03,280 - DEBUG [jmsContainer-1] HibernateTransactionManager.doBegin(569) | Exposing Hibernate transaction as JDBC transaction [oracle.jdbc.driver.T4CConnection@10f34cc]
[NextGenSwak] - 2012-05-23 10:50:03,280 - TRACE [jmsContainer-1] TransactionSynchronizationManager.bindResource(183) | Bound value [org.springframework.jdbc.datasource.ConnectionHolder@1535a58] for key [org.springframework.jdbc.datasource.DriverManagerDataSource@aeea66] to thread [jmsContainer-1]
[NextGenSwak] - 2012-05-23 10:50:03,280 - TRACE [jmsContainer-1] TransactionSynchronizationManager.bindResource(183) | Bound value [org.springframework.orm.hibernate3.SessionHolder@1505258] for key [org.hibernate.impl.SessionFactoryImpl@1ded4c9] to thread [jmsContainer-1]
[NextGenSwak] - 2012-05-23 10:50:03,280 - TRACE [jmsContainer-1] TransactionSynchronizationManager.initSynchronization(258) | Initializing transaction synchronization
[NextGenSwak] - 2012-05-23 10:50:03,280 - TRACE [jmsContainer-1] TransactionInterceptor.prepareTransactionInfo(344) | Getting transaction for [com.<removed>.ground.swak.dao.BaseDao.insert]
[NextGenSwak] - 2012-05-23 10:50:03,280 - TRACE [jmsContainer-1] TransactionSynchronizationManager.getResource(139) | Retrieved value [org.springframework.orm.hibernate3.SessionHolder@1505258] for key [org.hibernate.impl.SessionFactoryImpl@1ded4c9] bound to thread [jmsContainer-1]
[NextGenSwak] - 2012-05-23 10:50:03,373 - TRACE [jmsContainer-1] TransactionInterceptor.commitTransactionAfterReturning(373) | Completing transaction for [com.<removed>.ground.swak.dao.BaseDao.insert]
[NextGenSwak] - 2012-05-23 10:50:03,373 - TRACE [jmsContainer-1] HibernateTransactionManager.triggerBeforeCommit(925) | Triggering beforeCommit synchronization
[NextGenSwak] - 2012-05-23 10:50:03,373 - TRACE [jmsContainer-1] HibernateTransactionManager.triggerBeforeCompletion(938) | Triggering beforeCompletion synchronization
[NextGenSwak] - 2012-05-23 10:50:03,373 - DEBUG [jmsContainer-1] HibernateTransactionManager.processCommit(752) | Initiating transaction commit
[NextGenSwak] - 2012-05-23 10:50:03,373 - DEBUG [jmsContainer-1] HibernateTransactionManager.doCommit(652) | Committing Hibernate transaction on Session [org.hibernate.impl.SessionImpl@16a4a67]
[NextGenSwak] - 2012-05-23 10:50:03,389 - TRACE [jmsContainer-1] HibernateTransactionManager.triggerAfterCommit(951) | Triggering afterCommit synchronization
[NextGenSwak] - 2012-05-23 10:50:03,389 - TRACE [jmsContainer-1] HibernateTransactionManager.triggerAfterCompletion(967) | Triggering afterCompletion synchronization
[NextGenSwak] - 2012-05-23 10:50:03,389 - TRACE [jmsContainer-1] TransactionSynchronizationManager.clearSynchronization(316) | Clearing transaction synchronization
[NextGenSwak] - 2012-05-23 10:50:03,389 - TRACE [jmsContainer-1] TransactionSynchronizationManager.doUnbindResource(229) | Removed value [org.springframework.orm.hibernate3.SessionHolder@1505258] for key [org.hibernate.impl.SessionFactoryImpl@1ded4c9] from thread [jmsContainer-1]
[NextGenSwak] - 2012-05-23 10:50:03,389 - TRACE [jmsContainer-1] TransactionSynchronizationManager.doUnbindResource(229) | Removed value [org.springframework.jdbc.datasource.ConnectionHolder@1535a58] for key [org.springframework.jdbc.datasource.DriverManagerDataSource@aeea66] from thread [jmsContainer-1]
[NextGenSwak] - 2012-05-23 10:50:03,389 - DEBUG [jmsContainer-1] HibernateTransactionManager.doCleanupAfterCompletion(734) | Closing Hibernate Session [org.hibernate.impl.SessionImpl@16a4a67] after transaction
[NextGenSwak] - 2012-05-23 10:50:03,389 - DEBUG [jmsContainer-1] SessionFactoryUtils.closeSession(789) | Closing Hibernate Session
completed
[NextGenSwak] - 2012-05-23 10:50:03,405 - TRACE [jmsContainer-1] MessageListenerAdapter.onMessage(360) | No result object given - no result to handle