You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ch...@apache.org on 2006/04/06 12:50:26 UTC
svn commit: r391959 [1/2] - in
/webservices/sandesha/trunk/src/org/apache/sandesha2: ./ client/
client/reports/ handlers/ msgprocessors/ msgreceivers/ util/ workers/ wsrm/
Author: chamikara
Date: Thu Apr 6 03:50:20 2006
New Revision: 391959
URL: http://svn.apache.org/viewcvs?rev=391959&view=rev
Log:
Devided the SandeshaClientAPI into two classes RMClientAPI and RMClientConstants.
Completed the RMFaultCallback feature.
Made Sender,Invoker, StorageManager properties of the conficContext rather than static.
Bug fixes.
Refactored code
Added:
webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMClientAPI.java
webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMClientConstants.java
webservices/sandesha/trunk/src/org/apache/sandesha2/client/SequenceReport.java
webservices/sandesha/trunk/src/org/apache/sandesha2/util/AcknowledgementManager.java
webservices/sandesha/trunk/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
webservices/sandesha/trunk/src/org/apache/sandesha2/util/SpecSpecificConstants.java
webservices/sandesha/trunk/src/org/apache/sandesha2/util/TerminateManager.java
Removed:
webservices/sandesha/trunk/src/org/apache/sandesha2/AcknowledgementManager.java
webservices/sandesha/trunk/src/org/apache/sandesha2/SOAPFaultEnvelopeCreator.java
webservices/sandesha/trunk/src/org/apache/sandesha2/SpecSpecificConstants.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/client/reports/
Modified:
webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgContext.java
webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java
webservices/sandesha/trunk/src/org/apache/sandesha2/SandeshaModule.java
webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMReport.java
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.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/msgreceivers/RMMessageReceiver.java
webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java
webservices/sandesha/trunk/src/org/apache/sandesha2/util/MsgInitializer.java
webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.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/InOrderInvoker.java
webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java
webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/RMElements.java
webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgContext.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgContext.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgContext.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgContext.java Thu Apr 6 03:50:20 2006
@@ -19,16 +19,14 @@
import java.util.HashMap;
import java.util.Iterator;
-import java.util.jar.Attributes.Name;
+import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.addressing.RelatesTo;
-import org.apache.axis2.context.AbstractContext;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
-import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.sandesha2.util.SOAPAbstractFactory;
import org.apache.sandesha2.wsrm.IOMRMElement;
import org.apache.sandesha2.wsrm.IOMRMPart;
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=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/Sandesha2Constants.java Thu Apr 6 03:50:20 2006
@@ -17,7 +17,6 @@
package org.apache.sandesha2;
-import org.apache.axis2.addressing.AddressingConstants;
/**
@@ -477,5 +476,11 @@
String LIST_SEPERATOR = ",";
String LIST_PART_SEPERATOR = "-";
+
+ String STORAGE_MANAGER = "StorageManager";
+
+ String SENDER = "Sender";
+
+ String INVOKER = "Invoker";
}
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/SandeshaModule.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/SandeshaModule.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/SandeshaModule.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/SandeshaModule.java Thu Apr 6 03:50:20 2006
@@ -22,7 +22,6 @@
import org.apache.axis2.description.AxisDescription;
import org.apache.axis2.description.AxisModule;
import org.apache.axis2.description.Parameter;
-import org.apache.axis2.description.PolicyInclude;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.modules.Module;
import org.apache.axis2.modules.ModulePolicyExtension;
@@ -53,7 +52,8 @@
// PropertyManager.getInstance().loadPropertiesFromModuleDesc(module);
PropertyManager.getInstance().loadPropertiesFromModuleDescPolicy(module);
-
+
+ configContext.setProperty(Sandesha2Constants.STORAGE_MANAGER,null); // this must be resetted by the module settings.
StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configContext);
storageManager.initStorage(module);
}
Added: webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMClientAPI.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMClientAPI.java?rev=391959&view=auto
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMClientAPI.java (added)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMClientAPI.java Thu Apr 6 03:50:20 2006
@@ -0,0 +1,439 @@
+/*
+ * 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;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.soap.SOAP12Constants;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
+import org.apache.axiom.soap.impl.llom.soap12.SOAP12Factory;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.client.async.AsyncResult;
+import org.apache.axis2.client.async.Callback;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.Transaction;
+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.CreateSeqBean;
+import org.apache.sandesha2.storage.beans.NextMsgBean;
+import org.apache.sandesha2.storage.beans.SequencePropertyBean;
+import org.apache.sandesha2.util.AcknowledgementManager;
+import org.apache.sandesha2.util.SandeshaUtil;
+import org.apache.sandesha2.util.SpecSpecificConstants;
+import org.apache.sandesha2.wsrm.Identifier;
+import org.apache.sandesha2.wsrm.TerminateSequence;
+
+/**
+ * Contains all the Sandesha2Constants of Sandesha2.
+ * Please see sub-interfaces to see grouped data.
+ *
+ * @author Chamikara Jayalath <ch...@gmail.com>
+ */
+
+public class RMClientAPI {
+
+ private static Log log = LogFactory.getLog(RMClientAPI.class);
+
+ public static String VALUE_TRUE = "true";
+ public static String VALUE_FALSE = "false";
+
+ public static SequenceReport getOutgoingSequenceReport (String internalSequenceID,ConfigurationContext configurationContext) throws SandeshaException {
+
+ SequenceReport sequenceReport = new SequenceReport ();
+ sequenceReport.setSequenceDirection(SequenceReport.SEQUENCE_DIRECTION_OUT);
+
+ StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configurationContext);
+ SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropretyBeanMgr();
+ CreateSeqBeanMgr createSeqMgr = storageManager.getCreateSeqBeanMgr();
+
+ Transaction reportTransaction = storageManager.getTransaction();
+
+ 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) {
+ 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;
+ }
+
+ return false;
+
+ }
+
+ private static boolean isTimedOutSequence (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 = "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_TIMED_OUT);
+ if (sequenceTerminatedBean!=null && Sandesha2Constants.VALUE_TRUE.equals(sequenceTerminatedBean.getValue())) {
+ return true;
+ }
+
+ 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);
+ }
+
+ report.setSequenceStatus(SequenceReport.SEQUENCE_STATUS_TERMINATED);
+
+ 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 {
+ report.setSequenceID(outSequenceID);
+
+ 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);
+ return getOutgoingSequenceReport(internalSequenceID,configurationContext);
+
+ }
+
+ 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.getServerCompletedMessagesList (sequenceID,seqPropMgr);
+
+ Iterator iter = completedMessageList.iterator();
+ while (iter.hasNext()) {;
+ sequenceReport.addCompletedMessage((Long) iter.next());
+ }
+
+ sequenceReport.setSequenceID(sequenceID);
+ sequenceReport.setInternalSequenceID(sequenceID); //for the incoming side internalSequenceID=sequenceID
+ sequenceReport.setSequenceDirection(SequenceReport.SEQUENCE_DIRECTION_IN);
+
+ sequenceReport.setSequenceStatus(getServerSequenceStatus (sequenceID,storageManager));
+
+ return sequenceReport;
+ }
+
+
+ public static ArrayList getAllIncomingSequenceReports (ConfigurationContext configCtx) throws SandeshaException {
+
+ RMReport report = getRMReport(configCtx);
+ ArrayList incomingSequenceIDs = report.getIncomingSequenceList();
+ Iterator incomingSequenceIDIter = incomingSequenceIDs.iterator();
+
+ ArrayList incomingSequenceReports = new ArrayList ();
+
+ while (incomingSequenceIDIter.hasNext()) {
+ String sequnceID = (String) incomingSequenceIDIter.next();
+ SequenceReport incomingSequenceReport = getIncomingSequenceReport(sequnceID,configCtx);
+ if (incomingSequenceReport==null) {
+ throw new SandeshaException ("An incoming sequence report is not present for the given sequenceID");
+ }
+
+ incomingSequenceReports.add(incomingSequenceReport);
+ }
+
+ return incomingSequenceReports;
+ }
+
+ private static byte getServerSequenceStatus (String sequenceID,StorageManager storageManager) throws SandeshaException {
+
+ SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropretyBeanMgr();
+
+ 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");
+ }
+
+ /**
+ * 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 static String getInternalSequenceID (String to, String sequenceKey) {
+ return SandeshaUtil.getInternalSequenceID(to,sequenceKey);
+ }
+
+
+ public static void terminateSequence (String toEPR, String sequenceKey, ServiceClient serviceClient,ConfigurationContext configurationContext) throws SandeshaException {
+
+ String internalSequenceID = SandeshaUtil.getInternalSequenceID(toEPR,sequenceKey);
+
+ SequenceReport sequenceReport = RMClientAPI.getOutgoingSequenceReport(internalSequenceID,configurationContext);
+ if (sequenceReport==null)
+ throw new SandeshaException ("Cannot generate the sequence report for the given internalSequenceID");
+ if (sequenceReport.getSequenceStatus()!=SequenceReport.SEQUENCE_STATUS_ESTABLISHED)
+ throw new SandeshaException ("Canot terminate the sequence since it is not active");
+
+ StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configurationContext);
+ SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropretyBeanMgr();
+ SequencePropertyBean sequenceIDBean = seqPropMgr.retrieve(internalSequenceID,Sandesha2Constants.SequenceProperties.OUT_SEQUENCE_ID);
+ if (sequenceIDBean==null)
+ throw new SandeshaException ("SequenceIdBean is not set");
+
+ String sequenceID = sequenceIDBean.getValue();
+
+ if (sequenceID==null)
+ throw new SandeshaException ("Cannot find the sequenceID");
+
+ Options options = serviceClient.getOptions();
+
+ String rmSpecVersion = (String) options.getProperty(RMClientConstants.RM_SPEC_VERSION);
+
+ if (rmSpecVersion==null)
+ rmSpecVersion = SpecSpecificConstants.getDefaultSpecVersion ();
+
+ String oldAction = options.getAction();
+
+ options.setAction(SpecSpecificConstants.getTerminateSequenceAction(rmSpecVersion));
+
+ SOAPEnvelope dummyEnvelope = null;
+ SOAPFactory factory = null;
+ String soapNamespaceURI = options.getSoapVersionURI();
+ if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(soapNamespaceURI)) {
+ factory = new SOAP12Factory ();
+ dummyEnvelope = factory.getDefaultEnvelope();
+ }else {
+ factory = new SOAP11Factory ();
+ dummyEnvelope = factory.getDefaultEnvelope();
+ }
+
+ String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(rmSpecVersion);
+
+ TerminateSequence terminateSequence = new TerminateSequence (factory,rmNamespaceValue);
+ Identifier identifier = new Identifier (factory,rmNamespaceValue);
+ identifier.setIndentifer(sequenceID);
+ terminateSequence.setIdentifier(identifier);
+
+ terminateSequence.toSOAPEnvelope(dummyEnvelope);
+
+ String oldSequenceKey = (String) options.getProperty(RMClientConstants.SEQUENCE_KEY);
+ options.setProperty(RMClientConstants.SEQUENCE_KEY,sequenceKey);
+ try {
+ DummyCallback callback = new RMClientAPI().new DummyCallback();
+ serviceClient.fireAndForget(dummyEnvelope.getBody().getFirstChildWithName(new QName (rmNamespaceValue,Sandesha2Constants.WSRM_COMMON.TERMINATE_SEQUENCE)));
+ } catch (AxisFault e) {
+ throw new SandeshaException ("Could not invoke the service client", e);
+ }
+
+ if (oldSequenceKey!=null)
+ options.setProperty(RMClientConstants.SEQUENCE_KEY,oldSequenceKey);
+
+// options.setAction(oldAction);
+ }
+
+ private class DummyCallback extends Callback {
+
+ public void onComplete(AsyncResult result) {
+ // TODO Auto-generated method stub
+ System.out.println("Error: dummy callback was called");
+ }
+
+ public void onError(Exception e) {
+ // TODO Auto-generated method stub
+ System.out.println("Error: dummy callback received an error");
+
+ }
+
+ }
+
+ //This blocks the system until the messages u have sent hv been completed.
+ public void blockForCompletion () {
+
+ }
+
+}
Added: webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMClientConstants.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMClientConstants.java?rev=391959&view=auto
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMClientConstants.java (added)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMClientConstants.java Thu Apr 6 03:50:20 2006
@@ -0,0 +1,29 @@
+/*
+ * 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;
+
+public class RMClientConstants {
+ public static String AcksTo = "Sandesha2AcksTo";
+ public static String LAST_MESSAGE = "Sandesha2LastMessage";
+ public static String OFFERED_SEQUENCE_ID = "Sandesha2OfferedSequenceId";
+ public static String SANDESHA_DEBUG_MODE = "Sandesha2DebugMode";
+ public static String SEQUENCE_KEY = "Sandesha2SequenceKey";
+ public static String MESSAGE_NUMBER = "Sandesha2MessageNumber";
+ public static String RM_SPEC_VERSION = "Sandesha2RMSpecVersion";
+ public static String DUMMY_MESSAGE = "Sandesha2DummyMessage"; //If this property is set, even though this message will invoke the RM handlers, this will not be sent as an actual application message
+ public static String RM_FAULT_CALLBACK = "Sandesha2RMFaultCallback";
+}
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMReport.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMReport.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMReport.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/client/RMReport.java Thu Apr 6 03:50:20 2006
@@ -17,6 +17,8 @@
package org.apache.sandesha2.client;
import java.util.ArrayList;
+import java.util.HashMap;
+
/**
@@ -26,25 +28,64 @@
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 addIncomingSequenceID (String sequenceID) {
- incomingSequenceList.add(sequenceID);
+ public void addToOutgoingSequenceList (String outSequenceID) {
+ outgoingSequenceList.add(outSequenceID);
}
- public void addOutgoingSequenceID (String sequenceID) {
- outgoingSequenceList.add(sequenceID);
+ public void addToNoOfCompletedMessagesMap (String id, long noOfMsgs) {
+ noOfCompletedMessagesMap.put(id, new Long (noOfMsgs));
}
- public ArrayList getIncomingSequenceList () {
- return incomingSequenceList;
+ public void addToSequenceStatusMap (String id, byte status) {
+ sequenceStatusMap.put(id, new Byte (status));
}
- public ArrayList getOutgoingSequenceList () {
- return outgoingSequenceList;
+ public String getInternalSequenceIdOfOutSequence (String outSequenceID) {
+ return (String) outgoingInternalSequenceIDMap.get(outSequenceID);
+ }
+
+ public void addToOutgoingInternalSequenceMap (String outSequenceID, String internalSequenceID) {
+ outgoingInternalSequenceIDMap.put(outSequenceID,internalSequenceID);
}
+
}
Added: webservices/sandesha/trunk/src/org/apache/sandesha2/client/SequenceReport.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/client/SequenceReport.java?rev=391959&view=auto
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/client/SequenceReport.java (added)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/client/SequenceReport.java Thu Apr 6 03:50:20 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;
+
+import java.util.ArrayList;
+
+/**
+ * @author Chamikara Jayalath <ch...@gmail.com>
+ */
+
+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/SandeshaGlobalInHandler.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java Thu Apr 6 03:50:20 2006
@@ -39,8 +39,9 @@
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.client.RMClientConstants;
import org.apache.sandesha2.client.RMFaultCallback;
-import org.apache.sandesha2.client.Sandesha2ClientAPI;
+import org.apache.sandesha2.client.RMClientAPI;
import org.apache.sandesha2.msgprocessors.ApplicationMsgProcessor;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
@@ -89,7 +90,7 @@
if (requestMessage!=null) {
if(SandeshaUtil.isRetriableOnFaults(requestMessage)){
- RMFaultCallback faultCallback = (RMFaultCallback) operationContext.getProperty(Sandesha2ClientAPI.RM_FAULT_CALLBACK);
+ RMFaultCallback faultCallback = (RMFaultCallback) operationContext.getProperty(RMClientConstants.RM_FAULT_CALLBACK);
if (faultCallback!=null) {
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java Thu Apr 6 03:50:20 2006
@@ -39,8 +39,8 @@
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
-import org.apache.sandesha2.SpecSpecificConstants;
-import org.apache.sandesha2.client.Sandesha2ClientAPI;
+import org.apache.sandesha2.client.RMClientAPI;
+import org.apache.sandesha2.client.RMClientConstants;
import org.apache.sandesha2.msgprocessors.ApplicationMsgProcessor;
import org.apache.sandesha2.msgprocessors.MsgProcessor;
import org.apache.sandesha2.msgprocessors.MsgProcessorFactory;
@@ -60,6 +60,7 @@
import org.apache.sandesha2.util.SandeshaPropertyBean;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.SequenceManager;
+import org.apache.sandesha2.util.SpecSpecificConstants;
import org.apache.sandesha2.wsrm.AckRequested;
import org.apache.sandesha2.wsrm.CreateSequence;
import org.apache.sandesha2.wsrm.Identifier;
@@ -109,9 +110,9 @@
msgCtx.setProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE,
"true");
- String dummyMessageString = (String) msgCtx.getOptions().getProperty(Sandesha2ClientAPI.DUMMY_MESSAGE);
+ String dummyMessageString = (String) msgCtx.getOptions().getProperty(RMClientConstants.DUMMY_MESSAGE);
boolean dummyMessage = false;
- if (dummyMessageString!=null && Sandesha2ClientAPI.VALUE_TRUE.equals(dummyMessageString))
+ if (dummyMessageString!=null && RMClientAPI.VALUE_TRUE.equals(dummyMessageString))
dummyMessage = true;
StorageManager storageManager = SandeshaUtil
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java Thu Apr 6 03:50:20 2006
@@ -37,7 +37,6 @@
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
-import org.apache.sandesha2.SpecSpecificConstants;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
@@ -51,6 +50,7 @@
import org.apache.sandesha2.util.SOAPAbstractFactory;
import org.apache.sandesha2.util.SandeshaPropertyBean;
import org.apache.sandesha2.util.SandeshaUtil;
+import org.apache.sandesha2.util.SpecSpecificConstants;
import org.apache.sandesha2.wsrm.AckRequested;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java Thu Apr 6 03:50:20 2006
@@ -32,12 +32,9 @@
import org.apache.axis2.transport.TransportSender;
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.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
@@ -46,10 +43,13 @@
import org.apache.sandesha2.storage.beans.SequencePropertyBean;
import org.apache.sandesha2.transport.Sandesha2TransportOutDesc;
import org.apache.sandesha2.transport.Sandesha2TransportSender;
+import org.apache.sandesha2.util.AcknowledgementManager;
import org.apache.sandesha2.util.FaultManager;
import org.apache.sandesha2.util.RMMsgCreator;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.SequenceManager;
+import org.apache.sandesha2.util.SpecSpecificConstants;
+import org.apache.sandesha2.util.TerminateManager;
import org.apache.sandesha2.wsrm.AcknowledgementRange;
import org.apache.sandesha2.wsrm.Nack;
import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Thu Apr 6 03:50:20 2006
@@ -38,13 +38,12 @@
import org.apache.axis2.transport.TransportSender;
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.client.RMClientConstants;
import org.apache.sandesha2.client.RMFaultCallback;
-import org.apache.sandesha2.client.Sandesha2ClientAPI;
+import org.apache.sandesha2.client.RMClientAPI;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.CreateSeqBeanMgr;
@@ -58,6 +57,7 @@
import org.apache.sandesha2.storage.beans.SenderBean;
import org.apache.sandesha2.storage.beans.SequencePropertyBean;
import org.apache.sandesha2.transport.Sandesha2TransportOutDesc;
+import org.apache.sandesha2.util.AcknowledgementManager;
import org.apache.sandesha2.util.FaultManager;
import org.apache.sandesha2.util.MsgInitializer;
import org.apache.sandesha2.util.PropertyManager;
@@ -66,6 +66,7 @@
import org.apache.sandesha2.util.SandeshaPropertyBean;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.SequenceManager;
+import org.apache.sandesha2.util.SpecSpecificConstants;
import org.apache.sandesha2.wsrm.AckRequested;
import org.apache.sandesha2.wsrm.CreateSequence;
import org.apache.sandesha2.wsrm.Identifier;
@@ -438,11 +439,11 @@
ConfigurationContext configContext = msgContext .getConfigurationContext();
//setting the Fault callback
- RMFaultCallback faultCallback = (RMFaultCallback) msgContext.getOptions().getProperty(Sandesha2ClientAPI.RM_FAULT_CALLBACK);
+ RMFaultCallback faultCallback = (RMFaultCallback) msgContext.getOptions().getProperty(RMClientConstants.RM_FAULT_CALLBACK);
if (faultCallback!=null) {
OperationContext operationContext = msgContext.getOperationContext();
if (operationContext!=null) {
- operationContext.setProperty(Sandesha2ClientAPI.RM_FAULT_CALLBACK,faultCallback);
+ operationContext.setProperty(RMClientConstants.RM_FAULT_CALLBACK,faultCallback);
}
}
@@ -513,7 +514,7 @@
long requestMsgNo = reqSequence.getMessageNumber().getMessageNumber();
- internalSequenceId = SandeshaUtil.getInternalSequenceID(incomingSeqId);
+ internalSequenceId = SandeshaUtil.getOutgoingSideInternalSequenceID(incomingSeqId);
//deciding weather the last message.
String requestLastMsgNoStr = SandeshaUtil.getSequenceProperty(incomingSeqId,Sandesha2Constants.SequenceProperties.LAST_IN_MESSAGE_NO,configContext);
@@ -533,10 +534,10 @@
}
String to = toEPR.getAddress();
- String sequenceKey = (String) msgContext.getProperty(Sandesha2ClientAPI.SEQUENCE_KEY);
+ String sequenceKey = (String) msgContext.getProperty(RMClientConstants.SEQUENCE_KEY);
internalSequenceId = SandeshaUtil.getInternalSequenceID(to,sequenceKey);
- String lastAppMessage = (String) msgContext.getProperty(Sandesha2ClientAPI.LAST_MESSAGE);
+ String lastAppMessage = (String) msgContext.getProperty(RMClientConstants.LAST_MESSAGE);
if (lastAppMessage!=null && "true".equals(lastAppMessage))
lastMessage = true;
}
@@ -545,7 +546,7 @@
the system will generate the message numbers */
//User should set it as a long object.
- Long messageNumberLng = (Long) msgContext.getProperty(Sandesha2ClientAPI.MESSAGE_NUMBER);
+ Long messageNumberLng = (Long) msgContext.getProperty(RMClientConstants.MESSAGE_NUMBER);
long givenMessageNumber = -1;
if (messageNumberLng!=null) {
@@ -576,9 +577,9 @@
//A dummy message is a one which will not be processed as a actual application message.
//The RM handlers will simply let these go.
- String dummyMessageString = (String) msgContext.getOptions().getProperty(Sandesha2ClientAPI.DUMMY_MESSAGE);
+ String dummyMessageString = (String) msgContext.getOptions().getProperty(RMClientConstants.DUMMY_MESSAGE);
boolean dummyMessage = false;
- if (dummyMessageString!=null && Sandesha2ClientAPI.VALUE_TRUE.equals(dummyMessageString))
+ if (dummyMessageString!=null && RMClientAPI.VALUE_TRUE.equals(dummyMessageString))
dummyMessage = true;
//saving the used message number
@@ -627,7 +628,7 @@
Sandesha2Constants.SequenceProperties.TO_EPR);
if (incomingToBean != null) {
String incomingTo = incomingToBean.getValue();
- msgContext.setProperty(Sandesha2ClientAPI.AcksTo, incomingTo);
+ msgContext.setProperty(RMClientConstants.AcksTo, incomingTo);
}
}
@@ -657,7 +658,7 @@
specVersion = specVersionBean.getValue();
} else {
//in the client side, user will set the RM version.
- specVersion = (String) msgContext.getProperty(Sandesha2ClientAPI.RM_SPEC_VERSION);
+ specVersion = (String) msgContext.getProperty(RMClientConstants.RM_SPEC_VERSION);
}
if (specVersion==null)
@@ -690,7 +691,7 @@
String acksTo = null;
if (serviceContext != null)
- acksTo = (String) msgContext.getProperty(Sandesha2ClientAPI.AcksTo);
+ acksTo = (String) msgContext.getProperty(RMClientConstants.AcksTo);
if (msgContext.isServerSide()) {
// we do not set acksTo value to anonymous when the create
@@ -875,7 +876,6 @@
// sending the message once through Sandesha2TransportSender.
AxisEngine engine = new AxisEngine(createSeqMsg.getConfigurationContext());
try {
- log.info ("Sending create seq msg...");
engine.send(createSeqMsg);
} catch (AxisFault e) {
throw new SandeshaException (e.getMessage());
@@ -990,7 +990,7 @@
OperationContext operationContext = msg.getOperationContext();
if (operationContext != null) {
- Object obj = msg.getProperty(Sandesha2ClientAPI.LAST_MESSAGE);
+ Object obj = msg.getProperty(RMClientConstants.LAST_MESSAGE);
if (obj != null && "true".equals(obj)) {
lastMessage = true;
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java Thu Apr 6 03:50:20 2006
@@ -5,7 +5,6 @@
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.engine.AxisEngine;
import org.apache.axis2.util.Utils;
-import org.apache.sandesha2.AcknowledgementManager;
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
@@ -13,6 +12,7 @@
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
import org.apache.sandesha2.storage.beans.SequencePropertyBean;
+import org.apache.sandesha2.util.AcknowledgementManager;
import org.apache.sandesha2.util.FaultManager;
import org.apache.sandesha2.util.RMMsgCreator;
import org.apache.sandesha2.util.SOAPAbstractFactory;
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java Thu Apr 6 03:50:20 2006
@@ -31,9 +31,9 @@
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
-import org.apache.sandesha2.SpecSpecificConstants;
+import org.apache.sandesha2.client.RMClientConstants;
import org.apache.sandesha2.client.RMFaultCallback;
-import org.apache.sandesha2.client.Sandesha2ClientAPI;
+import org.apache.sandesha2.client.RMClientAPI;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.CreateSeqBeanMgr;
@@ -44,6 +44,7 @@
import org.apache.sandesha2.util.RMMsgCreator;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.SequenceManager;
+import org.apache.sandesha2.util.SpecSpecificConstants;
import org.apache.sandesha2.wsrm.Accept;
import org.apache.sandesha2.wsrm.CreateSequence;
import org.apache.sandesha2.wsrm.CreateSequenceResponse;
@@ -125,7 +126,7 @@
//Setting the CreateSequence table entry for the outgoing side.
CreateSeqBean createSeqBean = new CreateSeqBean();
createSeqBean.setSequenceID(offeredSequenceID);
- String outgoingSideInternalSequenceID = SandeshaUtil.getInternalSequenceID(newSequenceId);
+ String outgoingSideInternalSequenceID = SandeshaUtil.getOutgoingSideInternalSequenceID(newSequenceId);
createSeqBean.setInternalSequenceID(outgoingSideInternalSequenceID);
createSeqBean.setCreateSeqMsgID(SandeshaUtil.getUUID()); //this is a dummy value.
@@ -230,11 +231,11 @@
MessageContext msgCtx = rmMsgCtx.getMessageContext();
//adding the RM_FAULT_CALLBACK
- RMFaultCallback faultCallback = (RMFaultCallback) msgCtx.getOptions().getProperty(Sandesha2ClientAPI.RM_FAULT_CALLBACK);
+ RMFaultCallback faultCallback = (RMFaultCallback) msgCtx.getOptions().getProperty(RMClientConstants.RM_FAULT_CALLBACK);
if (faultCallback!=null) {
OperationContext operationContext = msgCtx.getOperationContext();
if (operationContext!=null) {
- operationContext.setProperty(Sandesha2ClientAPI.RM_FAULT_CALLBACK,faultCallback);
+ operationContext.setProperty(RMClientConstants.RM_FAULT_CALLBACK,faultCallback);
}
}
}
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=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java Thu Apr 6 03:50:20 2006
@@ -30,7 +30,6 @@
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
-import org.apache.sandesha2.SpecSpecificConstants;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.CreateSeqBeanMgr;
@@ -45,6 +44,7 @@
import org.apache.sandesha2.util.SOAPAbstractFactory;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.SequenceManager;
+import org.apache.sandesha2.util.SpecSpecificConstants;
import org.apache.sandesha2.wsrm.Accept;
import org.apache.sandesha2.wsrm.AckRequested;
import org.apache.sandesha2.wsrm.CreateSequenceResponse;
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=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java Thu Apr 6 03:50:20 2006
@@ -34,13 +34,11 @@
import org.apache.axis2.util.Utils;
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.client.Sandesha2ClientAPI;
+import org.apache.sandesha2.client.RMClientAPI;
+import org.apache.sandesha2.client.RMClientConstants;
import org.apache.sandesha2.storage.SandeshaStorageException;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
@@ -49,11 +47,14 @@
import org.apache.sandesha2.storage.beans.SenderBean;
import org.apache.sandesha2.storage.beans.SequencePropertyBean;
import org.apache.sandesha2.transport.Sandesha2TransportOutDesc;
+import org.apache.sandesha2.util.AcknowledgementManager;
import org.apache.sandesha2.util.FaultManager;
import org.apache.sandesha2.util.MsgInitializer;
import org.apache.sandesha2.util.RMMsgCreator;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.SequenceManager;
+import org.apache.sandesha2.util.SpecSpecificConstants;
+import org.apache.sandesha2.util.TerminateManager;
import org.apache.sandesha2.wsrm.CreateSequenceResponse;
import org.apache.sandesha2.wsrm.Sequence;
import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
@@ -183,7 +184,7 @@
}
//following will be valid only for the server side, since the obtained int. seq ID is only valid there.
- String responseSideInternalSequenceID = SandeshaUtil.getInternalSequenceID(sequenceID);
+ String responseSideInternalSequenceID = SandeshaUtil.getOutgoingSideInternalSequenceID(sequenceID);
long highestOutMsgNo = 0;
try {
@@ -290,7 +291,7 @@
SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropretyBeanMgr();
String toAddress = rmMsgCtx.getTo().getAddress();
- String sequenceKey = (String) options.getProperty(Sandesha2ClientAPI.SEQUENCE_KEY);
+ String sequenceKey = (String) options.getProperty(RMClientConstants.SEQUENCE_KEY);
String internalSeqenceID = SandeshaUtil.getInternalSequenceID(toAddress,sequenceKey);
String outSequenceID = SandeshaUtil.getSequenceProperty(internalSeqenceID,Sandesha2Constants.SequenceProperties.OUT_SEQUENCE_ID,configurationContext);
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java Thu Apr 6 03:50:20 2006
@@ -36,13 +36,11 @@
public class RMMessageReceiver extends AbstractMessageReceiver {
-
public final void receive(MessageContext messgeCtx) throws AxisFault {
System.out.println("RM MESSSAGE RECEIVER WAS CALLED");
RMMsgContext rmMsgCtx = MsgInitializer.initializeMessage(messgeCtx);
- System.out.println("MsgReceiver got type:" + SandeshaUtil.getMessageTypeString(rmMsgCtx.getMessageType()));
-
+ System.out.println("MsgReceiver got type:" + SandeshaUtil.getMessageTypeString(rmMsgCtx.getMessageType()));
}
}
Added: webservices/sandesha/trunk/src/org/apache/sandesha2/util/AcknowledgementManager.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/AcknowledgementManager.java?rev=391959&view=auto
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/AcknowledgementManager.java (added)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/AcknowledgementManager.java Thu Apr 6 03:50:20 2006
@@ -0,0 +1,385 @@
+/*
+ * Copyright 1999-2004 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.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.OperationContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisOperationFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.sandesha2.RMMsgContext;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.Sandesha2Constants.MessageParts;
+import org.apache.sandesha2.Sandesha2Constants.MessageTypes;
+import org.apache.sandesha2.Sandesha2Constants.SequenceProperties;
+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.SequencePropertyBeanMgr;
+import org.apache.sandesha2.storage.beans.SenderBean;
+import org.apache.sandesha2.storage.beans.SequencePropertyBean;
+import org.apache.sandesha2.transport.Sandesha2TransportOutDesc;
+import org.apache.sandesha2.wsrm.AcknowledgementRange;
+import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
+
+/**
+ * Contains logic for managing acknowledgements.
+ *
+ * @author Chamikara Jayalath <ch...@gmail.com>
+ */
+
+public class AcknowledgementManager {
+
+ private static Log log = LogFactory.getLog(AcknowledgementManager.class);
+
+ /**
+ * Piggybacks any available acks of the same sequence to the given
+ * application message.
+ *
+ * @param applicationRMMsgContext
+ * @throws SandeshaException
+ */
+ public static void piggybackAcksIfPresent(
+ RMMsgContext rmMessageContext) throws SandeshaException {
+
+ ConfigurationContext configurationContext = rmMessageContext.getConfigurationContext();
+ StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configurationContext);
+
+ SenderBeanMgr retransmitterBeanMgr = storageManager.getRetransmitterBeanMgr();
+ SequencePropertyBeanMgr sequencePropertyBeanMgr = storageManager.getSequencePropretyBeanMgr();
+
+ SenderBean findBean = new SenderBean();
+
+ String sequnceID = SandeshaUtil.getSequenceIDFromRMMessage (rmMessageContext);
+
+ findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
+ findBean.setSend(true);
+ findBean.setReSend(false);
+
+ String carrietTo = rmMessageContext.getTo().getAddress();
+
+ Collection collection = retransmitterBeanMgr.find(findBean);
+
+ Iterator it = collection.iterator();
+
+
+ piggybackLoop:
+ while (it.hasNext()) {
+ SenderBean ackBean = (SenderBean) it.next();
+
+ long timeNow = System.currentTimeMillis();
+ if (ackBean.getTimeToSend() > timeNow) {
+ //Piggybacking will happen only if the end of ack interval (timeToSend) is not reached.
+
+ MessageContext ackMsgContext = storageManager
+ .retrieveMessageContext(ackBean.getMessageContextRefKey(),configurationContext);
+
+ //wsa:To has to match for piggybacking.
+ String to = ackMsgContext.getTo().getAddress();
+ if (!carrietTo.equals(to)) {
+ continue piggybackLoop;
+ }
+
+ String ackSequenceID = ackBean.getSequenceID();
+
+ //sequenceID has to match for piggybacking
+ if (!ackSequenceID.equals(sequnceID)) {
+ continue piggybackLoop;
+ }
+
+ //deleting the ack entry.
+ retransmitterBeanMgr.delete(ackBean.getMessageID());
+
+ //Adding the ack to the application message
+ RMMsgContext ackRMMsgContext = MsgInitializer.initializeMessage(ackMsgContext);
+ if (ackRMMsgContext.getMessageType() != Sandesha2Constants.MessageTypes.ACK) {
+ String message = "Invalid ack message entry";
+ log.debug(message);
+ throw new SandeshaException(message);
+ }
+
+ SequenceAcknowledgement sequenceAcknowledgement = (SequenceAcknowledgement) ackRMMsgContext
+ .getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
+ rmMessageContext.setMessagePart(
+ Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT,
+ sequenceAcknowledgement);
+
+ rmMessageContext.addSOAPEnvelope();
+ break piggybackLoop;
+ }
+ }
+ }
+
+ /**this is used to get the acked messages of a sequence. If this is an outgoing message the sequenceIdentifier should
+ * be the internal sequenceID.
+ *
+ * @param sequenceIdentifier
+ * @param outGoingMessage
+ * @return
+ */
+ public static ArrayList getClientCompletedMessagesList (String sequenceID,SequencePropertyBeanMgr seqPropMgr) throws SandeshaException {
+
+ //first trying to get it from the 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 = seqPropMgr.retrieve(internalSequenceID,Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES);
+
+ if (completedMessagesBean==null)
+ 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.getArrayListFromMsgsString (completedMessagesBean.getValue());
+ } else {
+ String message = "Completed messages bean is null, for the sequence " + sequenceID;
+ throw new SandeshaException (message);
+ }
+
+ return completedMsgList;
+ }
+
+ public static RMMsgContext generateAckMessage (RMMsgContext referenceRMMessage, String sequenceID)throws SandeshaException {
+
+ MessageContext referenceMsg = referenceRMMessage.getMessageContext();
+
+ ConfigurationContext configurationContext = referenceRMMessage.getMessageContext().getConfigurationContext();
+ StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configurationContext);
+ SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropretyBeanMgr();
+
+ //Setting the ack depending on AcksTo.
+ SequencePropertyBean acksToBean = seqPropMgr.retrieve(sequenceID,
+ Sandesha2Constants.SequenceProperties.ACKS_TO_EPR);
+
+ EndpointReference acksTo = new EndpointReference(acksToBean.getValue());
+ String acksToStr = acksTo.getAddress();
+
+ if (acksToStr == null)
+ throw new SandeshaException(
+ "acksToStr Seqeunce property is not set correctly");
+
+ AxisOperation ackOperation = null;
+
+ try {
+ ackOperation = AxisOperationFactory.getOperationDescription(AxisOperationFactory.MEP_URI_IN_ONLY);
+ } catch (AxisFault e) {
+ throw new SandeshaException("Could not create the Operation");
+ }
+
+ AxisOperation rmMsgOperation = referenceRMMessage.getMessageContext()
+ .getAxisOperation();
+ if (rmMsgOperation != null) {
+ ArrayList outFlow = rmMsgOperation.getPhasesOutFlow();
+ if (outFlow != null) {
+ ackOperation.setPhasesOutFlow(outFlow);
+ ackOperation.setPhasesOutFaultFlow(outFlow);
+ }
+ }
+
+ MessageContext ackMsgCtx = SandeshaUtil.createNewRelatedMessageContext(
+ referenceRMMessage, ackOperation);
+ ackMsgCtx.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,
+ referenceMsg.getProperty(AddressingConstants.WS_ADDRESSING_VERSION)); //TODO do this in the RMMsgCreator
+
+
+ ackMsgCtx.setProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE,"true");
+
+ RMMsgContext ackRMMsgCtx = MsgInitializer.initializeMessage(ackMsgCtx);
+ ackRMMsgCtx.setRMNamespaceValue(referenceRMMessage.getRMNamespaceValue());
+
+ ackMsgCtx.setMessageID(SandeshaUtil.getUUID());
+
+ SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil
+ .getSOAPVersion(referenceMsg.getEnvelope()));
+
+ //Setting new envelope
+ SOAPEnvelope envelope = factory.getDefaultEnvelope();
+ try {
+ ackMsgCtx.setEnvelope(envelope);
+ } catch (AxisFault e3) {
+ throw new SandeshaException(e3.getMessage());
+ }
+
+ ackMsgCtx.setTo(acksTo);
+
+ //adding the SequenceAcknowledgement part.
+ RMMsgCreator.addAckMessage(ackRMMsgCtx, sequenceID);
+
+ ackMsgCtx.setProperty(MessageContext.TRANSPORT_IN,null);
+
+ String addressingNamespaceURI = SandeshaUtil.getSequenceProperty(sequenceID,Sandesha2Constants.SequenceProperties.ADDRESSING_NAMESPACE_VALUE,configurationContext);
+ String anonymousURI = SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespaceURI);
+
+ if (anonymousURI.equals(acksTo.getAddress())) {
+
+// AxisEngine engine = new AxisEngine(ackRMMsgCtx.getMessageContext()
+// .getConfigurationContext());
+
+ //setting CONTEXT_WRITTEN since acksto is anonymous
+ if (referenceRMMessage.getMessageContext().getOperationContext() == null) {
+ //operation context will be null when doing in a GLOBAL
+ // handler.
+ try {
+ AxisOperation op = AxisOperationFactory
+ .getAxisOperation(AxisOperationFactory.MEP_CONSTANT_IN_OUT);
+ OperationContext opCtx = new OperationContext(op);
+ referenceRMMessage.getMessageContext().setAxisOperation(op);
+ referenceRMMessage.getMessageContext().setOperationContext(opCtx);
+ } catch (AxisFault e2) {
+ throw new SandeshaException(e2.getMessage());
+ }
+ }
+
+ referenceRMMessage.getMessageContext().getOperationContext().setProperty(
+ org.apache.axis2.Constants.RESPONSE_WRITTEN,
+ Constants.VALUE_TRUE);
+
+ referenceRMMessage.getMessageContext().setProperty(
+ Sandesha2Constants.ACK_WRITTEN, "true");
+
+ ackRMMsgCtx.getMessageContext().setServerSide(true);
+ return ackRMMsgCtx;
+
+ } else {
+
+ Transaction asyncAckTransaction = storageManager.getTransaction();
+
+ SenderBeanMgr retransmitterBeanMgr = storageManager
+ .getRetransmitterBeanMgr();
+
+ String key = SandeshaUtil.getUUID();
+
+ SenderBean ackBean = new SenderBean();
+ ackBean.setMessageContextRefKey(key);
+ ackBean.setMessageID(ackMsgCtx.getMessageID());
+ ackBean.setReSend(false);
+ ackBean.setSequenceID(sequenceID);
+
+ //this will be set to true in the sender.
+ ackBean.setSend(true);
+
+ ackMsgCtx.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING,
+ Sandesha2Constants.VALUE_FALSE);
+
+ ackBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
+ long ackInterval = SandeshaUtil.getPropretyBean(referenceMsg).getAcknowledgementInaterval();
+
+ //Ack will be sent as stand alone, only after the retransmitter
+ // interval.
+ long timeToSend = System.currentTimeMillis() + ackInterval;
+
+ //removing old acks.
+ SenderBean findBean = new SenderBean();
+ findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
+
+ //this will be set to true in the sandesha2TransportSender.
+ findBean.setSend(true);
+ findBean.setReSend(false);
+ Collection coll = retransmitterBeanMgr.find(findBean);
+ Iterator it = coll.iterator();
+
+ if (it.hasNext()) {
+ SenderBean oldAckBean = (SenderBean) it.next();
+ timeToSend = oldAckBean.getTimeToSend(); //If there is an old ack. This ack will be sent in the old timeToSend.
+ retransmitterBeanMgr.delete(oldAckBean.getMessageID());
+ }
+
+ ackBean.setTimeToSend(timeToSend);
+ storageManager.storeMessageContext(key,ackMsgCtx);
+
+ //inserting the new ack.
+ retransmitterBeanMgr.insert(ackBean);
+ asyncAckTransaction.commit();
+
+ //passing the message through sandesha2sender
+ ackMsgCtx.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC,ackMsgCtx.getTransportOut());
+ ackMsgCtx.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE,Sandesha2Constants.VALUE_TRUE);
+ ackMsgCtx.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY,key);
+ ackMsgCtx.setTransportOut(new Sandesha2TransportOutDesc ());
+ RMMsgContext ackRMMessageCtx = MsgInitializer.initializeMessage(ackMsgCtx);
+
+ SandeshaUtil.startSenderForTheSequence(configurationContext,sequenceID);
+ referenceMsg.pause();
+ return ackRMMessageCtx;
+ }
+ }
+
+ public static boolean verifySequenceCompletion(Iterator ackRangesIterator,
+ long lastMessageNo) {
+ HashMap startMap = new HashMap();
+
+ while (ackRangesIterator.hasNext()) {
+ AcknowledgementRange temp = (AcknowledgementRange) ackRangesIterator
+ .next();
+ startMap.put(new Long(temp.getLowerValue()), temp);
+ }
+
+ long start = 1;
+ boolean loop = true;
+ while (loop) {
+ AcknowledgementRange temp = (AcknowledgementRange) startMap
+ .get(new Long(start));
+ if (temp == null) {
+ loop = false;
+ continue;
+ }
+
+ if (temp.getUpperValue() >= lastMessageNo)
+ return true;
+
+ start = temp.getUpperValue() + 1;
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
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=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java Thu Apr 6 03:50:20 2006
@@ -40,9 +40,7 @@
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.FaultData;
import org.apache.sandesha2.RMMsgContext;
-import org.apache.sandesha2.SOAPFaultEnvelopeCreator;
import org.apache.sandesha2.SandeshaException;
-import org.apache.sandesha2.SpecSpecificConstants;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.beanmanagers.CreateSeqBeanMgr;
import org.apache.sandesha2.storage.beanmanagers.NextMsgBeanMgr;
@@ -69,7 +67,6 @@
public FaultManager() {
}
-
/**
* Check weather the CreateSequence should be refused and generate the fault if it should.
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/util/MsgInitializer.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/MsgInitializer.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/MsgInitializer.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/MsgInitializer.java Thu Apr 6 03:50:20 2006
@@ -23,7 +23,6 @@
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.SandeshaException;
-import org.apache.sandesha2.SpecSpecificConstants;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
import org.apache.sandesha2.storage.beans.SequencePropertyBean;
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/RMMsgCreator.java Thu Apr 6 03:50:20 2006
@@ -23,8 +23,9 @@
import javax.xml.namespace.QName;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.AxisFault;
-import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.context.ConfigurationContext;
@@ -38,9 +39,7 @@
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
-import org.apache.sandesha2.SpecSpecificConstants;
-import org.apache.sandesha2.client.Sandesha2ClientAPI;
-import org.apache.sandesha2.msgprocessors.TerminateSeqResponseMsgProcessor;
+import org.apache.sandesha2.client.RMClientConstants;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
import org.apache.sandesha2.storage.beans.SequencePropertyBean;
@@ -55,13 +54,10 @@
import org.apache.sandesha2.wsrm.CreateSequenceResponse;
import org.apache.sandesha2.wsrm.IOMRMElement;
import org.apache.sandesha2.wsrm.Identifier;
-import org.apache.sandesha2.wsrm.Sequence;
import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
import org.apache.sandesha2.wsrm.SequenceOffer;
import org.apache.sandesha2.wsrm.TerminateSequence;
import org.apache.sandesha2.wsrm.TerminateSequenceResponse;
-import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPFactory;
/**
* Used to create new RM messages.
@@ -282,7 +278,7 @@
.getOperationContext();
if (operationcontext != null) {
String offeredSequence = (String) applicationMsgContext
- .getProperty(Sandesha2ClientAPI.OFFERED_SEQUENCE_ID);
+ .getProperty(RMClientConstants.OFFERED_SEQUENCE_ID);
if (offeredSequence != null && !"".equals(offeredSequence)) {
SequenceOffer offerPart = new SequenceOffer(factory,rmNamespaceValue);
Identifier identifier = new Identifier(factory,rmNamespaceValue);
Added: webservices/sandesha/trunk/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java?rev=391959&view=auto
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java (added)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java Thu Apr 6 03:50:20 2006
@@ -0,0 +1,214 @@
+/*
+ * Copyright 1999-2004 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.util;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axiom.om.OMConstants;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.SOAPFault;
+import org.apache.axiom.soap.SOAPFaultCode;
+import org.apache.axiom.soap.SOAPFaultDetail;
+import org.apache.axiom.soap.SOAPFaultReason;
+import org.apache.axiom.soap.SOAPFaultSubCode;
+import org.apache.axiom.soap.SOAPFaultText;
+import org.apache.axiom.soap.SOAPFaultValue;
+import org.apache.sandesha2.FaultData;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.Sandesha2Constants.SOAPFaults;
+import org.apache.sandesha2.Sandesha2Constants.SOAPVersion;
+import org.apache.sandesha2.Sandesha2Constants.SOAPFaults.FaultType;
+import org.apache.sandesha2.wsrm.FaultCode;
+import org.apache.sandesha2.wsrm.SequenceFault;
+
+/**
+ * Used to create an SOAP Envelope for a RM Related Fault.
+ * Support both SOAP 1.1 and SOAP 1.2 encoding.
+ *
+ * @author Sanka Samaranayaka <ss...@gmail.com>
+ * @author Chamikara Jayalath <ch...@gmail.com>
+ */
+
+public class SOAPFaultEnvelopeCreator {
+
+ /**
+ * Adding the SOAP Fault Envelope.
+ *
+ * @param faultMsgContext
+ * @param SOAPVersion
+ * @param faultData
+ * @throws SandeshaException
+ */
+ public static void addSOAPFaultEnvelope(MessageContext faultMsgContext,
+ int SOAPVersion, FaultData faultData, String rmNamespaceValue) throws SandeshaException {
+
+ SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SOAPVersion);
+ SOAPEnvelope env = factory.getDefaultFaultEnvelope();
+
+ try {
+ faultMsgContext.setEnvelope(env);
+ } catch (AxisFault e) {
+ throw new SandeshaException(e.getMessage());
+ }
+
+ if (SOAPVersion == Sandesha2Constants.SOAPVersion.v1_1)
+ doSOAP11Encoding(faultMsgContext, faultData, rmNamespaceValue);
+ else
+ doSOAP12Encoding(faultMsgContext, faultData, rmNamespaceValue);
+
+ }
+
+ /**
+ * To find out weather this is a sequence fault. These faults are handeled differently
+ * accodting to the RM spec.
+ *
+ * @param faultData
+ * @return
+ */
+ private static boolean isSequenceFault(FaultData faultData) {
+
+ boolean sequenceFault = false;
+
+ int faultType = faultData.getType();
+
+ if (faultType <= 0)
+ return false;
+
+ if (faultType == Sandesha2Constants.SOAPFaults.FaultType.CREATE_SEQUENCE_REFUSED)
+ sequenceFault = true;
+
+ if (faultType == Sandesha2Constants.SOAPFaults.FaultType.UNKNOWN_SEQUENCE)
+ sequenceFault = true;
+
+ return sequenceFault;
+
+ }
+
+ /**
+ * Adding the SequenceFault header. Only for Sequence faults.
+ *
+ * @param faultMessageContext
+ * @param faultData
+ * @param factory
+ */
+ private static void addSequenceFaultHeader(
+ MessageContext faultMessageContext, FaultData faultData,
+ SOAPFactory factory, String rmNamespaceValue) throws SandeshaException {
+
+ SequenceFault sequenceFault = new SequenceFault(factory, rmNamespaceValue);
+
+ FaultCode faultCode = new FaultCode(factory, rmNamespaceValue);
+ faultCode.setFaultCode(faultData.getSubcode());
+ sequenceFault.setFaultCode(faultCode);
+ }
+
+ /**
+ * Building the envelope with SOAP 1.1
+ *
+ * @param faultMsgContext
+ * @param data
+ * @throws SandeshaException
+ */
+ private static void doSOAP11Encoding(MessageContext faultMsgContext,
+ FaultData data, String rmNamespaceValue) throws SandeshaException {
+
+ SOAPEnvelope faultMsgEnvelope = faultMsgContext.getEnvelope();
+ if (faultMsgEnvelope == null)
+ throw new SandeshaException("SOAP Envelope is null");
+
+ SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil
+ .getSOAPVersion(faultMsgEnvelope));
+
+ SOAPFault fault = faultMsgEnvelope.getBody().getFault();
+ SOAPFaultCode faultCode = fault.getCode();
+
+ if (isSequenceFault(data)) {
+ faultCode.setText(data.getCode());
+ } else {
+ faultCode.setText(data.getSubcode());
+ }
+
+ SOAPFaultReason faultReason = fault.getReason();
+
+ OMNamespace namespace = factory.createOMNamespace(
+ OMConstants.XMLNS_URI, OMConstants.XMLNS_PREFIX);
+ faultReason.getSOAPFaultText("en").addAttribute("lang", "en", namespace);
+
+ faultReason.setText(data.getReason());
+ faultCode.getValue().setText(data.getSubcode());
+ faultReason.getSOAPFaultText("en").setText(data.getReason());
+
+ //SequenceFault header is added only for SOAP 1.1
+ if (isSequenceFault(data))
+ addSequenceFaultHeader(faultMsgContext, data, factory, rmNamespaceValue);
+
+ }
+
+
+ /**
+ * Building the envelope with SOAP 1.2
+ *
+ * @param faultMsgContext
+ * @param data
+ * @throws SandeshaException
+ */
+ private static void doSOAP12Encoding(MessageContext faultMsgContext,
+ FaultData data, String rmNamespaceValue) throws SandeshaException {
+
+ SOAPEnvelope faultEnvelope = faultMsgContext.getEnvelope();
+ if (faultEnvelope == null)
+ throw new SandeshaException("SOAP Envelope is null");
+
+ SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil
+ .getSOAPVersion(faultEnvelope));
+
+ SOAPFault fault = faultEnvelope.getBody().getFault();
+ if (fault == null)
+ throw new SandeshaException("Fault part is null");
+
+ SOAPFaultCode faultCode = fault.getCode();
+ SOAPFaultValue codeValue = faultCode.getValue();
+ codeValue.setText(data.getCode());
+
+ SOAPFaultSubCode faultSubCode = factory
+ .createSOAPFaultSubCode(faultCode);
+ SOAPFaultValue subCodeValue = factory
+ .createSOAPFaultValue(faultSubCode);
+ subCodeValue.setText(data.getSubcode());
+
+ SOAPFaultReason faultReason = fault.getReason();
+ SOAPFaultText faultText = faultReason.getSOAPFaultText("en");
+ faultText.setText(data.getReason());
+
+ SOAPFaultDetail faultDetail = fault.getDetail();
+
+ OMElement detailElement = data.getDetail();
+
+ if (detailElement != null)
+ faultDetail.addChild(detailElement);
+
+
+ faultMsgContext.setWSAAction(AddressingConstants.Final.WSA_FAULT_ACTION);
+ }
+
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org