Author: chamikara
Date: Sun Jun  3 07:02:04 2007
New Revision: 543894

URL: http://svn.apache.org/viewvc?view=rev&rev=543894
Log:
Added a sequenceIDDispatcher which does the service dispatching of incoming 
messages according the the sequenceID.

Added:
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SequenceIDDispatcher.java
Modified:
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/SandeshaModule.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/LastMessageProcessor.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMDBean.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMSBean.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/SandeshaModule.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/SandeshaModule.java?view=diff&rev=543894&r1=543893&r2=543894
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/SandeshaModule.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/SandeshaModule.java
 Sun Jun  3 07:02:04 2007
@@ -1,289 +1,288 @@
-/*
- * 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;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.xml.namespace.QName;
-
-import org.apache.axis2.AxisFault;
-import org.apache.axis2.Constants;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.description.AxisDescription;
-import org.apache.axis2.description.AxisModule;
-import org.apache.axis2.description.AxisOperation;
-import org.apache.axis2.description.AxisService;
-import org.apache.axis2.description.Parameter;
-import org.apache.axis2.engine.AxisConfiguration;
-import org.apache.axis2.modules.Module;
-import org.apache.axis2.modules.ModulePolicyExtension;
-import org.apache.axis2.modules.PolicyExtension;
-import org.apache.axis2.util.TargetResolver;
-import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.neethi.Assertion;
-import org.apache.neethi.Policy;
-import org.apache.sandesha2.i18n.SandeshaMessageHelper;
-import org.apache.sandesha2.i18n.SandeshaMessageKeys;
-import org.apache.sandesha2.policy.RMPolicyExtension;
-import org.apache.sandesha2.policy.SandeshaPolicyBean;
-import org.apache.sandesha2.security.SecurityManager;
-import org.apache.sandesha2.storage.SandeshaStorageException;
-import org.apache.sandesha2.storage.StorageManager;
-import org.apache.sandesha2.util.PropertyManager;
-import org.apache.sandesha2.util.SandeshaUtil;
-
-/**
- * The Module class of Sandesha2.
- */
-
-public class SandeshaModule implements Module, ModulePolicyExtension {
-    
-    private Log log = LogFactory.getLog(SandeshaModule.class);
-    
-       // initialize the module
-       public void init(ConfigurationContext configContext,
-                       AxisModule module) throws AxisFault {
-               if(log.isDebugEnabled()) log.debug("Entry: 
SandeshaModule::init, " + configContext);
-
-               AxisConfiguration config = configContext.getAxisConfiguration();
-
-               //storing the Sandesha module as a parameter.
-               Parameter parameter = new 
Parameter(Sandesha2Constants.MODULE_CLASS_LOADER,module.getModuleClassLoader());
-               config.addParameter(parameter);
-
-               //init the i18n messages
-               SandeshaMessageHelper.innit();
-               
-               //storing the module as a static variable
-               SandeshaUtil.setAxisModule(module);
-               
-               // continueUncompletedSequences (storageManager,configCtx);
-
-               SandeshaPolicyBean constantPropertyBean = 
PropertyManager.loadPropertiesFromDefaultValues();
-               SandeshaPolicyBean propertyBean = 
PropertyManager.loadPropertiesFromModuleDescPolicy(module,constantPropertyBean);
-               
-               if (propertyBean==null) {
-                       String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.couldNotLoadModulePolicies);
-                       log.warn (message);
-                       
-                       propertyBean = 
PropertyManager.loadPropertiesFromDefaultValues();
-               } else {
-                       if (log.isDebugEnabled()) {
-                               String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.modulePoliciesLoaded);
-                               log.info (message);
-                       }
-               }
-               
-               parameter = new Parameter 
(Sandesha2Constants.SANDESHA_PROPERTY_BEAN, propertyBean);
-               config.addParameter(parameter);
-               
-               // Reset both storage managers
-               parameter = 
config.getParameter(Sandesha2Constants.INMEMORY_STORAGE_MANAGER);
-               if(parameter != null) config.removeParameter(parameter);
-               parameter = 
config.getParameter(Sandesha2Constants.PERMANENT_STORAGE_MANAGER);
-               if(parameter != null) config.removeParameter(parameter);
-
-               try {
-                       StorageManager inMemorytorageManager = 
SandeshaUtil.getInMemoryStorageManager(configContext);
-                       inMemorytorageManager.initStorage(module);
-               } catch (SandeshaStorageException e) {
-                       String message = SandeshaMessageHelper.getMessage(
-                                       
SandeshaMessageKeys.cannotInitInMemoryStorageManager,
-                                       e.toString());
-                       log.debug(message,e);
-               }
-               
-               try {
-                       StorageManager permanentStorageManager = 
SandeshaUtil.getPermanentStorageManager(configContext);
-                       permanentStorageManager.initStorage(module);
-               } catch (SandeshaStorageException e) {
-                       String message = SandeshaMessageHelper.getMessage(
-                                       
SandeshaMessageKeys.cannotInitPersistentStorageManager,
-                                       e.toString());
-                       log.debug(message,e);
-               }
-               
-               // Reset the security manager, and then load it
-               parameter = 
config.getParameter(Sandesha2Constants.SECURITY_MANAGER);
-               if(parameter != null) config.removeParameter(parameter);
-               SecurityManager util = 
SandeshaUtil.getSecurityManager(configContext);
-               util.initSecurity(module);
-
-               // Mark the config context so that we can run sync 2-way 
interations over
-               // RM, but at the same time switch it off for unreliable 
messages.
-               
configContext.setProperty(Constants.Configuration.USE_ASYNC_OPERATIONS, 
Boolean.TRUE);
-               configContext.getAxisConfiguration().addTargetResolver(
-                               new TargetResolver() {
-                                       public void 
resolveTarget(MessageContext messageContext) {
-                                               
-                                               //if Sandesha2 is not engaged 
we can set the property straight away 
-                                               
-                                               boolean engaged = false;
-                                               
-                                               //checking weather the module 
is engaged at the System level
-                                               AxisConfiguration 
axisConfiguration = 
messageContext.getConfigurationContext().getAxisConfiguration();
-                                               if (axisConfiguration!=null) {
-                                                       Collection modules = 
axisConfiguration.getEngagedModules();
-                                                       for (Iterator iter = 
modules.iterator();iter.hasNext();) {
-                                                               String 
moduleName = (String) iter.next();
-                                                               if 
(moduleName!=null && moduleName.startsWith (Sandesha2Constants.MODULE_NAME)) {
-                                                                       engaged 
= true;
-                                                               }
-                                                       }
-                                               }
-                                               
-                                               //checking weather the module 
is engaged at the Service level
-                                               AxisService service = 
messageContext.getAxisService();
-                                               if (service!=null) {
-                                                       Collection modules = 
service.getEngagedModules();
-                                                       for (Iterator iter = 
modules.iterator();iter.hasNext();) {
-                                                               AxisModule 
module = (AxisModule) iter.next();
-                                                               String name = 
module.getName();
-                                                               if (name!=null 
&& name.startsWith (Sandesha2Constants.MODULE_NAME)) {
-                                                                       engaged 
= true;
-                                                               }
-                                                       }
-                                               }
-
-                                               //checking weather the module 
is engaged at the Operation level
-                                               AxisOperation operation = 
messageContext.getAxisOperation();
-                                               if (operation!=null) {
-                                                       Collection modules = 
operation.getEngagedModules();
-                                                       for (Iterator iter = 
modules.iterator();iter.hasNext();) {
-                                                               AxisModule 
module = (AxisModule) iter.next();
-                                                               String name = 
module.getName();
-                                                               if (name!=null 
&& name.startsWith (Sandesha2Constants.MODULE_NAME)) {
-                                                                       engaged 
= true;
-                                                               }
-                                                       }
-                                               }
-                                               
-                                               //if the module is not engaed 
we mark the message as unreliable.
-                                               if (!engaged) {
-                                                       
if(log.isDebugEnabled()) log.debug("Unsetting USE_ASYNC_OPERATIONS for 
unreliable message");
-                                                       
messageContext.setProperty(Constants.Configuration.USE_ASYNC_OPERATIONS, 
Boolean.FALSE);
-                                               }
-                                               
-                                               //Even when Sandesha2 is 
engaged this may be marked as unreliable.
-                                               if(log.isDebugEnabled()) 
log.debug("Entry: SandeshaModule::resolveTarget");
-                                               
if(SandeshaUtil.isMessageUnreliable(messageContext)) {
-                                                       
if(log.isDebugEnabled()) log.debug("Unsetting USE_ASYNC_OPERATIONS for 
unreliable message");
-                                                       
messageContext.setProperty(Constants.Configuration.USE_ASYNC_OPERATIONS, 
Boolean.FALSE);
-                                               }
-                                               if(log.isDebugEnabled()) 
log.debug("Exit: SandeshaModule::resolveTarget");
-                                       }
-                               }
-               );
-
-               if(log.isDebugEnabled()) log.debug("Exit: 
SandeshaModule::init");
-       }
-
-       public void engageNotify(AxisDescription axisDescription) throws 
AxisFault {
-               if(log.isDebugEnabled()) log.debug("Entry: 
SandeshaModule::engageNotify, " + axisDescription);
-               
-               SandeshaPolicyBean parentPropertyBean = 
SandeshaUtil.getPropertyBean(axisDescription.getParent());
-               
-               SandeshaPolicyBean axisDescPropertyBean = 
PropertyManager.loadPropertiesFromAxisDescription(axisDescription,parentPropertyBean);
-               
-               if (axisDescPropertyBean!=null) {
-                       Parameter parameter = new Parameter ();
-                       
parameter.setName(Sandesha2Constants.SANDESHA_PROPERTY_BEAN);
-                       parameter.setValue(axisDescPropertyBean);
-                       axisDescription.addParameter(parameter);
-               }
-               
-               // When we engage Sandesha for a Service, we check to see if 
there are
-               // any OUT_IN MEPs on it's operations. If there are then we 
record that,
-               // so that we know we should send an Offer for WSRM 1.0 
Sequences.
-               // We check the operation names, as the RM operations are added 
in as
-               // well, and and we only want to consider the user's operations.
-               if(axisDescription instanceof AxisService) {
-                       AxisService service = (AxisService) axisDescription;
-                       Iterator ops = service.getOperations();
-                       while(ops.hasNext()) {
-                               AxisOperation op = (AxisOperation) ops.next();
-                               log.debug("Examining operation " + op.getName() 
+ ", mep " + op.getMessageExchangePattern());
-
-                               String name = null;
-                               QName qName = op.getName();
-                               if(qName != null) name = qName.getLocalPart();
-                               if((name != null && 
name.startsWith(Sandesha2Constants.SANDESHA_OP_PREFIX)) ||
-                                  ServiceClient.ANON_OUT_IN_OP.equals(qName))
-                                       break;
-
-                               // If we get to here then we must have one of 
the user's operations, so
-                               // check the MEP.
-                               if(op.getAxisSpecifMEPConstant() == 
WSDLConstants.MEP_CONSTANT_OUT_IN) {
-                                       Parameter p = new 
Parameter(Sandesha2Constants.SERVICE_CONTAINS_OUT_IN_MEPS, Boolean.TRUE);
-                                       service.addParameter(p);
-                                       break;
-                               }
-                       }
-               } else if(axisDescription instanceof AxisOperation) {
-                       AxisOperation op = (AxisOperation) axisDescription;
-                       log.debug("Examining operation " + op.getName() + ", 
mep " + op.getAxisSpecifMEPConstant());
-
-                       String name = null;
-                       QName qName = op.getName();
-                       if(qName != null) name = qName.getLocalPart();
-                       if((name != null && 
!name.startsWith(Sandesha2Constants.SANDESHA_OP_PREFIX)) &&
-                          !ServiceClient.ANON_OUT_IN_OP.equals(qName)) {
-
-                               // If we get to here then we must have one of 
the user's operations, so
-                               // check the MEP.
-                               if(op.getAxisSpecifMEPConstant() == 
WSDLConstants.MEP_CONSTANT_OUT_IN) {
-                                       Parameter p = new 
Parameter(Sandesha2Constants.SERVICE_CONTAINS_OUT_IN_MEPS, Boolean.TRUE);
-                                       op.getParent().addParameter(p);
-                               }
-                       }
-               } 
-
-
-               if(log.isDebugEnabled()) log.debug("Exit: 
SandeshaModule::engageNotify");
-       }
-
-       public PolicyExtension getPolicyExtension() {
-               return new RMPolicyExtension();
-       }
-
-       public void shutdown(ConfigurationContext configurationContext) throws 
AxisFault {
-               if(log.isDebugEnabled()) log.debug("Entry: 
SandeshaModule::shutdown, " + configurationContext);
-               SandeshaUtil.
-                       getSandeshaStorageManager(configurationContext, 
configurationContext.getAxisConfiguration())
-                               .shutdown();
-               if(log.isDebugEnabled()) log.debug("Exit: 
SandeshaModule::shutdown");
-       }
-
-    public void applyPolicy(Policy policy, AxisDescription axisDescription) 
throws AxisFault {
-        // TODO 
-        
-    }
-
-    public boolean canSupportAssertion(Assertion assertion) {
-        // TODO 
-        return true;
-    }
-    
-    
-
-}
+/*
+ * 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;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisDescription;
+import org.apache.axis2.description.AxisModule;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.axis2.modules.Module;
+import org.apache.axis2.modules.ModulePolicyExtension;
+import org.apache.axis2.modules.PolicyExtension;
+import org.apache.axis2.util.TargetResolver;
+import org.apache.axis2.wsdl.WSDLConstants;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.Policy;
+import org.apache.sandesha2.i18n.SandeshaMessageHelper;
+import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.policy.RMPolicyExtension;
+import org.apache.sandesha2.policy.SandeshaPolicyBean;
+import org.apache.sandesha2.security.SecurityManager;
+import org.apache.sandesha2.storage.SandeshaStorageException;
+import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.util.PropertyManager;
+import org.apache.sandesha2.util.SandeshaUtil;
+
+/**
+ * The Module class of Sandesha2.
+ */
+
+public class SandeshaModule implements Module, ModulePolicyExtension {
+    
+    private Log log = LogFactory.getLog(SandeshaModule.class);
+    
+       // initialize the module
+       public void init(ConfigurationContext configContext,
+                       AxisModule module) throws AxisFault {
+               if(log.isDebugEnabled()) log.debug("Entry: 
SandeshaModule::init, " + configContext);
+
+               AxisConfiguration config = configContext.getAxisConfiguration();
+
+               //storing the Sandesha module as a parameter.
+               Parameter parameter = new 
Parameter(Sandesha2Constants.MODULE_CLASS_LOADER,module.getModuleClassLoader());
+               config.addParameter(parameter);
+
+               //init the i18n messages
+               SandeshaMessageHelper.innit();
+               
+               //storing the module as a static variable
+               SandeshaUtil.setAxisModule(module);
+               
+               // continueUncompletedSequences (storageManager,configCtx);
+
+               SandeshaPolicyBean constantPropertyBean = 
PropertyManager.loadPropertiesFromDefaultValues();
+               SandeshaPolicyBean propertyBean = 
PropertyManager.loadPropertiesFromModuleDescPolicy(module,constantPropertyBean);
+               
+               if (propertyBean==null) {
+                       String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.couldNotLoadModulePolicies);
+                       log.error (message);
+                       propertyBean = 
PropertyManager.loadPropertiesFromDefaultValues();
+               } else {
+                       if (log.isDebugEnabled()) {
+                               String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.modulePoliciesLoaded);
+                               log.info (message);
+                       }
+               }
+               
+               parameter = new Parameter 
(Sandesha2Constants.SANDESHA_PROPERTY_BEAN, propertyBean);
+               config.addParameter(parameter);
+               
+               // Reset both storage managers
+               parameter = 
config.getParameter(Sandesha2Constants.INMEMORY_STORAGE_MANAGER);
+               if(parameter != null) config.removeParameter(parameter);
+               parameter = 
config.getParameter(Sandesha2Constants.PERMANENT_STORAGE_MANAGER);
+               if(parameter != null) config.removeParameter(parameter);
+
+               try {
+                       StorageManager inMemorytorageManager = 
SandeshaUtil.getInMemoryStorageManager(configContext);
+                       inMemorytorageManager.initStorage(module);
+               } catch (SandeshaStorageException e) {
+                       String message = SandeshaMessageHelper.getMessage(
+                                       
SandeshaMessageKeys.cannotInitInMemoryStorageManager,
+                                       e.toString());
+                       log.debug(message,e);
+               }
+               
+               try {
+                       StorageManager permanentStorageManager = 
SandeshaUtil.getPermanentStorageManager(configContext);
+                       permanentStorageManager.initStorage(module);
+               } catch (SandeshaStorageException e) {
+                       String message = SandeshaMessageHelper.getMessage(
+                                       
SandeshaMessageKeys.cannotInitPersistentStorageManager,
+                                       e.toString());
+                       log.debug(message,e);
+               }
+               
+               // Reset the security manager, and then load it
+               parameter = 
config.getParameter(Sandesha2Constants.SECURITY_MANAGER);
+               if(parameter != null) config.removeParameter(parameter);
+               SecurityManager util = 
SandeshaUtil.getSecurityManager(configContext);
+               util.initSecurity(module);
+
+               // Mark the config context so that we can run sync 2-way 
interations over
+               // RM, but at the same time switch it off for unreliable 
messages.
+               
configContext.setProperty(Constants.Configuration.USE_ASYNC_OPERATIONS, 
Boolean.TRUE);
+               configContext.getAxisConfiguration().addTargetResolver(
+                               new TargetResolver() {
+                                       public void 
resolveTarget(MessageContext messageContext) {
+                                               
+                                               //if Sandesha2 is not engaged 
we can set the property straight away 
+                                               
+                                               boolean engaged = false;
+                                               
+                                               //checking weather the module 
is engaged at the System level
+                                               AxisConfiguration 
axisConfiguration = 
messageContext.getConfigurationContext().getAxisConfiguration();
+                                               if (axisConfiguration!=null) {
+                                                       Collection modules = 
axisConfiguration.getEngagedModules();
+                                                       for (Iterator iter = 
modules.iterator();iter.hasNext();) {
+                                                               String 
moduleName = (String) iter.next();
+                                                               if 
(moduleName!=null && moduleName.startsWith (Sandesha2Constants.MODULE_NAME)) {
+                                                                       engaged 
= true;
+                                                               }
+                                                       }
+                                               }
+                                               
+                                               //checking weather the module 
is engaged at the Service level
+                                               AxisService service = 
messageContext.getAxisService();
+                                               if (service!=null) {
+                                                       Collection modules = 
service.getEngagedModules();
+                                                       for (Iterator iter = 
modules.iterator();iter.hasNext();) {
+                                                               AxisModule 
module = (AxisModule) iter.next();
+                                                               String name = 
module.getName();
+                                                               if (name!=null 
&& name.startsWith (Sandesha2Constants.MODULE_NAME)) {
+                                                                       engaged 
= true;
+                                                               }
+                                                       }
+                                               }
+
+                                               //checking weather the module 
is engaged at the Operation level
+                                               AxisOperation operation = 
messageContext.getAxisOperation();
+                                               if (operation!=null) {
+                                                       Collection modules = 
operation.getEngagedModules();
+                                                       for (Iterator iter = 
modules.iterator();iter.hasNext();) {
+                                                               AxisModule 
module = (AxisModule) iter.next();
+                                                               String name = 
module.getName();
+                                                               if (name!=null 
&& name.startsWith (Sandesha2Constants.MODULE_NAME)) {
+                                                                       engaged 
= true;
+                                                               }
+                                                       }
+                                               }
+                                               
+                                               //if the module is not engaed 
we mark the message as unreliable.
+                                               if (!engaged) {
+                                                       
if(log.isDebugEnabled()) log.debug("Unsetting USE_ASYNC_OPERATIONS for 
unreliable message");
+                                                       
messageContext.setProperty(Constants.Configuration.USE_ASYNC_OPERATIONS, 
Boolean.FALSE);
+                                               }
+                                               
+                                               //Even when Sandesha2 is 
engaged this may be marked as unreliable.
+                                               if(log.isDebugEnabled()) 
log.debug("Entry: SandeshaModule::resolveTarget");
+                                               
if(SandeshaUtil.isMessageUnreliable(messageContext)) {
+                                                       
if(log.isDebugEnabled()) log.debug("Unsetting USE_ASYNC_OPERATIONS for 
unreliable message");
+                                                       
messageContext.setProperty(Constants.Configuration.USE_ASYNC_OPERATIONS, 
Boolean.FALSE);
+                                               }
+                                               if(log.isDebugEnabled()) 
log.debug("Exit: SandeshaModule::resolveTarget");
+                                       }
+                               }
+               );
+
+               if(log.isDebugEnabled()) log.debug("Exit: 
SandeshaModule::init");
+       }
+
+       public void engageNotify(AxisDescription axisDescription) throws 
AxisFault {
+               if(log.isDebugEnabled()) log.debug("Entry: 
SandeshaModule::engageNotify, " + axisDescription);
+               
+               SandeshaPolicyBean parentPropertyBean = 
SandeshaUtil.getPropertyBean(axisDescription.getParent());
+               
+               SandeshaPolicyBean axisDescPropertyBean = 
PropertyManager.loadPropertiesFromAxisDescription(axisDescription,parentPropertyBean);
+               
+               if (axisDescPropertyBean!=null) {
+                       Parameter parameter = new Parameter ();
+                       
parameter.setName(Sandesha2Constants.SANDESHA_PROPERTY_BEAN);
+                       parameter.setValue(axisDescPropertyBean);
+                       axisDescription.addParameter(parameter);
+               }
+               
+               // When we engage Sandesha for a Service, we check to see if 
there are
+               // any OUT_IN MEPs on it's operations. If there are then we 
record that,
+               // so that we know we should send an Offer for WSRM 1.0 
Sequences.
+               // We check the operation names, as the RM operations are added 
in as
+               // well, and and we only want to consider the user's operations.
+               if(axisDescription instanceof AxisService) {
+                       AxisService service = (AxisService) axisDescription;
+                       Iterator ops = service.getOperations();
+                       while(ops.hasNext()) {
+                               AxisOperation op = (AxisOperation) ops.next();
+                               log.debug("Examining operation " + op.getName() 
+ ", mep " + op.getMessageExchangePattern());
+
+                               String name = null;
+                               QName qName = op.getName();
+                               if(qName != null) name = qName.getLocalPart();
+                               if((name != null && 
name.startsWith(Sandesha2Constants.SANDESHA_OP_PREFIX)) ||
+                                  ServiceClient.ANON_OUT_IN_OP.equals(qName))
+                                       break;
+
+                               // If we get to here then we must have one of 
the user's operations, so
+                               // check the MEP.
+                               if(op.getAxisSpecifMEPConstant() == 
WSDLConstants.MEP_CONSTANT_OUT_IN) {
+                                       Parameter p = new 
Parameter(Sandesha2Constants.SERVICE_CONTAINS_OUT_IN_MEPS, Boolean.TRUE);
+                                       service.addParameter(p);
+                                       break;
+                               }
+                       }
+               } else if(axisDescription instanceof AxisOperation) {
+                       AxisOperation op = (AxisOperation) axisDescription;
+                       log.debug("Examining operation " + op.getName() + ", 
mep " + op.getAxisSpecifMEPConstant());
+
+                       String name = null;
+                       QName qName = op.getName();
+                       if(qName != null) name = qName.getLocalPart();
+                       if((name != null && 
!name.startsWith(Sandesha2Constants.SANDESHA_OP_PREFIX)) &&
+                          !ServiceClient.ANON_OUT_IN_OP.equals(qName)) {
+
+                               // If we get to here then we must have one of 
the user's operations, so
+                               // check the MEP.
+                               if(op.getAxisSpecifMEPConstant() == 
WSDLConstants.MEP_CONSTANT_OUT_IN) {
+                                       Parameter p = new 
Parameter(Sandesha2Constants.SERVICE_CONTAINS_OUT_IN_MEPS, Boolean.TRUE);
+                                       op.getParent().addParameter(p);
+                               }
+                       }
+               } 
+
+
+               if(log.isDebugEnabled()) log.debug("Exit: 
SandeshaModule::engageNotify");
+       }
+
+       public PolicyExtension getPolicyExtension() {
+               return new RMPolicyExtension();
+       }
+
+       public void shutdown(ConfigurationContext configurationContext) throws 
AxisFault {
+               if(log.isDebugEnabled()) log.debug("Entry: 
SandeshaModule::shutdown, " + configurationContext);
+               SandeshaUtil.
+                       getSandeshaStorageManager(configurationContext, 
configurationContext.getAxisConfiguration())
+                               .shutdown();
+               if(log.isDebugEnabled()) log.debug("Exit: 
SandeshaModule::shutdown");
+       }
+
+    public void applyPolicy(Policy policy, AxisDescription axisDescription) 
throws AxisFault {
+        // TODO 
+        
+    }
+
+    public boolean canSupportAssertion(Assertion assertion) {
+        // TODO 
+        return true;
+    }
+    
+    
+
+}

Added: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SequenceIDDispatcher.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SequenceIDDispatcher.java?view=auto&rev=543894
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SequenceIDDispatcher.java
 (added)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/handlers/SequenceIDDispatcher.java
 Sun Jun  3 07:02:04 2007
@@ -0,0 +1,106 @@
+/*
+ * 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.handlers;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.HandlerDescription;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.engine.AbstractDispatcher;
+import org.apache.axis2.engine.Handler;
+import org.apache.sandesha2.RMMsgContext;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.Transaction;
+import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
+import org.apache.sandesha2.storage.beans.RMDBean;
+import org.apache.sandesha2.storage.beans.RMSBean;
+import org.apache.sandesha2.util.MsgInitializer;
+import org.apache.sandesha2.util.SandeshaUtil;
+
+public class SequenceIDDispatcher extends AbstractDispatcher {
+
+       private final String NAME = "SequenceIDDIspatcher";
+       
+       public AxisOperation findOperation(AxisService service, MessageContext 
messageContext) throws AxisFault {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       public void initDispatcher() {
+                 init(new HandlerDescription(NAME));
+       }
+
+       public AxisService findService(MessageContext msgContext) throws 
AxisFault {
+               // TODO Auto-generated method stub
+               
+               
+               ConfigurationContext configurationContext = 
msgContext.getConfigurationContext();
+               RMMsgContext rmmsgContext = 
MsgInitializer.initializeMessage(msgContext);
+               StorageManager storageManager = 
SandeshaUtil.getSandeshaStorageManager(configurationContext, 
configurationContext.getAxisConfiguration());
+               
+               Transaction transaction = storageManager.getTransaction();
+               
+               AxisService service;
+               try {
+                       String sequenceID = (String) rmmsgContext
+                                       
.getProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_ID);
+                       service = null;
+                       if (sequenceID != null) {
+
+                               //If this is the RMD of the sequence 
+                               RMDBeanMgr rmdBeanMgr = 
storageManager.getRMDBeanMgr();
+                               RMDBean rmdFindBean = new RMDBean();
+                               rmdFindBean.setSequenceID(sequenceID);
+
+                               RMDBean rmdBean = 
rmdBeanMgr.findUnique(rmdFindBean);
+                               String serviceName = rmdBean.getServiceName();
+                               if (serviceName != null) {
+                                       service = 
configurationContext.getAxisConfiguration()
+                                                       
.getService(serviceName);
+                               }
+
+                               if (service == null && rmdBean == null) {
+                                       //If this is the RMD of the sequence 
+                                       RMSBeanMgr rmsBeanMgr = 
storageManager.getRMSBeanMgr();
+                                       RMSBean rmsfindBean = new RMSBean();
+                                       rmsfindBean.setSequenceID(sequenceID);
+
+                                       RMSBean rmsBean = 
rmsBeanMgr.findUnique(rmsfindBean);
+
+                                       serviceName = rmsBean.getServiceName();
+                                       if (serviceName != null) {
+                                               service = 
configurationContext.getAxisConfiguration()
+                                                               
.getService(serviceName);
+                                       }
+                               }
+
+                       }
+               } finally  {
+                       transaction.commit();
+               }               
+               
+               return service;
+       }
+
+
+}

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java?view=diff&rev=543894&r1=543893&r2=543894
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
 Sun Jun  3 07:02:04 2007
@@ -173,6 +173,8 @@
                        rMDBean.setNextMsgNoToProcess(1);
                        
rMDBean.setOutboundInternalSequence(rmsBean.getInternalSequenceID());
 
+                       
rMDBean.setServiceName(createSeqResponseRMMsgCtx.getMessageContext().getAxisService().getName());
+                       
                        //Storing the referenceMessage of the sending side 
sequence as the reference message
                        //of the receiving side as well.
                        //This can be used when creating new outgoing messages.

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/LastMessageProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/LastMessageProcessor.java?view=diff&rev=543894&r1=543893&r2=543894
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/LastMessageProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/LastMessageProcessor.java
 Sun Jun  3 07:02:04 2007
@@ -1,3 +1,20 @@
+/*
+ * 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.msgprocessors;
 
 import org.apache.axiom.soap.SOAPEnvelope;

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMDBean.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMDBean.java?view=diff&rev=543894&r1=543893&r2=543894
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMDBean.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMDBean.java
 Sun Jun  3 07:02:04 2007
@@ -73,6 +73,8 @@
                
        private long highestInMessageNumber = 0;
        
+       private String serviceName = null;
+       
        /**
         * Flags that are used to check if the primitive types on this bean
         * have been set. If a primitive type has not been set then it will
@@ -223,6 +225,14 @@
                        equal = false;
 
                return equal;
+       }
+
+       public String getServiceName() {
+               return serviceName;
+       }
+
+       public void setServiceName(String serviceName) {
+               this.serviceName = serviceName;
        }
 
 

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMSBean.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMSBean.java?view=diff&rev=543894&r1=543893&r2=543894
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMSBean.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/RMSBean.java
 Sun Jun  3 07:02:04 2007
@@ -135,6 +135,7 @@
         */
        private int soapVersion;
        
+       
        /**
         * Flags that are used to check if the primitive types on this bean
         * have been set. If a primitive type has not been set then it will
@@ -165,6 +166,8 @@
         * I.e. the user explicitly have to call for termination (using 
SandeshaClient).  
         */
        private boolean avoidAutoTermination = false;
+
+       private String serviceName = null;
        
        public RMSBean() {
        }
@@ -472,6 +475,14 @@
                        match = false;
 
                return match;
+       }
+
+       public String getServiceName() {
+               return serviceName;
+       }
+
+       public void setServiceName(String serviceName) {
+               this.serviceName = serviceName;
        }
 
 }

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java?view=diff&rev=543894&r1=543893&r2=543894
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
 Sun Jun  3 07:02:04 2007
@@ -355,6 +355,7 @@
                        MessageContext newMessageContext = new MessageContext();
                        
newMessageContext.setConfigurationContext(configContext);
                        
+                       Options oldOptions = referenceMessage.getOptions();
                        Options newOptions = new Options ();
                        
                        newMessageContext.setOptions(newOptions);
@@ -427,7 +428,11 @@
 
                        //copying the serverSide property
                        
newMessageContext.setServerSide(referenceMessage.isServerSide());
-
+                       
+                       //this had to be set here to avoid a double invocation.
+                       if (oldOptions!=null)
+                               
newOptions.setUseSeparateListener(oldOptions.isUseSeparateListener());
+                       
                        return newMessageContext;
 
                } catch (AxisFault e) {

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=543894&r1=543893&r2=543894
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
 Sun Jun  3 07:02:04 2007
@@ -521,6 +521,8 @@
 
                        MessageContext responseMessageContext = 
msgCtx.getOperationContext().getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
                        SOAPEnvelope resenvelope = null;
+                       if (responseMessageContext!=null)
+                               resenvelope = 
responseMessageContext.getEnvelope();
                        
                        boolean transportInPresent = 
(msgCtx.getProperty(MessageContext.TRANSPORT_IN) != null);
                        if (!transportInPresent && 
(responseMessageContext==null || responseMessageContext.getEnvelope()==null)) {
@@ -528,6 +530,9 @@
                                return;
                        }
                        
+                       //to find out weather the response was built by me.
+                       boolean syncResponseBuilt = false;
+                       
                        if (responseMessageContext==null || 
responseMessageContext.getEnvelope()==null) {
                                if (responseMessageContext==null)
                                        responseMessageContext = new 
MessageContext();
@@ -550,16 +555,6 @@
                                                                        
transportInfoMap.get(Constants.Configuration.CHARACTER_SET_ENCODING));
                                }
                        
-                               //setting the message as serverSide will let it 
go through the MessageReceiver (may be callback MR).
-                               responseMessageContext.setServerSide(true);
-                       
-                               if 
(responseMessageContext.getSoapAction()==null) {
-                                       //if there is no SOAP action in the 
response message, Axis2 will wrongly identify it as a REST message
-                                       //This happens because we set 
serverSide to True in a previous step.
-                                       //So we have to add a empty SOAPAction 
here.
-                                       
responseMessageContext.setSoapAction("");
-                               }
-                       
                                
responseMessageContext.setConfigurationContext(msgCtx.getConfigurationContext());
                                
responseMessageContext.setTransportIn(msgCtx.getTransportIn());
                                
responseMessageContext.setTransportOut(msgCtx.getTransportOut());
@@ -586,6 +581,7 @@
                                                //We try to build the response 
out of the transport stream.
                                                resenvelope = 
TransportUtils.createSOAPMessage(responseMessageContext);
                                                
responseMessageContext.setEnvelope(resenvelope);
+                                               syncResponseBuilt = true;
                                        } else {
                                                
                                        }
@@ -633,6 +629,23 @@
                                
                        }
                        
+                       //if the syncResponseWas not built here and the client 
was not expecting a sync response. We will not try to execute 
+                       //here. Doing so will cause a double invocation for a 
async message. 
+                       if (msgCtx.getOptions().isUseSeparateListener()==true 
&&  !syncResponseBuilt) {
+                               return;
+                       }
+                       
+                       
+                       //setting the message as serverSide will let it go 
through the MessageReceiver (may be callback MR).
+                       responseMessageContext.setServerSide(true);
+               
+                       if (responseMessageContext.getSoapAction()==null) {
+                               //if there is no SOAP action in the response 
message, Axis2 will wrongly identify it as a REST message
+                               //This happens because we set serverSide to 
True in a previous step.
+                               //So we have to add a empty SOAPAction here.
+                               responseMessageContext.setSoapAction("");
+                       }
+
                        AxisEngine engine = new 
AxisEngine(msgCtx.getConfigurationContext());
                        if (resenvelope!=null) {
                                //we proceed only if we hv found a valid 
envelope.



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

Reply via email to