Author: mlovett
Date: Tue May 22 05:23:45 2007
New Revision: 540557

URL: http://svn.apache.org/viewvc?view=rev&rev=540557
Log:
Create a plug point to allow application context to be moved onto the 
InvokerWorker threads.

Added:
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/ContextManager.java
   (with props)
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/DummyContextManager.java
   (with props)
    
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnitTestContextManager.java
   (with props)
Modified:
    webservices/sandesha/trunk/java/maven.xml
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/policy/SandeshaPolicyBean.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/policy/builders/RMAssertionBuilder.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/InvokerBean.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/PropertyManager.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/Invoker.java
    
webservices/sandesha/trunk/java/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties
    webservices/sandesha/trunk/java/modules/mar/module.xml

Modified: webservices/sandesha/trunk/java/maven.xml
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/maven.xml?view=diff&rev=540557&r1=540556&r2=540557
==============================================================================
--- webservices/sandesha/trunk/java/maven.xml (original)
+++ webservices/sandesha/trunk/java/maven.xml Tue May 22 05:23:45 2007
@@ -277,11 +277,14 @@
                  </fileset>
                </copy>
 
-               <!-- Switch on serialization in the module.xml file -->
+               <!-- Switch on serialization in the module.xml file, and use 
the unit test context plugin -->
                <ant:unjar src="${maven.build.dir}/${mar.name}" 
dest="${serialize.temp.path}"/>
                <ant:replace file="${serialize.temp.path}/META-INF/module.xml" 
                  token="&lt;!-- 
&lt;sandesha2:UseMessageSerialization>true&lt;/sandesha2:UseMessageSerialization>
 -->"
                  
value="&lt;sandesha2:UseMessageSerialization>true&lt;/sandesha2:UseMessageSerialization>"/>
+               <ant:replace file="${serialize.temp.path}/META-INF/module.xml" 
+                 token="context.DummyContextManager"
+                 value="scenarios.UnitTestContextManager"/>
                <ant:jar 
jarfile="${serialize.client.path}/modules/${test.module.name}.mar" 
basedir="${serialize.temp.path}"/>
                <ant:jar 
jarfile="${serialize.server.path}/modules/${test.module.name}.mar" 
basedir="${serialize.temp.path}"/>
                

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java?view=diff&rev=540557&r1=540556&r2=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/Sandesha2Constants.java
 Tue May 22 05:23:45 2007
@@ -419,6 +419,8 @@
 
                public static final String SecurityManager = "SecurityManager";
 
+               public static final String ContextManager = "ContextManager";
+
                public static final String EnableMakeConnection = 
"EnableMakeConnection";
                
                public static final String EnableRMAnonURI = "EnableRMAnonURI";
@@ -457,6 +459,8 @@
                        
                        public static final String SecurityManager = 
"org.apache.sandesha2.security.dummy.DummySecurityManager";
 
+                       public static final String ContextManager = 
"org.apache.sandesha2.context.DummyContextManager";
+
                        public static final boolean EnableMakeConnection = true;
                        
                        public static final boolean EnableRMAnonURI = true;
@@ -539,6 +543,8 @@
        
        static final String SECURITY_MANAGER = "Sandesha2SecurityManager";
        
+       static final String CONTEXT_MANAGER = "Sandesha2ContextManager";
+       
        static final String RETRANSMITTABLE_PHASES = "RMRetransmittablePhases";
        
        static final String propertiesToCopyFromReferenceMessage = 
"propertiesToCopyFromReferenceMessage";
@@ -597,6 +603,7 @@
         public static final String ELEM_MSG_TYPES_TO_DROP = 
"MessageTypesToDrop";
         public static final String ELEM_STORAGE_MGR = "StorageManagers";
         public static final String ELEM_SEC_MGR = "SecurityManager";
+        public static final String ELEM_CONTEXT_MGR = "ContextManager";
         public static final String ELEM_INMEMORY_STORAGE_MGR = 
"InMemoryStorageManager";
         public static final String ELEM_PERMANENT_STORAGE_MGR = 
"PermanentStorageManager";
         public static final String ELEM_MAKE_CONNECTION = "MakeConnection";
@@ -620,6 +627,7 @@
         public static final QName Q_ELEM_MSG_TYPES_TO_DROP = new 
QName(URI_RM_POLICY_NS, ELEM_MSG_TYPES_TO_DROP, ATTR_WSRM);
         public static final QName Q_ELEM_STORAGE_MGR =new 
