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/05/09 14:29:31 UTC
svn commit: r536504 - in /webservices/sandesha/trunk/java: config/
modules/core/src/main/java/org/apache/sandesha2/msgprocessors/
modules/core/src/main/java/org/apache/sandesha2/workers/
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: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org