Author: gatfora
Date: Wed May  9 05:29:30 2007
New Revision: 536504

URL: http://svn.apache.org/viewvc?view=rev&rev=536504
Log:
Fix a couple of deadlocks.  One between Sender and SenderWorker with ordering 
of RMS and RMDBeans, the other fixes a problem with InvokerWorker and 
SenderWorker and ordering of RMS and RMDBeans.

Modified:
    webservices/sandesha/trunk/java/config/log4j.properties
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Sender.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java

Modified: webservices/sandesha/trunk/java/config/log4j.properties
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/config/log4j.properties?view=diff&rev=536504&r1=536503&r2=536504
==============================================================================
--- webservices/sandesha/trunk/java/config/log4j.properties (original)
+++ webservices/sandesha/trunk/java/config/log4j.properties Wed May  9 05:29:30 
2007
@@ -16,6 +16,7 @@
 log4j.appender.LOGFILE=org.apache.log4j.FileAppender
 log4j.appender.LOGFILE.File=sandesha2.log
 log4j.appender.LOGFILE.Append=true
-log4j.appender.LOGFILE.Threshold=DEBUG
+# log4j.appender.LOGFILE.Threshold=DEBUG
+log4j.appender.LOGFILE.Threshold=INFO
 log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
 log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=536504&r1=536503&r2=536504
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 Wed May  9 05:29:30 2007
@@ -128,18 +128,6 @@
                        }
 
                        internalSequenceId = 
SandeshaUtil.getOutgoingSideInternalSequenceID(inboundSequence);
-
-                       // Deciding whether this is the last message. We assume 
it is if it relates to
-                       // a message which arrived with the LastMessage flag on 
it.
-                       RMDBean rmdBean = 
SandeshaUtil.getRMDBeanFromSequenceId(storageManager, inboundSequence);         
              
-                       // Get the last in message
-                       String lastRequestId = rmdBean.getLastInMessageId();
-                       RelatesTo relatesTo = msgContext.getRelatesTo();
-                       if(relatesTo != null && lastRequestId != null &&
-                                       
lastRequestId.equals(relatesTo.getValue())) {
-                               lastMessage = true;
-                       }
-
                } else {
                        // set the internal sequence id for the client side.
                        EndpointReference toEPR = msgContext.getTo();
@@ -259,7 +247,19 @@
                } else { // This is the first message (systemMessageNumber = -1)
                        messageNumber = 1;
                }
-               
+
+               if (serverSide) {
+                       // Deciding whether this is the last message. We assume 
it is if it relates to
+                       // a message which arrived with the LastMessage flag on 
it.
+                       RMDBean rmdBean = 
SandeshaUtil.getRMDBeanFromSequenceId(storageManager, inboundSequence);         
              
+                       // Get the last in message
+                       String lastRequestId = rmdBean.getLastInMessageId();
+                       RelatesTo relatesTo = msgContext.getRelatesTo();
+                       if(relatesTo != null && lastRequestId != null &&
+                                       
lastRequestId.equals(relatesTo.getValue())) {
+                               lastMessage = true;
+                       }
+               }
                if (lastMessage) {
                        rmsBean.setLastOutMessage(messageNumber);
                        // Update the rmsBean

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java?view=diff&rev=536504&r1=536503&r2=536504
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
 Wed May  9 05:29:30 2007
@@ -163,7 +163,7 @@
                //This will allow Sandesha2 to consider both of following 
senarios equally.
                //  1. A message being sent by the Sender thread.
                //  2. A message being sent as a reply to an MakeConnection.
-               SenderWorker worker = new SenderWorker 
(pollMessage.getConfigurationContext(), matchingMessage);
+               SenderWorker worker = new SenderWorker 
(pollMessage.getConfigurationContext(), matchingMessage, 
returnRMMsg.getRMSpecVersion());
                worker.setMessage(returnRMMsg);
                worker.run();
                

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Sender.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Sender.java?view=diff&rev=536504&r1=536503&r2=536504
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Sender.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Sender.java
 Wed May  9 05:29:30 2007
@@ -93,6 +93,7 @@
 
                        transaction = storageManager.getTransaction();
 
+                       String rmVersion = null;
                        // Check that the sequence is still valid
                        boolean found = false;
                        if(entry.isRmSource()) {
@@ -106,13 +107,18 @@
                                                
SequenceManager.finalizeTimedOutSequence(rms.getInternalSequenceID(), null, 
storageManager);
                                        else
                                                found = true;
+                                       rmVersion = rms.getRMVersion();
                                }
+                               
                        } else {
                                RMDBean matcher = new RMDBean();
                                matcher.setSequenceID(sequenceId);
                                matcher.setTerminated(false);
                                RMDBean rmd = 
storageManager.getRMDBeanMgr().findUnique(matcher);
-                               if(rmd != null) found = true;
+                               if(rmd != null) {
+                                       found = true;
+                                       rmVersion = rmd.getRMVersion();
+                               }
                        }
                        if (!found) {
                                stopThreadForSequence(sequenceId, 
entry.isRmSource());
@@ -155,7 +161,7 @@
                        }
 
                        // start a worker which will work on this messages.
-                       SenderWorker worker = new SenderWorker(context, 
senderBean);
+                       SenderWorker worker = new SenderWorker(context, 
senderBean, rmVersion);
                        worker.setLock(getWorkerLock());
                        worker.setWorkId(workId);
                        threadPool.execute(worker);

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=536504&r1=536503&r2=536504
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
 Wed May  9 05:29:30 2007
@@ -58,10 +58,12 @@
        private ConfigurationContext configurationContext = null;
        private SenderBean senderBean = null;
        private RMMsgContext messageToSend = null;
+       private String rmVersion = null;
        
-       public SenderWorker (ConfigurationContext configurationContext, 
SenderBean senderBean) {
+       public SenderWorker (ConfigurationContext configurationContext, 
SenderBean senderBean, String rmVersion) {
                this.configurationContext = configurationContext;
                this.senderBean = senderBean;
+               this.rmVersion = rmVersion; 
        }
        
        public void setMessage(RMMsgContext msg) {
@@ -385,8 +387,7 @@
                Identifier id = null;
 
                if(senderBean.getMessageType() == 
Sandesha2Constants.MessageTypes.APPLICATION) {
-                       RMSequenceBean bean = 
SandeshaUtil.getRMSBeanFromSequenceId(storageManager, 
senderBean.getSequenceID());
-                       String namespace = 
SpecSpecificConstants.getRMNamespaceValue(bean.getRMVersion());
+                       String namespace = 
SpecSpecificConstants.getRMNamespaceValue(rmVersion);
                        Sequence sequence = (Sequence) 
rmMsgContext.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
                        if(sequence == null) {
                                sequence = new Sequence(namespace);
@@ -396,7 +397,7 @@
                                sequence.setMessageNumber(msgNumber);
 
                                if(senderBean.isLastMessage() &&
-                                  
SpecSpecificConstants.isLastMessageIndicatorRequired(bean.getRMVersion())) {
+                                  
SpecSpecificConstants.isLastMessageIndicatorRequired(rmVersion)) {
                                        sequence.setLastMessage(new 
LastMessage(namespace));
                                }
                                



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to