activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <marc...@absa.co.za>
Subject RE: Transaction problems with ActiveMQ under WebSphere v5.1
Date Fri, 23 Dec 2005 16:48:36 GMT
Thank you,

I have already made the change on my side but I will pull yours through.

I have found another problem. After much debugging it appears that if I
receive one message from the topic then publish another message and try
to retrieve it the application server hangs. There are two issues here.
The first is that the
IndirectMessageReference::incrementReferenceCount() method is throwing a
runtime exception that is not being sent back to the client properly /
or is not being processed by the client properly. The reason the
exception is thrown is that the message member variable on the indirect
IndirectMessageReference is null. I have checked the ID and is
corresponds to the message in the persistent topic. I am busy trying to
figure out how an IndirectMessageReference can be created with a null
message but since I am unfamiliar with the code this could take a while.

Regards,

Marcus 

-----Original Message-----
From: Hiram Chirino [mailto:hiram@hiramchirino.com] 
Sent: 23 December 2005 06:14 PM
To: activemq-dev@geronimo.apache.org
Subject: Re: Transaction problems with ActiveMQ under WebSphere v5.1

Hi Marcus,

I just committed the change to activemq 4 so that dispatching is done
like in 3.x

Regards,
Hiram

On Dec 23, 2005, at 2:57 AM, <marcusp@absa.co.za> <marcusp@absa.co.za>
wrote:

> Hi,
>
> I was trying  to use the 3.2.2 branch from svn. I have also had a look

> at the v4 branch and I see that it works very differently from v3.
> I am
> attempting to get the v4 branch working but am having problems with 
> the
> ActiveMQConnectionConsumer::dispatch() method since it seems that the 
> session is of the wrong type i.e. ActiveMQTopicSession instead of 
> ActiveMQSession. There is code in v3 to handle this (shown below) but 
> no matching code exists for v4.
>
>
>         ServerSession serverSession = sessionPool.getServerSession();
>         Session nestedSession = serverSession.getSession();
>         ActiveMQSession session = null;
>         if (nestedSession instanceof ActiveMQSession) {
>             session = (ActiveMQSession) nestedSession;
>         } else if (nestedSession instanceof ActiveMQTopicSession) {
>             ActiveMQTopicSession topicSession = (ActiveMQTopicSession)

> nestedSession;
>             session = (ActiveMQSession) topicSession.getNext();
>         } else if (nestedSession instanceof ActiveMQQueueSession) {
>             ActiveMQQueueSession queueSession = (ActiveMQQueueSession)

> nestedSession;
>             session = (ActiveMQSession) queueSession.getNext();
>         } else {
>             throw new JMSException("Invalid instance of session 
> obtained from server session." +
>             "The instance should be one of the following:
> ActiveMQSession, ActiveMQTopicSession, ActiveMQQueueSession. " +
>             "Found instance of " + nestedSession.getClass().getName 
> ());
>         }
>         session.dispatch(message);
>         serverSession.start();
>
>
> Regards,
>
> Marcus
>
> -----Original Message-----
> From: Hiram Chirino [mailto:hiram@hiramchirino.com]
> Sent: 22 December 2005 04:45 PM
> To: activemq-dev@geronimo.apache.org
> Subject: Re: Transaction problems with ActiveMQ under WebSphere v5.1
>
> Hi.  What version of ActiveMQ are you using?
>
> Regards,
> Hiram
>
> On Dec 22, 2005, at 3:17 AM, <marcusp@absa.co.za> <marcusp@absa.co.za>
> wrote:
>
>> Hello,
>>
>> There appears to be a transaction problem with the when using 
>> ActiveMQ
>
>> as a Generic JMS Provider under WebSphere v5.1 with durable 
>> subscriptions. This problem only manifests itself when using a 
>> message
>
>> driven bean.
>>
>> The symptom of the problem is that the last message retrieved from a 
>> topic is never acknowledged.
>>
>> The situation is as follows:
>>
>> I have a broker started with one pending message in the queue for the

>> message driven bean. When I start websphere I see the message driven 
>> bean process the message and try to commit the transaction by calling

