Author: karthick
Date: Tue Apr 21 17:26:27 2009
New Revision: 767234
URL: http://svn.apache.org/viewvc?rev=767234&view=rev
Log:
ODE-576 ProcessDaoImpl objects get leaked when using in-memory-processes
Modified:
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelServer.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-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
Modified:
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java?rev=767234&r1=767233&r2=767234&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
(original)
+++
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
Tue Apr 21 17:26:27 2009
@@ -544,12 +544,11 @@
private void handleEvent(ProcessStoreEvent pse) {
__log.debug("Process store event: " + pse);
- ProcessConf pconf;
+ ProcessConf pconf = _store.getProcessConfiguration(pse.pid);
switch (pse.type) {
case ACTVIATED:
// bounce the process
_bpelServer.unregister(pse.pid);
- pconf = _store.getProcessConfiguration(pse.pid);
if (pconf != null) {
_bpelServer.register(pconf);
} else {
@@ -564,7 +563,6 @@
_bpelServer.unregister(pse.pid);
// bounce the process if necessary
if (instantiated) {
- pconf = _store.getProcessConfiguration(pse.pid);
if (pconf != null) {
_bpelServer.register(pconf);
} else {
@@ -574,12 +572,17 @@
} else {
// we may have potentially created a lot of garbage, so,
// let's hope the garbage collector is configured properly.
+ if (pconf != null) {
+ _bpelServer.cleanupProcess(pconf);
+ }
}
break;
case DISABLED:
case UNDEPLOYED:
_bpelServer.unregister(pse.pid);
- _bpelServer.cleanupProcess(pse.pid);
+ if (pconf != null) {
+ _bpelServer.cleanupProcess(pconf);
+ }
break;
default:
__log.debug("Ignoring store event: " + pse);
Modified:
ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelServer.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelServer.java?rev=767234&r1=767233&r2=767234&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelServer.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelServer.java
Tue Apr 21 17:26:27 2009
@@ -117,7 +117,7 @@
*/
void unregister(QName pid) throws BpelEngineException;
- void cleanupProcess(QName pid) throws BpelEngineException;
+ void cleanupProcess(ProcessConf conf) throws BpelEngineException;
/**
* @param pid The process definition QName
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=767234&r1=767233&r2=767234&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
Tue Apr 21 17:26:27 2009
@@ -367,10 +367,6 @@
}
}
- public void cleanupProcess(QName pid) throws BpelEngineException {
- deleteProcessDAO(pid);
- }
-
/**
* Register a global message exchange interceptor.
* @param interceptor message-exchange interceptor
@@ -401,36 +397,45 @@
}
/* TODO: We need to have a method of cleaning up old deployment data. */
- protected boolean deleteProcessDAO(final QName pid) {
+ protected boolean deleteProcessDAO(final QName pid, boolean isInMemory) {
try {
- return _db.exec(new BpelDatabase.Callable<Boolean>() {
- public Boolean run(BpelDAOConnection conn) throws Exception {
- final ProcessDAO proc = conn.getProcess(pid);
- if (proc != null) {
- // delete routes
- if(__log.isDebugEnabled()) __log.debug("Deleting only
the process " + pid + "...");
- proc.deleteProcessAndRoutes();
- if(__log.isInfoEnabled()) __log.info("Deleted only the
process " + pid + ".");
- // we do deferred instance cleanup only for
hibernate, for now
- if( proc instanceof DeferredProcessInstanceCleanable &&
- !DEFERRED_PROCESS_INSTANCE_CLEANUP_DISABLED ) {
- // schedule deletion of process runtime data
-
_engine._contexts.scheduler.scheduleMapSerializableRunnable(
- new
ProcessCleanUpRunnable(((DeferredProcessInstanceCleanable)proc).getId()), new
Date());
- } else if( proc instanceof
DeferredProcessInstanceCleanable ) {
-
((DeferredProcessInstanceCleanable)proc).deleteInstances(Integer.MAX_VALUE);
- }
- return true;
- }
- return false;
- }
- });
+ if (isInMemory) {
+ return deleteProcessDAO(_contexts.inMemDao.getConnection(),
pid);
+ } else {
+ return _db.exec(new BpelDatabase.Callable<Boolean>() {
+ public Boolean run(BpelDAOConnection conn) throws
Exception {
+ return deleteProcessDAO(conn, pid);
+ }
+ });
+ }
} catch (RuntimeException re) {
throw re;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
+
+ private boolean deleteProcessDAO(BpelDAOConnection conn, QName pid) {
+ final ProcessDAO proc = conn.getProcess(pid);
+ if (proc != null) {
+ // delete routes
+ if(__log.isDebugEnabled()) __log.debug("Deleting only the process
" + pid + "...");
+ proc.deleteProcessAndRoutes();
+ if(__log.isInfoEnabled()) __log.info("Deleted only the process " +
pid + ".");
+ // we do deferred instance cleanup only for hibernate, for now
+ if( proc instanceof DeferredProcessInstanceCleanable &&
+ !DEFERRED_PROCESS_INSTANCE_CLEANUP_DISABLED ) {
+ // schedule deletion of process runtime data
+ _engine._contexts.scheduler.scheduleMapSerializableRunnable(
+ new
ProcessCleanUpRunnable(((DeferredProcessInstanceCleanable)proc).getId()), new
Date());
+ } else if( proc instanceof DeferredProcessInstanceCleanable ) {
+
((DeferredProcessInstanceCleanable)proc).deleteInstances(Integer.MAX_VALUE);
+ }
+ return true;
+ }
+ return false;
+
+ }
public void onScheduledJob(JobInfo jobInfo) throws JobProcessorException {
getEngine().onScheduledJob(jobInfo);
@@ -646,4 +651,10 @@
}
}
}
+
+ public void cleanupProcess(ProcessConf pconf) throws
BpelEngineException {
+ if (pconf != null) {
+ deleteProcessDAO(pconf.getProcessId(),
pconf.isTransient());
+ }
+ }
}
Modified:
ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java?rev=767234&r1=767233&r2=767234&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
Tue Apr 21 17:26:27 2009
@@ -325,7 +325,6 @@
du = _deploymentUnits.remove(dir.getName());
if (du != null) {
undeployed = toPids(du.getProcessNames(), du.getVersion());
- _processes.keySet().removeAll(undeployed);
}
} finally {
_rw.writeLock().unlock();
@@ -335,6 +334,13 @@
fireEvent(new ProcessStoreEvent(ProcessStoreEvent.Type.UNDEPLOYED,
pn, du.getName()));
__log.info(__msgs.msgProcessUndeployed(pn));
}
+
+ _rw.writeLock().lock();
+ try {
+ _processes.keySet().removeAll(undeployed);
+ } finally {
+ _rw.writeLock().unlock();
+ }
return undeployed;
}