Author: chamikara
Date: Wed Mar 8 22:28:27 2006
New Revision: 384448
URL: http://svn.apache.org/viewcvs?rev=384448&view=rev
Log:
Correcttions to the RM reporting functionality.
Big fixes
Added:
webservices/sandesha/trunk/src/org/apache/sandesha2/client/reports/
webservices/sandesha/trunk/src/org/apache/sandesha2/client/reports/RMReport.java
webservices/sandesha/trunk/src/org/apache/sandesha2/client/reports/SequenceReport.java
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/AcknowledgementManager.java
webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java
webservices/sandesha/trunk/src/org/apache/sandesha2/TerminateManager.java
webservices/sandesha/trunk/src/org/apache/sandesha2/client/Sandesha2ClientAPI.java
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java
webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java
webservices/sandesha/trunk/src/org/apache/sandesha2/util/SequenceManager.java
webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/AcknowledgementManager.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/AcknowledgementManager.java?rev=384448&r1=384447&r2=384448&view=diff
==============================================================================
---
webservices/sandesha/trunk/src/org/apache/sandesha2/AcknowledgementManager.java
(original)
+++
webservices/sandesha/trunk/src/org/apache/sandesha2/AcknowledgementManager.java
Wed Mar 8 22:28:27 2006
@@ -162,29 +162,43 @@
* @param outGoingMessage
* @return
*/
- public static ArrayList getClientCompletedMessagesList (String
sequenceIdentifier,ConfigurationContext configurationContext) throws
SandeshaException {
- StorageManager storageManager =
SandeshaUtil.getSandeshaStorageManager(configurationContext);
-
- SequencePropertyBeanMgr sequencePropertyBeanMgr =
storageManager.getSequencePropretyBeanMgr();
-
+ public static ArrayList getClientCompletedMessagesList (String
sequenceID,SequencePropertyBeanMgr seqPropMgr) throws SandeshaException {
+
//first trying to get it from the internal sequence id.
- SequencePropertyBean internalSequenceBean =
sequencePropertyBeanMgr.retrieve(sequenceIdentifier,Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
+ SequencePropertyBean internalSequenceBean =
seqPropMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
String internalSequenceID = null;
if (internalSequenceBean!=null)
internalSequenceID = internalSequenceBean.getValue();
SequencePropertyBean completedMessagesBean = null;
if (internalSequenceID!=null)
- completedMessagesBean =
sequencePropertyBeanMgr.retrieve(internalSequenceID,Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES);
+ completedMessagesBean =
seqPropMgr.retrieve(internalSequenceID,Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES);
if (completedMessagesBean==null)
- completedMessagesBean =
sequencePropertyBeanMgr.retrieve(sequenceIdentifier,Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES);
+ completedMessagesBean =
seqPropMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES);
+
+ ArrayList completedMsgList = null;
+ if (completedMessagesBean!=null) {
+ completedMsgList =
SandeshaUtil.getArrayListFromString(completedMessagesBean.getValue());
+ } else {
+ String message = "Completed messages bean is null, for
the sequence " + sequenceID;
+ throw new SandeshaException (message);
+ }
+
+ return completedMsgList;
+ }
+
+ public static ArrayList getServerCompletedMessagesList (String
sequenceID,SequencePropertyBeanMgr seqPropMgr) throws SandeshaException {
+
+ SequencePropertyBean completedMessagesBean = null;
+
+ completedMessagesBean =
seqPropMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.SERVER_COMPLETED_MESSAGES);
ArrayList completedMsgList = null;
if (completedMessagesBean!=null) {
completedMsgList =
SandeshaUtil.getArrayListFromString(completedMessagesBean.getValue());
} else {
- String message = "Completed messages bean is null, for
the sequence " + sequenceIdentifier;
+ String message = "Completed messages bean is null, for
the sequence " + sequenceID;
throw new SandeshaException (message);
}
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java?rev=384448&r1=384447&r2=384448&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java
Wed Mar 8 22:28:27 2006
@@ -272,12 +272,17 @@
String SEQUENCE_CLOSED = "SequenceClosed";
- String LAST_MESSAGE = "LastMessage";
+ String SEQUENCE_TERMINATED = "SequenceTerminated";
+
+ String SEQUENCE_TIMED_OUT = "SequenceTimedOut";
+ String LAST_MESSAGE = "LastMessage";
String REQUEST_SIDE_SEQUENCE_ID = "RequestSideSequenceID";
//used only at the server side
String HIGHEST_MSG_NO = "HighestMessageNumber";
+
+
}
public interface SOAPVersion {
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/TerminateManager.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/TerminateManager.java?rev=384448&r1=384447&r2=384448&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/TerminateManager.java
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/TerminateManager.java
Wed Mar 8 22:28:27 2006
@@ -33,7 +33,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.sandesha2.client.Sandesha2ClientAPI;
-import org.apache.sandesha2.client.SequenceReport;
+import org.apache.sandesha2.client.reports.SequenceReport;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.CreateSeqBeanMgr;
@@ -191,10 +191,82 @@
StorageManager storageManager =
SandeshaUtil.getSandeshaStorageManager(configContext);
+ SequencePropertyBeanMgr seqPropMgr =
storageManager.getSequencePropretyBeanMgr();
+ SequencePropertyBean seqTerminatedBean = new
SequencePropertyBean
(sequenceID,Sandesha2Constants.SequenceProperties.SEQUENCE_TERMINATED,Sandesha2Constants.VALUE_TRUE);
+ seqPropMgr.insert(seqTerminatedBean);
+
+ cleanSendingSideData(configContext,sequenceID,serverSide);
+
+
+ }
+
+
+
+ private static void doUpdatesIfNeeded (String sequenceID,
SequencePropertyBean propertyBean, SequencePropertyBeanMgr seqPropMgr) throws
SandeshaException {
+ if
(propertyBean.getName().equals(Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES))
{
+
+ //this value cannot be completely deleted since this
data will be needed by SequenceReports
+ //so saving it with the sequenceID value being the out
sequenceID.
+
+ SequencePropertyBean newBean = new SequencePropertyBean
();
+ newBean.setSequenceID(sequenceID);
+ newBean.setName(propertyBean.getName());
+ newBean.setValue(propertyBean.getValue());
+
+ seqPropMgr.insert(newBean);
+ //TODO amazingly this property does not seem to get
deleted without following - in the hibernate impl
+ //(even though the lines efter current methodcall do
this).
+ seqPropMgr.delete
(propertyBean.getSequenceID(),propertyBean.getName());
+ }
+ }
+
+ private static boolean isProportyDeletable (String name) {
+ boolean deleatable = true;
+
+ if
(Sandesha2Constants.SequenceProperties.TERMINATE_ADDED.equals(name))
+ deleatable = false;
+
+ if
(Sandesha2Constants.SequenceProperties.NO_OF_OUTGOING_MSGS_ACKED.equals(name))
+ deleatable = false;
+
+ if
(Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID.equals(name))
+ deleatable = false;
+
+ if
(Sandesha2Constants.SequenceProperties.RM_SPEC_VERSION.equals(name))
+ deleatable = false;
+
+ if
(Sandesha2Constants.SequenceProperties.SEQUENCE_TERMINATED.equals(name))
+ deleatable = false;
+
+ if
(Sandesha2Constants.SequenceProperties.SEQUENCE_CLOSED.equals(name))
+ deleatable = false;
+
+ if
(Sandesha2Constants.SequenceProperties.SEQUENCE_TIMED_OUT.equals(name))
+ deleatable = false;
+
+ return deleatable;
+ }
+
+ public static void timeOutSendingSideSequence (ConfigurationContext
context,String sequenceID, boolean serverside) throws SandeshaException {
+ StorageManager storageManager =
SandeshaUtil.getSandeshaStorageManager(context);
+
+ SequencePropertyBeanMgr seqPropMgr =
storageManager.getSequencePropretyBeanMgr();
+ SequencePropertyBean seqTerminatedBean = new
SequencePropertyBean
(sequenceID,Sandesha2Constants.SequenceProperties.SEQUENCE_TIMED_OUT,Sandesha2Constants.VALUE_TRUE);
+ seqPropMgr.insert(seqTerminatedBean);
+
+
+ cleanSendingSideData(context,sequenceID,serverside);
+ }
+
+ private static void cleanSendingSideData (ConfigurationContext
configContext,String sequenceID, boolean serverSide) throws SandeshaException {
+ StorageManager storageManager =
SandeshaUtil.getSandeshaStorageManager(configContext);
+
SequencePropertyBeanMgr sequencePropertyBeanMgr =
storageManager.getSequencePropretyBeanMgr();
SenderBeanMgr retransmitterBeanMgr =
storageManager.getRetransmitterBeanMgr();
CreateSeqBeanMgr createSeqBeanMgr =
storageManager.getCreateSeqBeanMgr();
+ SequencePropertyBean sequenceTerminatedBean = new
SequencePropertyBean
(sequenceID,Sandesha2Constants.SequenceProperties.SEQUENCE_TERMINATED,Sandesha2Constants.VALUE_TRUE);
+ sequencePropertyBeanMgr.insert(sequenceTerminatedBean);
if (!serverSide) {
//stpoing the listner for the client side.
@@ -214,7 +286,6 @@
}
}
}
-
}
SequencePropertyBean internalSequenceBean =
sequencePropertyBeanMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
@@ -258,43 +329,6 @@
}
SandeshaUtil.stopSenderForTheSequence(internalSequenceId);
-
- }
-
- private static void doUpdatesIfNeeded (String sequenceID,
SequencePropertyBean propertyBean, SequencePropertyBeanMgr seqPropMgr) throws
SandeshaException {
- if
(propertyBean.getName().equals(Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES))
{
-
- //this value cannot be completely deleted since this
data will be needed by SequenceReports
- //so saving it with the sequenceID value being the out
sequenceID.
-
- SequencePropertyBean newBean = new SequencePropertyBean
();
- newBean.setSequenceID(sequenceID);
- newBean.setName(propertyBean.getName());
- newBean.setValue(propertyBean.getValue());
-
- seqPropMgr.insert(newBean);
- //TODO amazingly this property does not seem to get
deleted without following - in the hibernate impl
- //(even though the lines efter current methodcall do
this).
- seqPropMgr.delete
(propertyBean.getSequenceID(),propertyBean.getName());
- }
- }
-
- private static boolean isProportyDeletable (String name) {
- boolean deleatable = true;
-
- if
(Sandesha2Constants.SequenceProperties.TERMINATE_ADDED.equals(name))
- deleatable = false;
-
- if
(Sandesha2Constants.SequenceProperties.NO_OF_OUTGOING_MSGS_ACKED.equals(name))
- deleatable = false;
-
- if
(Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID.equals(name))
- deleatable = false;
-
- if
(Sandesha2Constants.SequenceProperties.RM_SPEC_VERSION.equals(name))
- deleatable = false;
-
- return deleatable;
}
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/client/Sandesha2ClientAPI.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/client/Sandesha2ClientAPI.java?rev=384448&r1=384447&r2=384448&view=diff
==============================================================================
---
webservices/sandesha/trunk/src/org/apache/sandesha2/client/Sandesha2ClientAPI.java
(original)
+++
webservices/sandesha/trunk/src/org/apache/sandesha2/client/Sandesha2ClientAPI.java
Wed Mar 8 22:28:27 2006
@@ -17,38 +17,28 @@
package org.apache.sandesha2.client;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
-import org.apache.axis2.AxisFault;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.MessageContextConstants;
-import org.apache.axis2.description.TransportOutDescription;
-import org.apache.axis2.engine.AxisEngine;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.sandesha2.AcknowledgementManager;
-import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
-import org.apache.sandesha2.SpecSpecificConstants;
-import org.apache.sandesha2.TerminateManager;
-import org.apache.sandesha2.msgprocessors.AcknowledgementProcessor;
+import org.apache.sandesha2.client.reports.RMReport;
+import org.apache.sandesha2.client.reports.SequenceReport;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
-import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.CreateSeqBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.NextMsgBeanMgr;
import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
-import org.apache.sandesha2.storage.beans.SenderBean;
+import org.apache.sandesha2.storage.beans.CreateSeqBean;
+import org.apache.sandesha2.storage.beans.NextMsgBean;
import org.apache.sandesha2.storage.beans.SequencePropertyBean;
-import org.apache.sandesha2.transport.Sandesha2TransportOutDesc;
-import org.apache.sandesha2.util.RMMsgCreator;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.SequenceManager;
-import com.sun.corba.se.internal.core.ServiceContext;
-
/**
* Contains all the Sandesha2Constants of Sandesha2.
* Please see sub-interfaces to see grouped data.
@@ -72,46 +62,153 @@
public static String VALUE_FALSE = "false";
public static SequenceReport getOutgoingSequenceReport (String
internalSequenceID,ConfigurationContext configurationContext) throws
SandeshaException {
- SequenceReport sequenceReport = new SequenceReport ();
+
+ SequenceReport sequenceReport = new SequenceReport ();
+
sequenceReport.setSequenceDirection(SequenceReport.SEQUENCE_DIRECTION_OUT);
StorageManager storageManager =
SandeshaUtil.getSandeshaStorageManager(configurationContext);
- SequencePropertyBeanMgr seqpPropMgr =
storageManager.getSequencePropretyBeanMgr();
+ SequencePropertyBeanMgr seqPropMgr =
storageManager.getSequencePropretyBeanMgr();
+ CreateSeqBeanMgr createSeqMgr =
storageManager.getCreateSeqBeanMgr();
Transaction reportTransaction = storageManager.getTransaction();
- SequencePropertyBean findBean = new SequencePropertyBean ();
-
findBean.setName(Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
- findBean.setValue(internalSequenceID);
- SequencePropertyBean internalSequenceBean =
seqpPropMgr.findUnique(findBean);
+ CreateSeqBean createSeqFindBean = new CreateSeqBean ();
+ createSeqFindBean.setInternalSequenceID(internalSequenceID);
+
+ CreateSeqBean createSeqBean =
createSeqMgr.findUnique(createSeqFindBean);
+
+ if (createSeqBean==null) {
+ //check weather this is an terminated sequence.
+ if
(isTerminatedSequence(internalSequenceID,seqPropMgr)) {
+ fillTerminatedOutgoingSequenceInfo
(sequenceReport,internalSequenceID,seqPropMgr);
+
+ return sequenceReport;
+ }
+
+ if (isTimedOutSequence(internalSequenceID,seqPropMgr)) {
+ fillTimedoutOutgoingSequenceInfo
(sequenceReport,internalSequenceID,seqPropMgr);
+
+ return sequenceReport;
+ }
+
+ String message = "Unrecorder internalSequenceID";
+ log.debug(message);
+ return null;
+ }
+
+ String outSequenceID = createSeqBean.getSequenceID();
+ if (outSequenceID==null) {
+
sequenceReport.setInternalSequenceID(internalSequenceID);
+
sequenceReport.setSequenceStatus(SequenceReport.SEQUENCE_STATUS_INITIAL);
+
sequenceReport.setSequenceDirection(SequenceReport.SEQUENCE_DIRECTION_OUT);
+
+ return sequenceReport;
+ }
+
+
sequenceReport.setSequenceStatus(SequenceReport.SEQUENCE_STATUS_ESTABLISHED);
+
+
fillOutgoingSequenceInfo(sequenceReport,outSequenceID,seqPropMgr);
+
+ reportTransaction.commit();
+
+ return sequenceReport;
+ }
+
+ private static boolean isTerminatedSequence (String internalSequenceID,
SequencePropertyBeanMgr seqPropMgr) throws SandeshaException {
+ SequencePropertyBean internalSequenceFindBean = new
SequencePropertyBean ();
+ internalSequenceFindBean.setValue(internalSequenceID);
+
internalSequenceFindBean.setName(Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
+
+ SequencePropertyBean internalSequenceBean =
seqPropMgr.findUnique(internalSequenceFindBean);
if (internalSequenceBean==null) {
- log.debug("internal sequence bean is null.");
- throw new SandeshaException ("Data not available to
give the sequence report");
+ String message = "Internal sequence Bean is not
available for the given sequence";
+ log.debug (message);
+
+ return false;
+ }
+
+ String outSequenceID = internalSequenceBean.getSequenceID();
+
+ SequencePropertyBean sequenceTerminatedBean =
seqPropMgr.retrieve(outSequenceID,Sandesha2Constants.SequenceProperties.SEQUENCE_TERMINATED);
+ if (sequenceTerminatedBean!=null &&
Sandesha2Constants.VALUE_TRUE.equals(sequenceTerminatedBean.getValue())) {
+ return true;
}
- String sequenceID = internalSequenceBean.getSequenceID();
+ return false;
- //finding the actual seq
- ArrayList completedMessageList =
AcknowledgementManager.getClientCompletedMessagesList
(sequenceID,configurationContext);
+ }
+
+ private static boolean isTimedOutSequence (String internalSequenceID,
SequencePropertyBeanMgr seqPropMgr) throws SandeshaException {
+ SequencePropertyBean internalSequenceFindBean = new
SequencePropertyBean ();
+ internalSequenceFindBean.setValue(internalSequenceID);
+
internalSequenceFindBean.setName(Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
- Iterator iter = completedMessageList.iterator();
- while (iter.hasNext()) {
- Long lng = new Long (Long.parseLong((String)
iter.next()));
- sequenceReport.addCompletedMessage(lng);
+ SequencePropertyBean internalSequenceBean =
seqPropMgr.findUnique(internalSequenceFindBean);
+ if (internalSequenceBean==null) {
+ String message = "Internal sequence Bean is not
available for the given sequence";
+ log.debug (message);
+
+ return false;
}
-
sequenceReport.setSequenceDirection(SequenceReport.SEQUENCE_DIRECTION_OUT);
- boolean completed =
SequenceManager.isOutGoingSequenceCompleted(internalSequenceID,configurationContext);
- if (completed)
-
sequenceReport.setSequenceStatus(SequenceReport.SEQUENCE_STATUS_COMPLETED);
+ String outSequenceID = internalSequenceBean.getSequenceID();
+
+ SequencePropertyBean sequenceTerminatedBean =
seqPropMgr.retrieve(outSequenceID,Sandesha2Constants.SequenceProperties.SEQUENCE_TIMED_OUT);
+ if (sequenceTerminatedBean!=null &&
Sandesha2Constants.VALUE_TRUE.equals(sequenceTerminatedBean.getValue())) {
+ return true;
+ }
- //TODO complete
+ return false;
+ }
+
+ private static void fillTerminatedOutgoingSequenceInfo (SequenceReport
report,String internalSequenceID,SequencePropertyBeanMgr seqPropMgr) throws
SandeshaException {
+ SequencePropertyBean internalSequenceFindBean = new
SequencePropertyBean ();
+ internalSequenceFindBean.setValue(internalSequenceID);
+
internalSequenceFindBean.setName(Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
+ SequencePropertyBean internalSequenceBean =
seqPropMgr.findUnique(internalSequenceFindBean);
+ if (internalSequenceBean==null) {
+ String message = "Not a valid terminated sequence.
Internal sequence Bean is not available for the given sequence";
+ log.debug (message);
+
+ throw new SandeshaException (message);
+ }
- reportTransaction.commit();
+
report.setSequenceStatus(SequenceReport.SEQUENCE_STATUS_TERMINATED);
- return sequenceReport;
+ String outSequenceID = internalSequenceBean.getSequenceID();
+ fillOutgoingSequenceInfo(report,outSequenceID,seqPropMgr);
}
+ private static void fillTimedoutOutgoingSequenceInfo (SequenceReport
report,String internalSequenceID, SequencePropertyBeanMgr seqPropMgr) throws
SandeshaException {
+ SequencePropertyBean internalSequenceFindBean = new
SequencePropertyBean ();
+ internalSequenceFindBean.setValue(internalSequenceID);
+
internalSequenceFindBean.setName(Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
+
+ SequencePropertyBean internalSequenceBean =
seqPropMgr.findUnique(internalSequenceFindBean);
+ if (internalSequenceBean==null) {
+ String message = "Not a valid timedOut sequence.
Internal sequence Bean is not available for the given sequence";
+ log.debug (message);
+
+ throw new SandeshaException (message);
+ }
+
+
report.setSequenceStatus(SequenceReport.SEQUENCE_STATUS_TIMED_OUT);
+ String outSequenceID = internalSequenceBean.getSequenceID();
+ fillOutgoingSequenceInfo(report,outSequenceID,seqPropMgr);
+ }
+
+ private static void fillOutgoingSequenceInfo (SequenceReport
report,String outSequenceID, SequencePropertyBeanMgr seqPropMgr) throws
SandeshaException {
+ ArrayList completedMessageList =
AcknowledgementManager.getClientCompletedMessagesList
(outSequenceID,seqPropMgr);
+
+ Iterator iter = completedMessageList.iterator();
+ while (iter.hasNext()) {
+ Long lng = new Long (Long.parseLong((String)
iter.next()));
+ report.addCompletedMessage(lng);
+ }
+ }
+
+
public static SequenceReport getOutgoingSequenceReport (String to,
String sequenceKey,ConfigurationContext configurationContext) throws
SandeshaException {
String internalSequenceID = SandeshaUtil.getInternalSequenceID
(to,sequenceKey);
@@ -119,11 +216,14 @@
}
- public static SequenceReport getIncomingSequenceReport (String
sequenceID,ConfigurationContext configurationContext) throws SandeshaException {
+ public static SequenceReport getIncomingSequenceReport (String
sequenceID,ConfigurationContext configCtx) throws SandeshaException {
+
+ StorageManager storageManager =
SandeshaUtil.getSandeshaStorageManager(configCtx);
+ SequencePropertyBeanMgr seqPropMgr =
storageManager.getSequencePropretyBeanMgr();
SequenceReport sequenceReport = new SequenceReport ();
- ArrayList completedMessageList =
AcknowledgementManager.getClientCompletedMessagesList
(sequenceID,configurationContext);
+ ArrayList completedMessageList =
AcknowledgementManager.getServerCompletedMessagesList (sequenceID,seqPropMgr);
Iterator iter = completedMessageList.iterator();
while (iter.hasNext()) {
@@ -132,18 +232,91 @@
}
sequenceReport.setSequenceDirection(SequenceReport.SEQUENCE_DIRECTION_IN);
- boolean completed =
SequenceManager.isIncomingSequenceCompleted(sequenceID,configurationContext);
- if (completed)
-
sequenceReport.setSequenceStatus(SequenceReport.SEQUENCE_STATUS_COMPLETED);
+
+ sequenceReport.setSequenceStatus(getServerSequenceStatus
(sequenceID,storageManager));
+
+ return sequenceReport;
+ }
+
+ private static byte getServerSequenceStatus (String
sequenceID,StorageManager storageManager) throws SandeshaException {
- //TODO complete
+ SequencePropertyBeanMgr seqPropMgr =
storageManager.getSequencePropretyBeanMgr();
- return sequenceReport;
+ SequencePropertyBean terminatedBean =
seqPropMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.SEQUENCE_TERMINATED);
+ if (terminatedBean!=null) {
+ return SequenceReport.SEQUENCE_STATUS_TERMINATED;
+ }
+
+ SequencePropertyBean timedOutBean =
seqPropMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.SEQUENCE_TIMED_OUT);
+ if (timedOutBean!=null) {
+ return SequenceReport.SEQUENCE_STATUS_TIMED_OUT;
+ }
+
+ NextMsgBeanMgr nextMsgMgr = storageManager.getNextMsgBeanMgr();
+ NextMsgBean nextMsgBean = nextMsgMgr.retrieve(sequenceID);
+
+ if (nextMsgBean!=null) {
+ return SequenceReport.SEQUENCE_STATUS_ESTABLISHED;
+ }
+
+ throw new SandeshaException ("Unrecorded sequenceID");
}
- public static RMReport getRMReport1 () {
+ /**
+ * RM Report gives the details of incoming and outgoing sequences.
+ * The outgoing sequence have to pass the initial state (CS/CSR
exchange) to be included in a RMReport
+ *
+ * @param configurationContext
+ * @return
+ * @throws SandeshaException
+ */
+ public static RMReport getRMReport (ConfigurationContext
configurationContext) throws SandeshaException {
+
+ StorageManager storageManager =
SandeshaUtil.getSandeshaStorageManager(configurationContext);
+ SequencePropertyBeanMgr seqPropMgr =
storageManager.getSequencePropretyBeanMgr();
+
RMReport rmReport = new RMReport ();
+
+ SequencePropertyBean internalSequenceFindBean = new
SequencePropertyBean ();
+
internalSequenceFindBean.setName(Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
+
+ Collection collection =
seqPropMgr.find(internalSequenceFindBean);
+ Iterator iterator = collection.iterator();
+ while (iterator.hasNext()) {
+ SequencePropertyBean bean = (SequencePropertyBean)
iterator.next();
+ String sequenceID = bean.getSequenceID();
+ rmReport.addToOutgoingSequenceList (sequenceID);
+
rmReport.addToOutgoingInternalSequenceMap(sequenceID,bean.getValue());
+
+ SequenceReport report =
getOutgoingSequenceReport(bean.getValue(),configurationContext);
+
+ rmReport.addToNoOfCompletedMessagesMap(sequenceID
,report.getCompletedMessages().size());
+ rmReport.addToSequenceStatusMap(sequenceID
,report.getSequenceStatus());
+ }
+
+
+ //incoming sequences
+ SequencePropertyBean serverCompletedMsgsFindBean = new
SequencePropertyBean ();
+
serverCompletedMsgsFindBean.setName(Sandesha2Constants.SequenceProperties.SERVER_COMPLETED_MESSAGES);
+
+ Collection serverCompletedMsgsBeans =
seqPropMgr.find(serverCompletedMsgsFindBean);
+ Iterator iter = serverCompletedMsgsBeans.iterator();
+ while (iter.hasNext()) {
+ SequencePropertyBean serverCompletedMsgsBean =
(SequencePropertyBean) iter.next();
+ String sequenceID =
serverCompletedMsgsBean.getSequenceID();
+ rmReport.addToIncomingSequenceList(sequenceID);
+
+ SequenceReport sequenceReport =
getIncomingSequenceReport(sequenceID,configurationContext);
+
+
rmReport.addToNoOfCompletedMessagesMap(sequenceID,sequenceReport.getCompletedMessages().size());
+
rmReport.addToSequenceStatusMap(sequenceID,sequenceReport.getSequenceStatus());
+ }
+
return rmReport;
+ }
+
+ public String InternalSequenceID (String to, String sequenceKey) {
+ return SandeshaUtil.getInternalSequenceID(to,sequenceKey);
}
Added:
webservices/sandesha/trunk/src/org/apache/sandesha2/client/reports/RMReport.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/client/reports/RMReport.java?rev=384448&view=auto
==============================================================================
---
webservices/sandesha/trunk/src/org/apache/sandesha2/client/reports/RMReport.java
(added)
+++
webservices/sandesha/trunk/src/org/apache/sandesha2/client/reports/RMReport.java
Wed Mar 8 22:28:27 2006
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sandesha2.client.reports;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+
+/**
+ * @author Chamikara Jayalath <[EMAIL PROTECTED]>
+ */
+public class RMReport {
+
+ private ArrayList incomingSequenceList = null;
+ private ArrayList outgoingSequenceList = null;
+ private HashMap sequenceStatusMap = null;
+ private HashMap noOfCompletedMessagesMap = null;
+ private HashMap outgoingInternalSequenceIDMap = null;
+
+ public RMReport () {
+ incomingSequenceList = new ArrayList ();
+ outgoingSequenceList = new ArrayList ();
+ sequenceStatusMap = new HashMap ();
+ noOfCompletedMessagesMap = new HashMap ();
+ outgoingInternalSequenceIDMap = new HashMap ();
+ }
+
+ public long getCompletedMessagesCount(String sequenceID) {
+ Long lng = (Long) noOfCompletedMessagesMap.get(sequenceID);
+ if (lng==null)
+ return -1;
+
+ return lng.longValue();
+ }
+
+ public ArrayList getIncomingSequenceList() {
+ return incomingSequenceList;
+ }
+
+ public ArrayList getOutgoingSequenceList() {
+ return outgoingSequenceList;
+ }
+
+ public byte getSequenceStatusMap(String sequenceID) {
+ Byte status = (Byte) sequenceStatusMap.get(sequenceID);
+ if (status==null)
+ return SequenceReport.SEQUENCE_STATUS_UNKNOWN;
+
+ return status.byteValue();
+ }
+
+ public void addToIncomingSequenceList (String incomingSequenceID) {
+ incomingSequenceList.add(incomingSequenceID);
+ }
+
+ public void addToOutgoingSequenceList (String outSequenceID) {
+ outgoingSequenceList.add(outSequenceID);
+ }
+
+ public void addToNoOfCompletedMessagesMap (String id, long noOfMsgs) {
+ noOfCompletedMessagesMap.put(id, new Long (noOfMsgs));
+ }
+
+ public void addToSequenceStatusMap (String id, byte status) {
+ sequenceStatusMap.put(id, new Byte (status));
+ }
+
+ public String getInternalSequenceIdOfOutSequence (String outSequenceID)
{
+ return (String)
outgoingInternalSequenceIDMap.get(outSequenceID);
+ }
+
+ public void addToOutgoingInternalSequenceMap (String outSequenceID,
String internalSequenceID) {
+ outgoingInternalSequenceIDMap.put(outSequenceID,outSequenceID);
+ }
+
+}
Added:
webservices/sandesha/trunk/src/org/apache/sandesha2/client/reports/SequenceReport.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/client/reports/SequenceReport.java?rev=384448&view=auto
==============================================================================
---
webservices/sandesha/trunk/src/org/apache/sandesha2/client/reports/SequenceReport.java
(added)
+++
webservices/sandesha/trunk/src/org/apache/sandesha2/client/reports/SequenceReport.java
Wed Mar 8 22:28:27 2006
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy
of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
under
+ * the License.
+ */
+
+package org.apache.sandesha2.client.reports;
+
+import java.util.ArrayList;
+
+/**
+ * @author Chamikara Jayalath <[EMAIL PROTECTED]>
+ */
+
+public class SequenceReport {
+
+ public static final byte SEQUENCE_STATUS_UNKNOWN = 0;
+ public static final byte SEQUENCE_STATUS_INITIAL = 1;
+ public static final byte SEQUENCE_STATUS_ESTABLISHED = 2;
+ public static final byte SEQUENCE_STATUS_TERMINATED = 3;
+ public static final byte SEQUENCE_STATUS_TIMED_OUT = 4;
+ private static final byte MAX_SEQUENCE_STATUS = 4;
+
+ public static final byte SEQUENCE_DIRECTION_UNKNOWN=0;
+ public static final byte SEQUENCE_DIRECTION_IN=1;
+ public static final byte SEQUENCE_DIRECTION_OUT=2;
+ private static final byte MAX_SEQUENCE_DIRECTION = 2;
+
+ private byte sequenceStatus = SEQUENCE_STATUS_UNKNOWN;
+ private byte sequenceDirection = SEQUENCE_DIRECTION_UNKNOWN;
+ private String sequenceID = null;
+ private String internalSequenceID = null; //only for outgoing
sequences
+ private ArrayList completedMessages = null; //no of messages acked
(both for incoming and outgoing)
+
+ public SequenceReport () {
+ completedMessages = new ArrayList ();
+ }
+
+ public void setSequenceStatus (byte sequenceStatus) {
+ if (sequenceStatus>=SEQUENCE_STATUS_UNKNOWN &&
sequenceStatus<=MAX_SEQUENCE_STATUS) {
+ this.sequenceStatus = sequenceStatus;
+ }
+ }
+
+ public void setSequenceDirection (byte sequenceDirection) {
+ if (sequenceDirection>=SEQUENCE_DIRECTION_UNKNOWN &&
sequenceDirection<=MAX_SEQUENCE_DIRECTION) {
+ this.sequenceDirection = sequenceDirection;
+ }
+ }
+
+ public byte getSequenceStatus () {
+ return sequenceStatus;
+ }
+
+ public byte getSequenceDirection () {
+ return sequenceDirection;
+ }
+
+ public String getSequenceID() {
+ return sequenceID;
+ }
+
+ public void setSequenceID(String sequenceID) {
+ this.sequenceID = sequenceID;
+ }
+
+ public ArrayList getCompletedMessages () {
+ return completedMessages;
+ }
+
+ public void addCompletedMessage (Long messageNo) {
+ completedMessages.add(messageNo);
+ }
+
+ public void setCompletedMessages (ArrayList completedMessages) {
+ this.completedMessages = completedMessages;
+ }
+
+ public String getInternalSequenceID() {
+ return internalSequenceID;
+ }
+
+ public void setInternalSequenceID(String internalSequenceID) {
+ this.internalSequenceID = internalSequenceID;
+ }
+
+
+}
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java?rev=384448&r1=384447&r2=384448&view=diff
==============================================================================
---
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
(original)
+++
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
Wed Mar 8 22:28:27 2006
@@ -80,7 +80,7 @@
log.debug(message);
throw new AxisFault(message);
}
-
+
MsgProcessor msgProcessor = MsgProcessorFactory
.getMessageProcessor(rmMsgCtx.getMessageType());
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java?rev=384448&r1=384447&r2=384448&view=diff
==============================================================================
---
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
(original)
+++
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
Wed Mar 8 22:28:27 2006
@@ -133,6 +133,9 @@
log.debug(message);
throw new SandeshaException(message);
}
+
+ createSeqBean.setSequenceID(newOutSequenceId);
+ createSeqMgr.update(createSeqBean);
//deleting the create sequence entry.
retransmitterMgr.delete(createSeqMsgId);
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java?rev=384448&r1=384447&r2=384448&view=diff
==============================================================================
---
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
(original)
+++
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
Wed Mar 8 22:28:27 2006
@@ -116,6 +116,13 @@
Transaction terminateTransaction =
storageManager.getTransaction();
TerminateManager.cleanReceivingSideOnTerminateMessage(context,sequenceId);
+
+
+ SequencePropertyBean terminatedBean = new SequencePropertyBean (
+
sequenceId,Sandesha2Constants.SequenceProperties.SEQUENCE_TERMINATED,Sandesha2Constants.VALUE_TRUE);
+
+ sequencePropertyBeanMgr.insert(terminatedBean);
+
terminateTransaction.commit();
SandeshaUtil.stopSenderForTheSequence(sequenceId);
@@ -125,7 +132,12 @@
Transaction lastUpdatedTransaction =
storageManager.getTransaction();
SequenceManager.updateLastActivatedTime(sequenceId,context);
+
+
+
lastUpdatedTransaction.commit();
+
+
terminateSeqRMMsg.pause();
}
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java?rev=384448&r1=384447&r2=384448&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java
Wed Mar 8 22:28:27 2006
@@ -218,7 +218,7 @@
CreateSeqBeanMgr createSeqMgr =
storageManager.getCreateSeqBeanMgr();
int type = rmMessageContext.getMessageType();
- boolean validSequence = false;
+ boolean validSequence = true;
String reason = null;
if (type==Sandesha2Constants.MessageTypes.ACK ||
@@ -231,7 +231,7 @@
Collection coll = createSeqMgr.find(createSeqFindBean);
if (coll.size()==0) {
- validSequence = true;
+ validSequence = false;
}
} else {
@@ -241,14 +241,18 @@
Collection coll = mgr.retrieveAll();
Iterator it = coll.iterator();
+ boolean contains = false;
while (it.hasNext()) {
NextMsgBean nextMsgBean = (NextMsgBean)
it.next();
String tempId = nextMsgBean.getSequenceID();
if (tempId.equals(sequenceID)) {
- validSequence = true;
+ contains = true;
break;
}
}
+
+ if (contains)
+ validSequence = true;
}
String rmNamespaceValue =
rmMessageContext.getRMNamespaceValue();
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java?rev=384448&r1=384447&r2=384448&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java
Wed Mar 8 22:28:27 2006
@@ -806,5 +806,25 @@
return specVersionBean.getValue();
}
-
+
+
+// public static boolean inNumberPresentInList (String list, long no)
throws SandeshaException {
+//
+// }
+//
+// public static String putNumberToList (String list, long no) throws
SandeshaException {
+// StringTokenizer tokenizer = new StringTokenizer
(list,Sandesha2Constants.LIST_SEPERATOR);
+//
+// while (tokenizer.hasMoreElements()){
+// String element = tokenizer.nextToken();
+// String[] items =
element.split(Sandesha2Constants.LIST_ITEM_SEPERATOR);
+// if (items.length!=1 && items.length!=2)
+// throw new SandeshaException ("Invalid string
array");
+//
+//
+// }
+//
+// }
+
+
}
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/util/SequenceManager.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/SequenceManager.java?rev=384448&r1=384447&r2=384448&view=diff
==============================================================================
---
webservices/sandesha/trunk/src/org/apache/sandesha2/util/SequenceManager.java
(original)
+++
webservices/sandesha/trunk/src/org/apache/sandesha2/util/SequenceManager.java
Wed Mar 8 22:28:27 2006
@@ -8,6 +8,8 @@
import java.util.Collection;
+import javax.xml.namespace.QName;
+
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.context.ConfigurationContext;
@@ -17,6 +19,8 @@
import org.apache.axis2.context.OperationContextFactory;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.description.Parameter;
+import org.apache.axis2.description.TransportInDescription;
+import org.apache.axis2.engine.ListenerManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.sandesha2.RMMsgContext;
@@ -212,13 +216,35 @@
}
}
//Default value for acksTo is anonymous (this happens only for
the client side)
- if (acksToBean==null) {
+ if (acksTo==null) {
acksTo = Sandesha2Constants.WSA.NS_URI_ANONYMOUS;
-
- EndpointReference acksToEPR = new
EndpointReference(acksTo);
- acksToBean = new SequencePropertyBean(
+ }
+
+ acksToBean = new SequencePropertyBean(
internalSequenceId,
Sandesha2Constants.SequenceProperties.ACKS_TO_EPR,
- acksToEPR.getAddress());
+ acksTo);
+
+ //start the in listner for the client side, if acksTo is not
anonymous.
+ if (!firstAplicationMsgCtx.isServerSide() &&
!Sandesha2Constants.WSA.NS_URI_ANONYMOUS.equals(acksTo)) {
+
+ String transportInProtocol =
firstAplicationMsgCtx.getOptions().getTransportInProtocol();
+ if (transportInProtocol==null) {
+ throw new SandeshaException ("You must mention the
transport in protocol for getting async acknowledgement messages");
+ }
+
+ try {
+ ListenerManager listenerManager =
+
firstAplicationMsgCtx.getConfigurationContext().getListenerManager();
+ TransportInDescription transportIn =
firstAplicationMsgCtx.getConfigurationContext().getAxisConfiguration().getTransportIn(new
QName(transportInProtocol));
+ //if acksTo is not anonymous start the
in-transport
+ if
(!listenerManager.isListenerRunning(transportIn.getName().getLocalPart())) {
+
listenerManager.addListener(transportIn, false);
+ }
+ } catch (AxisFault e) {
+ throw new SandeshaException ("Could not stast
the transport listner",e);
+ }
+
+
}
SequencePropertyBean msgsBean = new SequencePropertyBean();
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java
URL:
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java?rev=384448&r1=384447&r2=384448&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java Wed
Mar 8 22:28:27 2006
@@ -174,7 +174,7 @@
// do time out
processing.
// TODO uncomment below
line
-
TerminateManager.terminateSendingSide(context,sequenceID,
msgCtx.isServerSide());
+
TerminateManager.timeOutSendingSideSequence(context,sequenceID,
msgCtx.isServerSide());
String message =
"Sequence timed out";
log.debug(message);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]