You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by ka...@apache.org on 2009/04/03 20:06:39 UTC
svn commit: r761744 [2/2] - in /ode/branches/APACHE_ODE_1.X: ./ agents/
agents/src/ agents/src/main/ agents/src/main/java/
agents/src/main/java/org/ agents/src/main/java/org/apache/
agents/src/main/java/org/apache/ode/ agents/src/main/java/org/apache/o...
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=761744&r1=761743&r2=761744&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 Apr 3 18:06:37 2009
@@ -21,7 +21,6 @@
import java.io.InputStream;
import java.net.URI;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -33,6 +32,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ode.agents.memory.SizingAgent;
import org.apache.ode.bpel.common.FaultException;
import org.apache.ode.bpel.common.ProcessState;
import org.apache.ode.bpel.dao.BpelDAOConnection;
@@ -50,6 +50,7 @@
import org.apache.ode.bpel.iapi.PartnerRoleChannel;
import org.apache.ode.bpel.iapi.ProcessConf;
import org.apache.ode.bpel.iapi.ProcessConf.CLEANUP_CATEGORY;
+import org.apache.ode.bpel.intercept.InstanceCountThrottler;
import org.apache.ode.bpel.intercept.InterceptorInvoker;
import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
import org.apache.ode.bpel.o.OElementVarType;
@@ -61,7 +62,6 @@
import org.apache.ode.bpel.runtime.ExpressionLanguageRuntimeRegistry;
import org.apache.ode.bpel.runtime.PROCESS;
import org.apache.ode.bpel.runtime.PropertyAliasEvaluationContext;
-import org.apache.ode.bpel.runtime.InvalidProcessException;
import org.apache.ode.bpel.runtime.channels.FaultData;
import org.apache.ode.jacob.soup.ReplacementMap;
import org.apache.ode.utils.ObjectPrinter;
@@ -123,11 +123,20 @@
private ExternalVariableManager _evm;
+ public static final QName PROP_PATH = new QName("PATH");
+ public static final QName PROP_SVG = new QName("SVG");
+ public static final QName PROP_LAZY_HYDRATE = new QName("process.hydration.lazy");
+ public static final QName PROP_MAX_INSTANCES = new QName("process.instance.throttled.maximum.count");
+
+ // The ratio of in-memory vs serialized size of compiled bpel object.
+ private static final int PROCESS_MEMORY_TO_SERIALIZED_SIZE_RATIO = 5;
+
public BpelProcess(ProcessConf conf) {
_pid = conf.getProcessId();
_pconf = conf;
_hydrationLatch = new HydrationLatch();
}
+
/**
* Retrives the base URI to use for local resource resolution.
@@ -358,8 +367,8 @@
* message exchange
* @return <code>true</code> if execution should continue, <code>false</code> otherwise
*/
- boolean processInterceptors(MyRoleMessageExchangeImpl mex, InterceptorInvoker invoker) {
- InterceptorContextImpl ictx = new InterceptorContextImpl(_engine._contexts.dao.getConnection(), getProcessDAO(), _pconf);
+ public boolean processInterceptors(MyRoleMessageExchangeImpl mex, InterceptorInvoker invoker) {
+ InterceptorContextImpl ictx = new InterceptorContextImpl(_engine._contexts.dao.getConnection(), getProcessDAO(), _pconf, _engine, this);
for (MessageExchangeInterceptor i : _mexInterceptors)
if (!mex.processInterceptor(i, mex, ictx, invoker))
@@ -390,26 +399,7 @@
__log.debug("InvokeInternal event for mexid " + we.getMexId());
}
MyRoleMessageExchangeImpl mex = (MyRoleMessageExchangeImpl) _engine.getMessageExchange(we.getMexId());
- try {
- invokeProcess(mex);
- } catch (InvalidProcessException e) {
- // we're invoking a target process, trying to see if we can retarget the message
- // to the current version (only applies when it's a new process creation)
- if (e.getCauseCode() == InvalidProcessException.RETIRED_CAUSE_CODE) {
- boolean found = false;
- for (BpelProcess process : getEngine()._activeProcesses.values()) {
- if (process.getConf().getState().equals(org.apache.ode.bpel.iapi.ProcessState.ACTIVE)
- && process.getConf().getType().equals(getConf().getType())) {
- we.setProcessId(process._pid);
- mex._process = process;
- found = true;
- process.handleWorkEvent(jobData);
- break;
- }
- }
- if (!found) throw e;
- } else throw e;
- }
+ invokeProcess(mex);
} else {
// Instance level events
ProcessInstanceDAO procInstance = getProcessDAO().getInstance(we.getIID());
@@ -550,6 +540,9 @@
_sharedEps = _engine.getSharedEndpoints();
_debugger = createDebuggerSupport();
+ if (getInstanceMaximumCount() < Integer.MAX_VALUE)
+ registerMessageExchangeInterceptor(new InstanceCountThrottler());
+
__log.debug("Activating " + _pid);
// Activate all the my-role endpoints.
for (Map.Entry<String, Endpoint> entry : _pconf.getProvideEndpoints().entrySet()) {
@@ -560,7 +553,7 @@
initialEPR = _sharedEps.getEndpointReference(endpoint);
if (initialEPR == null) {
// Create an EPR by physically activating the endpoint
- initialEPR = _engine._contexts.bindingContext.activateMyRoleEndpoint(_pid, entry.getValue());
+ initialEPR = _engine._contexts.bindingContext.activateMyRoleEndpoint(_pid, endpoint);
_sharedEps.addEndpoint(endpoint, initialEPR);
__log.debug("Activated " + _pid + " myrole " + entry.getKey() + ": EPR is " + initialEPR);
}
@@ -568,7 +561,7 @@
_sharedEps.incrementReferenceCount(endpoint);
} else {
// Create an EPR by physically activating the endpoint
- initialEPR = _engine._contexts.bindingContext.activateMyRoleEndpoint(_pid, entry.getValue());
+ initialEPR = _engine._contexts.bindingContext.activateMyRoleEndpoint(_pid, endpoint);
__log.debug("Activated " + _pid + " myrole " + entry.getKey() + ": EPR is " + initialEPR);
}
_myEprs.put(endpoint, initialEPR);
@@ -637,7 +630,7 @@
}
}
- protected QName getPID() {
+ public QName getPID() {
return _pid;
}
@@ -891,7 +884,7 @@
__log.error(errmsg);
throw new BpelEngineException(errmsg, e);
}
-
+
if (_partnerRoles == null) {
_partnerRoles = new HashMap<OPartnerLink, PartnerLinkPartnerRoleImpl>();
}
@@ -937,6 +930,7 @@
+ prole._initialEPR);
}
}
+ _engine.setProcessSize(_pid, true);
_hydratedOnce = true;
}
@@ -975,12 +969,17 @@
} catch (Exception ex) {
String errmsg = "DbError";
__log.error(errmsg, ex);
+ ex.printStackTrace();
throw new BpelEngineException(errmsg, ex);
}
}
}
}
+
+ public int getInstanceInUseCount() {
+ return hintIsHydrated() ? _hydrationLatch.getDepth(1) : 0;
+ }
private void registerExprLang(OProcess oprocess) {
for (OExpressionLanguage elang : oprocess.expressionLanguages) {
@@ -1039,8 +1038,59 @@
}
private boolean hasActiveInstances(ProcessDAO processDAO) {
- Collection<ProcessInstanceDAO> activeInstances = processDAO.getActiveInstances();
- return (activeInstances != null && activeInstances.size() > 0);
+ // Select count of instances instead of all active instances
+ // Collection<ProcessInstanceDAO> activeInstances = processDAO.getActiveInstances();
+ // return (activeInstances != null && activeInstances.size() > 0);
+ return processDAO.getNumInstances() > 0;
+ }
+
+ public void registerMessageExchangeInterceptor(MessageExchangeInterceptor interceptor) {
+ _mexInterceptors.add(interceptor);
+ }
+
+ public void unregisterMessageExchangeInterceptor(MessageExchangeInterceptor interceptor) {
+ _mexInterceptors.remove(interceptor);
+ }
+
+ public long sizeOf() {
+ // try to get actual size from sizing agent, if enabled
+ long footprint = SizingAgent.deepSizeOf(this);
+ // if unsuccessful, estimate size (this is a inaccurate guess)
+ if (footprint == 0) {
+ footprint = getEstimatedHydratedSize();
+ }
+ // add the sizes of all the services this process provides
+ for (EndpointReference myEpr : _myEprs.values()) {
+ footprint += _engine._contexts.bindingContext.calculateSizeofService(myEpr);
+ }
+ // return the total footprint
+ return footprint;
+ }
+
+ public String getProcessProperty(QName property, String defaultValue) {
+ Text text = (Text) getProcessProperty(property);
+ if (text == null) {
+ return defaultValue;
+ }
+ String value = text.getWholeText();
+ return (value == null) ? defaultValue : value;
+ }
+
+ public boolean isHydrationLazy() {
+ return Boolean.valueOf(getProcessProperty(PROP_LAZY_HYDRATE, "true"));
+ }
+
+ public boolean isHydrationLazySet() {
+ return getProcessProperty(PROP_LAZY_HYDRATE) != null;
+ }
+
+ public int getInstanceMaximumCount() {
+ return Integer.valueOf(getProcessProperty(PROP_MAX_INSTANCES, Integer.toString(_engine.getInstanceThrottledMaximumCount())));
+ }
+
+ public long getEstimatedHydratedSize() {
+ return _pconf.getCBPFileSize() *
+ PROCESS_MEMORY_TO_SERIALIZED_SIZE_RATIO;
}
public long getTimeout(OPartnerLink partnerLink) {
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=761744&r1=761743&r2=761744&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 Apr 3 18:06:37 2009
@@ -24,6 +24,7 @@
import java.util.*;
import javax.wsdl.Operation;
+import javax.wsdl.OperationType;
import javax.xml.namespace.QName;
import org.apache.commons.logging.Log;
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=761744&r1=761743&r2=761744&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 Apr 3 18:06:37 2009
@@ -88,9 +88,10 @@
private State _state = State.SHUTDOWN;
private Contexts _contexts = new Contexts();
+ private Properties _configProperties;
private DehydrationPolicy _dehydrationPolicy;
private boolean _hydrationLazy;
- private Properties _configProperties;
+ private int _hydrationLazyMinimumSize;
BpelEngineImpl _engine;
protected BpelDatabase _db;
@@ -289,8 +290,10 @@
_engine.registerProcess(process);
_registeredProcesses.add(process);
- if (!_hydrationLazy) {
+ if (!isLazyHydratable(process)) {
process.hydrate();
+ } else {
+ _engine.setProcessSize(process.getPID(), false);
}
__log.info(__msgs.msgProcessRegistered(conf.getProcessId()));
@@ -298,6 +301,16 @@
_mngmtLock.writeLock().unlock();
}
}
+
+ private boolean isLazyHydratable(BpelProcess process) {
+ if (process.isHydrationLazySet()) {
+ return process.isHydrationLazy();
+ }
+ if (!_hydrationLazy) {
+ return false;
+ }
+ return process.getEstimatedHydratedSize() < _hydrationLazyMinimumSize;
+ }
// enable extensibility
protected BpelProcess createBpelProcess(ProcessConf conf) {
@@ -343,7 +356,7 @@
*/
public void registerMessageExchangeInterceptor(MessageExchangeInterceptor interceptor) {
// NOTE: do not synchronize, globalInterceptors is copy-on-write.
- _contexts.globalIntereceptors.add(interceptor);
+ _contexts.globalInterceptors.add(interceptor);
}
/**
@@ -352,7 +365,7 @@
*/
public void unregisterMessageExchangeInterceptor(MessageExchangeInterceptor interceptor) {
// NOTE: do not synchronize, globalInterceptors is copy-on-write.
- _contexts.globalIntereceptors.remove(interceptor);
+ _contexts.globalInterceptors.remove(interceptor);
}
/**
@@ -480,4 +493,22 @@
this._hydrationLazy = hydrationLazy;
}
+ public void setProcessThrottledMaximumSize(
+ long hydrationThrottledMaximumSize) {
+ _engine.setProcessThrottledMaximumSize(hydrationThrottledMaximumSize);
+ }
+
+ public void setProcessThrottledMaximumCount(
+ int hydrationThrottledMaximumCount) {
+ _engine.setProcessThrottledMaximumCount(hydrationThrottledMaximumCount);
+ }
+
+ public void setHydrationLazyMinimumSize(int hydrationLazyMinimumSize) {
+ this._hydrationLazyMinimumSize = hydrationLazyMinimumSize;
+ }
+
+ public void setInstanceThrottledMaximumCount(
+ int instanceThrottledMaximumCount) {
+ _engine.setInstanceThrottledMaximumCount(instanceThrottledMaximumCount);
+ }
}
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java Fri Apr 3 18:06:37 2009
@@ -52,7 +52,7 @@
BpelDAOConnectionFactory inMemDao;
/** Global Message-Exchange interceptors. Must be copy-on-write!!! */
- final List<MessageExchangeInterceptor >globalIntereceptors = new CopyOnWriteArrayList<MessageExchangeInterceptor>();
+ final List<MessageExchangeInterceptor >globalInterceptors = new CopyOnWriteArrayList<MessageExchangeInterceptor>();
/** Global event listeners. Must be copy-on-write!!! */
final List<BpelEventListener> eventListeners = new CopyOnWriteArrayList<BpelEventListener>();
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InterceptorContextImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InterceptorContextImpl.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InterceptorContextImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InterceptorContextImpl.java Fri Apr 3 18:06:37 2009
@@ -20,6 +20,7 @@
import org.apache.ode.bpel.dao.BpelDAOConnection;
import org.apache.ode.bpel.dao.ProcessDAO;
+import org.apache.ode.bpel.iapi.BpelEngine;
import org.apache.ode.bpel.iapi.ProcessConf;
import org.apache.ode.bpel.intercept.MessageExchangeInterceptor.InterceptorContext;
@@ -33,11 +34,15 @@
private ProcessDAO _processDao;
private BpelDAOConnection _connection;
private ProcessConf _pconf;
+ private BpelEngine _bpelEngine;
+ private BpelProcess _bpelProcess;
- public InterceptorContextImpl(BpelDAOConnection connection, ProcessDAO processDAO, ProcessConf pconf) {
+ public InterceptorContextImpl(BpelDAOConnection connection, ProcessDAO processDAO, ProcessConf pconf, BpelEngine bpelEngine, BpelProcess bpelProcess) {
_connection = connection;
_processDao = processDAO;
_pconf = pconf;
+ _bpelEngine = bpelEngine;
+ _bpelProcess = bpelProcess;
}
public BpelDAOConnection getConnection() {
@@ -51,5 +56,13 @@
public ProcessConf getProcessConf() {
return _pconf;
}
+
+ public BpelEngine getBpelEngine() {
+ return _bpelEngine;
+ }
+
+ public BpelProcess getBpelProcess() {
+ return _bpelProcess;
+ }
}
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageExchangeImpl.java Fri Apr 3 18:06:37 2009
@@ -155,6 +155,8 @@
setStatus(Status.FAULT);
getDAO().setFault(faultType);
getDAO().setResponse(((MessageImpl)outputFaultMessage)._dao);
+
+ responseReceived();
}
void setFaultExplanation(String explanation) {
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MyRoleMessageExchangeImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MyRoleMessageExchangeImpl.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MyRoleMessageExchangeImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MyRoleMessageExchangeImpl.java Fri Apr 3 18:06:37 2009
@@ -19,6 +19,7 @@
package org.apache.ode.bpel.engine;
+import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
@@ -79,7 +80,7 @@
*/
private boolean processInterceptors(MyRoleMessageExchangeImpl mex, InterceptorInvoker invoker) {
InterceptorContextImpl ictx = new InterceptorContextImpl(_engine._contexts.dao.getConnection(),
- mex._dao.getProcess(), null);
+ mex._dao.getProcess(), null, _engine, _process);
for (MessageExchangeInterceptor i : _engine.getGlobalInterceptors())
if (!processInterceptor(i, mex, ictx, invoker))
@@ -184,7 +185,9 @@
public void release(boolean instanceSucceeded) {
if(__log.isDebugEnabled()) __log.debug("Releasing mex " + getMessageExchangeId());
- _dao.release(_process.isCleanupCategoryEnabled(instanceSucceeded, CLEANUP_CATEGORY.MESSAGES));
+ if (_process != null) {
+ _dao.release(_process.isCleanupCategoryEnabled(instanceSucceeded, CLEANUP_CATEGORY.MESSAGES));
+ }
_dao = null;
}
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/NStateLatch.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/NStateLatch.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/NStateLatch.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/NStateLatch.java Fri Apr 3 18:06:37 2009
@@ -119,4 +119,8 @@
_lock.unlock();
}
}
+
+ public int getDepth(int state) {
+ return (_state == state ? _depth : 0);
+ }
}
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkMyRoleImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkMyRoleImpl.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkMyRoleImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/PartnerLinkMyRoleImpl.java Fri Apr 3 18:06:37 2009
@@ -184,7 +184,7 @@
if (!_process.processInterceptors(mex, InterceptorInvoker.__onNewInstanceInvoked)) {
__log.debug("Not creating a new instance for mex " + mex + "; interceptor prevented!");
- return;
+ throw new InvalidProcessException("Cannot instantiate process '" + _process.getPID() + "' any more.", InvalidProcessException.TOO_MANY_INSTANCES_CAUSE_CODE);
}
ProcessInstanceDAO newInstance = processDAO.createInstance(routing.correlator);
Added: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/InstanceCountThrottler.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/InstanceCountThrottler.java?rev=761744&view=auto
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/InstanceCountThrottler.java (added)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/InstanceCountThrottler.java Fri Apr 3 18:06:37 2009
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.ode.bpel.intercept;
+
+import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+
+import javax.xml.namespace.QName;
+import java.util.Map;
+
+/**
+ * An example of a simple interceptor providing a "throttling" capability - that is an
+ * ability to limit the number of instances created for a given process.
+ *
+ * @author Maciej Szefler
+ */
+public class InstanceCountThrottler extends NoOpInterceptor {
+
+ @Override
+ public void onNewInstanceInvoked(MyRoleMessageExchange mex,
+ InterceptorContext ic) throws FailMessageExchangeException {
+ if (ic.getProcessDAO().getNumInstances() >= ic.getBpelProcess().getInstanceMaximumCount())
+ throw new FailMessageExchangeException("Too many instances.");
+ }
+}
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/InterceptorInvoker.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/InterceptorInvoker.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/InterceptorInvoker.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/InterceptorInvoker.java Fri Apr 3 18:06:37 2009
@@ -50,6 +50,14 @@
}
};
+ /** Invoke {@link MessageExchangeInterceptor#onBpelServerInvoked(MyRoleMessageExchange, InterceptorContext)} */
+ public static final InterceptorInvoker __onJobScheduled = new InterceptorInvoker("onJobScheduled") {
+ public void invoke(MessageExchangeInterceptor i, MessageExchange mex, InterceptorContext ictx)
+ throws FailMessageExchangeException, FaultMessageExchangeException {
+ i.onJobScheduled((MyRoleMessageExchange) mex, ictx);
+ }
+ };
+
/** Invoke {@link MessageExchangeInterceptor#onPartnerInvoked(PartnerRoleMessageExchange, InterceptorContext)} */
public static final InterceptorInvoker __onPartnerInvoked = new InterceptorInvoker("onPartnerInvoked") {
public void invoke(MessageExchangeInterceptor i, MessageExchange mex, InterceptorContext ictx)
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/MessageExchangeInterceptor.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/MessageExchangeInterceptor.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/MessageExchangeInterceptor.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/MessageExchangeInterceptor.java Fri Apr 3 18:06:37 2009
@@ -20,6 +20,8 @@
import org.apache.ode.bpel.dao.BpelDAOConnection;
import org.apache.ode.bpel.dao.ProcessDAO;
+import org.apache.ode.bpel.engine.BpelProcess;
+import org.apache.ode.bpel.iapi.BpelEngine;
import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
import org.apache.ode.bpel.iapi.ProcessConf;
@@ -34,6 +36,16 @@
public interface MessageExchangeInterceptor {
/**
+ * Called when the message is scheduled, before any attempt to
+ * invoke the BPEL server is made.
+ *
+ * @param mex
+ * message exchange
+ */
+ void onJobScheduled(MyRoleMessageExchange mex, InterceptorContext ic)
+ throws FailMessageExchangeException, FaultMessageExchangeException;
+
+ /**
* Called when the BPEL server is invoked, before any attempt to route the
* message exchange to a process.
*
@@ -82,6 +94,10 @@
ProcessDAO getProcessDAO();
ProcessConf getProcessConf();
+
+ BpelEngine getBpelEngine();
+
+ BpelProcess getBpelProcess();
}
}
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/NoOpInterceptor.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/NoOpInterceptor.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/NoOpInterceptor.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/NoOpInterceptor.java Fri Apr 3 18:06:37 2009
@@ -31,6 +31,11 @@
*/
public class NoOpInterceptor implements MessageExchangeInterceptor {
+ public void onJobScheduled(MyRoleMessageExchange mex,
+ InterceptorContext ic) throws FailMessageExchangeException,
+ FaultMessageExchangeException {
+ }
+
public void onBpelServerInvoked(MyRoleMessageExchange mex,
InterceptorContext ic) throws FailMessageExchangeException,
FaultMessageExchangeException {
Added: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/ProcessCountThrottler.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/ProcessCountThrottler.java?rev=761744&view=auto
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/ProcessCountThrottler.java (added)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/ProcessCountThrottler.java Fri Apr 3 18:06:37 2009
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.ode.bpel.intercept;
+
+import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
+import org.apache.ode.bpel.runtime.InvalidProcessException;
+
+/**
+ * An example of a simple interceptor providing a "throttling" capability - that is an
+ * ability to limit the size of processes created in a server.
+ */
+public class ProcessCountThrottler extends NoOpInterceptor {
+
+ @Override
+ public void onJobScheduled(MyRoleMessageExchange mex,
+ InterceptorContext ic) throws FailMessageExchangeException,
+ FaultMessageExchangeException {
+ while (ic.getBpelEngine().getHydratedProcessCount(ic.getBpelProcess().getPID()) > ic.getBpelEngine().getProcessThrottledMaximumCount()) {
+ if (!ic.getBpelEngine().dehydrateLastUnusedProcess()) {
+ mex.setProperty("causeCode", String.valueOf(InvalidProcessException.TOO_MANY_PROCESSES_CAUSE_CODE));
+ throw new FailMessageExchangeException("The number of processes in-use is more than the upper limit (" + ic.getBpelEngine().getProcessThrottledMaximumCount() + ")");
+ }
+ }
+ }
+}
Added: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/ProcessSizeThrottler.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/ProcessSizeThrottler.java?rev=761744&view=auto
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/ProcessSizeThrottler.java (added)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/intercept/ProcessSizeThrottler.java Fri Apr 3 18:06:37 2009
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.ode.bpel.intercept;
+
+import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
+import org.apache.ode.bpel.runtime.InvalidProcessException;
+
+/**
+ * An example of a simple interceptor providing a "throttling" capability - that is an
+ * ability to limit the size of processes created in a server.
+ */
+public class ProcessSizeThrottler extends NoOpInterceptor {
+
+ @Override
+ public void onJobScheduled(MyRoleMessageExchange mex,
+ InterceptorContext ic) throws FailMessageExchangeException,
+ FaultMessageExchangeException {
+ while (ic.getBpelEngine().getHydratedProcessSize(ic.getBpelProcess().getPID()) > ic.getBpelEngine().getProcessThrottledMaximumSize()) {
+ if (!ic.getBpelEngine().dehydrateLastUnusedProcess()) {
+ mex.setProperty("causeCode", String.valueOf(InvalidProcessException.TOO_HUGE_PROCESSES_CAUSE_CODE));
+ throw new FailMessageExchangeException("The size of all running processes is more than the upper limit (" + ic.getBpelEngine().getProcessThrottledMaximumSize() + ")");
+ }
+ }
+ }
+}
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/InvalidProcessException.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/InvalidProcessException.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/InvalidProcessException.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/InvalidProcessException.java Fri Apr 3 18:06:37 2009
@@ -31,6 +31,12 @@
public final static int RETIRED_CAUSE_CODE = 1;
+ public final static int TOO_MANY_INSTANCES_CAUSE_CODE = 2;
+
+ public final static int TOO_MANY_PROCESSES_CAUSE_CODE = 3;
+
+ public final static int TOO_HUGE_PROCESSES_CAUSE_CODE = 4;
+
private final int causeCode;
public InvalidProcessException(String msg, Throwable cause) {
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/MockBpelServer.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/MockBpelServer.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/MockBpelServer.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/test/java/org/apache/ode/bpel/runtime/MockBpelServer.java Fri Apr 3 18:06:37 2009
@@ -263,6 +263,10 @@
public void close() { };
};
}
+
+ public long calculateSizeofService(EndpointReference epr) {
+ return 0;
+ }
};
return _bindContext;
}
Modified: ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java Fri Apr 3 18:06:37 2009
@@ -227,6 +227,13 @@
}
}
+ public long getCBPFileSize() {
+ CBPInfo cbpInfo = _du.getCBPInfo(getType());
+ if (cbpInfo == null)
+ throw new ContextException("CBP record not found for type " + getType());
+ return cbpInfo.cbp.length();
+ }
+
public String getBpelDocument() {
CBPInfo cbpInfo = _du.getCBPInfo(getType());
if (cbpInfo == null)
Modified: ode/branches/APACHE_ODE_1.X/bpel-test/src/main/java/org/apache/ode/test/BindingContextImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-test/src/main/java/org/apache/ode/test/BindingContextImpl.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-test/src/main/java/org/apache/ode/test/BindingContextImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-test/src/main/java/org/apache/ode/test/BindingContextImpl.java Fri Apr 3 18:06:37 2009
@@ -73,4 +73,8 @@
return new PartnerRoleChannelImpl();
}
+ public long calculateSizeofService(EndpointReference epr) {
+ return 0;
+ }
+
}
Modified: ode/branches/APACHE_ODE_1.X/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java Fri Apr 3 18:06:37 2009
@@ -38,20 +38,21 @@
package org.apache.ode.test;
+import java.io.IOException;
+
+import javax.xml.namespace.QName;
+
import org.apache.ode.bpel.iapi.BpelEngineException;
import org.apache.ode.bpel.iapi.ContextException;
import org.apache.ode.bpel.iapi.Message;
-import org.apache.ode.bpel.iapi.MessageExchange.Status;
import org.apache.ode.bpel.iapi.MessageExchangeContext;
import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
+import org.apache.ode.bpel.iapi.MessageExchange.Status;
import org.apache.ode.utils.DOMUtils;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
-import javax.xml.namespace.QName;
-import java.io.IOException;
-
/**
* This is a simple MessageExchangeContext implementation
* that only supports a set of "well known" portTypes used
Modified: ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/BasicActivities20Test.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/BasicActivities20Test.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/BasicActivities20Test.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/BasicActivities20Test.java Fri Apr 3 18:06:37 2009
@@ -18,16 +18,16 @@
*/
package org.apache.ode.test;
-import org.apache.ode.bpel.iapi.ContextException;
-import org.apache.ode.bpel.iapi.MessageExchange;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import javax.xml.namespace.QName;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
+import javax.xml.namespace.QName;
+
+import org.apache.ode.bpel.iapi.ContextException;
+import org.apache.ode.bpel.iapi.MessageExchange;
+import org.junit.Test;
+
public class BasicActivities20Test extends BPELTestAbstract {
@Test public void testHelloWorld2() throws Throwable {
Modified: ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/StructuredActivities20Test.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/StructuredActivities20Test.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/StructuredActivities20Test.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/StructuredActivities20Test.java Fri Apr 3 18:06:37 2009
@@ -18,7 +18,6 @@
*/
package org.apache.ode.test;
-import org.junit.Ignore;
import org.junit.Test;
public class StructuredActivities20Test extends BPELTestAbstract {
Modified: ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ActivityRecoveryDAOImpl.java Fri Apr 3 18:06:37 2009
@@ -75,6 +75,7 @@
private Long _instanceId;
// _instances is unused because this is a one-way relationship at the database level
+ @SuppressWarnings("unused")
@ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST}) @Column(name="INSTANCE_ID")
private ProcessInstanceDAOImpl _instance;
Modified: ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java Fri Apr 3 18:06:37 2009
@@ -54,8 +54,6 @@
@Basic @Column(name="PROCESS_ID")
private String _processId;
- @Transient
- private int _numInstances;
@Basic @Column(name="PROCESS_TYPE")
private String _processType;
@Basic @Column(name="GUID")
@@ -94,7 +92,6 @@
CorrelatorDAO instantiatingCorrelator) {
ProcessInstanceDAOImpl inst = new ProcessInstanceDAOImpl((CorrelatorDAOImpl)instantiatingCorrelator, this);
getEM().persist(inst);
- _numInstances++;
return inst;
}
@@ -102,7 +99,6 @@
CorrelatorDAO instantiatingCorrelator, MessageExchangeDAO mex) {
ProcessInstanceDAOImpl inst = new ProcessInstanceDAOImpl((CorrelatorDAOImpl)instantiatingCorrelator, this);
getEM().persist(inst);
- _numInstances++;
return inst;
}
@@ -183,7 +179,8 @@
}
public int getNumInstances() {
- return _numInstances;
+ Long instanceCount = (Long) getSingleResult(getEM().createNamedQuery(ProcessInstanceDAOImpl.COUNT_INSTANCE_IDS_BY_PROCESS).setParameter("process", this));
+ return (instanceCount == null ? 0 : instanceCount.intValue());
}
public long getVersion() {
Modified: ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessInstanceDAOImpl.java Fri Apr 3 18:06:37 2009
@@ -65,6 +65,7 @@
@NamedQueries({
@NamedQuery(name=ProcessInstanceDAOImpl.DELETE_INSTANCES_BY_PROCESS, query="delete from ProcessInstanceDAOImpl as i where i._process = :process"),
@NamedQuery(name=ProcessInstanceDAOImpl.SELECT_INSTANCE_IDS_BY_PROCESS, query="select i._instanceId from ProcessInstanceDAOImpl as i where i._process = :process"),
+ @NamedQuery(name=ProcessInstanceDAOImpl.COUNT_INSTANCE_IDS_BY_PROCESS, query="select count(i._instanceId) from ProcessInstanceDAOImpl as i where i._process = :process"),
@NamedQuery(name=ProcessInstanceDAOImpl.SELECT_FAULT_IDS_BY_PROCESS, query="select i._faultId from ProcessInstanceDAOImpl as i where i._process = :process and i._faultId is not null"),
@NamedQuery(name=ProcessInstanceDAOImpl.COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID,
query="select count(i._instanceId), max(i._lastRecovery) from ProcessInstanceDAOImpl as i where i._process._processId = :processId and i._state in(:states) and exists(select r from ActivityRecoveryDAOImpl r where i = r._instance)")
@@ -73,7 +74,8 @@
private static final Log __log = LogFactory.getLog(ProcessInstanceDAOImpl.class);
public final static String DELETE_INSTANCES_BY_PROCESS = "DELETE_INSTANCES_BY_PROCESS";
- public final static String SELECT_INSTANCE_IDS_BY_PROCESS = "SELECT_INSTANCE_IDS_BY_PROCESS";
+ public final static String SELECT_INSTANCE_IDS_BY_PROCESS = "SELECT_INSTANCE_IDS_BY_PROCESS";
public final static String COUNT_INSTANCE_IDS_BY_PROCESS = "COUNT_INSTANCE_IDS_BY_PROCESS";
+
public final static String SELECT_FAULT_IDS_BY_PROCESS = "SELECT_FAULT_IDS_BY_PROCESS";
public final static String COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID = "COUNT_FAILED_INSTANCES_BY_STATUS_AND_PROCESS_ID";
Modified: ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/BindingContextImpl.java Fri Apr 3 18:06:37 2009
@@ -18,13 +18,20 @@
*/
package org.apache.ode.jbi;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.iapi.*;
+import java.util.HashMap;
+import java.util.Map;
import javax.wsdl.PortType;
import javax.xml.namespace.QName;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.iapi.BindingContext;
+import org.apache.ode.bpel.iapi.ContextException;
+import org.apache.ode.bpel.iapi.Endpoint;
+import org.apache.ode.bpel.iapi.EndpointReference;
+import org.apache.ode.bpel.iapi.PartnerRoleChannel;
+
/**
* JBI Implementation of ODE's {@link org.apache.ode.bpel.iapi.BindingContext}
* interface.
@@ -36,7 +43,7 @@
private static final Log __log = LogFactory.getLog(BindingContextImpl.class);
private final OdeContext _ode;
-
+
BindingContextImpl(OdeContext ode) {
_ode = ode;
}
@@ -92,4 +99,9 @@
}
}
+
+
+ public long calculateSizeofService(EndpointReference epr) {
+ return _ode.calculateSizeOfService(epr);
+ }
}
Modified: ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java?rev=761744&r1=761743&r2=761744&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java (original)
+++ ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java Fri Apr 3 18:06:37 2009
@@ -39,10 +39,12 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ode.agents.memory.SizingAgent;
import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
import org.apache.ode.bpel.engine.BpelServerImpl;
import org.apache.ode.bpel.engine.ProcessAndInstanceManagementImpl;
import org.apache.ode.bpel.iapi.Endpoint;
+import org.apache.ode.bpel.iapi.EndpointReference;
import org.apache.ode.bpel.iapi.ProcessConf;
import org.apache.ode.bpel.o.OPartnerLink;
import org.apache.ode.bpel.o.OProcess;
@@ -115,6 +117,8 @@
/** Mapping of Endpoint to OdeService */
private Map<Endpoint, OdeService> _activeOdeServices = new ConcurrentHashMap<Endpoint, OdeService>();
+ private Map<OdeService, EndpointReference> _serviceEprMap = new HashMap<OdeService, EndpointReference>();
+
/**
* Gets the delivery channel.
@@ -214,6 +218,7 @@
MyEndpointReference myepr = new MyEndpointReference(service);
service.activate();
_activeOdeServices.put(endpoint, service);
+ _serviceEprMap.put(service, myepr);
return myepr;
}
@@ -222,6 +227,7 @@
OdeService svc = _activeOdeServices.remove(endpoint);
if (svc != null) {
+ _serviceEprMap.remove(svc);
svc.deactivate();
}
}
@@ -303,4 +309,16 @@
}
}
}
+
+ public long calculateSizeOfService(EndpointReference epr) {
+ if (epr != null) {
+ for (OdeService odeService : _serviceEprMap.keySet()) {
+ EndpointReference serviceEpr = _serviceEprMap.get(odeService);
+ if (serviceEpr != null && epr.equals(serviceEpr)) {
+ return SizingAgent.deepSizeOf(odeService);
+ }
+ }
+ }
+ return 0;
+ }
}