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 ch...@apache.org on 2015/08/07 13:01:10 UTC
svn commit: r1694657 - in /jackrabbit/oak/trunk/oak-examples/webapp: ./
src/main/java/org/apache/jackrabbit/j2ee/ src/main/webapp/WEB-INF/
src/main/webapp/WEB-INF/templates/
Author: chetanm
Date: Fri Aug 7 11:01:10 2015
New Revision: 1694657
URL: http://svn.apache.org/r1694657
Log:
OAK-3193 - Integrate with Felix WebConsole
-- Add bundles related to Felix WebConsole
-- Make use of Felix ProxyServlet to route calls for /osgi/* to WebConsole servlet at /osgi/system/console
-- RepositoryStartupServlet would now register the BundleContext with ServletContext upon startup. This would allow the ProxyServlet to work
-- Add bundle filter to ensure only required bundles get started (OAK-3194)
Modified:
jackrabbit/oak/trunk/oak-examples/webapp/pom.xml
jackrabbit/oak/trunk/oak-examples/webapp/src/main/java/org/apache/jackrabbit/j2ee/BootstrapConfig.java
jackrabbit/oak/trunk/oak-examples/webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java
jackrabbit/oak/trunk/oak-examples/webapp/src/main/webapp/WEB-INF/templates/bootstrap.properties
jackrabbit/oak/trunk/oak-examples/webapp/src/main/webapp/WEB-INF/web.xml
Modified: jackrabbit/oak/trunk/oak-examples/webapp/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-examples/webapp/pom.xml?rev=1694657&r1=1694656&r2=1694657&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-examples/webapp/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-examples/webapp/pom.xml Fri Aug 7 11:01:10 2015
@@ -113,6 +113,24 @@
<version>1.1</version>
</dependency>
+ <!-- Required for Felix WebConsole -->
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.http.proxy</artifactId>
+ <version>2.3.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.http.bridge</artifactId>
+ <version>2.3.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.webconsole</artifactId>
+ <version>4.2.10</version>
+ <classifier>all</classifier>
+ </dependency>
+
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
@@ -163,7 +181,7 @@
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.8.v20150217</version>
<configuration>
- <scanIntervalSeconds>10</scanIntervalSeconds>
+ <scanIntervalSeconds>0</scanIntervalSeconds>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8080</port>
Modified: jackrabbit/oak/trunk/oak-examples/webapp/src/main/java/org/apache/jackrabbit/j2ee/BootstrapConfig.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-examples/webapp/src/main/java/org/apache/jackrabbit/j2ee/BootstrapConfig.java?rev=1694657&r1=1694656&r2=1694657&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-examples/webapp/src/main/java/org/apache/jackrabbit/j2ee/BootstrapConfig.java (original)
+++ jackrabbit/oak/trunk/oak-examples/webapp/src/main/java/org/apache/jackrabbit/j2ee/BootstrapConfig.java Fri Aug 7 11:01:10 2015
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.j2ee;
import java.util.Properties;
+import java.util.concurrent.TimeUnit;
import javax.servlet.ServletException;
import javax.servlet.ServletConfig;
@@ -44,6 +45,13 @@ public class BootstrapConfig extends Abs
private String repositoryName;
+ private String bundleFilter;
+
+ //By default shutdown framework if there is a timeout
+ private boolean shutdownOnTimeout = true;
+
+ private int startupTimeout = (int) TimeUnit.MINUTES.toSeconds(5); //Default 5 minute timeout
+
private JNDIConfig jndiConfig = new JNDIConfig(this);
private RMIConfig rmiConfig = new RMIConfig(this);
@@ -84,6 +92,14 @@ public class BootstrapConfig extends Abs
this.repositoryName = repositoryName;
}
+ public String getBundleFilter() {
+ return bundleFilter;
+ }
+
+ public void setBundleFilter(String bundleFilter) {
+ this.bundleFilter = bundleFilter;
+ }
+
public JNDIConfig getJndiConfig() {
return jndiConfig;
}
@@ -92,6 +108,22 @@ public class BootstrapConfig extends Abs
return rmiConfig;
}
+ public boolean isShutdownOnTimeout() {
+ return shutdownOnTimeout;
+ }
+
+ public void setShutdownOnTimeout(boolean shutdownOnTimeout) {
+ this.shutdownOnTimeout = shutdownOnTimeout;
+ }
+
+ public int getStartupTimeout() {
+ return startupTimeout;
+ }
+
+ public void setStartupTimeout(int startupTimeout) {
+ this.startupTimeout = startupTimeout;
+ }
+
public void validate() {
valid = repositoryName != null;
jndiConfig.validate();
Modified: jackrabbit/oak/trunk/oak-examples/webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-examples/webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java?rev=1694657&r1=1694656&r2=1694657&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-examples/webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java (original)
+++ jackrabbit/oak/trunk/oak-examples/webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java Fri Aug 7 11:01:10 2015
@@ -19,12 +19,13 @@ package org.apache.jackrabbit.j2ee;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.api.JackrabbitRepository;
-import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.commons.repository.RepositoryFactory;
import org.apache.jackrabbit.oak.run.osgi.OakOSGiRepositoryFactory;
import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
import org.apache.jackrabbit.rmi.server.ServerAdapterFactory;
import org.apache.jackrabbit.servlet.AbstractRepositoryServlet;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -269,6 +270,7 @@ public class RepositoryStartupServlet ex
log.info("Shutdown: Repository already stopped.");
} else {
log.info("RepositoryStartupServlet shutting down...");
+ unregisterOSGi();
shutdownRepository();
unregisterRMI();
unregisterJNDI();
@@ -458,15 +460,37 @@ public class RepositoryStartupServlet ex
*/
protected Repository createRepository(File configJson, File homedir)
throws RepositoryException {
- Map<String,String> config = new HashMap<String, String>();
- config.put("org.apache.jackrabbit.repository.home", homedir.getAbsolutePath());
- config.put("org.apache.jackrabbit.oak.repository.configFile", configJson.getAbsolutePath());
+ Map<String,Object> config = new HashMap<String, Object>();
+ config.put(OakOSGiRepositoryFactory.REPOSITORY_HOME, homedir.getAbsolutePath());
+ config.put(OakOSGiRepositoryFactory.REPOSITORY_CONFIG_FILE, configJson.getAbsolutePath());
+ config.put(OakOSGiRepositoryFactory.REPOSITORY_BUNDLE_FILTER, getBootstrapConfig().getBundleFilter());
+ config.put(OakOSGiRepositoryFactory.REPOSITORY_SHUTDOWN_ON_TIMEOUT, getBootstrapConfig().isShutdownOnTimeout());
+ config.put(OakOSGiRepositoryFactory.REPOSITORY_STARTUP_TIMEOUT, getBootstrapConfig().getStartupTimeout());
+ configureActivator(config);
//TODO oak-jcr also provides a dummy RepositoryFactory. Hence this
//cannot be used
//return JcrUtils.getRepository(config);
return new OakOSGiRepositoryFactory().getRepository(config);
}
+ private void configureActivator(Map<String, Object> config) {
+ try{
+ config.put(BundleActivator.class.getName(), new BundleActivator() {
+ @Override
+ public void start(BundleContext bundleContext) throws Exception {
+ registerOSGi(bundleContext);
+ }
+
+ @Override
+ public void stop(BundleContext bundleContext) throws Exception {
+ unregisterOSGi();
+ }
+ });
+ } catch (Throwable t){
+ log.warn("OSGi support not present", t);
+ }
+ }
+
/**
* Binds the repository to the JNDI context
* @throws ServletException if an error occurs.
@@ -632,6 +656,20 @@ public class RepositoryStartupServlet ex
}
/**
+ * Set the BundleContext reference with ServletContext. This is then used by
+ * Felix Proxy Servlet. Kept the type as object to allow logic to work in
+ * absence of OSGi classes also.
+ * @param bundleContext
+ */
+ private void registerOSGi(Object bundleContext) {
+ getServletContext().setAttribute("org.osgi.framework.BundleContext", bundleContext);
+ }
+
+ private void unregisterOSGi() {
+ getServletContext().removeAttribute("org.osgi.framework.BundleContext");
+ }
+
+ /**
* Returns the config that was used to bootstrap this servlet.
* @return the bootstrap config or <code>null</code>.
*/
Modified: jackrabbit/oak/trunk/oak-examples/webapp/src/main/webapp/WEB-INF/templates/bootstrap.properties
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-examples/webapp/src/main/webapp/WEB-INF/templates/bootstrap.properties?rev=1694657&r1=1694656&r2=1694657&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-examples/webapp/src/main/webapp/WEB-INF/templates/bootstrap.properties (original)
+++ jackrabbit/oak/trunk/oak-examples/webapp/src/main/webapp/WEB-INF/templates/bootstrap.properties Fri Aug 7 11:01:10 2015
@@ -21,6 +21,13 @@
repository.config=repository-config.json
repository.home=oak
repository.name=jackrabbit.repository
+bundle.filter=(|(Bundle-SymbolicName=org.apache.jackrabbit*)(Bundle-SymbolicName=org.apache.sling*)(Bundle-SymbolicName=org.apache.felix*)(Bundle-SymbolicName=org.apache.aries*))
+
+#By default do not shutdown OSGi framework upon timeout
+shutdown.on.timeout=false
+
+#Default timeout for waiting for repository service is 300 sec i.e. 5 min
+startup.timeout=300
# RMI Settings
rmi.enabled=true
Modified: jackrabbit/oak/trunk/oak-examples/webapp/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-examples/webapp/src/main/webapp/WEB-INF/web.xml?rev=1694657&r1=1694656&r2=1694657&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-examples/webapp/src/main/webapp/WEB-INF/web.xml (original)
+++ jackrabbit/oak/trunk/oak-examples/webapp/src/main/webapp/WEB-INF/web.xml Fri Aug 7 11:01:10 2015
@@ -20,6 +20,10 @@
<web-app>
<display-name>Jackrabbit JCR Server</display-name>
+ <listener>
+ <listener-class>org.apache.felix.http.proxy.ProxyListener</listener-class>
+ </listener>
+
<!-- ====================================================================== -->
<!-- R E P O S I T O R Y S T A R T U P S E R V L E T -->
<!-- ====================================================================== -->
@@ -361,6 +365,18 @@
</servlet>
<!-- ====================================================================== -->
+ <!-- F E L I X W E B C O N S O L E P R O X Y S E R V L E T -->
+ <!-- ====================================================================== -->
+
+ <servlet>
+ <servlet-name>proxy</servlet-name>
+ <description>
+ This servlet is used to enable integration with Felix WebConsole. It
+ routes the call to /osgi/* to servlets running withing OSGi
+ </description>
+ <servlet-class>org.apache.felix.http.proxy.ProxyServlet</servlet-class>
+ </servlet>
+ <!-- ====================================================================== -->
<!-- S E R V L E T M A P P I N G -->
<!-- ====================================================================== -->
<servlet-mapping>
@@ -379,6 +395,10 @@
<servlet-name>RMI</servlet-name>
<url-pattern>/rmi</url-pattern>
</servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>proxy</servlet-name>
+ <url-pattern>/osgi/*</url-pattern>
+ </servlet-mapping>
<!-- ====================================================================== -->
<!-- W E L C O M E F I L E S -->