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);
+ }
+ }
}