jboynes 2004/02/20 08:57:11
Modified: modules/jetty/src/java/org/apache/geronimo/jetty/deployment
WARConfigBuilder.java
Log:
Define webapp GBean from plan and include module content in config
Revision Changes Path
1.3 +72 -1
incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/WARConfigBuilder.java
Index: WARConfigBuilder.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/WARConfigBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- WARConfigBuilder.java 20 Feb 2004 15:49:56 -0000 1.2
+++ WARConfigBuilder.java 20 Feb 2004 16:57:11 -0000 1.3
@@ -64,9 +64,12 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.util.Collections;
+import java.util.Properties;
import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
import org.apache.geronimo.deployment.ConfigurationBuilder;
import org.apache.geronimo.deployment.DeploymentContext;
@@ -77,6 +80,8 @@
import org.apache.geronimo.gbean.GBeanInfoFactory;
import org.apache.geronimo.gbean.GConstructorInfo;
import org.apache.geronimo.gbean.GReferenceInfo;
+import org.apache.geronimo.gbean.jmx.GBeanMBean;
+import org.apache.geronimo.jetty.JettyWebApplicationContext;
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.kernel.repository.Repository;
import org.apache.geronimo.xbeans.geronimo.jetty.JettyAttributeType;
@@ -175,15 +180,81 @@
} catch (MalformedObjectNameException e) {
throw new DeploymentException(e);
}
+
+ // todo do we need to support include and dependency or can we
rely on the parent?
+ // add low-level GBean definitions to the config
// addIncludes(context, configType);
// addDependencies(context, configType.getDependencyArray());
ClassLoader cl = context.getClassLoader(repository);
addGBeans(context, jettyWebApp.getGbeanArray(), cl);
+
+ // add the warfile's content to the configuration
+ URI warRoot = URI.create("war/");
+ context.addArchive(warRoot, module);
+ context.addToClassPath(warRoot);
+
+ // add the GBean for the web application
+ addWebAppGBean(context, jettyWebApp, warRoot);
+
+ // todo do we need to add GBeans to make the servlets JSR77
ManagedObjects?
+
context.close();
os.flush();
} finally {
fos.close();
}
+ }
+
+ private void addWebAppGBean(DeploymentContext context, JettyWebAppType
webApp, URI warRoot) throws DeploymentException {
+ String contextRoot = webApp.getContextRoot().trim();
+ if (contextRoot.length() == 0) {
+ throw new DeploymentException("Missing value for context-root");
+ }
+ URI configID = context.getConfigID();
+
+ Properties nameProps = new Properties();
+ nameProps.put("J2EEServer", "null");
+ nameProps.put("J2EEApplication", "null");
+ nameProps.put("J2EEType", "WebModule");
+ nameProps.put("ContextRoot", contextRoot);
+ nameProps.put("Config", configID.toString());
+ ObjectName name;
+ try {
+ name = new ObjectName("geronimo.jetty", nameProps);
+ } catch (MalformedObjectNameException e) {
+ throw new DeploymentException("Unable to construct ObjectName",
e);
+ }
+
+ GBeanMBean gbean = new
GBeanMBean(JettyWebApplicationContext.GBEAN_INFO);
+ try {
+ gbean.setAttribute("URI", warRoot);
+ gbean.setAttribute("ContextPath", contextRoot);
+ gbean.setAttribute("ContextPriorityClassLoader",
Boolean.valueOf(webApp.getContextPriorityClassloader()));
+ gbean.setAttribute("PolicyContextID", null);
+ //jndi
+/*
+ if (proxyFactory != null) {
+ UserTransaction userTransaction = null;
+ Context componentContext = new
ComponentContextBuilder(proxyFactory, cl).buildContext(
+ webApp.getEjbRefArray(),
jettyWebApp.getEjbRefArray(),
+ webApp.getEjbLocalRefArray(),
jettyWebApp.getEjbLocalRefArray(),
+ webApp.getEnvEntryArray(),
+ webApp.getMessageDestinationRefArray(),
jettyWebApp.getMessageDestinationRefArray(),
+ webApp.getResourceEnvRefArray(),
jettyWebApp.getResourceEnvRefArray(),
+ webApp.getResourceRefArray(),
jettyWebApp.getResourceRefArray(),
+ userTransaction);
+ gbean.setAttribute("ComponentContext", componentContext);
+ }
+*/
+
+ gbean.setReferencePatterns("Configuration",
Collections.singleton(Kernel.getConfigObjectName(configID)));
+ gbean.setReferencePatterns("JettyContainer",
Collections.singleton(new
ObjectName("geronimo.web:type=WebContainer,container=Jetty"))); // @todo
configurable
+ gbean.setReferencePatterns("TransactionManager",
Collections.EMPTY_SET);
+ gbean.setReferencePatterns("TrackedConnectionAssociator",
Collections.EMPTY_SET);
+ } catch (Exception e) {
+ throw new DeploymentException("Unable to initialize webapp
GBean", e);
+ }
+ context.addGBean(name, gbean);
}
/**