Obviously you should check out first with IBM what that MQ error code means.


On Tue, Dec 7, 2010 at 6:03 AM, Mark Borner <mark.bor...@zurich.com.au>wrote:

>
> Hi all:
>
> I've been reading up on how to configure Camel for use under Websphere and
> Websphere MQ.  I've gotten things working except for a nagging error:
>  com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2012
>
> The route that is having the problem is reading from a DB and putting the
> messages onto a queue:
>
>
> from("jpa:au.com.zurich.phoenix.i90.entity.ExportMessage?consumeDelete=false&transactionManager=#transactionManager&consumer.delay=30000&consumer.namedQuery=received")
>     .routeId("ExportQueueProducerRoute")
>     .transacted()
>     .process(new Processor() {
>         private XMLOutputter outputter = new
> XMLOutputter(Format.getCompactFormat());
>
>         public void process(Exchange exchange) throws Exception {
>             ExportMessage exportMessage =
> exchange.getIn().getBody(ExportMessage.class);
>             // Set the status to Queued so the message doesn't get picked
> up again!
>             exportMessage.setStatus(MessageStatuses.QUEUED);
>             // Set out body to the policy XML
>             XmlAttachment attachment = (XmlAttachment)
> exportMessage.getAttachments().iterator().next();
>
> exchange.getIn().setBody(outputter.outputString(attachment.getDocument()));
>             // Set all the headers so they end up on the queued message
>             exchange.getIn().setHeader(TRANSACTION_ID,
> exportMessage.getTransactionId());
>             exchange.getIn().setHeader(INTERNAL_ID,
> exportMessage.getInternalId());
>         }
>     })
>     .to(ExchangePattern.InOnly,
> "jms:queue:exportQueue?taskExecutor=#taskExecutor&transactionManager=#transactionManager&transacted=true&acknowledgementModeName=TRANSACTED&cacheLevelName=CACHE_NONE");
>
> When the transaction started by the JPA component commits, it throws this
> stack trace:
>
> [7/12/10 10:40:46:841 EST] 000000a1 RegisteredSyn E   WTRN0074E: Exception
> caught from after_completion synchronization operation:
> org.springframework.jms.connection.SynchedLocalTransactionFailedException:
> Local JMS transaction failed to commit; nested exception is
> javax.jms.JMSException: MQJMS2009: MQQueueManager.commit() failed; nested
> exception is com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2012
>         at
> org.springframework.jms.connection.ConnectionFactoryUtils$JmsResourceSynchronization.processResourceAfterCommit(ConnectionFactoryUtils.java:407)
>         at
> org.springframework.jms.connection.ConnectionFactoryUtils$JmsResourceSynchronization.processResourceAfterCommit(ConnectionFactoryUtils.java:1)
>         at
> org.springframework.transaction.support.ResourceHolderSynchronization.afterCommit(ResourceHolderSynchronization.java:79)
>         at
> org.springframework.transaction.support.TransactionSynchronizationUtils.invokeAfterCommit(TransactionSynchronizationUtils.java:133)
>         at
> org.springframework.transaction.jta.JtaAfterCompletionSynchronization.afterCompletion(JtaAfterCompletionSynchronization.java:59)
>         at
> com.ibm.ws.uow.ComponentContextSynchronizationWrapper.afterCompletion(ComponentContextSynchronizationWrapper.java:84)
>         at
> com.ibm.ws.Transaction.JTA.RegisteredSyncs.distributeAfter(RegisteredSyncs.java:424)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.distributeAfter(TransactionImpl.java:3890)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.postCompletion(TransactionImpl.java:3869)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.internalCommit(TransactionImpl.java:2673)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.stage2CommitProcessing(TransactionImpl.java:1736)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.processCommit(TransactionImpl.java:1616)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.commit(TransactionImpl.java:1547)
>         at
> com.ibm.ws.Transaction.JTA.TranManagerImpl.commit(TranManagerImpl.java:247)
>         at
> com.ibm.ws.Transaction.JTA.TranManagerSet.commit(TranManagerSet.java:166)
>         at
> com.ibm.ws.uow.UOWManagerImpl.uowCommit(UOWManagerImpl.java:1055)
>         at com.ibm.ws.uow.UOWManagerImpl.uowEnd(UOWManagerImpl.java:1025)
>         at
> com.ibm.ws.uow.UOWManagerImpl.runUnderNewUOW(UOWManagerImpl.java:975)
>         at
> com.ibm.ws.uow.UOWManagerImpl.runUnderUOW(UOWManagerImpl.java:509)
>         at
> org.springframework.transaction.jta.WebSphereUowTransactionManager.execute(WebSphereUowTransactionManager.java:281)
>         at
> org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:124)
>         at
> org.apache.camel.component.jpa.JpaTemplateTransactionStrategy.execute(JpaTemplateTransactionStrategy.java:78)
>         *at
> org.apache.camel.component.jpa.JpaConsumer.poll(JpaConsumer.java:79)*
>         at
> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:97)
>         at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:432)
>         at
> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:295)
>         at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:80)
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:157)
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:181)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:810)
>         at
> au.com.zurich.phoenix.i90.strategy.WebsphereExecutorServiceStrategy$WasWork.run(WebsphereExecutorServiceStrategy.java:313)
>         at
> com.ibm.ws.asynchbeans.J2EEContext$RunProxy.run(J2EEContext.java:257)
>         at
> java.security.AccessController.doPrivileged(AccessController.java:219)
>         at javax.security.auth.Subject.doAs(Subject.java:495)
>         at
> com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:118)
>         at
> com.ibm.ws.asynchbeans.J2EEContext$DoAsProxy.run(J2EEContext.java:328)
>         at
> java.security.AccessController.doPrivileged(AccessController.java:246)
>         at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:1111)
>         at
> com.ibm.ws.asynchbeans.WorkWithExecutionContextImpl.go(WorkWithExecutionContextImpl.java:195)
>         at
> com.ibm.ws.asynchbeans.CJWorkItemImpl.run(CJWorkItemImpl.java:187)
>         at java.lang.Thread.run(Thread.java:810)
> Caused by: javax.jms.JMSException: MQJMS2009: MQQueueManager.commit()
> failed
>         at
> com.ibm.mq.jms.services.ConfigEnvironment.newException(ConfigEnvironment.java:622)
>         at com.ibm.mq.jms.MQSession.commitQ(MQSession.java:3793)
>         at com.ibm.mq.jms.MQSession.commit(MQSession.java:761)
>         at
> com.ibm.ejs.jms.JMSSessionHandle.commit(JMSSessionHandle.java:658)
>         at
> org.springframework.jms.connection.JmsResourceHolder.commitAll(JmsResourceHolder.java:181)
>         at
> org.springframework.jms.connection.ConnectionFactoryUtils$JmsResourceSynchronization.processResourceAfterCommit(ConnectionFactoryUtils.java:404)
>         ... 43 more
> ---- Begin backtrace for Nested Throwables
> com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2012
>         at com.ibm.mq.MQQueueManager.commit(MQQueueManager.java:2220)
>         at com.ibm.mq.jms.MQSession.commitQ(MQSession.java:3769)
>         at com.ibm.mq.jms.MQSession.commit(MQSession.java:761)
>         at
> com.ibm.ejs.jms.JMSSessionHandle.commit(JMSSessionHandle.java:658)
>         at
> org.springframework.jms.connection.JmsResourceHolder.commitAll(JmsResourceHolder.java:181)
>         at
> org.springframework.jms.connection.ConnectionFactoryUtils$JmsResourceSynchronization.processResourceAfterCommit(ConnectionFactoryUtils.java:404)
>         at
> org.springframework.jms.connection.ConnectionFactoryUtils$JmsResourceSynchronization.processResourceAfterCommit(ConnectionFactoryUtils.java:1)
>         at
> org.springframework.transaction.support.ResourceHolderSynchronization.afterCommit(ResourceHolderSynchronization.java:79)
>         at
> org.springframework.transaction.support.TransactionSynchronizationUtils.invokeAfterCommit(TransactionSynchronizationUtils.java:133)
>         at
> org.springframework.transaction.jta.JtaAfterCompletionSynchronization.afterCompletion(JtaAfterCompletionSynchronization.java:59)
>         at
> com.ibm.ws.uow.ComponentContextSynchronizationWrapper.afterCompletion(ComponentContextSynchronizationWrapper.java:84)
>         at
> com.ibm.ws.Transaction.JTA.RegisteredSyncs.distributeAfter(RegisteredSyncs.java:424)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.distributeAfter(TransactionImpl.java:3890)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.postCompletion(TransactionImpl.java:3869)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.internalCommit(TransactionImpl.java:2673)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.stage2CommitProcessing(TransactionImpl.java:1736)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.processCommit(TransactionImpl.java:1616)
>         at
> com.ibm.ws.Transaction.JTA.TransactionImpl.commit(TransactionImpl.java:1547)
>         at
> com.ibm.ws.Transaction.JTA.TranManagerImpl.commit(TranManagerImpl.java:247)
>         at
> com.ibm.ws.Transaction.JTA.TranManagerSet.commit(TranManagerSet.java:166)
>         at
> com.ibm.ws.uow.UOWManagerImpl.uowCommit(UOWManagerImpl.java:1055)
>         at com.ibm.ws.uow.UOWManagerImpl.uowEnd(UOWManagerImpl.java:1025)
>         at
> com.ibm.ws.uow.UOWManagerImpl.runUnderNewUOW(UOWManagerImpl.java:975)
>         at
> com.ibm.ws.uow.UOWManagerImpl.runUnderUOW(UOWManagerImpl.java:509)
>         at
> org.springframework.transaction.jta.WebSphereUowTransactionManager.execute(WebSphereUowTransactionManager.java:281)
>         at
> org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:124)
>         at
> org.apache.camel.component.jpa.JpaTemplateTransactionStrategy.execute(JpaTemplateTransactionStrategy.java:78)
>         at
> org.apache.camel.component.jpa.JpaConsumer.poll(JpaConsumer.java:79)
>         at
> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:97)
>         at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:432)
>         at
> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:295)
>         at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:80)
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:157)
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:181)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:810)
>         at
> au.com.zurich.phoenix.i90.strategy.WebsphereExecutorServiceStrategy$WasWork.run(WebsphereExecutorServiceStrategy.java:313)
>         at
> com.ibm.ws.asynchbeans.J2EEContext$RunProxy.run(J2EEContext.java:257)
>         at
> java.security.AccessController.doPrivileged(AccessController.java:219)
>         at javax.security.auth.Subject.doAs(Subject.java:495)
>         at
> com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:118)
>         at
> com.ibm.ws.asynchbeans.J2EEContext$DoAsProxy.run(J2EEContext.java:328)
>         at
> java.security.AccessController.doPrivileged(AccessController.java:246)
>         at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:1111)
>         at
> com.ibm.ws.asynchbeans.WorkWithExecutionContextImpl.go(WorkWithExecutionContextImpl.java:195)
>         at
> com.ibm.ws.asynchbeans.CJWorkItemImpl.run(CJWorkItemImpl.java:187)
>         at java.lang.Thread.run(Thread.java:810)
>
> Funny thing is that the message DOES end up on the queue!  So I'm not sure
> why the exception is being thrown.
>
> Here's my Spring config:
>
>     <jee:jndi-lookup id="connectionFactory" jndi-name="jms/conn/i90/gtwy"
>                      expected-type="javax.jms.ConnectionFactory"
>                      resource-ref="true"/>
>
>     <jee:jndi-lookup id="exportQueue" jndi-name="jms/dest/i90/gtwy/export"
>                      expected-type="javax.jms.Destination"
>                      resource-ref="true"/>
>
>     <jee:jndi-lookup id="deadLetterQueue" jndi-name="jms/dest/i90/gtwy/dlq"
>                      expected-type="javax.jms.Destination"
>                      resource-ref="true"/>
>
>     <bean id="taskExecutor"
> class="au.com.zurich.phoenix.gateway.jms.WorkManagerTaskExecutorFactoryBean">
>         <property name="workManagerName" value="wm/default"/>
>     </bean>
>
>     <bean id="destinationResolver"
> class="org.springframework.jms.support.destination.BeanFactoryDestinationResolver"/>
>
>     <tx:jta-transaction-manager />
>
> Here's my level of code:
>
> Camel 2.5.0
> Spring 3.0.5.RELEASE (I've bumped up this version due to a bug that was
> fixed around CACHE_NONE)
> Websphere 6.1.0.25
> Websphere MQ 6.0.2.1
>
> I have other Spring applications (albeit v2.5.6) working successfully in
> this environment with JMS and Websphere MQ.  So it leads me to believe I
> don't have something setup correctly in Camel.
>
> Does anyone have a suggestion on what I can change to get rid of this
> error?
>
> Thanks,
> Mark
>
> Mark Borner
> Java Developer - ZStream Xpress
>
>
>
>
> ----
> This email is intended for the named recipient only. It may contain
> information which is confidential, commercially sensitive, or
> copyright. If you are not the intended recipient you must not
> reproduce or distribute any part of the email, disclose its contents,
> or take any action in reliance. If you have received this email in
> error, please contact the sender and delete the message. It is your
> responsibility to scan this email and any attachments for viruses and
> other defects. To the extent permitted by law, Zurich and its
> associates will not be liable for any loss or damage arising in any
> way from this communication including any file attachments. We may
> monitor email you send to us, either as a reply to this email or any
> email you send to us, to confirm our systems are protected and for
> compliance with company policies. Although we take reasonable
> precautions to protect the confidentiality of our email systems, we
> do not warrant the confidentiality or security of email or
> attachments we receive.
>
>


-- 
Claus Ibsen
-----------------
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to