私はWebsphereの内部で動作するアプリケーションを持っており、永続的なJPAエンティティに問題があります。Spring、Websphere、JMSおよびEclipselink Issue
以前は、アプリケーションはRESOURCE_LOCAL永続ユニット、Spring JpaTransactionManager、およびコードで明示的にコミットされたトランザクションで設定されていました。
TransactionStatus transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());
try {
entityManager.persist(someJpaEntity);
}
catch(Exception exception) {
transactionManager.rollback(transactionStatus);
throw exception;
}
try {
transactionManager.commit(transactionStatus);
}
catch(TransactionException exception) {
exception
}
私は、WebSphereキューにリンクされているメッセージドリブンPOJOを通じて呼び出しを許可するアプリケーションの機能強化に取り組んでいます。私はアプリケーションがJMSキューを介してメッセージを受信できるようにする春からの設定をセットアップすることができました。
<jee:jndi-lookup id="jmsConnectionFactory" jndi-name="QueueConnectionFactory"/>
<jee:jndi-lookup id="jmsQueue" jndi-name="DIQueue" />
<!-- A dynamic resolver -->
<bean id="jmsDestResolver" class="org.springframework.jms.support.destination.DynamicDestinationResolver"/>
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref bean="jmsConnectionFactory"/>
</property>
<property name="destinationResolver">
<ref bean="jmsDestResolver"/>
</property>
</bean>
<bean id="messageListener" class="my.app.FileMessageListener" />
<bean id="exListener" class="my.app.JmsExceptionListener" />
<bean id="msgListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="destination" ref="jmsQueue" />
<property name="messageListener" ref="messageListener" />
<property name="transactionManager" ref="transactionManager" />
<property name="taskExecutor" ref="myTaskExecutor" />
<property name="exceptionListener" ref="exListener" />
</bean>
<bean id="myTaskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="wm/default" />
</bean>
ないが、私の春のセットアップに問題があるが、一部には、私はとの良好なように見えるように私は、私のActive MQブローカーを介してメッセージを受信しなければわから:春の設定は次のようになります。
ここで問題は、JMSを介してメッセージを受け取ったときに、上記のコードを呼び出してJPAエンティティを挿入することです。コードが実行されると、「2フェーズトランザクションで1フェーズリソースをコミットできません」というメッセージが表示されます。私が理解しなければならないのは、Spring JpaTransactionManagerがXAまたはJTAトランザクションで動作しないということです。
私はSpring JtaTransactionManagerに移りました。
私はトランザクションマネージャを宣言するのはここで、私はJTAを使用するには、オーバーを考えることができるすべてを変更:
私の永続化XML更新<bean id="transactionManager" class="org.springframework.transaction.jta.WebSphereUowTransactionManager"/>
:
<persistence-unit name="AppUnit" transaction-type="JTA">
<provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
<jta-data-source>java:APPDS</jta-data-source>
そして、まだ、何も動作します。私のコードは例外なく実行されますが、データベースに永続化されるものはありません。メッセージはJMSキューから取り出されますが、データは取得されません。
提案がありますか?