Author: mriou
Date: Wed Apr 4 09:00:43 2007
New Revision: 525545
URL: http://svn.apache.org/viewvc?view=rev&rev=525545
Log:
Started making the in-mem DAOs transaction aware by doing most important
modifications only in tx before completion. The MessageRouting20Test now passes
completely!
Modified:
incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionFactoryImpl.java
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessDaoImpl.java
incubator/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/BPELTestAbstract.java
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestDynamicPick/test1.properties
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
Modified:
incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java?view=diff&rev=525545&r1=525544&r2=525545
==============================================================================
--- incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
(original)
+++ incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
Wed Apr 4 09:00:43 2007
@@ -41,6 +41,7 @@
import org.apache.ode.bpel.iapi.ProcessStoreEvent;
import org.apache.ode.bpel.iapi.ProcessStoreListener;
import org.apache.ode.bpel.iapi.Scheduler;
+import org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl;
import org.apache.ode.bpel.scheduler.quartz.QuartzSchedulerImpl;
import org.apache.ode.il.dbutil.Database;
import org.apache.ode.store.ProcessStoreImpl;
@@ -449,6 +450,7 @@
_scheduler.setJobProcessor(_server);
_server.setDaoConnectionFactory(_daoCF);
+ _server.setInMemDaoConnectionFactory(new
BpelDAOConnectionFactoryImpl(_scheduler));
_server.setEndpointReferenceContext(new
EndpointReferenceContextImpl(this));
_server.setMessageExchangeContext(new
MessageExchangeContextImpl(this));
_server.setBindingContext(new BindingContextImpl(this, _store));
Modified:
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java?view=diff&rev=525545&r1=525544&r2=525545
==============================================================================
---
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
(original)
+++
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
Wed Apr 4 09:00:43 2007
@@ -472,7 +472,7 @@
if (enabled) {
ProcessInstanceDAO instanceDao =
getProcessDAO().getInstance(event.getProcessInstanceId());
if (instanceDao != null) saveEvent(event, instanceDao);
- else __log.warn("Couldn't find instance to save event, no event
generated!");
+ else __log.debug("Couldn't find instance to save event, no event
generated!");
}
}
Modified:
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java?view=diff&rev=525545&r1=525544&r2=525545
==============================================================================
---
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
(original)
+++
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
Wed Apr 4 09:00:43 2007
@@ -138,7 +138,7 @@
}
if (BpelProcess.__log.isDebugEnabled()) {
- __log.debug("BpelRuntimeContextImpl created. INDEXED STATE=" +
soup.getIndex());
+ __log.debug("BpelRuntimeContextImpl created for instance " + _iid
+ ". INDEXED STATE=" + soup.getIndex());
}
}
@@ -827,6 +827,7 @@
throw new RuntimeException(ex);
}
_dao.setExecutionState(bos.toByteArray());
+ __log.debug("Setting execution state on instance " + _iid);
if (ProcessState.canExecute(_dao.getState()) && canReduce) {
// Max time exceeded (possibly an infinite loop).
Modified:
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java?view=diff&rev=525545&r1=525544&r2=525545
==============================================================================
---
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
(original)
+++
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
Wed Apr 4 09:00:43 2007
@@ -20,10 +20,12 @@
package org.apache.ode.bpel.engine;
import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
-import org.apache.ode.bpel.iapi.*;
+import org.apache.ode.bpel.iapi.BindingContext;
import org.apache.ode.bpel.iapi.BpelEventListener;
+import org.apache.ode.bpel.iapi.EndpointReferenceContext;
+import org.apache.ode.bpel.iapi.MessageExchangeContext;
+import org.apache.ode.bpel.iapi.Scheduler;
import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
-import org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -43,7 +45,7 @@
BindingContext bindingContext;
BpelDAOConnectionFactory dao;
- BpelDAOConnectionFactory inMemDao = new BpelDAOConnectionFactoryImpl();
+ BpelDAOConnectionFactory inMemDao;
/** Global Message-Exchange interceptors. Must be copy-on-write!!! */
final List<MessageExchangeInterceptor >globalIntereceptors = new
CopyOnWriteArrayList<MessageExchangeInterceptor>();
Modified:
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionFactoryImpl.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionFactoryImpl.java?view=diff&rev=525545&r1=525544&r2=525545
==============================================================================
---
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionFactoryImpl.java
(original)
+++
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionFactoryImpl.java
Wed Apr 4 09:00:43 2007
@@ -20,6 +20,7 @@
import org.apache.ode.bpel.dao.BpelDAOConnection;
import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
+import org.apache.ode.bpel.iapi.Scheduler;
import javax.xml.namespace.QName;
import java.util.HashMap;
@@ -32,8 +33,14 @@
public class BpelDAOConnectionFactoryImpl implements BpelDAOConnectionFactory {
private static final Map<QName, ProcessDaoImpl> __StateStore = new
HashMap<QName, ProcessDaoImpl>();
+ private Scheduler _scheduler;
+
+ public BpelDAOConnectionFactoryImpl(Scheduler sched) {
+ _scheduler = sched;
+ }
+
public BpelDAOConnection getConnection() {
- return new BpelDAOConnectionImpl(__StateStore);
+ return new BpelDAOConnectionImpl(__StateStore, _scheduler);
}
/**
Modified:
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java?view=diff&rev=525545&r1=525544&r2=525545
==============================================================================
---
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
(original)
+++
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
Wed Apr 4 09:00:43 2007
@@ -30,6 +30,7 @@
import org.apache.ode.bpel.dao.ProcessInstanceDAO;
import org.apache.ode.bpel.dao.ScopeDAO;
import org.apache.ode.bpel.evt.BpelEvent;
+import org.apache.ode.bpel.iapi.Scheduler;
import org.apache.ode.utils.ISO8601DateParser;
import org.apache.ode.utils.stl.CollectionsX;
import org.apache.ode.utils.stl.UnaryFunction;
@@ -53,20 +54,17 @@
class BpelDAOConnectionImpl implements BpelDAOConnection {
private static final Log __log =
LogFactory.getLog(BpelDAOConnectionImpl.class);
+ private Scheduler _scheduler;
private Map<QName, ProcessDaoImpl> _store;
private List<BpelEvent> _events = new LinkedList<BpelEvent>();
private static Map<String,MessageExchangeDAO> _mexStore =
Collections.synchronizedMap(new HashMap<String,MessageExchangeDAO>());
private static AtomicLong counter = new AtomicLong(Long.MAX_VALUE / 2);
-
- BpelDAOConnectionImpl(Map<QName, ProcessDaoImpl> store) {
+ BpelDAOConnectionImpl(Map<QName, ProcessDaoImpl> store, Scheduler
scheduler) {
_store = store;
+ _scheduler = scheduler;
}
-// private synchronized String getId() {
-// return Long.toString(counter++);
-// }
-
public ProcessDAO getProcess(QName processId) {
return _store.get(processId);
}
@@ -300,5 +298,15 @@
MessageExchangeDAO mex = _mexStore.remove(mexId);
if (mex == null)
__log.warn("Couldn't find mex " + mexId + " for cleanup.");
+ }
+
+ public void differ(final Runnable runnable) {
+ _scheduler.registerSynchronizer(new Scheduler.Synchronizer() {
+ public void afterCompletion(boolean success) {
+ }
+ public void beforeCompletion() {
+ runnable.run();
+ }
+ });
}
}
Modified:
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java?view=diff&rev=525545&r1=525544&r2=525545
==============================================================================
---
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java
(original)
+++
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/CorrelatorDaoImpl.java
Wed Apr 4 09:00:43 2007
@@ -43,11 +43,13 @@
private String _correlatorId;
private List<MsgQueueEntry> _messages;
private List<MessageRouteDaoImpl> _routes;
+ private BpelDAOConnectionImpl _conn;
- CorrelatorDaoImpl(String correlatorId) {
+ CorrelatorDaoImpl(String correlatorId, BpelDAOConnectionImpl conn) {
_messages = new ArrayList<MsgQueueEntry>();
_routes = new ArrayList<MessageRouteDaoImpl>();
_correlatorId = correlatorId;
+ _conn = conn;
}
public MessageExchangeDAO dequeueMessage(CorrelationKey key) {
@@ -103,8 +105,12 @@
__log.debug("addRoute: target=" + target + " correlationKey=" +
key);
}
- MessageRouteDaoImpl mr = new
MessageRouteDaoImpl((ProcessInstanceDaoImpl)target, routeId, key, idx);
- _routes.add(mr);
+ final MessageRouteDaoImpl mr = new
MessageRouteDaoImpl((ProcessInstanceDaoImpl)target, routeId, key, idx);
+ _conn.differ(new Runnable() {
+ public void run() {
+ _routes.add(mr);
+ }
+ });
}
Modified:
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessDaoImpl.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessDaoImpl.java?view=diff&rev=525545&r1=525544&r2=525545
==============================================================================
---
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessDaoImpl.java
(original)
+++
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ProcessDaoImpl.java
Wed Apr 4 09:00:43 2007
@@ -99,8 +99,12 @@
}
public ProcessInstanceDAO createInstance(CorrelatorDAO correlator) {
- ProcessInstanceDaoImpl newInstance = new ProcessInstanceDaoImpl(_conn,
this, correlator);
- _instances.put(newInstance.getInstanceId(), newInstance);
+ final ProcessInstanceDaoImpl newInstance = new
ProcessInstanceDaoImpl(_conn, this, correlator);
+ _conn.differ(new Runnable() {
+ public void run() {
+ _instances.put(newInstance.getInstanceId(), newInstance);
+ }
+ });
_executionCount++;
return newInstance;
}
@@ -145,7 +149,7 @@
}
public void addCorrelator(String correlator) {
- CorrelatorDaoImpl corr = new CorrelatorDaoImpl(correlator);
+ CorrelatorDaoImpl corr = new CorrelatorDaoImpl(correlator, _conn);
_correlators.put(corr.getCorrelatorId(), corr);
}
Modified:
incubator/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/BPELTestAbstract.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/BPELTestAbstract.java?view=diff&rev=525545&r1=525544&r2=525545
==============================================================================
---
incubator/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/BPELTestAbstract.java
(original)
+++
incubator/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/BPELTestAbstract.java
Wed Apr 4 09:00:43 2007
@@ -91,11 +91,11 @@
};
} else {
- _cf = new BpelDAOConnectionFactoryImpl();
- server.setDaoConnectionFactory(_cf);
scheduler = new TestScheduler();
+ _cf = new BpelDAOConnectionFactoryImpl(scheduler);
+ server.setDaoConnectionFactory(_cf);
}
- server.setInMemDaoConnectionFactory(new
BpelDAOConnectionFactoryImpl());
+ server.setInMemDaoConnectionFactory(new
BpelDAOConnectionFactoryImpl(scheduler));
server.setScheduler(scheduler);
server.setBindingContext(new BindingContextImpl());
server.setMessageExchangeContext(mexContext);
@@ -234,7 +234,7 @@
if (testRun != null) {
testThreads.add(testRun);
testRun.start();
- Thread.sleep(100);
+// Thread.sleep(100);
}
}
Modified:
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestDynamicPick/test1.properties
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestDynamicPick/test1.properties?view=diff&rev=525545&r1=525544&r2=525545
==============================================================================
---
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestDynamicPick/test1.properties
(original)
+++
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestDynamicPick/test1.properties
Wed Apr 4 09:00:43 2007
@@ -2,4 +2,4 @@
service=TestDynamicPickService
operation=request
request1=<message><requestMessageData><testMessage><requestID>Start Test
Dynamic Pick</requestID><requestKey1>Test Dynamic Pick Key
1</requestKey1><requestKey2>Test Dynamic Pick Key
2</requestKey2><requestText>Event Test Dynamic Pick
Start</requestText><requestEnd>no</requestEnd></testMessage></requestMessageData></message>
-response1=.*Event Test Dynamic Pick Start -> loop on pick until message
includes requestEnd = yes -> pick branch one invoked -> pick branch two
invoked -> process complete.*
+response1=.*Event Test Dynamic Pick Start -> loop on pick until message
includes requestEnd = yes -> (pick branch one invoked -> )?pick branch
two invoked -> process complete.*
Modified:
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java?view=diff&rev=525545&r1=525544&r2=525545
==============================================================================
--- incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
(original)
+++ incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
Wed Apr 4 09:00:43 2007
@@ -203,7 +203,7 @@
_ode._store = new ProcessStoreImpl(_ode._dataSource,
_ode._config.getDAOConnectionFactory(), false);
_ode._store.loadAll();
- _ode._server.setInMemDaoConnectionFactory(new
org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl());
+ _ode._server.setInMemDaoConnectionFactory(new
org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl(_ode._scheduler));
_ode._server.setDaoConnectionFactory(_ode._daocf);
_ode._server.setEndpointReferenceContext(_ode._eprContext);
_ode._server.setMessageExchangeContext(_ode._mexContext);