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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]