geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jboy...@apache.org
Subject cvs commit: incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty/deployment WARConfigBuilder.java
Date Sat, 21 Feb 2004 17:41:55 GMT
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();
       }
   
       /**
  
  
  

Mime
View raw message