QName(URI_RM_POLICY_NS, ELEM_STORAGE_MGR, ATTR_WSRM);
         public static final QName Q_ELEM_SEC_MGR = new QName(URI_RM_POLICY_NS, 
ELEM_SEC_MGR, ATTR_WSRM);
+        public static final QName Q_ELEM_CONTEXT_MGR = new 
QName(URI_RM_POLICY_NS, ELEM_CONTEXT_MGR, ATTR_WSRM);
         public static final QName Q_ELEM_INMEMORY_STORAGE_MGR =new 
QName(URI_RM_POLICY_NS, ELEM_INMEMORY_STORAGE_MGR, ATTR_WSRM);
         public static final QName Q_ELEM_PERMANENT_STORAGE_MGR =new 
QName(URI_RM_POLICY_NS, ELEM_PERMANENT_STORAGE_MGR, ATTR_WSRM);
         public static final QName Q_ELEM_MAKE_CONNECTION = new 
QName(URI_RM_POLICY_NS, ELEM_MAKE_CONNECTION, ATTR_WSRM);

Added: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/ContextManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/ContextManager.java?view=auto&rev=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/ContextManager.java
 (added)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/ContextManager.java
 Tue May 22 05:23:45 2007
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2007 The Apache Software Foundation.
+ * Copyright 2007 International Business Machines Corp.
+ *
+ * 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.context;
+
+import java.io.Serializable;
+
+/**
+ * This interface allows the context surrounding an invocation to be saved and
+ * restored. This is useful when we are doing inOrder processing, as the 
service
+ * will be dispatched by the InvokerWorker (not the original transport thread),
+ * and context may have been lost by that switch.
+ * 
+ * Each ContextManager implementation should have a constructor that takes a
+ * Axis ConfigurationContext object.
+ */
+
+public interface ContextManager {
+
+       /**
+        * Store the current threads execution context. When embedded in an 
appserver,
+        * this provides a hook point to store classloaders, security context, 
JNDI, etc.
+        */
+       public Serializable storeContext();
+       
+       /**
+        * Wrap the provided runnable with execution context that was 
previously stored.
+        * We expect the resulting runnable to be dispatched by a thread pool 
or other
+        * worker, and the wrapper ensures that the correct execution context 
will be
+        * applied.
+        */
+       public Runnable wrapWithContext(Runnable work, Serializable context);
+       
+}

Propchange: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/ContextManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/DummyContextManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/DummyContextManager.java?view=auto&rev=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/DummyContextManager.java
 (added)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/DummyContextManager.java
 Tue May 22 05:23:45 2007
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2007 The Apache Software Foundation.
+ * Copyright 2007 International Business Machines Corp.
+ *
+ * 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.context;
+
+import java.io.Serializable;
+
+import org.apache.axis2.context.ConfigurationContext;
+
+public class DummyContextManager implements ContextManager {
+
+       public DummyContextManager(ConfigurationContext context) {
+               
+       }
+       
+       public Serializable storeContext() {
+               return null;
+       }
+
+       public Runnable wrapWithContext(Runnable work, Serializable context) {
+               return work;
+       }
+
+}

Propchange: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/context/DummyContextManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java?view=diff&rev=540557&r1=540556&r2=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
 Tue May 22 05:23:45 2007
@@ -28,6 +28,8 @@
        public static final String 
storageManagerMustImplement="storageManagerMustImplement";
        public static final String 
cannotInitSecurityManager="cannotInitSecurityManager";
        public static final String 
securityManagerMustImplement="securityManagerMustImplement";
+       public static final String 
cannotInitContextManager="cannotInitContextManager";
+       public static final String 
contextManagerMustImplement="contextManagerMustImplement";
        public static final String 
cannotFindModulePolicies="cannotFindModulePolicies";
        public static final String cannotPauseThread = "cannotPauseThread";
 

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java?view=diff&rev=540557&r1=540556&r2=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
 Tue May 22 05:23:45 2007
@@ -35,6 +35,7 @@
 import org.apache.sandesha2.RMMsgContext;
 import org.apache.sandesha2.Sandesha2Constants;
 import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.context.ContextManager;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
 import org.apache.sandesha2.msgreceivers.RMMessageReceiver;
@@ -362,7 +363,12 @@
                        InvokerBeanMgr storageMapMgr = 
