You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by va...@apache.org on 2008/11/04 12:38:22 UTC
svn commit: r711230 -
/geronimo/plugins/tuscany/trunk/geronimo-tuscany-http-jetty/src/main/java/org/apache/geronimo/tuscany/http/jetty/GeronimoServletHost.java
Author: vamsic007
Date: Tue Nov 4 03:38:21 2008
New Revision: 711230
URL: http://svn.apache.org/viewvc?rev=711230&view=rev
Log:
GERONIMO-4338 Update Geronimo Jetty ServletHost to account for G3609 changes
o Updated to use TwistyWebAppContext instead of WebAppContext
Modified:
geronimo/plugins/tuscany/trunk/geronimo-tuscany-http-jetty/src/main/java/org/apache/geronimo/tuscany/http/jetty/GeronimoServletHost.java
Modified: geronimo/plugins/tuscany/trunk/geronimo-tuscany-http-jetty/src/main/java/org/apache/geronimo/tuscany/http/jetty/GeronimoServletHost.java
URL: http://svn.apache.org/viewvc/geronimo/plugins/tuscany/trunk/geronimo-tuscany-http-jetty/src/main/java/org/apache/geronimo/tuscany/http/jetty/GeronimoServletHost.java?rev=711230&r1=711229&r2=711230&view=diff
==============================================================================
--- geronimo/plugins/tuscany/trunk/geronimo-tuscany-http-jetty/src/main/java/org/apache/geronimo/tuscany/http/jetty/GeronimoServletHost.java (original)
+++ geronimo/plugins/tuscany/trunk/geronimo-tuscany-http-jetty/src/main/java/org/apache/geronimo/tuscany/http/jetty/GeronimoServletHost.java Tue Nov 4 03:38:21 2008
@@ -47,6 +47,10 @@
import org.apache.geronimo.jetty6.JettyContainer;
import org.apache.geronimo.jetty6.JettyWebAppContext;
import org.apache.geronimo.jetty6.handler.ComponentContextHandler;
+import org.apache.geronimo.jetty6.handler.LifecycleCommand;
+import org.apache.geronimo.jetty6.handler.ThreadClassloaderHandler;
+import org.apache.geronimo.jetty6.handler.TwistyWebAppContext;
+import org.apache.geronimo.jetty6.handler.UserTransactionHandler;
import org.apache.geronimo.kernel.GBeanNotFoundException;
import org.apache.geronimo.kernel.InternalKernelException;
import org.apache.geronimo.kernel.Kernel;
@@ -58,13 +62,13 @@
import org.apache.tuscany.sca.host.http.DefaultResourceServlet;
import org.apache.tuscany.sca.host.http.ServletHost;
import org.apache.tuscany.sca.host.http.ServletMappingException;
+import org.mortbay.jetty.Handler;
import org.mortbay.jetty.security.SecurityHandler;
import org.mortbay.jetty.servlet.DefaultServlet;
import org.mortbay.jetty.servlet.ServletHandler;
import org.mortbay.jetty.servlet.ServletHolder;
import org.mortbay.jetty.servlet.ServletMapping;
import org.mortbay.jetty.servlet.SessionHandler;
-import org.mortbay.jetty.webapp.WebAppContext;
/**
* A Geronimo based implementation of ServletHost. This works only on those
@@ -87,13 +91,12 @@
private JettyContainer container = null;
private Kernel kernel = null;
private ClassLoader cl = null;
- private WebAppContext webAppContext = null;
private Context componentContext = null;
private static Map<String, ComponentContextHandler> contextHandlers = new Hashtable<String, ComponentContextHandler>();
+ private static Map<String, TwistyWebAppContext> webAppContexts = new Hashtable<String, TwistyWebAppContext>();
private Map<String, JettyWebAppContext> jettyWebAppContexts = new HashMap<String, JettyWebAppContext>();
private TransactionManager transactionManager = null;
private Host host = null;
- private ComponentContextHandler contextHandler = null;
private static final String JMX_APP_NAME = "Tuscany Service Context";
private static final String JMX_SERVER_NAME = "geronimo";
@@ -179,6 +182,8 @@
mapping = contextPath;
contextPath = SEPARATOR;
}
+ TwistyWebAppContext webAppContext = null;
+ ComponentContextHandler contextHandler = null;
SessionHandler sessionHandler = null;
ServletHandler servletHandler = null;
SecurityHandler securityHandler = null;
@@ -188,19 +193,12 @@
"The context "
+ contextPath
+ "already exists for a web application and cannot be used by the binding.");
- } else if (contextHandlers.get(contextPath) == null) {
+ } else if (webAppContexts.get(contextPath) == null) {
sessionHandler = new SessionHandler();
servletHandler = new ServletHandler();
securityHandler = new SecurityHandler();
- webAppContext = new WebAppContext(securityHandler, sessionHandler,
+ webAppContext = new TwistyWebAppContext(securityHandler, sessionHandler,
servletHandler, null);
- webAppContext.setContextPath(contextPath);
- webAppContext.setAllowNullPathInfo(true);
- webAppContext.setClassLoader(Thread.currentThread()
- .getContextClassLoader());
- webAppContext.setCopyWebDir(false);
- webAppContext.setExtractWAR(false);
- webAppContext.setWar("./");
GeronimoUserTransaction userTransaction = new GeronimoUserTransaction(
transactionManager);
try {
@@ -216,18 +214,28 @@
+ webAppContext.getContextPath()
+ " in the Tuscany Plugin");
}
+ Handler next = webAppContext.newTwistyHandler();
+ next = new ThreadClassloaderHandler(next, Thread.currentThread().getContextClassLoader());
+
+ next = new UserTransactionHandler(next, userTransaction);
+ next = contextHandler = new ComponentContextHandler(next, this.componentContext);
+ webAppContext.setTwistyHandler(next);
+
+ webAppContext.setContextPath(contextPath);
+ webAppContext.setAllowNullPathInfo(true);
+ webAppContext.setClassLoader(Thread.currentThread()
+ .getContextClassLoader());
+ webAppContext.setCopyWebDir(false);
+ webAppContext.setExtractWAR(false);
+ webAppContext.setWar("./");
webAppContext.getInitParams().put(
"org.mortbay.jetty.servlet.Default.dirAllowed", "false");
- webAppContext.setVirtualHosts(new String[] { host });
-
- contextHandler = new ComponentContextHandler(webAppContext,
- this.componentContext);
+ //webAppContext.setVirtualHosts(new String[] { host });
} else {
+ webAppContext = webAppContexts.get(contextPath);
contextHandler = contextHandlers.get(contextPath);
- // FIXME: GERONIMO-4338
- // servletHandler = (ServletHandler) contextHandler
- // .getChildHandlerByClass(ServletHandler.class);
+ servletHandler = webAppContext.getServletHandler();
}
// FIXME - Need to Assign JSR 77 Names to Context but How?
@@ -253,7 +261,6 @@
DefaultServlet defaultServlet = new JettyDefaultServlet(
servletPath, resourceServlet.getDocumentRoot());
holder = new ServletHolder(defaultServlet);
-
} else {
holder = new ServletHolder(servlet);
}
@@ -262,11 +269,9 @@
servletMapping.setServletName(holder.getName());
servletMapping.setPathSpec(mapping);
servletHandler.addServletMapping(servletMapping);
- if (contextHandlers.get(contextPath) == null) {
- // FIXME: GERONIMO-4338
- // container.addContext(contextHandler);
+ if (webAppContexts.get(contextPath) == null) {
try {
- contextHandler.start();
+ contextHandler.lifecycleCommand(new StartCommand(webAppContext));
} catch (Exception e) {
log.fatal("The context " + webAppContext.getContextPath()
+ " failed to start", e);
@@ -274,6 +279,7 @@
+ webAppContext.getContextPath() + " failed to start");
}
contextHandlers.put(contextPath, contextHandler);
+ webAppContexts.put(contextPath, webAppContext);
} else {
try {
holder.start();
@@ -300,10 +306,8 @@
mapping = contextPath;
contextPath = SEPARATOR;
}
- // FIXME: GERONIMO-4338
- ServletHandler servletHandler = null;
- //ServletHandler servletHandler = (ServletHandler) contextHandler
- // .getChildHandlerByClass(ServletHandler.class);
+ TwistyWebAppContext webAppContext = webAppContexts.get(contextPath);
+ ServletHandler servletHandler = webAppContext.getServletHandler();
Servlet removedServlet = null;
List<ServletMapping> mappings = new ArrayList<ServletMapping>(Arrays
.asList(servletHandler.getServletMappings()));
@@ -330,13 +334,12 @@
try {
if (mappings.size() < 3) {
- contextHandler.stop();
- contextHandler.destroy();
- // FIXME: GERONIMO-4338
- //container.removeContext(contextHandler);
+ ComponentContextHandler contextHandler = contextHandlers.get(contextPath);
+ contextHandler.lifecycleCommand(new StopCommand(webAppContext));
+
contextHandlers.remove(contextPath);
+ webAppContexts.remove(contextPath);
} else {
-
servletHandler.start();
}
} catch (Exception e) {
@@ -411,4 +414,30 @@
// TODO Auto-generated method stub
}
+
+ public class StartCommand implements LifecycleCommand {
+ TwistyWebAppContext webAppContext;
+
+ public StartCommand(TwistyWebAppContext webAppContext) {
+ this.webAppContext = webAppContext;
+ }
+
+ public void lifecycleMethod() throws Exception {
+ container.addContext(webAppContext);
+ webAppContext.start();
+ }
+ }
+
+ public class StopCommand implements LifecycleCommand {
+ TwistyWebAppContext webAppContext;
+
+ public StopCommand(TwistyWebAppContext webAppContext) {
+ this.webAppContext = webAppContext;
+ }
+
+ public void lifecycleMethod() throws Exception {
+ webAppContext.stop();
+ container.removeContext(webAppContext);
+ }
+ }
}