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/06/24 19:51:23 UTC
svn commit: r1353302 - in /jackrabbit/oak/trunk: ./ oak-http/ oak-http/src/
oak-http/src/main/ oak-http/src/main/java/ oak-http/src/main/java/org/
oak-http/src/main/java/org/apache/
oak-http/src/main/java/org/apache/jackrabbit/ oak-http/src/main/java/o...
Author: jukka
Date: Sun Jun 24 17:51:22 2012
New Revision: 1353302
URL: http://svn.apache.org/viewvc?rev=1353302&view=rev
Log:
OAK-104: HTTP bindings for Oak
Add initial oak-http component
Added:
jackrabbit/oak/trunk/oak-http/
jackrabbit/oak/trunk/oak-http/pom.xml
jackrabbit/oak/trunk/oak-http/src/
jackrabbit/oak/trunk/oak-http/src/main/
jackrabbit/oak/trunk/oak-http/src/main/java/
jackrabbit/oak/trunk/oak-http/src/main/java/org/
jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/
jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/
jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/
jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/http/
jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/http/OakServlet.java
Modified:
jackrabbit/oak/trunk/oak-run/pom.xml
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepositoryServlet.java
jackrabbit/oak/trunk/pom.xml
Added: jackrabbit/oak/trunk/oak-http/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-http/pom.xml?rev=1353302&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-http/pom.xml (added)
+++ jackrabbit/oak/trunk/oak-http/pom.xml Sun Jun 24 17:51:22 2012
@@ -0,0 +1,106 @@
+<?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.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd ">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-parent</artifactId>
+ <version>0.3-SNAPSHOT</version>
+ <relativePath>../oak-parent/pom.xml</relativePath>
+ </parent>
+
+ <artifactId>oak-http</artifactId>
+ <name>Oak HTTP Binding</name>
+ <packaging>bundle</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <Export-Package>
+ !
+ </Export-Package>
+ <Bundle-Activator>
+ org.apache.jackrabbit.oak.http.osgi.Activator
+ </Bundle-Activator>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes/>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <dependencies>
+ <!-- Optional OSGi dependencies, used only when running within OSGi -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-core</artifactId>
+ <version>0.3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.5</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Findbugs annotations -->
+ <dependency>
+ <groupId>com.google.code.findbugs</groupId>
+ <artifactId>jsr305</artifactId>
+ <version>2.0.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Test dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
Added: jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/http/OakServlet.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/http/OakServlet.java?rev=1353302&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/http/OakServlet.java (added)
+++ jackrabbit/oak/trunk/oak-http/src/main/java/org/apache/jackrabbit/oak/http/OakServlet.java Sun Jun 24 17:51:22 2012
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+package org.apache.jackrabbit.oak.http;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.jcr.GuestCredentials;
+import javax.jcr.NoSuchWorkspaceException;
+import javax.security.auth.login.LoginException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.jackrabbit.oak.api.ContentRepository;
+import org.apache.jackrabbit.oak.api.ContentSession;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+
+public class OakServlet extends HttpServlet {
+
+ private final ContentRepository repository;
+
+ public OakServlet(ContentRepository repository) {
+ this.repository = repository;
+ }
+
+ @Override
+ protected void service(
+ HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ try {
+ ContentSession session = repository.login(new GuestCredentials(), null);
+ try {
+ response.setContentType("text/plain");
+ PrintWriter writer = response.getWriter();
+ Tree tree =
+ session.getCurrentRoot().getTree(request.getPathInfo());
+ if (tree != null) {
+ for (PropertyState property : tree.getProperties()) {
+ writer.print("- " + property.getName() + "\n");
+ }
+ for (Tree child : tree.getChildren()) {
+ writer.print("+ " + child.getName() + "\n");
+ }
+ } else {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND);
+ }
+ } finally {
+ session.close();
+ }
+ } catch (NoSuchWorkspaceException e) {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND);
+ } catch (LoginException e) {
+ throw new ServletException(e);
+ }
+ }
+
+}
Modified: jackrabbit/oak/trunk/oak-run/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/pom.xml?rev=1353302&r1=1353301&r2=1353302&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-run/pom.xml Sun Jun 24 17:51:22 2012
@@ -83,6 +83,11 @@
<version>${project.version}</version>
</dependency>
<dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-http</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.158</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=1353302&r1=1353301&r2=1353302&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 Sun Jun 24 17:51:22 2012
@@ -19,8 +19,17 @@ package org.apache.jackrabbit.oak.run;
import java.io.InputStream;
import java.util.Properties;
+import javax.jcr.Repository;
import javax.servlet.Servlet;
+import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import org.apache.jackrabbit.oak.api.ContentRepository;
+import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
+import org.apache.jackrabbit.oak.http.OakServlet;
+import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
+import org.apache.jackrabbit.webdav.jcr.JCRWebdavServerServlet;
+import org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
@@ -77,6 +86,8 @@ public class Main {
private final Server server;
+ private final MicroKernel[] kernels;
+
public HttpServer(String uri, String args[]) {
context = new ServletContextHandler(ServletContextHandler.SECURITY);
context.setContextPath("/");
@@ -84,17 +95,21 @@ public class Main {
if (args.length == 0) {
System.out.println("Starting an in-memory repository");
System.out.println(URI + " -> [memory]");
- addServlet(null, "/*");
+ kernels = new MicroKernel[] { new MicroKernelImpl() };
+ addServlets(kernels[0], "");
} else if (args.length == 1) {
System.out.println("Starting a standalone repository");
System.out.println(URI + " -> " + args[0]);
- addServlet(args[0], "/*");
+ kernels = new MicroKernel[] { new MicroKernelImpl(args[0]) };
+ addServlets(kernels[0], "");
} else {
System.out.println("Starting a clustered repository");
+ kernels = new MicroKernel[args.length];
for (int i = 0; i < args.length; i++) {
// FIXME: Use a clustered MicroKernel implementation
System.out.println(URI + "/node" + i + "/ -> " + args[i]);
- addServlet(args[i], "/node" + i + "/*");
+ kernels[i] = new MicroKernelImpl(args[i]);
+ addServlets(kernels[i], "/node" + i);
}
}
@@ -114,13 +129,39 @@ public class Main {
server.stop();
}
- private void addServlet(String repo, String path) {
- Servlet servlet = new RepositoryServlet(repo);
- ServletHolder holder = new ServletHolder(servlet);
- holder.setInitParameter(
+ private void addServlets(MicroKernel kernel, String path) {
+ ContentRepository repository =
+ new ContentRepositoryImpl(kernel, null, null);
+
+ ServletHolder oak =
+ new ServletHolder(new OakServlet(repository));
+ context.addServlet(oak, path + "/*");
+
+ final Repository jcrRepository = new RepositoryImpl(repository);
+
+ ServletHolder webdav =
+ new ServletHolder(new SimpleWebdavServlet() {
+ @Override
+ public Repository getRepository() {
+ return jcrRepository;
+ }
+ });
+ webdav.setInitParameter(
+ RepositoryServlet.INIT_PARAM_MISSING_AUTH_MAPPING,
+ "admin:admin");
+ context.addServlet(webdav, path + "/webdav/*");
+
+ ServletHolder davex =
+ new ServletHolder(new JCRWebdavServerServlet() {
+ @Override
+ protected Repository getRepository() {
+ return jcrRepository;
+ }
+ });
+ davex.setInitParameter(
RepositoryServlet.INIT_PARAM_MISSING_AUTH_MAPPING,
"admin:admin");
- context.addServlet(holder, path);
+ context.addServlet(davex, path + "/davex/*");
}
}
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepositoryServlet.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepositoryServlet.java?rev=1353302&r1=1353301&r2=1353302&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepositoryServlet.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RepositoryServlet.java Sun Jun 24 17:51:22 2012
@@ -16,36 +16,18 @@
*/
package org.apache.jackrabbit.oak.run;
-import org.apache.jackrabbit.mk.api.MicroKernel;
-import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import javax.jcr.Repository;
+
+import org.apache.jackrabbit.oak.api.ContentRepository;
import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
import org.apache.jackrabbit.webdav.jcr.JCRWebdavServerServlet;
-import javax.jcr.Repository;
-import javax.servlet.ServletException;
-
class RepositoryServlet extends JCRWebdavServerServlet {
- private final String path;
-
- private MicroKernelImpl 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();
- }
-
- repository = new RepositoryImpl();
- super.init();
+ public RepositoryServlet(ContentRepository repository) {
+ this.repository = new RepositoryImpl(repository);
}
@Override
@@ -53,11 +35,4 @@ class RepositoryServlet extends JCRWebda
return repository;
}
- @Override
- public void destroy() {
- super.destroy();
-
- kernel.dispose();
- }
-
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/pom.xml?rev=1353302&r1=1353301&r2=1353302&view=diff
==============================================================================
--- jackrabbit/oak/trunk/pom.xml (original)
+++ jackrabbit/oak/trunk/pom.xml Sun Jun 24 17:51:22 2012
@@ -44,6 +44,7 @@
<module>oak-core</module>
<module>oak-jcr</module>
<module>oak-sling</module>
+ <module>oak-http</module>
<module>oak-run</module>
<module>oak-it</module>
<module>oak-bench</module>