storageManager.getInvokerBeanMgr();
 
                        storageManager.storeMessageContext(key, 
rmMsgCtx.getMessageContext());
-                       storageMapMgr.insert(new InvokerBean(key, msgNo, 
sequenceId));
+                       InvokerBean invokerBean = new InvokerBean(key, msgNo, 
sequenceId);
+                       
+                       ContextManager contextMgr = 
SandeshaUtil.getContextManager(configCtx);
+                       if(contextMgr != null) 
invokerBean.setContext(contextMgr.storeContext());
+
+                       storageMapMgr.insert(invokerBean);
 
                        // This will avoid performing application processing 
more than once.
                        
rmMsgCtx.setProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE, "true");

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/policy/SandeshaPolicyBean.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/policy/SandeshaPolicyBean.java?view=diff&rev=540557&r1=540556&r2=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/policy/SandeshaPolicyBean.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/policy/SandeshaPolicyBean.java
 Tue May 22 05:23:45 2007
@@ -51,6 +51,8 @@
     private String permanentStorageManagerClass = null;
 
     private String securityManagerClass = null;
+    
+    private String contextManagerClass = null;
 
     private long inactiveTimeoutValue;
     private boolean inactiveTimeoutValueSet = false;
@@ -203,7 +205,15 @@
     public void setSecurityManagerClass(String className) {
         this.securityManagerClass = className;
     }
+    
+    public String getContextManagerClass() {
+       return contextManagerClass;
+    }
 
+    public void setContextManagerClass(String className) {
+       this.contextManagerClass = className;
+    }
+    
     public QName getName() {
         return Sandesha2Constants.Assertions.Q_ELEM__RMBEAN;
     }
@@ -320,6 +330,11 @@
                        writer.writeCharacters(getSecurityManagerClass());
                        writer.writeEndElement();
                        
+                       //<wsrm:ContextManager />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_CONTEXT_MGR.getLocalPart(), namespaceURI);
+                       writer.writeCharacters(getContextManagerClass());
+                       writer.writeEndElement();
+
                        // <wsrm:MakeConnection>
                        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_MAKE_CONNECTION.getLocalPart(), 
namespaceURI);
                        

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/policy/builders/RMAssertionBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/policy/builders/RMAssertionBuilder.java?view=diff&rev=540557&r1=540556&r2=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/policy/builders/RMAssertionBuilder.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/policy/builders/RMAssertionBuilder.java
 Tue May 22 05:23:45 2007
@@ -143,6 +143,10 @@
                        }
                        
                 }
+ 
+            }  else if 
(Sandesha2Constants.Assertions.ELEM_CONTEXT_MGR.equals(name)) {
+                propertyBean.setContextManagerClass (element.getText().trim());
+
             } else 
if(Sandesha2Constants.Assertions.ELEM_MAKE_CONNECTION.equals(name)) {
                 if (element!=null) {
                        // Read the nested assertions

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/InvokerBean.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/InvokerBean.java?view=diff&rev=540557&r1=540556&r2=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/InvokerBean.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beans/InvokerBean.java
 Tue May 22 05:23:45 2007
@@ -17,6 +17,8 @@
 
 package org.apache.sandesha2.storage.beans;
 
+import java.io.Serializable;
+
 /**
  * This bean is used at the receiving side (of both server and client)
  * There is one object for each application message to be invoked.
@@ -40,6 +42,12 @@
        private String sequenceID;
        
        /**
+        * The runtime context that needs to be applied to the invoker thread 
before
+        * the message is run through the invoker.
+        */
+       private Serializable context;
+       
+       /**
         * Comment for <code>msgNo</code>
         * The message number of the message.
         */
@@ -107,6 +115,14 @@
         */
        public void setSequenceID(String sequenceId) {
                this.sequenceID = sequenceId;
+       }
+       
+       public Serializable getContext() {
+               return context;
+       }
+
+       public void setContext(Serializable context) {
+               this.context = context;
        }
 
        public String toString() {

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/PropertyManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/PropertyManager.java?view=diff&rev=540557&r1=540556&r2=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/PropertyManager.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/PropertyManager.java
 Tue May 22 05:23:45 2007
@@ -66,7 +66,7 @@
                loadMessageTypesToDrop(msgTypesToDrop, propertyBean);
 
                
propertyBean.setSecurityManagerClass(Sandesha2Constants.Properties.DefaultValues.SecurityManager);
-               
+               
propertyBean.setContextManagerClass(Sandesha2Constants.Properties.DefaultValues.ContextManager);
                
propertyBean.setEnableMakeConnection(Sandesha2Constants.Properties.DefaultValues.EnableMakeConnection);
                
propertyBean.setEnableRMAnonURI(Sandesha2Constants.Properties.DefaultValues.EnableRMAnonURI);
                
propertyBean.setUseMessageSerialization(Sandesha2Constants.Properties.DefaultValues.UseMessageSerialization);
@@ -134,6 +134,10 @@
                        String securityManagerClassStr = properties
                            
.getProperty(Sandesha2Constants.Properties.SecurityManager);
                        
loadSecurityManagerClass(securityManagerClassStr,propertyBean);
+                       
+                       String contextManagerClassStr = 
properties.getProperty(Sandesha2Constants.Properties.ContextManager);
+                       
loadContextManagerClass(contextManagerClassStr,propertyBean);
+
                } catch (IOException e) {
                        throw new SandeshaException(e);
                }
@@ -504,6 +508,13 @@
                if (securityManagerClassStr != null) {
                        securityManagerClassStr = 
securityManagerClassStr.trim();
                        
propertyBean.setSecurityManagerClass(securityManagerClassStr);
+               }
+       }
+
+       private static void loadContextManagerClass(String 
contextManagerClassStr, SandeshaPolicyBean propertyBean) {
+               if (contextManagerClassStr != null) {
+                       contextManagerClassStr = contextManagerClassStr.trim();
+                       
propertyBean.setContextManagerClass(contextManagerClassStr);
                }
        }
        

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=540557&r1=540556&r2=540557
==============================================================================
--- 
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
 Tue May 22 05:23:45 2007
@@ -65,6 +65,7 @@
 import org.apache.sandesha2.Sandesha2Constants;
 import org.apache.sandesha2.SandeshaException;
 import org.apache.sandesha2.client.SandeshaClientConstants;
+import org.apache.sandesha2.context.ContextManager;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
 import org.apache.sandesha2.policy.SandeshaPolicyBean;
@@ -764,6 +765,54 @@
                }
        }
        
