WebSphere 6にMDBがあります.MessageListenerはTibco EMSキューにリンクされています。 MDBでは、私はWebSphere MQキューに書き込もうとしています。私は次のエラーを取得する:既存の2フェーズ対応リソースで1フェーズ対応リソースをコミットしようとする不正な試み
WMSG0042I: MDB Listener LoanIQ Payments Inbound started successfully for JMSDestination jms/eid/payments
WTRN0063E: An illegal attempt to commit a one phase capable resource with existing two phase capable resources has occurred.
WTRN0086I: XAException encountered during prepare phase for transaction 00000131...0001. Local resources follow.
WTRN0089I: [email protected] 3fbe3fbe XAResource: [email protected] enlisted: true mcWrapper.hashCode()1038237154: Vote: commit.
WTRN0089I: [email protected]:4e2e4e2e LocalTransaction:com.ibm.ejs.jms.JMSManagedSession$JMS [email protected] enlisted:true registeredForSynctruemcWrapper.hashcode()1032076676: Vote: none.
のQueueConnectionFactoryのインスタンスがcom.ibm.ejs.jms.JMSQueueConnectionFactoryHandle
です。これからXAConnectionを入手できますか?する必要がありますか?可能であれば、バニラJMSにとどまっている方がいいです。
MDBの実装はに似ている:エラーを見て
public void onMessage(Message message) {
// ^^ incoming message delivered from EMS queue via WAS MessageListener
TextMessage textMessage = (TextMessage) message;
QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup(factoryName);
Queue queue = (Queue) context.lookup(queueName);
QueueConnection connection = factory.createQueueConnection();
connection.start();
QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
QueueSender sender = session.createSender(queue);
TextMessage message = session.createTextMessage("some new payload");
sender.send(message);
// ^^ outgoing message sent to WebSphere MQ queue
}
MQはXA対応です。 EMSのドライバーはそうではなかったようです。 [LPSを有効にする](https://www.ibm.com/developerworks/wikis/display/xdcomputegrid/Enabling+last+participant+support)が機能しました。ありがとうございました。 – Synesso
LPSを有効にするリンクがここにあります。 http://www-01.ibm.com/support/docview.wss?uid=swg21244805 – asgs