Author: mriou Date: Thu Jun 21 15:28:21 2007 New Revision: 549636 URL: http://svn.apache.org/viewvc?view=rev&rev=549636 Log: Applying BPEL event listeners patch from Tammo (see ODE-139).
Modified: incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelEventListener.java incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java incubator/ode/trunk/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java 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=549636&r1=549635&r2=549636 ============================================================================== --- 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 Thu Jun 21 15:28:21 2007 @@ -460,6 +460,7 @@ // dehy.setProcessMaxAge(10000); _server.setDehydrationPolicy(dehy); } + _server.setConfigProperties(_odeConfig.getProperties()); _server.init(); } Modified: incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelEventListener.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelEventListener.java?view=diff&rev=549636&r1=549635&r2=549636 ============================================================================== --- incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelEventListener.java (original) +++ incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelEventListener.java Thu Jun 21 15:28:21 2007 @@ -18,6 +18,8 @@ */ package org.apache.ode.bpel.iapi; +import java.util.Properties; + import org.apache.ode.bpel.evt.BpelEvent; /** @@ -34,4 +36,26 @@ * @param bpelEvent BPEL event */ void onEvent(BpelEvent bpelEvent); + + /** + * Allows the initialisation of listeners. Called directly + * after removing the listener from the listeners list. + * + * <code>configProperties</code> provide access to + * configuration option defined in Ode's configuration file + * (depends on the used IL implementation). This parameter might + * be null if no configuration options are available (i.e. in test + * cases). + * + * @param configProperties configuration properties + * + */ + void startup(Properties configProperties); + + /** + * Allows the clean up in listener implementations. Called + * directly before adding the listener to the listeners list. + */ + void shutdown(); + } Modified: incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java?view=diff&rev=549636&r1=549635&r2=549636 ============================================================================== --- incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java (original) +++ incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java Thu Jun 21 15:28:21 2007 @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Properties; import java.util.Set; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -85,6 +86,8 @@ private State _state = State.SHUTDOWN; private Contexts _contexts = new Contexts(); private DehydrationPolicy _dehydrationPolicy; + private Properties _configProperties; + BpelEngineImpl _engine; BpelDatabase _db; @@ -145,7 +148,8 @@ */ public void registerBpelEventListener(BpelEventListener listener) { // Do not synchronize, eventListeners is copy-on-write array. - _contexts.eventListeners.add(listener); + listener.startup(_configProperties); + _contexts.eventListeners.add(listener); } /** @@ -155,7 +159,19 @@ */ public void unregisterBpelEventListener(BpelEventListener listener) { // Do not synchronize, eventListeners is copy-on-write array. - _contexts.eventListeners.remove(listener); + try { + listener.shutdown(); + } catch (Exception e) { + __log.warn("Stopping BPEL event listener " + listener.getClass().getName() + " failed, nevertheless it has been unregistered.", e); + } finally { + _contexts.eventListeners.remove(listener); + } + } + + private void unregisterBpelEventListeners() { + for (BpelEventListener l : _contexts.eventListeners) { + unregisterBpelEventListener(l); + } } public void stop() { @@ -199,6 +215,7 @@ _mngmtLock.writeLock().lock(); try { stop(); + unregisterBpelEventListeners(); _db = null; _engine = null; @@ -388,6 +405,10 @@ _dehydrationPolicy = dehydrationPolicy; } + public void setConfigProperties(Properties configProperties) { + _configProperties = configProperties; + } + public void setMessageExchangeContext(MessageExchangeContext mexContext) throws BpelEngineException { _contexts.mexContext = mexContext; } Modified: incubator/ode/trunk/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java?view=diff&rev=549636&r1=549635&r2=549636 ============================================================================== --- incubator/ode/trunk/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java (original) +++ incubator/ode/trunk/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java Thu Jun 21 15:28:21 2007 @@ -32,6 +32,7 @@ import org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl; import org.apache.ode.dao.jpa.BPELDAOConnectionFactoryImpl; import org.apache.ode.il.MockScheduler; +import org.apache.ode.il.config.OdeConfigProperties; import org.apache.ode.store.ProcessConfImpl; import org.apache.ode.store.ProcessStoreImpl; import org.apache.ode.utils.DOMUtils; @@ -141,6 +142,7 @@ } } }); + _server.setConfigProperties(getConfigProperties()); _server.init(); _server.start(); } @@ -383,6 +385,18 @@ return new File(deployxmlurl.getPath()).getParentFile(); } + /** + * Override this to provide configuration properties for Ode extensions + * like BpelEventListeners. + * + * @return + */ + protected Properties getConfigProperties() { + // could also return null, returning an empty properties + // object is more fail-safe. + return new Properties(); + } + protected static class Failure { Object where; 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=549636&r1=549635&r2=549636 ============================================================================== --- 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 Thu Jun 21 15:28:21 2007 @@ -214,6 +214,7 @@ _ode._server.setMessageExchangeContext(_ode._mexContext); _ode._server.setBindingContext(new BindingContextImpl(_ode)); _ode._server.setScheduler(_ode._scheduler); + _ode._server.setConfigProperties(_ode._config.getProperties()); _ode._server.init();