You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by va...@apache.org on 2008/05/23 23:43:23 UTC

svn commit: r659672 - /ode/branches/APACHE_ODE_1.1/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java

Author: vanto
Date: Fri May 23 14:43:22 2008
New Revision: 659672

URL: http://svn.apache.org/viewvc?rev=659672&view=rev
Log:
only CRLF

Modified:
    ode/branches/APACHE_ODE_1.1/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java

Modified: ode/branches/APACHE_ODE_1.1/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java?rev=659672&r1=659671&r2=659672&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.1/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java (original)
+++ ode/branches/APACHE_ODE_1.1/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java Fri May 23 14:43:22 2008
@@ -1,422 +1,422 @@
-/*
- * 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.jbi;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.StringTokenizer;
-import java.util.concurrent.Executors;
-
-import javax.jbi.JBIException;
-import javax.jbi.component.ComponentContext;
-import javax.jbi.component.ComponentLifeCycle;
-import javax.jbi.component.ServiceUnitManager;
-import javax.management.ObjectName;
-import javax.transaction.TransactionManager;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.connector.BpelServerConnector;
-import org.apache.ode.bpel.dao.BpelDAOConnectionFactoryJDBC;
-import org.apache.ode.bpel.engine.BpelServerImpl;
-import org.apache.ode.bpel.iapi.BpelEventListener;
-import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
-import org.apache.ode.il.dbutil.Database;
-import org.apache.ode.il.dbutil.DatabaseConfigException;
-import org.apache.ode.jbi.msgmap.Mapper;
-import org.apache.ode.scheduler.simple.JdbcDelegate;
-import org.apache.ode.scheduler.simple.SimpleScheduler;
-import org.apache.ode.store.ProcessStoreImpl;
-import org.apache.ode.utils.GUID;
-import org.apache.ode.utils.fs.TempFileManager;
-
-/**
- * This class implements ComponentLifeCycle. The JBI framework will start this engine class automatically when JBI framework starts
- * up.
- */
-public class OdeLifeCycle implements ComponentLifeCycle {
-    private static final Messages __msgs = Messages.getMessages(Messages.class);
-
-    private static final Log __log = LogFactory.getLog(OdeLifeCycle.class);
-
-    private OdeSUManager _suManager = null;
-
-    private boolean _initSuccess = false;
-
-    private OdeContext _ode;
-
-    private Receiver _receiver;
-
-    private boolean _started;
-
-    private BpelServerConnector _connector;
-
-    private Database _db;
-
-    ServiceUnitManager getSUManager() {
-        return _suManager;
-    }
-
-    OdeContext getOdeContext() {
-        return _ode;
-    }
-
-    public ObjectName getExtensionMBeanName() {
-        return null;
-    }
-
-    public void init(ComponentContext context) throws JBIException {
-        try {
-            _ode = OdeContext.getInstance();
-            _ode.setContext(context);
-            
-            // Use system property to determine if DeliveryChannel.sendSync or DeliveryChannel.send is used.
-            if (Boolean.getBoolean("org.apache.ode.jbi.sendSynch"))
-                _ode._consumer = new OdeConsumerSync(_ode);
-            else 
-                _ode._consumer = new OdeConsumerAsync(_ode);
-
-            if (_ode.getContext().getWorkspaceRoot() != null)
-                TempFileManager.setWorkingDirectory(new File(_ode.getContext().getWorkspaceRoot()));
-
-            __log.debug("Loading properties.");
-            initProperties();
-
-            __log.debug("Initializing message mappers.");
-            initMappers();
-
-            __log.debug("Creating data source.");
-            initDataSource();
-
-            __log.debug("Starting Dao.");
-            initDao();
-
-            __log.info("Hibernate started.");
-
-            __log.debug("Starting BPEL server.");
-            initBpelServer();
-
-            // Register BPEL event listeners configured in ode-jbi.properties.
-            registerEventListeners();
-
-            registerMexInterceptors();
-
-            __log.debug("Starting JCA connector.");
-            initConnector();
-
-            __log.debug("Register ProcessManagement APIs");
-            _ode.activatePMAPIs();
-
-            _suManager = new OdeSUManager(_ode);
-            _initSuccess = true;
-            __log.info(__msgs.msgOdeInitialized());
-        } finally {
-            if (!_initSuccess) {
-                // TODO ..then what? at least shutdown the scheduler
-            }
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    private void initMappers() throws JBIException {
-        Class<Mapper> mapperClass;
-        try {
-            mapperClass = (Class<Mapper>) Class.forName(_ode._config.getMessageMapper());
-        } catch (ClassNotFoundException e) {
-            String errmsg = __msgs.msgOdeInitMapperClassNotFound(_ode._config.getMessageMapper());
-            __log.error(errmsg);
-            throw new JBIException(errmsg, e);
-        } catch (Throwable t) {
-            String errmsg = __msgs.msgOdeInitMapperClassLoadFailed(_ode._config.getMessageMapper());
-            __log.error(errmsg);
-            throw new JBIException(errmsg, t);
-        }
-        try {
-            _ode.registerMapper((Mapper) mapperClass.newInstance());
-        } catch (Throwable t) {
-            String errmsg = __msgs.msgOdeInitMapperInstantiationFailed(_ode._config.getMessageMapper());
-            __log.error(errmsg);
-            throw new JBIException(errmsg, t);
-        }
-    }
-
-    private void initDataSource() throws JBIException {
-        _db = new Database(_ode._config);
-        _db.setTransactionManager(_ode.getTransactionManager());
-        _db.setWorkRoot(new File(_ode.getContext().getInstallRoot()));
-
-        try {
-            _db.start();
-        } catch (Exception ex) {
-            String errmsg = __msgs.msgOdeDbConfigError();
-            __log.error(errmsg, ex);
-            throw new JBIException(errmsg, ex);
-        }
-
-        _ode._dataSource = _db.getDataSource();
-    }
-
-    /**
-     * Load the "ode-jbi.properties" file from the install directory.
-     *
-     * @throws JBIException
-     */
-    private void initProperties() throws JBIException {
-        OdeConfigProperties config = new OdeConfigProperties(new File(_ode.getContext().getInstallRoot(),
-                OdeConfigProperties.CONFIG_FILE_NAME));
-
-        try {
-            config.load();
-        } catch (FileNotFoundException fnf) {
-            __log.warn(__msgs.msgOdeInstallErrorCfgNotFound(config.getFile()));
-        } catch (Exception ex) {
-           String errmsg = __msgs.msgOdeInstallErrorCfgReadError(config.getFile());
-           throw new JBIException(errmsg,ex);
-        }
-        _ode._config = config;
-    }
-
-    private void initBpelServer() throws JBIException {
-        if (__log.isDebugEnabled()) {
-            __log.debug("ODE initializing");
-        }
-
-        _ode._server = new BpelServerImpl();
-        // We don't want the server to automatically load deployed processes,
-        // we'll do that explcitly
-        _ode._eprContext = new EndpointReferenceContextImpl(_ode);
-        _ode._mexContext = new MessageExchangeContextImpl(_ode);
-        if (_ode._config.getThreadPoolMaxSize() == 0)
-            _ode._executorService = Executors.newCachedThreadPool();
-        else
-            _ode._executorService = Executors.newFixedThreadPool(_ode._config.getThreadPoolMaxSize());
-        _ode._scheduler = new SimpleScheduler(new GUID().toString(),new JdbcDelegate(_ode._dataSource));
-        _ode._scheduler.setJobProcessor(_ode._server);
-        _ode._scheduler.setExecutorService(_ode._executorService);
-        _ode._scheduler.setTransactionManager((TransactionManager) _ode.getContext().getTransactionManager());
-
-        _ode._store = new ProcessStoreImpl(_ode._dataSource, _ode._config.getDAOConnectionFactory(), _ode._config, false);
-        _ode._store.loadAll();
-
-        _ode._server.setInMemDaoConnectionFactory(new org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl(
-                _ode._scheduler, _ode._config.getInMemMexTtl()));
-        _ode._server.setDaoConnectionFactory(_ode._daocf);
-        _ode._server.setEndpointReferenceContext(_ode._eprContext);
-        _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();
-    }
-
-    /**
-     * Initialize the data store.
-     *
-     * @throws JBIException
-     */
-    private void initDao() throws JBIException {
-        BpelDAOConnectionFactoryJDBC cf;
-        try {
-            cf = _db.createDaoCF();
-        } catch (DatabaseConfigException e) {
-            String errmsg = __msgs.msgDAOInstantiationFailed(_ode._config.getDAOConnectionFactory());
-            throw new JBIException(errmsg,e);
-        }
-        _ode._daocf = cf;
-    }
-
-    private void initConnector() throws JBIException {
-        int port = _ode._config.getConnectorPort();
-        if (port == 0) {
-            __log.info("Skipping connector initialization.");
-        } else {
-            _connector = new BpelServerConnector();
-            _connector.setBpelServer(_ode._server);
-            _connector.setProcessStore(_ode._store);
-            _connector.setPort(_ode._config.getConnectorPort());
-            _connector.setId(_ode._config.getConnectorName());
-            try {
-                _connector.start();
-            } catch (Exception e) {
-
-                __log.error("Failed to initialize JCA connector (check security manager configuration)");
-                __log.debug("Failed to initialize JCA connector (check security manager configuration)", e);
-
-            }
-        }
-    }
-
-    private void registerEventListeners() {
-        String listenersStr = _ode._config.getEventListeners();
-        if (listenersStr != null) {
-            for (StringTokenizer tokenizer = new StringTokenizer(listenersStr, ",;"); tokenizer.hasMoreTokens();) {
-                String listenerCN = tokenizer.nextToken();
-                try {
-                    _ode._server.registerBpelEventListener((BpelEventListener) Class.forName(listenerCN).newInstance());
-                    __log.info(__msgs.msgBpelEventListenerRegistered(listenerCN));
-                } catch (Exception e) {
-                    __log.warn("Couldn't register the event listener " + listenerCN + ", the class couldn't be "
-                            + "loaded properly.");
-                }
-            }
-        }
-    }
-
-    private void registerMexInterceptors() {
-        String listenersStr = _ode._config.getMessageExchangeInterceptors();
-        if (listenersStr != null) {
-            for (StringTokenizer tokenizer = new StringTokenizer(listenersStr, ",;"); tokenizer.hasMoreTokens();) {
-                String interceptorCN = tokenizer.nextToken();
-                try {
-                    _ode._server.registerMessageExchangeInterceptor((MessageExchangeInterceptor) Class.forName(interceptorCN).newInstance());
-                    __log.info(__msgs.msgMessageExchangeInterceptorRegistered(interceptorCN));
-                } catch (Exception e) {
-                    __log.warn("Couldn't register the event listener " + interceptorCN + ", the class couldn't be "
-                            + "loaded properly: " + e);
-                }
-            }
-        }
-    }
-
-    public synchronized void start() throws JBIException {
-        if (_started)
-            return;
-
-        try {
-            __log.info(__msgs.msgOdeStarting());
-
-            if (!_initSuccess) {
-                String errmsg = "attempt to call start() after init() failure.";
-                IllegalStateException ex = new IllegalStateException(errmsg);
-                __log.fatal(errmsg, ex);
-                throw new JBIException(errmsg, ex);
-            }
-
-            if (_ode.getChannel() == null) {
-                throw (new JBIException("No channel!", new NullPointerException()));
-            }
-
-            try {
-                _ode._server.start();
-            } catch (Exception ex) {
-                String errmsg = __msgs.msgOdeBpelServerStartFailure();
-                __log.error(errmsg, ex);
-                throw new JBIException(errmsg, ex);
-            }
-
-            _receiver = new Receiver(_ode);
-            _receiver.start();
-            _started = true;
-            __log.info(__msgs.msgOdeStarted());
-        } finally {
-            if (!_started) {
-                if (_receiver != null) {
-                    _receiver.cease();
-                }
-                _receiver = null;
-            }
-        }
-    }
-
-    public synchronized void stop() throws JBIException {
-        if (!_started) {
-            return;
-        }
-
-        __log.info("Stopping ODE.");
-
-        try {
-
-            if (_receiver != null) {
-                try {
-                    _receiver.cease();
-                } catch (Exception ex) {
-                    __log.fatal("Error ceasing receiver.", ex);
-                } finally {
-                    _receiver = null;
-                }
-            }
-
-            try {
-                _ode._server.stop();
-
-            } catch (Throwable ex) {
-                __log.fatal("Error stopping services.", ex);
-            }
-
-            __log.info("ODE stopped.");
-        } finally {
-            _started = false;
-        }
-    }
-
-    /**
-     * Shutdown the service engine. This performs cleanup before the BPE is terminated. Once this method has been called, init()
-     * must be called before the transformation engine can be started again with a call to start().
-     *
-     * @throws javax.jbi.JBIException
-     *             if the transformation engine is unable to shut down.
-     */
-    public void shutDown() throws JBIException {
-        ClassLoader old = Thread.currentThread().getContextClassLoader();
-        Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
-
-        _ode.deactivatePMAPIs();
-        
-        if (_connector != null) {
-            try {
-                _connector.shutdown();
-            } catch (Exception e) {
-                __log.error("Error shutting down JCA server.", e);
-            }
-            _connector = null;
-        }
-
-        try {
-
-            try {
-                __log.debug("shutting down quartz scheduler.");
-                _ode._scheduler.shutdown();
-            } catch (Exception ex) {
-
-            }
-
-            try {
-                _db.shutdown();
-            } catch (Exception ex) {
-                __log.debug("error shutting down db.", ex);
-            } finally {
-                _db = null;
-            }
-
-            __log.debug("cleaning up temporary files.");
-            TempFileManager.cleanup();
-
-            _suManager = null;
-            _ode = null;
-
-            __log.info("Shutdown completed.");
-        } finally {
-            Thread.currentThread().setContextClassLoader(old);
-        }
-    }
-
-}
+/*
+ * 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.jbi;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.StringTokenizer;
+import java.util.concurrent.Executors;
+
+import javax.jbi.JBIException;
+import javax.jbi.component.ComponentContext;
+import javax.jbi.component.ComponentLifeCycle;
+import javax.jbi.component.ServiceUnitManager;
+import javax.management.ObjectName;
+import javax.transaction.TransactionManager;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.connector.BpelServerConnector;
+import org.apache.ode.bpel.dao.BpelDAOConnectionFactoryJDBC;
+import org.apache.ode.bpel.engine.BpelServerImpl;
+import org.apache.ode.bpel.iapi.BpelEventListener;
+import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
+import org.apache.ode.il.dbutil.Database;
+import org.apache.ode.il.dbutil.DatabaseConfigException;
+import org.apache.ode.jbi.msgmap.Mapper;
+import org.apache.ode.scheduler.simple.JdbcDelegate;
+import org.apache.ode.scheduler.simple.SimpleScheduler;
+import org.apache.ode.store.ProcessStoreImpl;
+import org.apache.ode.utils.GUID;
+import org.apache.ode.utils.fs.TempFileManager;
+
+/**
+ * This class implements ComponentLifeCycle. The JBI framework will start this engine class automatically when JBI framework starts
+ * up.
+ */
+public class OdeLifeCycle implements ComponentLifeCycle {
+    private static final Messages __msgs = Messages.getMessages(Messages.class);
+
+    private static final Log __log = LogFactory.getLog(OdeLifeCycle.class);
+
+    private OdeSUManager _suManager = null;
+
+    private boolean _initSuccess = false;
+
+    private OdeContext _ode;
+
+    private Receiver _receiver;
+
+    private boolean _started;
+
+    private BpelServerConnector _connector;
+
+    private Database _db;
+
+    ServiceUnitManager getSUManager() {
+        return _suManager;
+    }
+
+    OdeContext getOdeContext() {
+        return _ode;
+    }
+
+    public ObjectName getExtensionMBeanName() {
+        return null;
+    }
+
+    public void init(ComponentContext context) throws JBIException {
+        try {
+            _ode = OdeContext.getInstance();
+            _ode.setContext(context);
+
+            // Use system property to determine if DeliveryChannel.sendSync or DeliveryChannel.send is used.
+            if (Boolean.getBoolean("org.apache.ode.jbi.sendSynch"))
+                _ode._consumer = new OdeConsumerSync(_ode);
+            else
+                _ode._consumer = new OdeConsumerAsync(_ode);
+
+            if (_ode.getContext().getWorkspaceRoot() != null)
+                TempFileManager.setWorkingDirectory(new File(_ode.getContext().getWorkspaceRoot()));
+
+            __log.debug("Loading properties.");
+            initProperties();
+
+            __log.debug("Initializing message mappers.");
+            initMappers();
+
+            __log.debug("Creating data source.");
+            initDataSource();
+
+            __log.debug("Starting Dao.");
+            initDao();
+
+            __log.info("Hibernate started.");
+
+            __log.debug("Starting BPEL server.");
+            initBpelServer();
+
+            // Register BPEL event listeners configured in ode-jbi.properties.
+            registerEventListeners();
+
+            registerMexInterceptors();
+
+            __log.debug("Starting JCA connector.");
+            initConnector();
+
+            __log.debug("Register ProcessManagement APIs");
+            _ode.activatePMAPIs();
+
+            _suManager = new OdeSUManager(_ode);
+            _initSuccess = true;
+            __log.info(__msgs.msgOdeInitialized());
+        } finally {
+            if (!_initSuccess) {
+                // TODO ..then what? at least shutdown the scheduler
+            }
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private void initMappers() throws JBIException {
+        Class<Mapper> mapperClass;
+        try {
+            mapperClass = (Class<Mapper>) Class.forName(_ode._config.getMessageMapper());
+        } catch (ClassNotFoundException e) {
+            String errmsg = __msgs.msgOdeInitMapperClassNotFound(_ode._config.getMessageMapper());
+            __log.error(errmsg);
+            throw new JBIException(errmsg, e);
+        } catch (Throwable t) {
+            String errmsg = __msgs.msgOdeInitMapperClassLoadFailed(_ode._config.getMessageMapper());
+            __log.error(errmsg);
+            throw new JBIException(errmsg, t);
+        }
+        try {
+            _ode.registerMapper((Mapper) mapperClass.newInstance());
+        } catch (Throwable t) {
+            String errmsg = __msgs.msgOdeInitMapperInstantiationFailed(_ode._config.getMessageMapper());
+            __log.error(errmsg);
+            throw new JBIException(errmsg, t);
+        }
+    }
+
+    private void initDataSource() throws JBIException {
+        _db = new Database(_ode._config);
+        _db.setTransactionManager(_ode.getTransactionManager());
+        _db.setWorkRoot(new File(_ode.getContext().getInstallRoot()));
+
+        try {
+            _db.start();
+        } catch (Exception ex) {
+            String errmsg = __msgs.msgOdeDbConfigError();
+            __log.error(errmsg, ex);
+            throw new JBIException(errmsg, ex);
+        }
+
+        _ode._dataSource = _db.getDataSource();
+    }
+
+    /**
+     * Load the "ode-jbi.properties" file from the install directory.
+     *
+     * @throws JBIException
+     */
+    private void initProperties() throws JBIException {
+        OdeConfigProperties config = new OdeConfigProperties(new File(_ode.getContext().getInstallRoot(),
+                OdeConfigProperties.CONFIG_FILE_NAME));
+
+        try {
+            config.load();
+        } catch (FileNotFoundException fnf) {
+            __log.warn(__msgs.msgOdeInstallErrorCfgNotFound(config.getFile()));
+        } catch (Exception ex) {
+           String errmsg = __msgs.msgOdeInstallErrorCfgReadError(config.getFile());
+           throw new JBIException(errmsg,ex);
+        }
+        _ode._config = config;
+    }
+
+    private void initBpelServer() throws JBIException {
+        if (__log.isDebugEnabled()) {
+            __log.debug("ODE initializing");
+        }
+
+        _ode._server = new BpelServerImpl();
+        // We don't want the server to automatically load deployed processes,
+        // we'll do that explcitly
+        _ode._eprContext = new EndpointReferenceContextImpl(_ode);
+        _ode._mexContext = new MessageExchangeContextImpl(_ode);
+        if (_ode._config.getThreadPoolMaxSize() == 0)
+            _ode._executorService = Executors.newCachedThreadPool();
+        else
+            _ode._executorService = Executors.newFixedThreadPool(_ode._config.getThreadPoolMaxSize());
+        _ode._scheduler = new SimpleScheduler(new GUID().toString(),new JdbcDelegate(_ode._dataSource));
+        _ode._scheduler.setJobProcessor(_ode._server);
+        _ode._scheduler.setExecutorService(_ode._executorService);
+        _ode._scheduler.setTransactionManager((TransactionManager) _ode.getContext().getTransactionManager());
+
+        _ode._store = new ProcessStoreImpl(_ode._dataSource, _ode._config.getDAOConnectionFactory(), _ode._config, false);
+        _ode._store.loadAll();
+
+        _ode._server.setInMemDaoConnectionFactory(new org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl(
+                _ode._scheduler, _ode._config.getInMemMexTtl()));
+        _ode._server.setDaoConnectionFactory(_ode._daocf);
+        _ode._server.setEndpointReferenceContext(_ode._eprContext);
+        _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();
+    }
+
+    /**
+     * Initialize the data store.
+     *
+     * @throws JBIException
+     */
+    private void initDao() throws JBIException {
+        BpelDAOConnectionFactoryJDBC cf;
+        try {
+            cf = _db.createDaoCF();
+        } catch (DatabaseConfigException e) {
+            String errmsg = __msgs.msgDAOInstantiationFailed(_ode._config.getDAOConnectionFactory());
+            throw new JBIException(errmsg,e);
+        }
+        _ode._daocf = cf;
+    }
+
+    private void initConnector() throws JBIException {
+        int port = _ode._config.getConnectorPort();
+        if (port == 0) {
+            __log.info("Skipping connector initialization.");
+        } else {
+            _connector = new BpelServerConnector();
+            _connector.setBpelServer(_ode._server);
+            _connector.setProcessStore(_ode._store);
+            _connector.setPort(_ode._config.getConnectorPort());
+            _connector.setId(_ode._config.getConnectorName());
+            try {
+                _connector.start();
+            } catch (Exception e) {
+
+                __log.error("Failed to initialize JCA connector (check security manager configuration)");
+                __log.debug("Failed to initialize JCA connector (check security manager configuration)", e);
+
+            }
+        }
+    }
+
+    private void registerEventListeners() {
+        String listenersStr = _ode._config.getEventListeners();
+        if (listenersStr != null) {
+            for (StringTokenizer tokenizer = new StringTokenizer(listenersStr, ",;"); tokenizer.hasMoreTokens();) {
+                String listenerCN = tokenizer.nextToken();
+                try {
+                    _ode._server.registerBpelEventListener((BpelEventListener) Class.forName(listenerCN).newInstance());
+                    __log.info(__msgs.msgBpelEventListenerRegistered(listenerCN));
+                } catch (Exception e) {
+                    __log.warn("Couldn't register the event listener " + listenerCN + ", the class couldn't be "
+                            + "loaded properly.");
+                }
+            }
+        }
+    }
+
+    private void registerMexInterceptors() {
+        String listenersStr = _ode._config.getMessageExchangeInterceptors();
+        if (listenersStr != null) {
+            for (StringTokenizer tokenizer = new StringTokenizer(listenersStr, ",;"); tokenizer.hasMoreTokens();) {
+                String interceptorCN = tokenizer.nextToken();
+                try {
+                    _ode._server.registerMessageExchangeInterceptor((MessageExchangeInterceptor) Class.forName(interceptorCN).newInstance());
+                    __log.info(__msgs.msgMessageExchangeInterceptorRegistered(interceptorCN));
+                } catch (Exception e) {
+                    __log.warn("Couldn't register the event listener " + interceptorCN + ", the class couldn't be "
+                            + "loaded properly: " + e);
+                }
+            }
+        }
+    }
+
+    public synchronized void start() throws JBIException {
+        if (_started)
+            return;
+
+        try {
+            __log.info(__msgs.msgOdeStarting());
+
+            if (!_initSuccess) {
+                String errmsg = "attempt to call start() after init() failure.";
+                IllegalStateException ex = new IllegalStateException(errmsg);
+                __log.fatal(errmsg, ex);
+                throw new JBIException(errmsg, ex);
+            }
+
+            if (_ode.getChannel() == null) {
+                throw (new JBIException("No channel!", new NullPointerException()));
+            }
+
+            try {
+                _ode._server.start();
+            } catch (Exception ex) {
+                String errmsg = __msgs.msgOdeBpelServerStartFailure();
+                __log.error(errmsg, ex);
+                throw new JBIException(errmsg, ex);
+            }
+
+            _receiver = new Receiver(_ode);
+            _receiver.start();
+            _started = true;
+            __log.info(__msgs.msgOdeStarted());
+        } finally {
+            if (!_started) {
+                if (_receiver != null) {
+                    _receiver.cease();
+                }
+                _receiver = null;
+            }
+        }
+    }
+
+    public synchronized void stop() throws JBIException {
+        if (!_started) {
+            return;
+        }
+
+        __log.info("Stopping ODE.");
+
+        try {
+
+            if (_receiver != null) {
+                try {
+                    _receiver.cease();
+                } catch (Exception ex) {
+                    __log.fatal("Error ceasing receiver.", ex);
+                } finally {
+                    _receiver = null;
+                }
+            }
+
+            try {
+                _ode._server.stop();
+
+            } catch (Throwable ex) {
+                __log.fatal("Error stopping services.", ex);
+            }
+
+            __log.info("ODE stopped.");
+        } finally {
+            _started = false;
+        }
+    }
+
+    /**
+     * Shutdown the service engine. This performs cleanup before the BPE is terminated. Once this method has been called, init()
+     * must be called before the transformation engine can be started again with a call to start().
+     *
+     * @throws javax.jbi.JBIException
+     *             if the transformation engine is unable to shut down.
+     */
+    public void shutDown() throws JBIException {
+        ClassLoader old = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+
+        _ode.deactivatePMAPIs();
+
+        if (_connector != null) {
+            try {
+                _connector.shutdown();
+            } catch (Exception e) {
+                __log.error("Error shutting down JCA server.", e);
+            }
+            _connector = null;
+        }
+
+        try {
+
+            try {
+                __log.debug("shutting down quartz scheduler.");
+                _ode._scheduler.shutdown();
+            } catch (Exception ex) {
+
+            }
+
+            try {
+                _db.shutdown();
+            } catch (Exception ex) {
+                __log.debug("error shutting down db.", ex);
+            } finally {
+                _db = null;
+            }
+
+            __log.debug("cleaning up temporary files.");
+            TempFileManager.cleanup();
+
+            _suManager = null;
+            _ode = null;
+
+            __log.info("Shutdown completed.");
+        } finally {
+            Thread.currentThread().setContextClassLoader(old);
+        }
+    }
+
+}