You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2007/04/04 18:00:44 UTC

svn commit: r525545 - in /incubator/ode/trunk: axis2/src/main/java/org/apache/ode/axis2/ bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/ bpel-test/src/test/java/org/apache/ode/test/ bpel-tes...

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 -&gt; loop on pick until message includes requestEnd = yes -&gt; pick branch one invoked -&gt; pick branch two invoked -&gt; process complete.*
+response1=.*Event Test Dynamic Pick Start -&gt; loop on pick until message includes requestEnd = yes -&gt; (pick branch one invoked -&gt; )?pick branch two invoked -&gt; 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);