You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wookie.apache.org by sc...@apache.org on 2011/05/25 17:46:29 UTC
svn commit: r1127566 [4/4] - in /incubator/wookie/trunk: ./ modules/
modules/jcr/ modules/jcr/src-tests/ modules/jcr/src-tests/org/
modules/jcr/src-tests/org/apache/ modules/jcr/src-tests/org/apache/wookie/
modules/jcr/src-tests/org/apache/wookie/beans...
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;
+ }
}