View Javadoc

1   /*
2    * Copyright (c) 2003, Henri Yandell
3    * All rights reserved.
4    * 
5    * Redistribution and use in source and binary forms, with or 
6    * without modification, are permitted provided that the 
7    * following conditions are met:
8    * 
9    * + Redistributions of source code must retain the above copyright notice, 
10   *   this list of conditions and the following disclaimer.
11   * 
12   * + Redistributions in binary form must reproduce the above copyright notice, 
13   *   this list of conditions and the following disclaimer in the documentation 
14   *   and/or other materials provided with the distribution.
15   * 
16   * + Neither the name of OSJava nor the names of its contributors 
17   *   may be used to endorse or promote products derived from this software 
18   *   without specific prior written permission.
19   * 
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
23   * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
30   * POSSIBILITY OF SUCH DAMAGE.
31   */
32  package org.osjava.oscube.container;
33  
34  import java.util.List;
35  import java.io.Reader;
36  import com.generationjava.config.Config;
37  
38  public class Engine {
39  
40      public static void main(String[] args) throws Exception {
41          Engine engine = new Engine();
42          // load the config
43          Config cfg = ConfigFactory.getConfig(args);
44          String runStr = cfg.getString("org.osjava.oscube.runner");
45          Class cl = Class.forName(runStr);
46          Runner runner = (Runner) cl.newInstance();
47          engine.run(runner, args);
48      }
49  
50  /// TODO: Implement the Scheduler aspect
51  ///  The Scheduler notifies only this class. It is 
52  ///  then up to this Engine to run the parsers.
53  /// TODO: Put the oscube.container and db in a different thread
54      public void run(Runner runner, String[] args) {
55          // load the config
56          Config cfg = ConfigFactory.getConfig(args);
57  
58          // get the prefix for this instance, this is the active 
59          // object which will be run by the runner
60          String prefix = cfg.getString("org.osjava.oscube.prefix");
61  
62          // test and how schedule=startup will be handled
63          List list = cfg.getList(prefix);
64  
65          for(int i=0; i<list.size(); i++) {
66              String key = (String)list.get(i);
67  
68              Session session = new NamespaceSession();
69              session.put(prefix, key);
70              Config clonedCfg = ConfigFactory.getConfig(args);
71              clonedCfg.setContext(key+".");
72  
73              // schedule the times to run parsers
74              // TODO: allow this to be pluggable.
75              Scheduler scheduler = SchedulerFactory.getScheduler(clonedCfg, session);
76              // Engine suddenly becomes a part of the system. 
77              // Possibly the run(Config, Session) needs to 
78              // move into an interface
79              scheduler.schedule(clonedCfg, session, runner);
80          }
81      }
82  
83  }