You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by ch...@apache.org on 2006/04/06 12:50:26 UTC
svn commit: r391959 [2/2] - in
/webservices/sandesha/trunk/src/org/apache/sandesha2: ./ client/
client/reports/ handlers/ msgprocessors/ msgreceivers/ util/ workers/ wsrm/
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=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java Thu Apr 6 03:50:20 2006
@@ -91,12 +91,6 @@
// private static Hashtable storedMsgContexts = new Hashtable();
- private static StorageManager storageManager = null;
-
- private static Sender sender = new Sender();
-
- private static InOrderInvoker invoker = new InOrderInvoker();
-
private static Log log = LogFactory.getLog(SandeshaUtil.class);
/**
@@ -214,21 +208,41 @@
}
public static void startSenderForTheSequence(ConfigurationContext context, String sequenceID) {
- sender.runSenderForTheSequence(context, sequenceID);
+
+ Sender sender = (Sender) context.getProperty(Sandesha2Constants.SENDER);
+
+ if (sender!=null)
+ sender.runSenderForTheSequence(context, sequenceID);
+ else {
+ sender = new Sender ();
+ context.setProperty(Sandesha2Constants.SENDER,sender);
+ sender.runSenderForTheSequence(context, sequenceID);
+ }
}
public static void stopSenderForTheSequence(String sequenceID) {
- sender.stopSenderForTheSequence(sequenceID);
+// sender.stopSenderForTheSequence(sequenceID);
}
public static void startInvokerForTheSequence(ConfigurationContext context, String sequenceID) {
- if (!invoker.isInvokerStarted()) {
- invoker.runInvokerForTheSequence(context, sequenceID);
+// if (!invoker.isInvokerStarted()) {
+// invoker.runInvokerForTheSequence(context, sequenceID);
+// }
+
+ InOrderInvoker invoker = (InOrderInvoker) context.getProperty(Sandesha2Constants.INVOKER);
+ if (invoker!=null)
+ invoker.runInvokerForTheSequence(context,sequenceID);
+ else {
+ invoker = new InOrderInvoker ();
+ context.setProperty(Sandesha2Constants.INVOKER,invoker);
+ invoker.runInvokerForTheSequence(context,sequenceID);
}
+
+
}
public static void stopInvokerForTheSequence(String sequenceID) {
- invoker.stopInvokerForTheSequence(sequenceID);
+// invoker.stopInvokerForTheSequence(sequenceID);
}
public static String getMessageTypeString(int messageType) {
@@ -310,14 +324,12 @@
*/
public static StorageManager getSandeshaStorageManager(ConfigurationContext context) throws SandeshaException {
+ StorageManager storageManager = (StorageManager) context.getProperty(Sandesha2Constants.STORAGE_MANAGER);
if (storageManager != null)
return storageManager;
String srotageManagerClassStr = PropertyManager.getInstance().getStorageManagerClass();
- if (storageManager != null)
- return storageManager;
-
try {
Class c = Class.forName(srotageManagerClassStr);
Class configContextClass = Class.forName(context.getClass().getName());
@@ -329,8 +341,9 @@
StorageManager mgr = (StorageManager) obj;
storageManager = mgr;
+ context.setProperty(Sandesha2Constants.STORAGE_MANAGER,storageManager);
return storageManager;
-
+
} catch (Exception e) {
String message = "Cannot load the given storage manager";
log.error(message);
@@ -621,7 +634,7 @@
return Sandesha2Constants.INTERNAL_SEQUENCE_PREFIX + ":" + to + ":" + sequenceKey;
}
- public static String getInternalSequenceID(String sequenceID) {
+ public static String getOutgoingSideInternalSequenceID(String sequenceID) {
return Sandesha2Constants.INTERNAL_SEQUENCE_PREFIX + ":" + sequenceID;
}
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=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SequenceManager.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SequenceManager.java Thu Apr 6 03:50:20 2006
@@ -27,9 +27,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.Sandesha2Constants.WSA;
-import org.apache.sandesha2.client.Sandesha2ClientAPI;
+import org.apache.sandesha2.client.RMClientAPI;
+import org.apache.sandesha2.client.RMClientConstants;
import org.apache.sandesha2.policy.RMPolicyBean;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
@@ -207,7 +207,7 @@
EndpointReference toEPR = firstAplicationMsgCtx.getTo();
String acksTo = (String) firstAplicationMsgCtx
- .getProperty(Sandesha2ClientAPI.AcksTo);
+ .getProperty(RMClientConstants.AcksTo);
if (toEPR == null) {
String message = "WS-Addressing To is null";
@@ -323,7 +323,7 @@
String transportInProtocol = messageContext.getOptions().getTransportInProtocol();
- String acksTo = (String) messageContext.getProperty(Sandesha2ClientAPI.AcksTo);
+ String acksTo = (String) messageContext.getProperty(RMClientConstants.AcksTo);
String mep = messageContext.getAxisOperation().getMessageExchangePattern();
boolean startListnerForAsyncAcks = false;
Added: webservices/sandesha/trunk/src/org/apache/sandesha2/util/SpecSpecificConstants.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/SpecSpecificConstants.java?rev=391959&view=auto
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SpecSpecificConstants.java (added)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SpecSpecificConstants.java Thu Apr 6 03:50:20 2006
@@ -0,0 +1,222 @@
+package org.apache.sandesha2.util;
+
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.Sandesha2Constants.SPEC_2005_02;
+import org.apache.sandesha2.Sandesha2Constants.SPEC_2005_10;
+import org.apache.sandesha2.Sandesha2Constants.SPEC_VERSIONS;
+import org.apache.sandesha2.Sandesha2Constants.SPEC_2005_02.Actions;
+
+public class SpecSpecificConstants {
+
+ private static String unknownSpecErrorMessage = "Unknown specification version";
+
+ public static String getSpecVersionString (String namespaceValue) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_2005_02.NS_URI.equals(namespaceValue))
+ return Sandesha2Constants.SPEC_VERSIONS.WSRM;
+ else if (Sandesha2Constants.SPEC_2005_10.NS_URI.equals(namespaceValue))
+ return Sandesha2Constants.SPEC_VERSIONS.WSRX;
+ else
+ throw new SandeshaException ("Unknows rm namespace value");
+ }
+
+ public static String getRMNamespaceValue (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_02.NS_URI;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.NS_URI;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getCreateSequenceAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_02.Actions.ACTION_CREATE_SEQUENCE;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.ACTION_CREATE_SEQUENCE;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getCreateSequenceResponseAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_02.Actions.ACTION_CREATE_SEQUENCE_RESPONSE;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.ACTION_CREATE_SEQUENCE_RESPONSE;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getTerminateSequenceAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_02.Actions.ACTION_TERMINATE_SEQUENCE;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.ACTION_TERMINATE_SEQUENCE;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getTerminateSequenceResponseAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.ACTION_TERMINATE_SEQUENCE_RESPONSE;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getCloseSequenceAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ throw new SandeshaException ("This rm spec version does not define a sequenceClose action");
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.ACTION_CLOSE_SEQUENCE;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getCloseSequenceResponseAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ throw new SandeshaException ("This rm spec version does not define a sequenceClose action");
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.ACTION_CLOSE_SEQUENCE_RESPONSE;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getAckRequestAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ throw new SandeshaException ("this spec version does not define a ackRequest action");
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.ACTION_ACK_REQUEST;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getSequenceAcknowledgementAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_02.Actions.ACTION_SEQUENCE_ACKNOWLEDGEMENT;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.ACTION_SEQUENCE_ACKNOWLEDGEMENT;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getCreateSequenceSOAPAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_02.Actions.SOAP_ACTION_CREATE_SEQUENCE;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.SOAP_ACTION_CREATE_SEQUENCE;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getCreateSequenceResponseSOAPAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_02.Actions.SOAP_ACTION_CREATE_SEQUENCE_RESPONSE;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.SOAP_ACTION_CREATE_SEQUENCE_RESPONSE;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getTerminateSequenceSOAPAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_02.Actions.SOAP_ACTION_TERMINATE_SEQUENCE;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.SOAP_ACTION_TERMINATE_SEQUENCE;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getTerminateSequenceResponseSOAPAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.SOAP_ACTION_TERMINATE_SEQUENCE_RESPONSE;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getAckRequestSOAPAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ throw new SandeshaException ("this spec version does not define a ackRequest SOAP action");
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.SOAP_ACTION_ACK_REQUEST;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getSequenceAcknowledgementSOAPAction (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_02.Actions.SOAP_ACTION_SEQUENCE_ACKNOWLEDGEMENT;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return Sandesha2Constants.SPEC_2005_10.Actions.SOAP_ACTION_SEQUENCE_ACKNOWLEDGEMENT;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static boolean isTerminateSequenceResponseRequired (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return false;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return true;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static boolean isLastMessageIndicatorRequired (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return true;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return false;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static boolean isAckFinalAllowed (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return false;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return true;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static boolean isAckNoneAllowed (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return false;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return true;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static boolean isSequenceClosingAllowed (String specVersion) throws SandeshaException {
+ if (Sandesha2Constants.SPEC_VERSIONS.WSRM.equals(specVersion))
+ return false;
+ else if (Sandesha2Constants.SPEC_VERSIONS.WSRX.equals(specVersion))
+ return true;
+ else
+ throw new SandeshaException (unknownSpecErrorMessage);
+ }
+
+ public static String getDefaultSpecVersion () {
+ return Sandesha2Constants.SPEC_VERSIONS.WSRM;
+ }
+
+ public static String getAddressingAnonymousURI (String addressingNSURI) throws SandeshaException {
+ if (AddressingConstants.Submission.WSA_NAMESPACE.equals(addressingNSURI))
+ return AddressingConstants.Submission.WSA_ANONYMOUS_URL;
+ else if (AddressingConstants.Final.WSA_NAMESPACE.equals(addressingNSURI))
+ return AddressingConstants.Final.WSA_ANONYMOUS_URL;
+ else
+ throw new SandeshaException ("Unknown addressing version");
+ }
+
+ public static String getAddressingFaultAction (String addressingNSURI) throws SandeshaException {
+ if (AddressingConstants.Submission.WSA_NAMESPACE.equals(addressingNSURI))
+ return "http://schemas.xmlsoap.org/ws/2004/08/addressing/fault"; //this is not available in addressing constants )-:
+ else if (AddressingConstants.Final.WSA_NAMESPACE.equals(addressingNSURI))
+ return AddressingConstants.Final.WSA_FAULT_ACTION;
+ else
+ throw new SandeshaException ("Unknown addressing version");
+ }
+
+}
Added: webservices/sandesha/trunk/src/org/apache/sandesha2/util/TerminateManager.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/TerminateManager.java?rev=391959&view=auto
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/TerminateManager.java (added)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/TerminateManager.java Thu Apr 6 03:50:20 2006
@@ -0,0 +1,449 @@
+/*
+ * 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.axis2.AxisFault;
+import org.apache.axis2.addressing.EndpointReference;
+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.RMMsgContext;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.Sandesha2Constants.SequenceProperties;
+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.InvokerBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.NextMsgBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
+import org.apache.sandesha2.storage.beans.CreateSeqBean;
+import org.apache.sandesha2.storage.beans.InvokerBean;
+import org.apache.sandesha2.storage.beans.NextMsgBean;
+import org.apache.sandesha2.storage.beans.SenderBean;
+import org.apache.sandesha2.storage.beans.SequencePropertyBean;
+import org.apache.sandesha2.transport.Sandesha2TransportOutDesc;
+
+/**
+ * Contains logic to remove all the storad data of a sequence.
+ * Methods of this are called by sending side and the receiving side when appropriate
+ *
+ * @author Chamikara Jayalath <ch...@gmail.com>
+ */
+
+public class TerminateManager {
+
+ private static Log log = LogFactory.getLog(TerminateManager.class);
+
+ private static String CLEANED_ON_TERMINATE_MSG = "CleanedOnTerminateMsg";
+ private static String CLEANED_AFTER_INVOCATION = "CleanedAfterInvocation";
+
+ public static HashMap receivingSideCleanMap = new HashMap ();
+ /**
+ * Called by the receiving side to remove data related to a sequence.
+ * e.g. After sending the TerminateSequence message. Calling this methods will complete all
+ * the data if InOrder invocation is not sequired.
+ *
+ * @param configContext
+ * @param sequenceID
+ * @throws SandeshaException
+ */
+ public static void cleanReceivingSideOnTerminateMessage (ConfigurationContext configContext, String sequenceID) throws SandeshaException {
+ StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configContext);
+
+ //clean senderMap
+
+ boolean inOrderInvocation = PropertyManager.getInstance().isInOrderInvocation();
+ //SandeshaPropertyBean propertyBean = (SandeshaPropertyBean) msgContext.getParameter(Sandesha2Constants.SANDESHA2_POLICY_BEAN);
+
+
+ if(!inOrderInvocation) {
+ //there is no invoking by Sandesha2. So clean invocations storages.
+ cleanReceivingSideAfterInvocation(configContext,sequenceID);
+ }
+
+ String cleanStatus = (String) receivingSideCleanMap.get(sequenceID);
+ if (cleanStatus!=null && CLEANED_AFTER_INVOCATION.equals(cleanStatus))
+ completeTerminationOfReceivingSide(configContext,sequenceID);
+ else {
+ receivingSideCleanMap.put(sequenceID,CLEANED_ON_TERMINATE_MSG);
+ }
+ }
+
+ /**
+ * When InOrder invocation is anabled this had to be called to clean the data left by the
+ * above method. This had to be called after the Invocation of the Last Message.
+ *
+ * @param configContext
+ * @param sequenceID
+ * @throws SandeshaException
+ */
+ public static void cleanReceivingSideAfterInvocation (ConfigurationContext configContext, String sequenceID) throws SandeshaException {
+ StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configContext);
+ InvokerBeanMgr storageMapBeanMgr = storageManager.getStorageMapBeanMgr();
+
+ //removing storageMap entries
+ InvokerBean findStorageMapBean = new InvokerBean ();
+ findStorageMapBean.setSequenceID(sequenceID);
+ findStorageMapBean.setInvoked(true);
+ Collection collection = storageMapBeanMgr.find(findStorageMapBean);
+ Iterator iterator = collection.iterator();
+ while (iterator.hasNext()) {
+ InvokerBean storageMapBean = (InvokerBean) iterator.next();
+ storageMapBeanMgr.delete(storageMapBean.getMessageContextRefKey());
+ }
+
+ String cleanStatus = (String) receivingSideCleanMap.get(sequenceID);
+ if (cleanStatus!=null && CLEANED_ON_TERMINATE_MSG.equals(cleanStatus))
+ completeTerminationOfReceivingSide(configContext,sequenceID);
+ else {
+ receivingSideCleanMap.put(sequenceID,CLEANED_AFTER_INVOCATION);
+ }
+ }
+
+ /**
+ * This has to be called by the lastly invocated one of the above two methods.
+ *
+ */
+ private static void completeTerminationOfReceivingSide (ConfigurationContext configContext, String sequenceID) throws SandeshaException {
+ StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configContext);
+ InvokerBeanMgr storageMapBeanMgr = storageManager.getStorageMapBeanMgr();
+ NextMsgBeanMgr nextMsgBeanMgr = storageManager.getNextMsgBeanMgr();
+
+ //removing nextMsgMgr entries
+ NextMsgBean findNextMsgBean = new NextMsgBean ();
+ findNextMsgBean.setSequenceID(sequenceID);
+ Collection collection = nextMsgBeanMgr.find(findNextMsgBean);
+ Iterator iterator = collection.iterator();
+ while (iterator.hasNext()) {
+ NextMsgBean nextMsgBean = (NextMsgBean) iterator.next();
+ //nextMsgBeanMgr.delete(nextMsgBean.getSequenceID());
+ }
+
+ removeReceivingSideProperties(configContext,sequenceID);
+ }
+
+ private static void removeReceivingSideProperties (ConfigurationContext configContext, String sequenceID) throws SandeshaException {
+ StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configContext);
+ SequencePropertyBeanMgr sequencePropertyBeanMgr = storageManager.getSequencePropretyBeanMgr();
+ SequencePropertyBean allSequenceBean = sequencePropertyBeanMgr.retrieve(Sandesha2Constants.SequenceProperties.ALL_SEQUENCES,Sandesha2Constants.SequenceProperties.INCOMING_SEQUENCE_LIST);
+
+ if (allSequenceBean!=null) {
+ log.debug("AllSequence bean is null");
+
+ ArrayList allSequenceList = SandeshaUtil.getArrayListFromString(allSequenceBean.getValue());
+ allSequenceList.remove(sequenceID);
+
+ //updating
+ allSequenceBean.setValue(allSequenceList.toString());
+ sequencePropertyBeanMgr.update(allSequenceBean);
+ }
+ }
+
+ private static boolean isRequiredForResponseSide (String name) {
+ if (name==null && name.equals(Sandesha2Constants.SequenceProperties.LAST_OUT_MESSAGE_NO))
+ return false;
+
+ if (name.equals(Sandesha2Constants.SequenceProperties.LAST_OUT_MESSAGE_NO))
+ return false;
+
+ return false;
+ }
+
+
+ /**
+ * This is called by the sending side to clean data related to a sequence.
+ * e.g. after sending the TerminateSequence message.
+ *
+ * @param configContext
+ * @param sequenceID
+ * @throws SandeshaException
+ */
+ public static void terminateSendingSide (ConfigurationContext configContext, String sequenceID,boolean serverSide) throws SandeshaException {
+
+ 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.
+
+ //SequencePropertyBean outGoingAcksToBean = sequencePropertyBeanMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.OUT_SEQ_ACKSTO);
+
+ boolean stopListnerForAsyncAcks = false;
+ SequencePropertyBean internalSequenceBean = sequencePropertyBeanMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
+ if (internalSequenceBean!=null) {
+ String internalSequenceID = internalSequenceBean.getValue();
+ SequencePropertyBean acksToBean = sequencePropertyBeanMgr.retrieve(internalSequenceID,Sandesha2Constants.SequenceProperties.ACKS_TO_EPR);
+
+ String addressingNamespace = SandeshaUtil.getSequenceProperty(internalSequenceID,Sandesha2Constants.SequenceProperties.ADDRESSING_NAMESPACE_VALUE,configContext);
+ String anonymousURI = SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespace);
+
+ if (acksToBean!=null) {
+ String acksTo = acksToBean.getValue();
+ if (acksTo!=null && !anonymousURI.equals(acksTo)) {
+ stopListnerForAsyncAcks = true;
+ }
+ }
+ }
+ }
+
+ SequencePropertyBean internalSequenceBean = sequencePropertyBeanMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
+ if (internalSequenceBean==null)
+ throw new SandeshaException ("TempSequence entry not found");
+
+ String internalSequenceId = (String) internalSequenceBean.getValue();
+
+ //removing retransmitterMgr entries
+ //SenderBean findRetransmitterBean = new SenderBean ();
+ //findRetransmitterBean.setInternalSequenceID(internalSequenceId);
+ Collection collection = retransmitterBeanMgr.find(internalSequenceId);
+ Iterator iterator = collection.iterator();
+ while (iterator.hasNext()) {
+ SenderBean retransmitterBean = (SenderBean) iterator.next();
+ retransmitterBeanMgr.delete(retransmitterBean.getMessageID());
+ }
+
+ //removing the createSeqMgrEntry
+ CreateSeqBean findCreateSequenceBean = new CreateSeqBean ();
+ findCreateSequenceBean.setInternalSequenceID(internalSequenceId);
+ collection = createSeqBeanMgr.find(findCreateSequenceBean);
+ iterator = collection.iterator();
+ while (iterator.hasNext()) {
+ CreateSeqBean createSeqBean = (CreateSeqBean) iterator.next();
+ createSeqBeanMgr.delete(createSeqBean.getCreateSeqMsgID());
+ }
+
+ //removing sequence properties
+ SequencePropertyBean findSequencePropertyBean1 = new SequencePropertyBean ();
+ findSequencePropertyBean1.setSequenceID(internalSequenceId);
+ collection = sequencePropertyBeanMgr.find(findSequencePropertyBean1);
+ iterator = collection.iterator();
+ while (iterator.hasNext()) {
+ SequencePropertyBean sequencePropertyBean = (SequencePropertyBean) iterator.next();
+ doUpdatesIfNeeded (sequenceID,sequencePropertyBean,sequencePropertyBeanMgr);
+
+ if (isProportyDeletable(sequencePropertyBean.getName())) {
+ sequencePropertyBeanMgr.delete(sequencePropertyBean.getSequenceID(),sequencePropertyBean.getName());
+ }
+ }
+
+ SandeshaUtil.stopSenderForTheSequence(internalSequenceId);
+ }
+
+ public static void addTerminateSequenceMessage(RMMsgContext referenceMessage,
+ String outSequenceId, String internalSequenceId)
+ throws SandeshaException {
+
+
+ ConfigurationContext configurationContext = referenceMessage.getMessageContext().getConfigurationContext();
+ StorageManager storageManager = SandeshaUtil
+ .getSandeshaStorageManager(configurationContext);
+
+ Transaction addTerminateSeqTransaction = storageManager.getTransaction();
+
+ SequencePropertyBeanMgr seqPropMgr = storageManager
+ .getSequencePropretyBeanMgr();
+
+ SequencePropertyBean terminated = seqPropMgr.retrieve(outSequenceId,
+ Sandesha2Constants.SequenceProperties.TERMINATE_ADDED);
+
+ if (terminated != null && terminated.getValue() != null
+ && "true".equals(terminated.getValue())) {
+ String message = "Terminate was added previously.";
+ log.info(message);
+// return;
+ }
+
+ RMMsgContext terminateRMMessage = RMMsgCreator
+ .createTerminateSequenceMessage(referenceMessage, outSequenceId,internalSequenceId);
+ terminateRMMessage.setFlow(MessageContext.OUT_FLOW);
+ terminateRMMessage.setProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE,"true");
+
+ SequencePropertyBean toBean = seqPropMgr.retrieve(internalSequenceId,
+ Sandesha2Constants.SequenceProperties.TO_EPR);
+
+ EndpointReference toEPR = new EndpointReference ( toBean.getValue());
+ if (toEPR == null) {
+ String message = "To EPR has an invalid value";
+ throw new SandeshaException(message);
+ }
+
+ terminateRMMessage.setTo(new EndpointReference(toEPR.getAddress()));
+
+ String addressingNamespaceURI = SandeshaUtil.getSequenceProperty(internalSequenceId,Sandesha2Constants.SequenceProperties.ADDRESSING_NAMESPACE_VALUE,configurationContext);
+ String anonymousURI = SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespaceURI);
+
+ String rmVersion = SandeshaUtil.getRMVersion(internalSequenceId,configurationContext);
+ if (rmVersion==null)
+ throw new SandeshaException ("Cant find the rmVersion of the given message");
+ terminateRMMessage.setWSAAction(SpecSpecificConstants.getTerminateSequenceAction(rmVersion));
+ terminateRMMessage.setSOAPAction(SpecSpecificConstants.getTerminateSequenceSOAPAction(rmVersion));
+
+ SequencePropertyBean transportToBean = seqPropMgr.retrieve(internalSequenceId,Sandesha2Constants.SequenceProperties.TRANSPORT_TO);
+ if (transportToBean!=null) {
+ terminateRMMessage.setProperty(MessageContextConstants.TRANSPORT_URL,transportToBean.getValue());
+ }
+
+ try {
+ terminateRMMessage.addSOAPEnvelope();
+ } catch (AxisFault e) {
+ throw new SandeshaException(e.getMessage());
+ }
+
+ String key = SandeshaUtil.getUUID();
+
+ SenderBean terminateBean = new SenderBean();
+ terminateBean.setMessageContextRefKey(key);
+
+
+ storageManager.storeMessageContext(key,terminateRMMessage.getMessageContext());
+
+
+ //Set a retransmitter lastSentTime so that terminate will be send with
+ // some delay.
+ //Otherwise this get send before return of the current request (ack).
+ //TODO: refine the terminate delay.
+ terminateBean.setTimeToSend(System.currentTimeMillis()
+ + Sandesha2Constants.TERMINATE_DELAY);
+
+ terminateBean.setMessageID(terminateRMMessage.getMessageId());
+
+ //this will be set to true at the sender.
+ terminateBean.setSend(true);
+
+ terminateRMMessage.getMessageContext().setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING,
+ Sandesha2Constants.VALUE_FALSE);
+
+ terminateBean.setReSend(false);
+
+ SenderBeanMgr retramsmitterMgr = storageManager
+ .getRetransmitterBeanMgr();
+
+ retramsmitterMgr.insert(terminateBean);
+
+ SequencePropertyBean terminateAdded = new SequencePropertyBean();
+ terminateAdded.setName(Sandesha2Constants.SequenceProperties.TERMINATE_ADDED);
+ terminateAdded.setSequenceID(outSequenceId);
+ terminateAdded.setValue("true");
+
+ seqPropMgr.insert(terminateAdded);
+
+ //This should be dumped to the storage by the sender
+ TransportOutDescription transportOut = terminateRMMessage.getMessageContext().getTransportOut();
+ terminateRMMessage.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC,transportOut);
+ terminateRMMessage.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY,key);
+ terminateRMMessage.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE,Sandesha2Constants.VALUE_TRUE);
+ terminateRMMessage.getMessageContext().setTransportOut(new Sandesha2TransportOutDesc ());
+ addTerminateSeqTransaction.commit();
+
+ AxisEngine engine = new AxisEngine (configurationContext);
+ try {
+ engine.send(terminateRMMessage.getMessageContext());
+ } catch (AxisFault e) {
+ throw new SandeshaException (e.getMessage());
+ }
+
+ }
+
+}
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/workers/InOrderInvoker.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/workers/InOrderInvoker.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/workers/InOrderInvoker.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/workers/InOrderInvoker.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.TerminateManager;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.InvokerBeanMgr;
@@ -41,6 +40,7 @@
import org.apache.sandesha2.storage.beans.SequencePropertyBean;
import org.apache.sandesha2.util.MsgInitializer;
import org.apache.sandesha2.util.SandeshaUtil;
+import org.apache.sandesha2.util.TerminateManager;
import org.apache.sandesha2.wsrm.Sequence;
/**
@@ -79,9 +79,9 @@
workingSequences.add(sequenceID);
if (!isInvokerStarted()) {
+ this.context = context;
runInvoker = true; //so that isSenderStarted()=true.
super.start();
- this.context = context;
}
}
@@ -188,11 +188,7 @@
if (!AxisOperationFactory.MEP_URI_IN_ONLY.equals(msgToInvoke.getAxisOperation().getMessageExchangePattern())) {
invocationTransaction = storageManager.getTransaction();
- }
-
- log.info("Invoker invoking a '" + SandeshaUtil.getMessageTypeString(rmMsg
- .getMessageType()) + "' message.");
-
+ }
storageMapMgr.delete(key);
} catch (AxisFault e) {
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=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java Thu Apr 6 03:50:20 2006
@@ -37,20 +37,20 @@
import org.apache.axis2.util.threadpool.ThreadPool;
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.TerminateManager;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
import org.apache.sandesha2.storage.beans.SenderBean;
+import org.apache.sandesha2.util.AcknowledgementManager;
import org.apache.sandesha2.util.MessageRetransmissionAdjuster;
import org.apache.sandesha2.util.MsgInitializer;
import org.apache.sandesha2.util.PropertyManager;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.SequenceManager;
+import org.apache.sandesha2.util.TerminateManager;
import org.apache.sandesha2.wsrm.Sequence;
import org.apache.sandesha2.wsrm.TerminateSequence;
@@ -122,6 +122,7 @@
continue;
}
+
MessageRetransmissionAdjuster retransmitterAdjuster = new MessageRetransmissionAdjuster();
retransmitterAdjuster.adjustRetransmittion(senderBean, context);
@@ -161,8 +162,7 @@
}
updateMessage(msgCtx);
- log.info("Sender is sending a '" + SandeshaUtil.getMessageTypeString(rmMsgCtx.getMessageType()) + "' message.");
-
+
Transaction preSendTransaction = storageManager.getTransaction();
int messageType = rmMsgCtx.getMessageType();
@@ -258,9 +258,9 @@
workingSequences.add(sequenceID);
if (!isSenderStarted()) {
+ this.context = context;
runSender = true; // so that isSenderStarted()=true.
super.start();
- this.context = context;
}
}
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/RMElements.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/RMElements.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/RMElements.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/RMElements.java Thu Apr 6 03:50:20 2006
@@ -20,9 +20,6 @@
import javax.xml.namespace.QName;
-import org.apache.sandesha2.Sandesha2Constants;
-import org.apache.sandesha2.SandeshaException;
-import org.apache.sandesha2.util.SOAPAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMException;
import org.apache.axiom.soap.SOAP11Constants;
@@ -30,8 +27,9 @@
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.SOAPHeader;
import org.apache.axis2.addressing.AddressingConstants;
-
-import sun.util.logging.resources.logging;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.util.SOAPAbstractFactory;
/**
* @author Chamikara Jayalath <ch...@gmail.com>
Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java
URL: http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java?rev=391959&r1=391958&r2=391959&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java (original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/SequenceAcknowledgement.java Thu Apr 6 03:50:20 2006
@@ -31,7 +31,7 @@
import org.apache.axiom.soap.SOAPHeaderBlock;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
-import org.apache.sandesha2.SpecSpecificConstants;
+import org.apache.sandesha2.util.SpecSpecificConstants;
/**
* Adds the SequenceAcknowledgement header block.
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org