>> commit on the TransactionContext (See stack dump below.) 
>> Unfortunately
>
>> the transaction ID is null at this point since the
>> TransactionContext.start() method has never been invoked.
>>
>> 05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R java.lang.Exception:
>> Stack trace
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> java.lang.Thread.dumpStack(Thread.java:1097)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> org.activemq.TransactionContext.commit(TransactionContext.java:220)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> org.activemq.ActiveMQSession.commit(ActiveMQSession.java:400)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> org.activemq.ActiveMQTopicSession.commit(ActiveMQTopicSession.java: 
>> 77)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at 
>> com.ibm.ejs.jms.JMSManagedSession$JMSLocalTransaction.commit
>> (JMSManagedS
>> ession.java:1121)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at 
>> com.ibm.ejs.j2c.LocalTransactionWrapper.commit
>> (LocalTransactionWrapper.j
>> ava:227)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at 
>> com.ibm.ws.Transaction.JTA.OnePhaseResourceImpl.commit_one_phase
>> (OnePhas
>> eResourceImpl.java:128)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at 
>> com.ibm.ws.Transaction.JTA.RegisteredResources.flowCommitOnePhase
>> (Regist
>> eredResources.java:1624)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at 
>> com.ibm.ws.Transaction.JTA.RegisteredResources.distributePrepare
>> (Registe
>> redResources.java:743)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at 
>> com.ibm.ws.Transaction.JTA.TransactionImpl.internalPrepare
>> (TransactionIm
>> pl.java:1278)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at 
>> com.ibm.ws.Transaction.JTA.TransactionImpl.commit
>> (TransactionImpl.java:9
>> 71)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at 
>> com.ibm.ws.Transaction.JTA.TranManagerImpl.commit
>> (TranManagerImpl.java:1
>> 50)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at 
>> com.ibm.ws.Transaction.JTA.TranManagerSet.commit
>> (TranManagerSet.java:177
>> )
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> com.ibm.ejs.csi.TranStrategy.commit(TranStrategy.java:712)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> com.ibm.ejs.csi.TranStrategy.postInvoke(TranStrategy.java:167)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at 
>> com.ibm.ejs.csi.TransactionControlImpl.postInvoke
>> (TransactionControlImpl
>> .java:565)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java:3038)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java:102)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java:127)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> com.ibm.ejs.jms.listener.MDBWrapper.onMessage(MDBWrapper.java:177)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> org.activemq.ActiveMQSession.deliver(ActiveMQSession.java:569)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> org.activemq.ActiveMQSession.run(ActiveMQSession.java:551)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> org.activemq.ActiveMQTopicSession.run(ActiveMQTopicSession.java:339)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> com.ibm.ejs.jms.JMSSessionHandle.run(JMSSessionHandle.java:924)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at 
>> com.ibm.ejs.jms.listener.ServerSession.connectionConsumerOnMessage
>> (Serve
>> rSession.java:740)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> com.ibm.ejs.jms.listener.ServerSession.run(ServerSession.java:375)
>> [05/12/22 09:40:24:855 CAT] 35d7ef9f SystemErr R at
>> com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:912)
>>
>> ActiveMQ then attempts to send a ACK message and as part of the 
>> "afterMessageDelivered" code path which starts a new transaction (See

>> stack trace below).
>>
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R
>> java.lang.Exception: Stack trace
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R 	at
>> java.lang.Thread.dumpStack(Thread.java:1097)
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R 	at
>> org.activemq.TransactionContext.begin(TransactionContext.java:157)
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R 	at
>> org.activemq.ActiveMQSession.doStartTransaction
>> (ActiveMQSession.java:148
>> 6)
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R 	at
>> org.activemq.ActiveMQSession.afterMessageDelivered
>> (ActiveMQSession.java:
>> 1148)
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R 	at
>> org.activemq.ActiveMQSession.deliver(ActiveMQSession.java:570)
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R 	at
>> org.activemq.ActiveMQSession.run(ActiveMQSession.java:551)
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R 	at
>> org.activemq.ActiveMQTopicSession.run(ActiveMQTopicSession.java:339)
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R 	at
>> com.ibm.ejs.jms.JMSSessionHandle.run(JMSSessionHandle.java:924)
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R 	at
>> com.ibm.ejs.jms.listener.ServerSession.connectionConsumerOnMessage
>> (Serve
>> rSession.java:740)
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R 	at
>> com.ibm.ejs.jms.listener.ServerSession.run(ServerSession.java:375)
>> [05/12/22 09:40:24:865 CAT] 35d7ef9f SystemErr     R 	at
>> com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:912)
>>
>> No commit is ever sent by the ActiveMQ client if this is the only 
>> message in the queue. This means that the ACK is never completely 
>> processed by the broker.
>>
>> If another message is published to the topic then while processing 
>> the
>
>> new message the transaction setup as part of the ACK is committed.
>>
>> I am still unsure how to solve this problem. If I don't use a MDB and

>> instead lookup the topic using JNDI then it works perfectly. This 
>> appears to be because the ActiveMQSession object is not transactional

>> i.e. ActiveMQSession.isTransacted() returns false.
>>
>> Regards,
>>
>> Marcus
>>
>>
>> ___________________________________________________________
>>
>> Important Notice:
>> Authorised Financial Services Provider
>>
>> Important restrictions, qualifications and disclaimers ("the
>> Disclaimer") apply to this email. To read this click on the following

>> address or copy into your Internet browser:
>>
>> http://www.absa.co.za/disclaimer
>>
>> The Disclaimer forms part of the content of this email in terms of 
>> section 11 of the Electronic Communications and Transactions Act, 25 
>> of 2002.
>>
>> If you are unable to access the Disclaimer, send a blank e-mail to 
>> disclaimer@absa.co.za and we will send you a copy of the Disclaimer.
>
>
> ___________________________________________________________
>
> Important Notice:
> Authorised Financial Services Provider
>
> Important restrictions, qualifications and disclaimers ("the 
> Disclaimer") apply to this email. To read this click on the following 
> address or copy into your Internet browser:
>
> http://www.absa.co.za/disclaimer
>
> The Disclaimer forms part of the content of this email in terms of 
> section 11 of the Electronic Communications and Transactions Act, 25 
> of 2002.
>
> If you are unable to access the Disclaimer, send a blank e-mail to 
> disclaimer@absa.co.za and we will send you a copy of the Disclaimer.


___________________________________________________________

Important Notice: 
Authorised Financial Services Provider

Important restrictions, qualifications and disclaimers 
("the Disclaimer") apply to this email. To read this click on the 
following address or copy into your Internet browser: 

http://www.absa.co.za/disclaimer

The Disclaimer forms part of the content of this email in terms of 
section 11 of the Electronic Communications and Transactions 
Act, 25 of 2002. 

If you are unable to access the Disclaimer, send a blank e-mail 
to disclaimer@absa.co.za and we will send you a copy of the 
Disclaimer.

Mime
View raw message