Modified: incubator/wookie/trunk/src/org/apache/wookie/server/Start.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/server/Start.java?rev=1127566&r1=1127565&r2=1127566&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/server/Start.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/server/Start.java Wed May 25 
15:46:26 2011
@@ -15,250 +15,164 @@
 package org.apache.wookie.server;
 
 import java.io.BufferedReader;
-import java.io.File;
 import java.io.InputStreamReader;
 import java.net.InetAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
 
-import javax.jcr.Repository;
-import javax.sql.DataSource;
-
-import org.apache.commons.dbcp.BasicDataSource;
-import org.apache.commons.dbcp.DataSourceConnectionFactory;
-import org.apache.commons.dbcp.PoolableConnectionFactory;
-import org.apache.commons.dbcp.PoolingDataSource;
-import org.apache.commons.pool.impl.GenericObjectPool;
-import org.apache.jackrabbit.core.TransientRepository;
 import org.apache.log4j.Logger;
-import org.apache.wookie.beans.jcr.JCRPersistenceManager;
-import org.apache.wookie.beans.jpa.JPAPersistenceManager;
+import org.apache.wookie.beans.util.IModule;
 import org.apache.wookie.beans.util.PersistenceManagerFactory;
 import org.mortbay.jetty.Server;
-import org.mortbay.jetty.plus.naming.Resource;
 import org.mortbay.jetty.security.HashUserRealm;
 import org.mortbay.jetty.security.UserRealm;
 import org.mortbay.jetty.webapp.WebAppContext;
 
 public class Start {
-       static final private Logger logger = Logger.getLogger(Start.class);
-       private static int port = 8080;
-       
-    public static final String DB_USER_PROPERTY_NAME = "wookie.db.user";
-    public static final String DB_PASSWORD_PROPERTY_NAME = 
"wookie.db.password";
-    public static final String DB_DRIVER_CLASS_PROPERTY_NAME = 
"wookie.db.driver";
-    public static final String DB_URI_PROPERTY_NAME = "wookie.db.uri";
-    public static final String DB_TYPE_PROPERTY_NAME = "wookie.db.type";
-    public static final String REPOSITORY_USER_PROPERTY_NAME = 
"wookie.repository.user";
-    public static final String REPOSITORY_PASSWORD_PROPERTY_NAME = 
"wookie.repository.password";
-    public static final String REPOSITORY_ROOT_PATH_PROPERTY_NAME = 
"wookie.repository.rootpath";
-    public static final String REPOSITORY_WORKSPACE_PROPERTY_NAME = 
"wookie.repository.workspace";
-    public static final String PERSISTENCE_MANAGER_TYPE_PROPERTY_NAME = 
"wookie.persistence.manager.type";
-    public static final String PERSISTENCE_MANAGER_TYPE_JPA = "jpa";
-    public static final String PERSISTENCE_MANAGER_TYPE_JCR = "jcr";
-
-    private static String persistenceManagerType;
-    private static String dbUser;
-    private static String dbPassword;
-    private static String dbDriver;
-    private static String dbUri;
-    private static String dbType;
-    private static String repositoryUser;
-    private static String repositoryPassword;
-    private static String repositoryRootPath;
-    private static String repositoryWorkspace;
-       private static Server server;
-
-       public static void main(String[] args) throws Exception {
-           boolean initDB = true;
-               for (int i = 0; i < args.length; i++) {
-                       String arg = args[i];
-                       System.out.println("Runtime argument: " + arg);
-                       if (arg.startsWith("port=")) {
-                         port = new Integer(arg.substring(5));
-                       } else if (arg.startsWith("initDB=")) {
-                         initDB = 
!arg.substring(7).toLowerCase().equals("false");
-                       } else {
-                         System.out.println("argument UNRECOGNISED - 
ignoring");
-                       }
-               }
-
-               // load configuration from environment
-        persistenceManagerType = 
getSystemProperty(PERSISTENCE_MANAGER_TYPE_PROPERTY_NAME, 
PERSISTENCE_MANAGER_TYPE_JPA);
-        dbUser = getSystemProperty(DB_USER_PROPERTY_NAME, "java");
-        dbPassword = getSystemProperty(DB_PASSWORD_PROPERTY_NAME, "java");
-        dbDriver = getSystemProperty(DB_DRIVER_CLASS_PROPERTY_NAME, 
"org.apache.derby.jdbc.EmbeddedDriver");
-        dbUri = getSystemProperty(DB_URI_PROPERTY_NAME, 
"jdbc:derby:widgetDatabase/widgetDB;create=true");
-        dbType = getSystemProperty(DB_TYPE_PROPERTY_NAME, "derby");
-        repositoryUser = getSystemProperty(REPOSITORY_USER_PROPERTY_NAME, 
"java");
-        repositoryPassword = 
getSystemProperty(REPOSITORY_PASSWORD_PROPERTY_NAME, "java");
-        repositoryRootPath = 
getSystemProperty(REPOSITORY_ROOT_PATH_PROPERTY_NAME, "/wookie");
-        repositoryWorkspace = 
getSystemProperty(REPOSITORY_WORKSPACE_PROPERTY_NAME, "default");
-
-        // set configuration properties
-        if (persistenceManagerType.equals(PERSISTENCE_MANAGER_TYPE_JPA)) {
-            
System.setProperty(PersistenceManagerFactory.PERSISTENCE_MANAGER_CLASS_NAME_PROPERTY_NAME,
 JPAPersistenceManager.class.getName());
-        } else if 
(persistenceManagerType.equals(PERSISTENCE_MANAGER_TYPE_JCR)) {
-            
System.setProperty(PersistenceManagerFactory.PERSISTENCE_MANAGER_CLASS_NAME_PROPERTY_NAME,
 JCRPersistenceManager.class.getName());
-        }
-               if (initDB) {
-                   
System.setProperty(PersistenceManagerFactory.PERSISTENCE_MANAGER_INITIALIZE_STORE_PROPERTY_NAME,
 "true");
-               }
-               
System.setProperty(JPAPersistenceManager.PERSISTENCE_MANAGER_DB_TYPE_PROPERTY_NAME,
 dbType);
-        
System.setProperty(JCRPersistenceManager.PERSISTENCE_MANAGER_USER_PROPERTY_NAME,
 repositoryUser);
-        
System.setProperty(JCRPersistenceManager.PERSISTENCE_MANAGER_PASSWORD_PROPERTY_NAME,
 repositoryPassword);
-        
System.setProperty(JCRPersistenceManager.PERSISTENCE_MANAGER_ROOT_PATH_PROPERTY_NAME,
 repositoryRootPath);
-        
System.setProperty(JCRPersistenceManager.PERSISTENCE_MANAGER_WORKSPACE_PROPERTY_NAME,
 repositoryWorkspace);
-
-               // configure and start server
-               configureServer();
-               startServer();
-       }
-
-       private static void startServer() throws Exception, 
InterruptedException {
-               logger.info("Starting Wookie Server");
-               logger.info("point your browser at http://localhost:"; + port + 
"/wookie");
-               // The monitor thread will end this server instance when it 
receives a \n\r on port 8079
-               Thread monitor = new MonitorThread();
-           monitor.start();
-               server.start();                         
-               server.join();                          
-               monitor = null;
-               System.exit(0);
-       }
-
-       private static void configureServer() throws Exception {
-           // create embedded jetty instance
-               logger.info("Configuring Jetty server");
-               server = new Server(port);
-
-               // configure embedded jetty to handle wookie web application
-               WebAppContext context = new WebAppContext();
-               context.setServer(server);
-               context.setContextPath("/wookie");
-               context.setWar("build/webapp/wookie");
-               
-               // enable and configure JNDI container resources
-        context.setConfigurationClasses(new 
String[]{"org.mortbay.jetty.webapp.WebInfConfiguration",
-                                                     
"org.mortbay.jetty.plus.webapp.EnvConfiguration",
-                                                     
"org.mortbay.jetty.plus.webapp.Configuration",
-                                                     
"org.mortbay.jetty.webapp.JettyWebXmlConfiguration",
-                                                     
"org.mortbay.jetty.webapp.TagLibConfiguration"});
-        if (persistenceManagerType.equals(PERSISTENCE_MANAGER_TYPE_JPA)) {
-            logger.info("Configuring JPA persistence manager");
-
-            // setup derby database directory and logging properties
-            if (dbType.equals("derby") && dbUri.startsWith("jdbc:derby:")) {
-                int dbUriArgsIndex = dbUri.indexOf(";", 11);
-                if (dbUriArgsIndex == -1) {
-                    dbUriArgsIndex = dbUri.length();
-                }
-                String databasePath = dbUri.substring(11, dbUriArgsIndex);
-                int databaseDirIndex = 
databasePath.lastIndexOf(File.separatorChar);
-                if ((databaseDirIndex == -1) && (File.separatorChar != '/')) {
-                    databaseDirIndex = databasePath.lastIndexOf('/');          
          
-                }
-                if (databaseDirIndex != -1) {
-                    String databaseDir = databasePath.substring(0, 
databaseDirIndex);
-                    File databaseDirFile = new File(databaseDir);
-                    if (!databaseDirFile.exists()) {
-                        databaseDirFile.mkdirs();
-                    }
-                    String derbyLog = 
databaseDirFile.getAbsolutePath()+File.separator+"derby.log";
-                    System.setProperty("derby.stream.error.file", derbyLog);
-                }
-            }
-
-            // Setup a database connection resource using DBCP
-            BasicDataSource dataSource = new BasicDataSource();
-            dataSource.setDriverClassName(dbDriver);
-            dataSource.setUrl(dbUri);
-            dataSource.setUsername(dbUser);
-            dataSource.setPassword(dbPassword);
-            dataSource.setMaxActive(80);
-            dataSource.setMaxIdle(80);
-            dataSource.setInitialSize(5);
-            dataSource.setMaxOpenPreparedStatements(0);
-            
-            // Set up connection pool
-            GenericObjectPool pool = new GenericObjectPool();
-            // setup factory and pooling DataSource
-            DataSourceConnectionFactory factory = new 
DataSourceConnectionFactory(dataSource);
-            @SuppressWarnings("unused")
-                       PoolableConnectionFactory poolableConnectionFactory = 
new PoolableConnectionFactory(factory,pool,null,null,false,true);
-            DataSource poolingDataSource = new PoolingDataSource(pool);
-            
-            
-            new 
Resource(JPAPersistenceManager.WIDGET_DATABASE_JNDI_DATASOURCE_NAME, 
poolingDataSource);
-        } else if 
(persistenceManagerType.equals(PERSISTENCE_MANAGER_TYPE_JCR)) {
-            logger.info("Configuring JCR persistence manager");
-
-            // setup repository directory and derby logging properties
-            File repositoryDirFile = new File("widgetRepository");
-            if (!repositoryDirFile.exists()) {
-                repositoryDirFile.mkdirs();
-            }
-            String derbyLog = 
repositoryDirFile.getAbsolutePath()+File.separator+"derby.log";
-            System.setProperty("derby.stream.error.file", derbyLog);
-
-            // setup Jackrabbit JCR repository JNDI resource
-            String repositoryConfig = 
repositoryDirFile.getAbsolutePath()+File.separator+"repository.xml";
-            Repository repository = new TransientRepository(repositoryConfig, 
repositoryDirFile.getAbsolutePath());
-            new 
Resource(JCRPersistenceManager.WIDGET_REPOSITORY_JNDI_REPOSITORY_NAME, 
repository);
-        }
-
-        // configure embedded jetty web application handler
-               server.addHandler(context);
-               
-        // configure embedded jetty authentication realm
-               HashUserRealm authedRealm = new HashUserRealm("Authentication 
Required","etc/jetty-realm.properties");
-               server.setUserRealms(new UserRealm[]{authedRealm});
-
-               logger.info("Configured Jetty server");
-       }
-       
-       private static class MonitorThread extends Thread {
-
-               private ServerSocket socket;
-
-               public MonitorThread() {
-                       setDaemon(true);
-                       setName("StopMonitor");
-                       try {
-                               socket = new ServerSocket(8079, 1, 
InetAddress.getByName("127.0.0.1"));
-                       } catch(Exception e) {
-                               throw new RuntimeException(e);
-                       }
-               }
-
-               @Override
-               public void run() {
-                       System.out.println("*** running jetty 'stop' thread");
-                       Socket accept;
-                       try {
-                               accept = socket.accept();
-                               BufferedReader reader = new BufferedReader(new 
InputStreamReader(accept.getInputStream()));
-                               reader.readLine();
-                               System.out.println("*** stopping jetty embedded 
server");
-                               server.stop();
-                               accept.close();
-                               socket.close();                                 
        
-                       } catch(Exception e) {
-                               throw new RuntimeException(e);
-                       }
-               }
-       }
-
-       /**
-     * Get configuration system property.
-     * 
-     * @param name property name
-     * @param defaultValue default property value
-     * @return property value
-     */
-    private static String getSystemProperty(String name, String defaultValue)
-    {
-        String value = System.getProperty(name);
-        return (((value != null) && (value.length() > 0) && 
!value.startsWith("$")) ? value : defaultValue);
+  static final private Logger logger = Logger.getLogger(Start.class);
+  private static int port = 8080;
+
+  public static final String PERSISTENCE_MANAGER_TYPE_PROPERTY_NAME = 
"wookie.persistence.manager.type";
+  public static final String PERSISTENCE_MANAGER_TYPE_JPA = "jpa";
+  public static final String PERSISTENCE_MANAGER_TYPE_JCR = "jcr";
+
+  private static String persistenceManagerType;
+  private static Server server;
+
+  public static void main(String[] args) throws Exception {
+    boolean initDB = true;
+    for (int i = 0; i < args.length; i++) {
+      String arg = args[i];
+      System.out.println("Runtime argument: " + arg);
+      if (arg.startsWith("port=")) {
+        port = new Integer(arg.substring(5));
+      } else if (arg.startsWith("initDB=")) {
+        initDB = !arg.substring(7).toLowerCase().equals("false");
+      } else {
+        System.out.println("argument UNRECOGNISED - ignoring");
+      }
+    }
+
+    // load configuration from environment
+    persistenceManagerType = 
getSystemProperty(PERSISTENCE_MANAGER_TYPE_PROPERTY_NAME, 
PERSISTENCE_MANAGER_TYPE_JPA);
+
+     // Configure system properties specific to the persistence implementation
+    IModule module = getModule();
+    module.configure();
+    
+    if (initDB) {
+      
System.setProperty(PersistenceManagerFactory.PERSISTENCE_MANAGER_INITIALIZE_STORE_PROPERTY_NAME,
 "true");
+    }
+
+    // configure and start server
+    configureServer();
+    startServer();
+  }
+
+  private static void startServer() throws Exception, InterruptedException {
+    logger.info("Starting Wookie Server");
+    logger.info("point your browser at http://localhost:"; + port + "/wookie");
+    // The monitor thread will end this server instance when it receives a 
\n\r on port 8079
+    Thread monitor = new MonitorThread();
+    monitor.start();
+    server.start();                    
+    server.join();                     
+    monitor = null;
+    System.exit(0);
+  }
+
+  private static void configureServer() throws Exception {
+    // create embedded jetty instance
+    logger.info("Configuring Jetty server");
+    server = new Server(port);
+
+    // configure embedded jetty to handle wookie web application
+    WebAppContext context = new WebAppContext();
+    context.setServer(server);
+    context.setContextPath("/wookie");
+    context.setWar("build/webapp/wookie");
+
+    // enable and configure JNDI container resources
+    context.setConfigurationClasses(new 
String[]{"org.mortbay.jetty.webapp.WebInfConfiguration",
+        "org.mortbay.jetty.plus.webapp.EnvConfiguration",
+        "org.mortbay.jetty.plus.webapp.Configuration",
+        "org.mortbay.jetty.webapp.JettyWebXmlConfiguration",
+    "org.mortbay.jetty.webapp.TagLibConfiguration"});
+
+    IModule module = getModule();
+    module.setup();
+
+    // configure embedded jetty web application handler
+    server.addHandler(context);
+
+    // configure embedded jetty authentication realm
+    HashUserRealm authedRealm = new HashUserRealm("Authentication 
Required","etc/jetty-realm.properties");
+    server.setUserRealms(new UserRealm[]{authedRealm});
+
+    logger.info("Configured Jetty server");
+  }
+
+  private static class MonitorThread extends Thread {
+
+    private ServerSocket socket;
+
+    public MonitorThread() {
+      setDaemon(true);
+      setName("StopMonitor");
+      try {
+        socket = new ServerSocket(8079, 1, InetAddress.getByName("127.0.0.1"));
+      } catch(Exception e) {
+        throw new RuntimeException(e);
+      }
+    }
+
+    @Override
+    public void run() {
+      System.out.println("*** running jetty 'stop' thread");
+      Socket accept;
+      try {
+        accept = socket.accept();
+        BufferedReader reader = new BufferedReader(new 
InputStreamReader(accept.getInputStream()));
+        reader.readLine();
+        System.out.println("*** stopping jetty embedded server");
+        server.stop();
+        accept.close();
+        socket.close();                                                
+      } catch(Exception e) {
+        throw new RuntimeException(e);
+      }
+    }
+  }
+
+  /**
+   * Get configuration system property.
+   * 
+   * @param name property name
+   * @param defaultValue default property value
+   * @return property value
+   */
+  private static String getSystemProperty(String name, String defaultValue)
+  {
+    String value = System.getProperty(name);
+    return (((value != null) && (value.length() > 0) && 
!value.startsWith("$")) ? value : defaultValue);
+  }
+
+  /**
+   * Get persistence module. 
+   * TODO use a more reliable and extensible approach than fixed class names
+   * @return a persistence module
+   */
+  private static IModule getModule(){
+    IModule module = null;
+    try {
+      if (persistenceManagerType.equals(PERSISTENCE_MANAGER_TYPE_JCR)){
+        module = (IModule) 
Class.forName("org.apache.wookie.beans.jcr.JCRModule").newInstance();
+      } else {
+        module = (IModule) 
Class.forName("org.apache.wookie.beans.jpa.JPAModule").newInstance();
+      }
+    } catch (Exception e) {
+      logger.error("Could not load persistence module", e);
     }
+    return module;
+  }
 }


Reply via email to