Author: rr
Date: Fri Nov 20 15:15:43 2009
New Revision: 882600

URL: http://svn.apache.org/viewvc?rev=882600&view=rev
Log:
ODE-709: Make SU classloader available for process (by Maciej Prochniak)

Modified:
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java
    
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeSUManager.java
    
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeServiceUnit.java

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java?rev=882600&r1=882599&r2=882600&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
 Fri Nov 20 15:15:43 2009
@@ -402,33 +402,37 @@
                 return;
             }
 
-            
-            if (we.getType().equals(WorkEvent.Type.INVOKE_CHECK)) {
-                if (__log.isDebugEnabled()) __log.debug("handleWorkEvent: 
InvokeCheck event for mexid " + we.getMexId());
-                
-                sendPartnerRoleFailure(we, 
MessageExchange.FailureType.COMMUNICATION_ERROR);
-                return;
-            } else if (we.getType().equals(WorkEvent.Type.INVOKE_INTERNAL)) {
-                if (__log.isDebugEnabled()) __log.debug("handleWorkEvent: 
InvokeInternal event for mexid " + we.getMexId());
-
-                setMessageExchangeProcess(we.getMexId(), 
process.getProcessDAO());
-                MyRoleMessageExchangeImpl mex = (MyRoleMessageExchangeImpl) 
getMessageExchange(we.getMexId());
-                if (!process.processInterceptors(mex, 
InterceptorInvoker.__onJobScheduled)) {
-                    boolean isTwoWay = 
Boolean.valueOf(mex.getProperty("isTwoWay"));
-                    if (isTwoWay) {
-                        String causeCodeValue = mex.getProperty("causeCode");
-                        mex.getDAO().setProcess(process.getProcessDAO());
-                        sendMyRoleFault(process, we, causeCodeValue != null ? 
+            ClassLoader cl = Thread.currentThread().getContextClassLoader();
+            try {
+                
Thread.currentThread().setContextClassLoader(process._classLoader);            
+                if (we.getType().equals(WorkEvent.Type.INVOKE_CHECK)) {
+                    if (__log.isDebugEnabled()) __log.debug("handleWorkEvent: 
InvokeCheck event for mexid " + we.getMexId());
+               
+                    sendPartnerRoleFailure(we, 
MessageExchange.FailureType.COMMUNICATION_ERROR);
+                    return;
+                } else if 
(we.getType().equals(WorkEvent.Type.INVOKE_INTERNAL)) {
+                    if (__log.isDebugEnabled()) __log.debug("handleWorkEvent: 
InvokeInternal event for mexid " + we.getMexId());
+
+                    setMessageExchangeProcess(we.getMexId(), 
process.getProcessDAO());
+                    MyRoleMessageExchangeImpl mex = 
(MyRoleMessageExchangeImpl) getMessageExchange(we.getMexId());
+                    if (!process.processInterceptors(mex, 
InterceptorInvoker.__onJobScheduled)) {
+                        boolean isTwoWay = 
Boolean.valueOf(mex.getProperty("isTwoWay"));
+                        if (isTwoWay) {
+                            String causeCodeValue = 
mex.getProperty("causeCode");
+                            mex.getDAO().setProcess(process.getProcessDAO());
+                            sendMyRoleFault(process, we, causeCodeValue != 
null ? 
                                 Integer.valueOf(causeCodeValue) : 
InvalidProcessException.DEFAULT_CAUSE_CODE);
-                        return;
-                    } else {
-                        throw new 
Scheduler.JobProcessorException(checkRetry(we));
+                            return;
+                        } else {
+                            throw new 
Scheduler.JobProcessorException(checkRetry(we));
+                        }
                     }
                 }
+                process.handleWorkEvent(jobInfo.jobDetail);
+                debuggingDelay();
+            } finally {
+                Thread.currentThread().setContextClassLoader(cl);
             }
-
-            process.handleWorkEvent(jobInfo.jobDetail);
-            debuggingDelay();
         } catch (BpelEngineException bee) {
             __log.error(__msgs.msgScheduledJobFailed(we.getDetail()), bee);
             throw new Scheduler.JobProcessorException(bee, checkRetry(we));

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java?rev=882600&r1=882599&r2=882600&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
 Fri Nov 20 15:15:43 2009
@@ -113,6 +113,8 @@
     private volatile long _lastUsed;
 
     BpelEngineImpl _engine;
+    ClassLoader _classLoader = getClass().getClassLoader();
+
     DebuggerSupport _debugger;
     ExpressionLanguageRuntimeRegistry _expLangRuntimeRegistry;
     private ReplacementMap _replacementMap;

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java?rev=882600&r1=882599&r2=882600&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
 Fri Nov 20 15:15:43 2009
@@ -21,7 +21,13 @@
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.net.URI;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 import javax.wsdl.Operation;
 import javax.xml.namespace.QName;
@@ -42,6 +48,8 @@
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
 import org.apache.ode.bpel.dao.ScopeDAO;
 import org.apache.ode.bpel.dao.XmlDataDAO;
+import org.apache.ode.bpel.evar.ExternalVariableModuleException;
+import org.apache.ode.bpel.evar.ExternalVariableModule.Value;
 import org.apache.ode.bpel.evt.CorrelationSetWriteEvent;
 import org.apache.ode.bpel.evt.ProcessCompletionEvent;
 import org.apache.ode.bpel.evt.ProcessInstanceEvent;
@@ -61,6 +69,7 @@
 import org.apache.ode.bpel.iapi.MessageExchange.FailureType;
 import org.apache.ode.bpel.iapi.MessageExchange.MessageExchangePattern;
 import org.apache.ode.bpel.iapi.ProcessConf.CLEANUP_CATEGORY;
+import org.apache.ode.bpel.intercept.InterceptorInvoker;
 import org.apache.ode.bpel.memdao.ProcessInstanceDaoImpl;
 import org.apache.ode.bpel.o.OMessageVarType;
 import org.apache.ode.bpel.o.OPartnerLink;
@@ -1481,4 +1490,9 @@
     public void setCurrentEventDateTime(Date eventDateTime) {
         _currentEventDateTime = eventDateTime;
     }
+
+    public ClassLoader getProcessClassLoader() {
+        return _bpelProcess._classLoader;
+    }
+
 }

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java?rev=882600&r1=882599&r2=882600&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
 Fri Nov 20 15:15:43 2009
@@ -309,6 +309,7 @@
             __log.debug("Registering process " + conf.getProcessId() + " with 
server.");
 
             BpelProcess process = createBpelProcess(conf);
+           process._classLoader = 
Thread.currentThread().getContextClassLoader();
 
             _engine.registerProcess(process);
             _registeredProcesses.add(process);

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java?rev=882600&r1=882599&r2=882600&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/BpelRuntimeContext.java
 Fri Nov 20 15:15:43 2009
@@ -299,4 +299,6 @@
     void processOutstandingRequest(PartnerLinkInstance partnerLink, String 
opName, String bpelMexId, String odeMexId) throws FaultException;
 
     Date getCurrentEventDateTime();
+
+    ClassLoader getProcessClassLoader();
 }

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java?rev=882600&r1=882599&r2=882600&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/CoreBpelTest.java
 Fri Nov 20 15:15:43 2009
@@ -457,6 +457,10 @@
         // TODO Auto-generated method stub
         return null;
     }
+
+    public ClassLoader getProcessClassLoader() {
+        return getClass().getClassLoader();
+    }
     
     public void processOutstandingRequest(PartnerLinkInstance partnerLink,
         String opName, String mexId, String mexRef) {

Modified: 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeSUManager.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeSUManager.java?rev=882600&r1=882599&r2=882600&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeSUManager.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeSUManager.java
 Fri Nov 20 15:15:43 2009
@@ -112,13 +112,16 @@
       __log.error(errmsg, ex);
       throw new DeploymentException(errmsg, ex);
     }
-
+    ClassLoader cl = Thread.currentThread().getContextClassLoader();
     try {
-      su.start();
+       
Thread.currentThread().setContextClassLoader(su.getConfigurationClassLoader());
+       su.start();
     } catch (Exception ex) {
       String errmsg = __msgs.msgServiceUnitStartFailed(serviceUnitID);
       __log.error(errmsg, ex);
       throw new DeploymentException(errmsg, ex);
+    } finally {
+       Thread.currentThread().setContextClassLoader(cl);
     }
 
   }

Modified: 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeServiceUnit.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeServiceUnit.java?rev=882600&r1=882599&r2=882600&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeServiceUnit.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeServiceUnit.java
 Fri Nov 20 15:15:43 2009
@@ -19,16 +19,21 @@
 
 package org.apache.ode.jbi;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import javax.jbi.management.DeploymentException;
-import javax.xml.namespace.QName;
 import java.io.File;
+import java.io.FilenameFilter;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+import javax.jbi.management.DeploymentException;
+import javax.xml.namespace.QName;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 /**
  * Representation of a JBI service unit. A JBI service unit may actually 
consist
  * of multiple processes.
@@ -49,6 +54,7 @@
 
     private Collection<QName> _registered = new ArrayList<QName>();
     
+    private static final String LIB_DIR = "lib";
     
     /** Ctor. */
     OdeServiceUnit(OdeContext ode, String serviceUnitID, String 
serviceUnitRootPath) {
@@ -58,13 +64,17 @@
     }
 
     public void deploy() throws DeploymentException {
-        try {
+       ClassLoader cl = Thread.currentThread().getContextClassLoader();
+       try {
+               
Thread.currentThread().setContextClassLoader(getConfigurationClassLoader());
             _ode._store.deploy(_serviceUnitRootPath);
         } catch (Exception ex) {
             String errmsg = 
__msgs.msgOdeProcessDeploymentFailed(_serviceUnitRootPath, _serviceUnitID);
             __log.error(errmsg, ex);
             throw new DeploymentException(errmsg, ex);
-        } 
+        } finally {
+               Thread.currentThread().setContextClassLoader(cl);
+        }
     }
 
     public void undeploy() throws Exception {
@@ -133,5 +143,35 @@
             }
         }
     }
+    
+    public ClassLoader getConfigurationClassLoader() throws 
DeploymentException {
+       return new URLClassLoader(getDefaultLocations(), 
getClass().getClassLoader());
+    }
+    
+    protected URL[] getDefaultLocations() throws DeploymentException {
+        try {
+            File[] jars = new File(_serviceUnitRootPath, 
LIB_DIR).listFiles(new FilenameFilter() {
+                public boolean accept(File dir, String name) {
+                    name = name.toLowerCase();
+                    return name.endsWith(".jar") || name.endsWith(".zip");
+                }
+            });
+            URL[] urls = new URL[jars != null ? jars.length + 1 : 1];
+            urls[0] = _serviceUnitRootPath.toURI().toURL();
+            if (jars != null) {
+                for (int i = 0; i < jars.length; i++) {
+                    urls[i + 1] = jars[i].toURI().toURL();
+                }
+            }
+            if (__log.isDebugEnabled()) {
+               for (URL u : urls) {
+                       __log.debug("in classpath for "+_serviceUnitID+" using 
url: "+u);
+               }
+            }
+            return urls;
+        } catch (MalformedURLException e) {
+            throw new DeploymentException("Unable to get default classpath 
locations", e);
+        }
+    }
 
 }


Reply via email to