Author: parsonsd
Date: Thu Jan 14 15:38:48 2010
New Revision: 899244
URL: http://svn.apache.org/viewvc?rev=899244&view=rev
Log:
Fix to Sandesha as problem highlighted after move to recent Axis2 release. The
thread ABORT logic has changed slightly in Axis2 so was causing NPE's when an
RM inorder response was being delivered to a client. The fix is to use a
thread SUSPEND for inorder Sync responses.
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java?rev=899244&r1=899243&r2=899244&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
Thu Jan 14 15:38:48 2010
@@ -244,7 +244,7 @@
EndpointReference acksTo =
bean.getAcksToEndpointReference();
- // Send an Ack if needed.
+ //Send an Ack if needed.
//We are not sending acks for duplicate messages in the
anon InOut case.
//If a standalone ack get sent before the actualy
message (I.e. before the original msg get
//replied), the client may take this as a InOnly
message and may avoid looking for the application
@@ -430,11 +430,17 @@
}
// if the relates to is not null then this is at the client side
- // so it is receiving a response. always have to return the thread.
- if (msgCtx.getRelatesTo() != null) {
+ // so it is receiving a response. We have to abort the thread in
the Async case as
+ // we don't want too many threads open e.g. many async
responses coming in at once all waiting
+ // for an earlier response which hasn't arrived. In
the Sync case we need to suspend as aborting
+ // causes Axis to mark this msg as delivered and then
when the invoker thread tries to deliver
+ // the msg Axis returns with a NullPointerException.
+ if (msgCtx.getRelatesTo() != null &&
!msgCtx.getTo().hasAnonymousAddress()) {
result = InvocationResponse.ABORT;
- }
-
+ if (log.isDebugEnabled())
+
log.debug("SequenceProcessor::processReliableMessage, Aborting the thread as
this " +
+ "is an async response requiring
inorder delivery. An invoker thread will process the delivery");
+ }
}
if (transaction != null && transaction.isActive())
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]