You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by ga...@apache.org on 2007/02/23 06:48:12 UTC
svn commit: r510839 - in
/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors:
ApplicationMsgProcessor.java MakeConnectionProcessor.java
Author: gatfora
Date: Thu Feb 22 21:48:11 2007
New Revision: 510839
URL: http://svn.apache.org/viewvc?view=rev&rev=510839
Log:
Fix duplicate RMSBean error from SenderWorker which is caused when 2 sends happen at the same time targetting the same end point, which causes 2 RMSBeans to be created by the setupNewClientSequence which have the same InternalSequenceId, also reworked some trace from MakeConnectionProcessor
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=510839&r1=510838&r2=510839
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Thu Feb 22 21:48:11 2007
@@ -39,6 +39,7 @@
import org.apache.sandesha2.security.SecurityManager;
import org.apache.sandesha2.security.SecurityToken;
import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
import org.apache.sandesha2.storage.beans.RMDBean;
import org.apache.sandesha2.storage.beans.RMSBean;
@@ -217,28 +218,25 @@
String outSequenceID = null;
- boolean sendCreateSequence = false;
- if (rmsBean == null) { // out sequence will be set for the
- // server side, in the case of an offer.
- sendCreateSequence = true; // message number being one and not
- // having an out sequence, implies
- // that a create sequence has to be
- // send.
+ if (rmsBean == null) {
+ // SENDING THE CREATE SEQUENCE.
+ synchronized (RMSBeanMgr.class) {
+ // There is a timing window where 2 sending threads can hit this point
+ // at the same time and both will create an RMSBean to the same endpoint
+ // with the same internal sequenceid
+ // Check that someone hasn't created the bean
+ rmsBean = SandeshaUtil.getRMSBeanFromInternalSequenceId(storageManager, internalSequenceId);
+
+ // if first message - setup the sending side sequence - both for the
+ // server and the client sides.
+ if (rmsBean == null) {
+ rmsBean = SequenceManager.setupNewClientSequence(msgContext, internalSequenceId, storageManager);
+ rmsBean = addCreateSequenceMessage(rmMsgCtx, rmsBean, storageManager);
+ }
+ }
+
} else {
outSequenceID = rmsBean.getSequenceID();
- }
-
- // SENDING THE CREATE SEQUENCE.
- if (sendCreateSequence) {
-
- // if first message - setup the sending side sequence - both for the
- // server and the client sides.
- rmsBean = SequenceManager.setupNewClientSequence(msgContext, internalSequenceId, storageManager);
- rmsBean = addCreateSequenceMessage(rmMsgCtx, rmsBean, storageManager);
- }
-
- if (rmsBean == null) {
- rmsBean = SandeshaUtil.getRMSBeanFromInternalSequenceId(storageManager, internalSequenceId);
}
// the message number that was last used.
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java?view=diff&rev=510839&r1=510838&r2=510839
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java Thu Feb 22 21:48:11 2007
@@ -46,7 +46,7 @@
* This is processed using a SenderWorker.
*/
public boolean processInMessage(RMMsgContext rmMsgCtx) throws AxisFault {
- if(log.isDebugEnabled()) log.debug("Entry: MakeConnectionProcessor::processInMessage");
+ if(log.isDebugEnabled()) log.debug("Enter: MakeConnectionProcessor::processInMessage " + rmMsgCtx.getSOAPEnvelope().getBody());
MakeConnection makeConnection = (MakeConnection) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.MAKE_CONNECTION);
Address address = makeConnection.getAddress();
@@ -109,6 +109,7 @@
replyToPoll(rmMsgCtx, senderBean, storageManager, pending, makeConnection.getNamespaceValue());
+ if(log.isDebugEnabled()) log.debug("Exit: MakeConnectionProcessor::processInMessage");
return false;
}
@@ -119,7 +120,7 @@
String namespace)
throws AxisFault
{
- if(log.isDebugEnabled()) log.debug("Entry: MakeConnectionProcessor::replyToPoll");
+ if(log.isDebugEnabled()) log.debug("Enter: MakeConnectionProcessor::replyToPoll");
TransportOutDescription transportOut = pollMessage.getMessageContext().getTransportOut();
if (transportOut==null) {
String message = SandeshaMessageHelper.getMessage(
@@ -173,7 +174,7 @@
messagePending.toSOAPEnvelope(returnMessage.getEnvelope());
}
- public boolean processOutMessage(RMMsgContext rmMsgCtx) throws AxisFault {
+ public boolean processOutMessage(RMMsgContext rmMsgCtx) {
return false;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org