jboynes 2004/02/21 09:41:55
Modified: modules/jetty/src/java/org/apache/geronimo/jetty/deployment
WARConfigBuilder.java
Log:
Include JNDI environment
Revision Changes Path
1.7 +73 -23
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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- WARConfigBuilder.java 20 Feb 2004 23:18:00 -0000 1.6
+++ WARConfigBuilder.java 21 Feb 2004 17:41:55 -0000 1.7
@@ -56,6 +56,8 @@
package org.apache.geronimo.jetty.deployment;
import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -68,8 +70,10 @@
import java.util.Properties;
import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
+import java.util.zip.ZipEntry;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
+import javax.naming.NamingException;
import org.apache.geronimo.deployment.ConfigurationBuilder;
import org.apache.geronimo.deployment.DeploymentContext;
@@ -90,6 +94,10 @@
import org.apache.geronimo.xbeans.geronimo.jetty.JettyWebAppDocument;
import org.apache.geronimo.xbeans.geronimo.jetty.JettyWebAppType;
import org.apache.geronimo.xbeans.j2ee.WebAppDocument;
+import org.apache.geronimo.xbeans.j2ee.WebAppType;
+import org.apache.geronimo.xbeans.j2ee.EnvEntryType;
+import org.apache.geronimo.naming.java.ReadOnlyContext;
+import org.apache.geronimo.naming.java.ComponentContextBuilder;
import org.apache.xmlbeans.SchemaType;
import org.apache.xmlbeans.SchemaTypeLoader;
import org.apache.xmlbeans.XmlBeans;
@@ -124,7 +132,7 @@
if (module.toString().endsWith("/")) {
moduleBase = module;
} else {
- moduleBase = new URL("jar:"+module.toString()+"!/");
+ moduleBase = new URL("jar:" + module.toString() + "!/");
}
XmlObject plan = getPlan(new URL(moduleBase,
"WEB-INF/geronimo-jetty.xml"), JettyWebAppDocument.type);
// todo needs generic web XMLBeans
@@ -158,6 +166,7 @@
}
public void buildConfiguration(File outfile, JarInputStream module,
XmlObject plan) throws IOException, DeploymentException {
+ WebAppType webApp = null;
JettyWebAppType jettyWebApp = ((JettyWebAppDocument)
plan).getWebApp();
URI configID;
try {
@@ -188,7 +197,26 @@
// add the warfile's content to the configuration
URI warRoot = URI.create("war/");
- context.addArchive(warRoot, module);
+ ZipEntry src;
+ while ((src = module.getNextEntry()) != null) {
+ URI target = warRoot.resolve(src.getName());
+ if ("WEB-INF/web.xml".equals(src.getName())) {
+ byte[] buffer = getBytes(module);
+ context.addFile(target, new
ByteArrayInputStream(buffer));
+ try {
+ WebAppDocument doc = (WebAppDocument)
XmlBeans.getContextTypeLoader().parse(new ByteArrayInputStream(buffer),
WebAppDocument.type, null);
+ webApp = doc.getWebApp();
+ } catch (XmlException e) {
+ throw new DeploymentException("Unable to parse
web.xml");
+ }
+ } else {
+ context.addFile(target, module);
+ }
+ }
+
+ if (webApp == null) {
+ throw new DeploymentException("Did not find WEB-INF/web.xml
in module");
+ }
context.addToClassPath(warRoot);
// todo do we need to support include and dependency or can we
rely on the parent?
@@ -200,7 +228,7 @@
// add the GBean for the web application
- addWebAppGBean(context, jettyWebApp, warRoot);
+ addWebAppGBean(context, webApp, jettyWebApp, warRoot);
// todo do we need to add GBeans to make the servlets JSR77
ManagedObjects?
@@ -211,8 +239,18 @@
}
}
- private void addWebAppGBean(DeploymentContext context, JettyWebAppType
webApp, URI warRoot) throws DeploymentException {
- String contextRoot = webApp.getContextRoot().trim();
+ private byte[] getBytes(InputStream is) throws IOException {
+ byte[] buffer = new byte[4096];
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ int count;
+ while ((count = is.read(buffer)) > 0) {
+ baos.write(buffer, 0, count);
+ }
+ return baos.toByteArray();
+ }
+
+ private void addWebAppGBean(DeploymentContext context, WebAppType
webApp, JettyWebAppType jettyWebApp, URI warRoot) throws DeploymentException {
+ String contextRoot = jettyWebApp.getContextRoot().trim();
if (contextRoot.length() == 0) {
throw new DeploymentException("Missing value for context-root");
}
@@ -231,28 +269,15 @@
throw new DeploymentException("Unable to construct ObjectName",
e);
}
+ ReadOnlyContext compContext = buildComponentContext(webApp,
jettyWebApp);
+
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("ContextPriorityClassLoader",
Boolean.valueOf(jettyWebApp.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.setAttribute("ComponentContext", compContext);
gbean.setReferencePatterns("Configuration",
Collections.singleton(Kernel.getConfigObjectName(configID)));
gbean.setReferencePatterns("JettyContainer",
Collections.singleton(new ObjectName("*:type=WebContainer,container=Jetty")));
// @todo configurable
gbean.setReferencePatterns("TransactionManager",
Collections.EMPTY_SET);
@@ -261,6 +286,31 @@
throw new DeploymentException("Unable to initialize webapp
GBean", e);
}
context.addGBean(name, gbean);
+ }
+
+ private ReadOnlyContext buildComponentContext(WebAppType webApp,
JettyWebAppType jettyWebApp) throws DeploymentException {
+ ComponentContextBuilder builder = new ComponentContextBuilder();
+ EnvEntryType[] envEntries = webApp.getEnvEntryArray();
+ for (int i = 0; i < envEntries.length; i++) {
+ EnvEntryType envEntry = envEntries[i];
+ String name = envEntry.getEnvEntryName().getStringValue();
+ String type = envEntry.getEnvEntryType().getStringValue();
+ String text = envEntry.getEnvEntryValue().getStringValue();
+ try {
+ builder.addEnvEntry(name, type, text);
+ } catch (NumberFormatException e) {
+ throw new DeploymentException("Invalid env-entry value for
name: " + name, e);
+ } catch (NamingException e) {
+ throw new DeploymentException("Invalid env-entry definition
for name: " + name, e);
+ }
+ }
+ // todo ejb-ref
+ // todo ejb-local-ref
+ // todo resource-ref
+ // todo resource-env-ref
+ // todo message-destination-ref
+ // todo usertransaction
+ return builder.getContext();
}
/**