001: /*--
002:
003: Copyright (C) 2002-2005 Adrian Price.
004: All rights reserved.
005:
006: Redistribution and use in source and binary forms, with or without
007: modification, are permitted provided that the following conditions
008: are met:
009:
010: 1. Redistributions of source code must retain the above copyright
011: notice, this list of conditions, and the following disclaimer.
012:
013: 2. Redistributions in binary form must reproduce the above copyright
014: notice, this list of conditions, and the disclaimer that follows
015: these conditions in the documentation and/or other materials
016: provided with the distribution.
017:
018: 3. The names "OBE" and "Open Business Engine" must not be used to
019: endorse or promote products derived from this software without prior
020: written permission. For written permission, please contact
021: adrianprice@sourceforge.net.
022:
023: 4. Products derived from this software may not be called "OBE" or
024: "Open Business Engine", nor may "OBE" or "Open Business Engine"
025: appear in their name, without prior written permission from
026: Adrian Price (adrianprice@users.sourceforge.net).
027:
028: THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
029: WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
030: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
031: DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT,
032: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
033: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
034: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
035: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
036: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
037: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
038: POSSIBILITY OF SUCH DAMAGE.
039:
040: For more information on OBE, please see
041: <http://obe.sourceforge.net/>.
042:
043: */
044:
045: package org.obe.server;
046:
047: import org.apache.commons.logging.Log;
048: import org.apache.commons.logging.LogFactory;
049: import org.obe.engine.WorkflowEngine;
050: import org.obe.server.xmlrpc.OBEXmlRpcServer;
051:
052: public class OBEServer {
053: private static Log log;
054: private static boolean printStackTraces = true;
055: private static OBEServer obeServer;
056:
057: private OBEXmlRpcServer server;
058:
059: private WorkflowEngine engine;
060:
061: private OBEServer() {
062:
063: }
064:
065: public static synchronized OBEServer getInstance() {
066: return obeServer;
067: }
068:
069: /**
070: * Main entry point.
071: *
072: * @param args Command line arguments
073: */
074:
075: public static void main(String[] args) {
076: try {
077: log = LogFactory.getLog(OBEServer.class);
078:
079: obeServer = new OBEServer();
080: obeServer.startup();
081: } catch (Exception e) {
082: e.printStackTrace();
083: }
084: }
085:
086: public static void error(Log logger, String message) {
087: error(logger, message, null);
088: }
089:
090: public static void error(Log logger, String message, Throwable t) {
091: logger.error(message);
092: if (printStackTraces && t != null) {
093: t.printStackTrace();
094: }
095: }
096:
097: private void startup() {
098: try {
099: engine = new WorkflowEngine();
100: log.info("WorkflowEngine created");
101: // load all process definitions on the server
102:
103: startServers();
104: } catch (Exception e) {
105: error(log, "Cannot start servers", e);
106: }
107: }
108:
109: /**
110: * Start all servers.
111: *
112: * @throws Exception Any Exception
113: */
114:
115: public void startServers() throws Exception {
116: server = new OBEXmlRpcServer(new WorkflowServer(engine));
117: server.startServer();
118: }
119:
120: public WorkflowEngine getEngine() {
121: return engine;
122: }
123:
124: }
|