You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ju...@apache.org on 2012/04/21 12:31:10 UTC

svn commit: r1328631 - in /jackrabbit/oak/trunk/oak-run: pom.xml src/main/java/org/apache/jackrabbit/oak/run/Main.java src/main/java/org/apache/jackrabbit/oak/run/RepositoryServlet.java src/main/resources/ src/main/resources/logback.xml

Author: jukka
Date: Sat Apr 21 10:31:10 2012
New Revision: 1328631

URL: http://svn.apache.org/viewvc?rev=1328631&view=rev
Log:
OAK-4: Runnable jar packaging

Support both in-memory and on-disk repositories, add placeholder for clustered ones

Added:
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepositoryServlet.java
      - copied, changed from r1328630, jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java
    jackrabbit/oak/trunk/oak-run/src/main/resources/
    jackrabbit/oak/trunk/oak-run/src/main/resources/logback.xml
Modified:
    jackrabbit/oak/trunk/oak-run/pom.xml
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java

Modified: jackrabbit/oak/trunk/oak-run/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/pom.xml?rev=1328631&r1=1328630&r2=1328631&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-run/pom.xml Sat Apr 21 10:31:10 2012
@@ -83,6 +83,11 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
+      <groupId>com.h2database</groupId>
+      <artifactId>h2</artifactId>
+      <version>1.3.158</version>
+    </dependency>
+    <dependency>
       <groupId>org.apache.jackrabbit</groupId>
       <artifactId>jackrabbit-jcr-server</artifactId>
       <version>${jackrabbit.version}</version>

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java?rev=1328631&r1=1328630&r2=1328631&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java Sat Apr 21 10:31:10 2012
@@ -16,13 +16,11 @@
  */
 package org.apache.jackrabbit.oak.run;
 
-import javax.jcr.Repository;
+import java.io.InputStream;
+import java.util.Properties;
+
 import javax.servlet.Servlet;
 
-import org.apache.jackrabbit.mk.core.MicroKernelImpl;
-import org.apache.jackrabbit.oak.jcr.GlobalContext;
-import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
-import org.apache.jackrabbit.webdav.jcr.JCRWebdavServerServlet;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
@@ -30,24 +28,66 @@ import org.eclipse.jetty.servlet.Servlet
 public class Main {
 
     public static void main(String[] args) throws Exception {
-        final Repository repository =
-                new RepositoryImpl(new GlobalContext(new MicroKernelImpl()));
-        Servlet servlet = new JCRWebdavServerServlet() {
-            @Override
-            protected Repository getRepository() {
-                return repository;
-            }
-        };
+        printProductInfo();
 
         ServletContextHandler context =
                 new ServletContextHandler(ServletContextHandler.SECURITY);
         context.setContextPath("/");
-        context.addServlet(new ServletHolder(servlet),"/*");
- 
+
+        if (args.length == 0) {
+            System.out.println("Starting an in-memory repository");
+            System.out.println("http://localhost:8080/ -> [memory]");
+            Servlet servlet = new RepositoryServlet(null);
+            context.addServlet(new ServletHolder(servlet),"/*");
+        } else if (args.length == 1) {
+            System.out.println("Starting a standalone repository");
+            System.out.println("http://localhost:8080/ -> " + args[0]);
+            Servlet servlet = new RepositoryServlet(args[0]);
+            context.addServlet(new ServletHolder(servlet), "/*");
+        } else {
+            System.out.println("Starting a clustered repository");
+            for (int i = 0; i < args.length; i++) {
+                // FIXME: Use a clustered MicroKernel implementation
+                System.out.println(
+                        "http://localhost:8080/node" + i + "/ -> " + args[i]);
+                Servlet servlet = new RepositoryServlet(args[i]);
+                context.addServlet(
+                        new ServletHolder(servlet), "/node" + i + "/*");
+            }
+        }
+
         Server server = new Server(8080);
         server.setHandler(context);
         server.start();
         server.join();
     }
 
+    private static void printProductInfo() {
+        String version = null;
+
+        try {
+            InputStream stream = Main.class.getResourceAsStream(
+                    "/META-INF/maven/org.apache.jackrabbit/oak-run/pom.properties");
+            if (stream != null) {
+                try {
+                    Properties properties = new Properties();
+                    properties.load(stream);
+                    version = properties.getProperty("version");
+                } finally {
+                    stream.close();
+                }
+            }
+        } catch (Exception ignore) {
+        }
+
+        String product;
+        if (version != null) {
+            product = "Apache Jackrabbit Oak " + version;
+        } else {
+            product = "Apache Jackrabbit Oak";
+        }
+
+        System.out.println(product);
+    }
+
 }

Copied: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepositoryServlet.java (from r1328630, jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepositoryServlet.java?p2=jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepositoryServlet.java&p1=jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java&r1=1328630&r2=1328631&rev=1328631&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepositoryServlet.java Sat Apr 21 10:31:10 2012
@@ -17,37 +17,56 @@
 package org.apache.jackrabbit.oak.run;
 
 import javax.jcr.Repository;
-import javax.servlet.Servlet;
+import javax.jcr.RepositoryException;
+import javax.servlet.ServletException;
 
+import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.apache.jackrabbit.oak.jcr.GlobalContext;
 import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
 import org.apache.jackrabbit.webdav.jcr.JCRWebdavServerServlet;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-
-public class Main {
-
-    public static void main(String[] args) throws Exception {
-        final Repository repository =
-                new RepositoryImpl(new GlobalContext(new MicroKernelImpl()));
-        Servlet servlet = new JCRWebdavServerServlet() {
-            @Override
-            protected Repository getRepository() {
-                return repository;
-            }
-        };
-
-        ServletContextHandler context =
-                new ServletContextHandler(ServletContextHandler.SECURITY);
-        context.setContextPath("/");
-        context.addServlet(new ServletHolder(servlet),"/*");
- 
-        Server server = new Server(8080);
-        server.setHandler(context);
-        server.start();
-        server.join();
+
+class RepositoryServlet extends JCRWebdavServerServlet {
+
+    private final String path;
+
+    private MicroKernel kernel;
+
+    private Repository repository;
+
+    public RepositoryServlet(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public void init() throws ServletException {
+        if (path != null) {
+            kernel = new MicroKernelImpl(path);
+        } else {
+            kernel = new MicroKernelImpl();
+        }
+
+        try {
+            repository = new RepositoryImpl(new GlobalContext(kernel));
+        } catch (RepositoryException e) {
+            kernel.dispose();
+            throw new ServletException(
+                    "Failed to start the repository at " + path, e);
+        }
+
+        super.init();
+    }
+
+    @Override
+    protected Repository getRepository() {
+        return repository;
+    }
+
+    @Override
+    public void destroy() {
+        super.destroy();
+
+        kernel.dispose();
     }
 
-}
+}
\ No newline at end of file

Added: jackrabbit/oak/trunk/oak-run/src/main/resources/logback.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/resources/logback.xml?rev=1328631&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/resources/logback.xml (added)
+++ jackrabbit/oak/trunk/oak-run/src/main/resources/logback.xml Sat Apr 21 10:31:10 2012
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   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.
+  -->
+<configuration>
+
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+    </encoder>
+  </appender>
+
+  <root level="warn">
+    <appender-ref ref="STDOUT" />
+  </root>
+
+</configuration>