+       public static ContextManager getContextManager(ConfigurationContext 
context) throws SandeshaException {
+               ContextManager mgr = null;
+               AxisConfiguration config = context.getAxisConfiguration();
+               Parameter p = 
config.getParameter(Sandesha2Constants.CONTEXT_MANAGER);
+               if(p != null) mgr = (ContextManager) p.getValue();
+               if (mgr != null) return mgr;
+
+               try {
+                       //Currently module policies are used to find the 
context impl. These cant be overriden
+                       String securityManagerClassStr = 
getDefaultPropertyBean(context.getAxisConfiguration()).getContextManagerClass();
+                       mgr = 
getContextManagerInstance(securityManagerClassStr,context);
+                       p = new 
Parameter(Sandesha2Constants.CONTEXT_MANAGER,mgr);
+                       config.addParameter(p);
+               } catch(AxisFault e) {
+                       String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.cannotInitContextManager, 
e.toString());
+                       throw new SandeshaException(message,e);
+               }
+               return mgr;
+       }
+
+       private static ContextManager getContextManagerInstance(String 
className,ConfigurationContext context) throws SandeshaException {
+               try {
+                       ClassLoader classLoader = null;
+                       AxisConfiguration config = 
context.getAxisConfiguration();
+                       Parameter classLoaderParam = 
config.getParameter(Sandesha2Constants.MODULE_CLASS_LOADER);
+                       if(classLoaderParam != null) classLoader = 
(ClassLoader) classLoaderParam.getValue(); 
+
+                       if (classLoader==null)
+                               throw new SandeshaException 
(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.classLoaderNotFound));
+                   
+                       Class c = classLoader.loadClass(className);
+                       Class configContextClass = context.getClass();
+                       
+                       Constructor constructor = c.getConstructor(new Class[] 
{ configContextClass });
+                       Object obj = constructor.newInstance(new Object[] 
{context});
+
+                       if (!(obj instanceof ContextManager)) {
+                               String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.contextManagerMustImplement,
 className);
+                               throw new SandeshaException(message);
+                       }
+                       return (ContextManager) obj;
+                       
+               } catch (Exception e) {
+                       String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.cannotInitContextManager, 
e.toString());
+                       throw new SandeshaException(message,e);
+               }
+       }
+
        public static boolean isWSRMAnonymous(String address) {
                if (address!=null && 
address.startsWith(Sandesha2Constants.SPEC_2007_02.ANONYMOUS_URI_PREFIX))
                        return true;

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Invoker.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Invoker.java?view=diff&rev=540557&r1=540556&r2=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Invoker.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/Invoker.java
 Tue May 22 05:23:45 2007
@@ -26,6 +26,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.sandesha2.Sandesha2Constants;
 import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.context.ContextManager;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
 import org.apache.sandesha2.storage.StorageManager;
@@ -112,9 +113,14 @@
                                                worker.setLock(getWorkerLock());
                                                worker.setWorkId(workId);
                                                
-                                               //before we execute we need to 
set the 
+                                               // Wrap the invoker worker with 
the correct context, if needed.
+                                               Runnable work = worker;
+                                               ContextManager contextMgr = 
SandeshaUtil.getContextManager(context);
+                                               if(contextMgr != null) {
+                                                       work = 
contextMgr.wrapWithContext(work, invoker.getContext());
+                                               }
                                                
-                                               threadPool.execute(worker);
+                                               threadPool.execute(work);
                                        
                                                //adding the workId to the lock 
after assigning it to a thread makes sure 
                                                //that all the workIds in the 
Lock are handled by threads.
@@ -319,7 +325,13 @@
                                worker.setLock(getWorkerLock());
                                worker.setWorkId(workId);
                                
-                               threadPool.execute(worker);
+                               // Wrap the invoker worker with the correct 
context, if needed.
+                               Runnable work = worker;
+                               ContextManager contextMgr = 
SandeshaUtil.getContextManager(context);
+                               if(contextMgr != null) {
+                                       work = contextMgr.wrapWithContext(work, 
bean.getContext());
+                               }
+                               threadPool.execute(work);
                                
                                //adding the workId to the lock after assigning 
it to a thread makes sure 
                                //that all the workIds in the Lock are handled 
by threads.

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties?view=diff&rev=540557&r1=540556&r2=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties
 Tue May 22 05:23:45 2007
@@ -28,6 +28,8 @@
 storageManagerMustImplement=StorageManager {0} must implement the 
org.apache.sandesha2.storage.StorageManager interface.
 cannotInitSecurityManager=Cannot initialize the given security manager due to 
exception {0}.
 securityManagerMustImplement=SecurityManager {0} must implement the 
org.apache.sandesha2.storage.StorageManager interface.
+cannotInitContextManager=Cannot initialize the given context manager due to 
exception {0}.
+contextManagerMustImplement=ContextManager {0} must implement the 
org.apache.sandesha2.context.ContextManager interface.
 cannotFindModulePolicies=No policies were found in the module.xml at the 
module initiation time.
 cannotPauseThread=Cannot pause a non-running thread.
 

Modified: webservices/sandesha/trunk/java/modules/mar/module.xml
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/mar/module.xml?view=diff&rev=540557&r1=540556&r2=540557
==============================================================================
--- webservices/sandesha/trunk/java/modules/mar/module.xml (original)
+++ webservices/sandesha/trunk/java/modules/mar/module.xml Tue May 22 05:23:45 
2007
@@ -125,6 +125,7 @@
              
              <!-- This will not be overriden by service level policies -->
                                
<sandesha2:SecurityManager>org.apache.sandesha2.security.dummy.DummySecurityManager</sandesha2:SecurityManager>
+                               
<sandesha2:ContextManager>org.apache.sandesha2.context.DummyContextManager</sandesha2:ContextManager>
                                
                                <sandesha2:MakeConnection>
                                  <sandesha2:Enabled>true</sandesha2:Enabled>

Added: 
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnitTestContextManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnitTestContextManager.java?view=auto&rev=540557
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnitTestContextManager.java
 (added)
+++ 
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnitTestContextManager.java
 Tue May 22 05:23:45 2007
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2007 The Apache Software Foundation.
+ * Copyright 2007 International Business Machines Corp.
+ *
+ * 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.scenarios;
+
+import java.io.Serializable;
+
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.sandesha2.context.ContextManager;
+
+public class UnitTestContextManager implements ContextManager {
+
+       private static final String id = "UNIT_TEST_CONTEXT";
+       
+       public UnitTestContextManager(ConfigurationContext context) {
+               
+       }
+       
+       public Serializable storeContext() {
+               return id;
+       }
+
+       public Runnable wrapWithContext(final Runnable work,
+                                                                       final 
Serializable context) {
+               
+               Runnable result = new Runnable() {
+                       public void run() {
+                               if(!id.equals(context)) throw new 
RuntimeException("Unexpected context " + context);
+                               System.out.println("Switching to " + context);
+                               work.run();
+                       }
+               };
+
+               return result;
+       }
+
+}

Propchange: 
webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnitTestContextManager.java
------------------------------------------------------------------------------
    svn:eol-style = native



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

Reply via email to