[jboss-svn-commits] JBL Code SVN: r36979 - in labs/jbossesb/workspace/tcunning/as6/product/rosetta: deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6 and 6 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Apr 29 00:18:43 EDT 2011


Author: tcunning
Date: 2011-04-29 00:18:42 -0400 (Fri, 29 Apr 2011)
New Revision: 36979

Added:
   labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/WebGatewayBuilder.java
   labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/gateway/
   labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/gateway/camel/
   labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/gateway/camel/as6/
   labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/gateway/camel/as6/JBossPackageScanClassResolver.java
Modified:
   labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/EsbDeployment.java
   labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/GroupingStructure.java
   labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebDeploymentArchive.java
   labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebModel.java
   labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/templates/jboss-web.xml.ftl
   labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/camel/CamelGateway.java
Log:
JBESB-2760
Add AS6 versions of CamelGateway and change WAR deployment to deal
with AS6 deployment issues.


Modified: labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/EsbDeployment.java
===================================================================
--- labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/EsbDeployment.java	2011-04-29 04:14:45 UTC (rev 36978)
+++ labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/EsbDeployment.java	2011-04-29 04:18:42 UTC (rev 36979)
@@ -69,7 +69,7 @@
 import org.jboss.soa.esb.listeners.config.model.ModelAdapter;
 import org.jboss.soa.esb.listeners.config.ModelUtil;
 import org.jboss.soa.esb.listeners.config.ServicePublisher;
-import org.jboss.soa.esb.listeners.config.WebGatewayBuilder;
+import org.jboss.soa.esb.listeners.deployers.mc.as6.WebGatewayBuilder;
 import org.jboss.soa.esb.listeners.config.WebserviceInfo;
 import org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleController;
 import org.jboss.soa.esb.util.DeploymentArchive;

Modified: labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/GroupingStructure.java
===================================================================
--- labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/GroupingStructure.java	2011-04-29 04:14:45 UTC (rev 36978)
+++ labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/GroupingStructure.java	2011-04-29 04:18:42 UTC (rev 36979)
@@ -1,13 +1,17 @@
 package org.jboss.soa.esb.listeners.deployers.mc.as6;
 
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import org.jboss.deployers.spi.DeploymentException;
 import org.jboss.deployers.spi.structure.ContextInfo;
+import org.jboss.deployers.vfs.plugins.structure.AbstractVFSArchiveStructureDeployer;
 import org.jboss.deployers.vfs.plugins.structure.AbstractVFSStructureDeployer;
+
+import org.jboss.deployers.vfs.spi.deployer.ArchiveMatcher;
 import org.jboss.deployers.vfs.spi.structure.StructureContext;
 import org.jboss.util.collection.CollectionsFactory;
 import org.jboss.vfs.VirtualFile;
@@ -29,8 +33,9 @@
  * 
  * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
  */
-public class GroupingStructure extends AbstractVFSStructureDeployer
+public class GroupingStructure extends AbstractVFSArchiveStructureDeployer implements ArchiveMatcher
 {
+    private final Set<String> suffixes = Collections.synchronizedSet(new HashSet<String>());
     private static final String[] META_INF = { "META-INF" };
 
     private VirtualFileFilter shortCircuitFilter; // by default null, so we
@@ -47,19 +52,62 @@
     private VirtualFileFilter groupFilter;
     private Map<String, VirtualFileFilter> filters; // filter per path
 
+    public static Set<String> DEFAULT_JAR_SUFFIXES = new HashSet<String>();
+    static
+    {
+       DEFAULT_JAR_SUFFIXES = new HashSet<String>();
+       DEFAULT_JAR_SUFFIXES.add(".esb");
+       DEFAULT_JAR_SUFFIXES.add(".zip");
+       DEFAULT_JAR_SUFFIXES.add(".ear");
+       DEFAULT_JAR_SUFFIXES.add(".jar");
+       DEFAULT_JAR_SUFFIXES.add(".rar");
+       DEFAULT_JAR_SUFFIXES.add(".war");
+       DEFAULT_JAR_SUFFIXES.add(".sar");
+       DEFAULT_JAR_SUFFIXES.add(".har");
+       DEFAULT_JAR_SUFFIXES.add(".aop");
+    }
+    
     public GroupingStructure()
     {
+        this(DEFAULT_JAR_SUFFIXES);
         setRelativeOrder(9000); // before jar structure
         setRootClasspathEntry(true); // by default root is part of classpath
         setLibs(Collections.<String> emptySet()); // empty libs
         setMetaDataPaths(META_INF); // default metadata locations
         setGroups(CollectionsFactory.<String> createLazySet()); // lazy groups
-        setFilters(Collections.<String, VirtualFileFilter> emptyMap()); // empty
-                                                                        // filters
+        setFilters(Collections.<String, VirtualFileFilter> emptyMap()); // empty                                                                        // filters
     }
+    
+    public GroupingStructure(Set<String> suffixes)
+    {
+       if (suffixes != null)
+          setSuffixes(suffixes);
+       setRelativeOrder(10000);
+    }
 
-    public boolean determineStructure(StructureContext structureContext) throws DeploymentException
+    /**
+     * Gets the set of suffixes recognised as jars
+     *
+     * @param suffixes - the set of suffixes
+     */
+    public void setSuffixes(Set<String> suffixes)
     {
+       this.suffixes.retainAll(suffixes);
+       this.suffixes.addAll(suffixes);
+    }
+
+    
+    protected boolean hasValidSuffix(String name)
+    {
+       if (name == null)
+          return false;
+
+       int idx = name.lastIndexOf('.');
+       return (idx != -1) && suffixes.contains(name.substring(idx).toLowerCase());
+    }
+
+    public boolean doDetermineStructure(StructureContext structureContext) throws DeploymentException
+    {
         VirtualFile file = structureContext.getFile();
 
         if (shortCircuitFileCheck(file) == false)
@@ -255,4 +303,19 @@
 
         this.filters = filters;
     }
+
+    @Override
+    public boolean hasArchiveSuffix(VirtualFile file) {
+        return file != null && hasArchiveSuffix(file.getName());
+    }
+
+    @Override
+    public boolean hasArchiveSuffix(String file) {
+        return hasValidSuffix(file);
+    }
+
+    @Override
+    public boolean isArchive(VirtualFile file) {
+        return shouldMount(file);
+    }
 }

Added: labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/WebGatewayBuilder.java
===================================================================
--- labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/WebGatewayBuilder.java	                        (rev 0)
+++ labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/deployers/mc/as6/WebGatewayBuilder.java	2011-04-29 04:18:42 UTC (rev 36979)
@@ -0,0 +1,283 @@
+/*
+ * JBoss, Home of Professional Open Source Copyright 2009, Red Hat Middleware
+ * LLC, and individual contributors by the @authors tag. See the copyright.txt
+ * in the distribution for a full listing of individual contributors.
+ * 
+ * This is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * 
+ * This software is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this software; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
+ * site: http://www.fsf.org.
+ */
+package org.jboss.soa.esb.listeners.deployers.mc.as6;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.log4j.Logger;
+import org.jboss.deployment.DeploymentException;
+import org.jboss.internal.soa.esb.listeners.war.Filter;
+import org.jboss.internal.soa.esb.listeners.war.Servlet;
+import org.jboss.internal.soa.esb.listeners.war.WebDeploymentArchive;
+import org.jboss.internal.soa.esb.listeners.war.WebModel;
+import org.jboss.internal.soa.esb.publish.ContractReferencePublisher;
+import org.jboss.internal.soa.esb.util.JBossDeployerUtil;
+import org.jboss.internal.soa.esb.webservice.ESBContractGenerator;
+import org.jboss.internal.soa.esb.webservice.ESBResponseFilter;
+import org.jboss.internal.soa.esb.webservice.ESBServiceContractReferencePublisher;
+import org.jboss.internal.soa.esb.webservice.ESBServiceEndpointInfo;
+import org.jboss.internal.soa.esb.webservice.JAXWSProviderClassGenerator;
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.config.model.ModelAdapter;
+import org.jboss.soa.esb.Service;
+import org.jboss.soa.esb.util.DeploymentArchive;
+
+import org.jboss.soa.esb.listeners.config.ModelUtil;
+import org.jboss.soa.esb.listeners.config.WebserviceInfo;
+
+/**
+ * A builder that builds EBWS/HTTP Gateway web archives
+ *
+ * @author <a href="mailto:mageshbk at jboss.com">Magesh Kumar B</a>
+ * @version $Revision: 1.0 $
+ */
+public class WebGatewayBuilder
+{
+    private Logger log = Logger.getLogger(WebGatewayBuilder.class);
+
+    private String deploymentName;
+    private File esbWarFiles;
+    private File esbArchive;
+    private ClassLoader localCl;
+    private List<ContractReferencePublisher> publishers;
+    private List<Servlet> servlets;
+    private ModelAdapter model;
+
+    public WebGatewayBuilder(final File esbWarFiles, final File esbArchive, final String deploymentName, final ClassLoader localCl, final ModelAdapter model)
+    {
+       this.esbWarFiles = esbWarFiles;
+       this.esbArchive = esbArchive;
+       this.deploymentName = deploymentName;
+       this.localCl = localCl;
+       this.model = model;
+    }
+
+    public void setPublishers(final List<ContractReferencePublisher> publishers)
+    {
+        this.publishers = publishers;
+    }
+    
+    public List<ContractReferencePublisher> getPublishers()
+    {
+       return publishers;
+    }
+    
+    public void setServlets(final List<Servlet> servlets)
+    {
+       this.servlets = servlets;
+    }
+    
+    public List<Servlet> getServlets()
+    {
+       return servlets;
+    }
+
+    public File build() throws ConfigurationException, DeploymentException
+    {
+        File war = null;
+        WebDeploymentArchive webDeployment = new WebDeploymentArchive(getESBDeploymentName(), getESBWarFileName());
+        WebModel webModel = webDeployment.getWebModel();
+
+        // Set the global security domain and global security method.
+        // These setting are shared for all http-providers and EBWSs 
+        // in a jboss-esb.xml file. 
+        webModel.setAuthDomain(model.getAuthDomain());
+        webModel.setAuthMethod(model.getAuthMethod());
+
+        // Add the EBWS components...
+        createWebserviceWars(webDeployment);
+
+        // Add the web deployments info to the WebModel...
+        ModelUtil.updateWebModel(deploymentName, ModelUtil.getListenerGroups(model), webModel);
+
+        // Add a sub-deloyment for the web model...
+        this.servlets = webModel.getServlets();
+        if(!servlets.isEmpty()) {
+            
+            // Finalize the webDeployment...
+            webDeployment.finalizeArchive();
+
+            // Now create the web deployment...
+            war = createGatewayTempDeployment(webDeployment);
+
+        }
+        return war;
+    }
+
+    private void createWebserviceWars(WebDeploymentArchive webDeployment) throws DeploymentException
+    {
+        this.publishers = new ArrayList<ContractReferencePublisher>();
+        final List<WebserviceInfo> endpointServices =  model.getWebserviceServices();
+        if (endpointServices != null)
+        {
+            if (endpointServices.size() > 0)
+            {
+                try
+                {
+                    final JAXWSProviderClassGenerator generator = new JAXWSProviderClassGenerator();
+                    
+                    for(WebserviceInfo webserviceInfo: endpointServices)
+                    {
+                        final Service service = webserviceInfo.getService();
+ 
+                        // Copy all schemas to the wsdl directory to support imports.
+                        final Map<String, String> schemasMap = JBossDeployerUtil.getSchemas(esbArchive);
+                        final String wsdlDir = "WEB-INF/wsdl/" + service.getCategory().replace('/', '_') + "/";
+                        for (Entry<String, String> schemaEntry : schemasMap.entrySet())
+                        {
+                            webDeployment.addEntry(wsdlDir + schemaEntry.getKey(), schemaEntry.getValue().getBytes());
+                            log.debug("Added schema " + wsdlDir + schemaEntry.getKey());
+                        }
+                        
+                        final ESBServiceEndpointInfo serviceInfo = new ESBServiceEndpointInfo(webserviceInfo);
+                        final String wsdl = ESBContractGenerator.generateWSDL(webserviceInfo, serviceInfo, new WebDeploymentClassLoader(localCl, schemasMap));
+                        webDeployment.addEntry(serviceInfo.getWSDLFileName(), wsdl.getBytes("UTF-8"));
+ 
+                        final String handlers = JBossDeployerUtil.getHandlers(serviceInfo);
+                        final boolean includeHandlers = (handlers != null);
+                        if (includeHandlers)
+                        {
+                            final String wsHandlerName = "WEB-INF/classes/" + serviceInfo.getPackageName().replace('.', '/') + "/esb-jaxws-handlers.xml";
+                            webDeployment.addEntry(wsHandlerName, handlers.getBytes("UTF-8"));
+                        }
+                        
+                        final byte[] wsClass = generator.generate(deploymentName, service.getCategory(),
+                            service.getName(), serviceInfo, includeHandlers);
+                        final String wsClassName = serviceInfo.getClassName().replace('.', '/') + ".class";
+                        webDeployment.addEntry("WEB-INF/classes/" + wsClassName, wsClass);
+ 
+                        // Servlet....
+                        final Servlet servlet = new Servlet(serviceInfo.getServletName(), serviceInfo.getClassName(), webDeployment.getWebModel());
+                        servlet.getUrlMappings().add("/ebws" + serviceInfo.getServletPath());
+ 
+                        // Filter...
+                        // At the moment we only need the filter to overcome a bug in JBossWS re In-Only endpoints, so
+                        // we only include for one way services...
+                        if(serviceInfo.isOneWay()) {
+                            new Filter(serviceInfo.getServletName() + "_Filter", ESBResponseFilter.class.getName(), servlet);
+                        }
+ 
+                        final ContractReferencePublisher publisher = new ESBServiceContractReferencePublisher(service, webserviceInfo.getDescription(), serviceInfo.getServletName());
+                        publishers.add(publisher);
+                    }
+                }
+                catch (final Exception ex)
+                {
+                    throw new DeploymentException("Failed to create webservice artifact", ex);
+                }
+            }
+        }
+    }
+
+    private File createGatewayTempDeployment(DeploymentArchive deploymentArchive) throws ConfigurationException
+    {
+
+        File gatewayDeployFile = createTempDeploymentFile(esbWarFiles, getESBWarFileName(), true);
+        FileOutputStream fileOutStream;
+
+        try {
+            fileOutStream = new FileOutputStream(gatewayDeployFile);
+        } catch (FileNotFoundException e) {
+            throw new ConfigurationException("Unexpected exception.", e);
+        }
+
+        try {
+            deploymentArchive.toOutputStream(fileOutStream);
+        } catch (IOException e) {
+            throw new ConfigurationException("Error writing deployment archive '" + gatewayDeployFile.getAbsolutePath() + "'.", e);
+        } finally {
+            try {
+                fileOutStream.close();
+            } catch (IOException e) {
+                log.warn("Error closing deployment archive stream '" + gatewayDeployFile.getAbsolutePath() + "'", e);
+            }
+        }
+
+        return gatewayDeployFile;
+    }
+
+    private File createTempDeploymentFile(final File tempDir, final String archiveName, final boolean createDir) throws ConfigurationException
+    {
+        if (!tempDir.exists())
+        {
+            if (!createDir)
+            {
+                return null;
+            }
+            tempDir.mkdir();
+        }
+
+        File file = new File(tempDir, archiveName);
+        if(file.exists()) {
+            log.debug("Deployment archive '" + archiveName + "' already exists.  Overwriting!!");
+        }
+
+        return file;
+    }
+
+    private String getESBDeploymentName()
+    {
+        final String esbName = deploymentName;
+        final int lastSeparator = esbName.lastIndexOf('.');
+        return ((lastSeparator >= 0) ? esbName.substring(0, lastSeparator) : esbName);
+    }
+    
+    private String getESBWarFileName()
+    {
+        final String esbName = deploymentName;
+        final int lastSeparator = esbName.lastIndexOf('.');
+        return ((lastSeparator >= 0) ? esbName.substring(0, lastSeparator) : esbName) + "-web" +".war";
+    }
+
+    private class WebDeploymentClassLoader extends ClassLoader
+    {
+           
+       private Map<String, String> schemas;
+
+       WebDeploymentClassLoader(final ClassLoader parent, final Map<String, String> schemas)
+       {
+          super(parent);
+          this.schemas = schemas;
+       }
+
+       @Override
+       public InputStream getResourceAsStream (final String name)
+       {
+           if (schemas != null)
+           {
+               String schema = schemas.get(name);
+               if (schema != null)
+                   return new ByteArrayInputStream(schema.getBytes());
+           }
+          
+           return super.getResourceAsStream(name);
+       }
+    }
+}

Added: labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/gateway/camel/as6/JBossPackageScanClassResolver.java
===================================================================
--- labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/gateway/camel/as6/JBossPackageScanClassResolver.java	                        (rev 0)
+++ labs/jbossesb/workspace/tcunning/as6/product/rosetta/deployer-as6/src/org/jboss/soa/esb/listeners/gateway/camel/as6/JBossPackageScanClassResolver.java	2011-04-29 04:18:42 UTC (rev 36979)
@@ -0,0 +1,102 @@
+/*
+ * =========================================================================
+ * ==  NOTICE file corresponding to the section 4 d of                    ==
+ * ==  the Apache License, Version 2.0,                                   ==
+ * ==  in this case for the Apache Camel distribution.                    ==
+ * =========================================================================
+ * 
+ * This product includes software developed by
+ * The Apache Software Foundation (http://www.apache.org/).
+ * 
+ * Please read the different LICENSE files present in the licenses directory of
+ * this distribution
+ */
+package org.jboss.soa.esb.listeners.gateway.camel.as6;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Set;
+
+import org.apache.camel.impl.DefaultPackageScanClassResolver;
+import org.apache.camel.spi.PackageScanFilter;
+import org.jboss.vfs.VFS;
+import org.jboss.vfs.VirtualFile;
+import org.jboss.vfs.VisitorAttributes;
+import org.jboss.vfs.util.AbstractVirtualFileVisitor;
+
+/**
+ * JBoss specific package scan classloader to be used when Camel is running
+ * inside JBoss Application Server.
+ * 
+ * <p>The camel-jboss jar is unavailable in the maven repository, so we have to build this class ourselves.</p>
+ * Explanation: http://camel.apache.org/camel-jboss.html<br/>
+ * Source: http://code.google.com/p/camel-extra/source/browse/trunk/components/camel-jboss/src/main/java/org/apache/camel/jboss/JBossPackageScanClassResolver.java<br/>
+ * NOTICE: http://code.google.com/p/camel-extra/source/browse/trunk/components/camel-jboss/src/main/resources/META-INF/NOTICE.txt<br/>
+ * LICENSE: http://code.google.com/p/camel-extra/source/browse/trunk/components/camel-jboss/src/main/resources/META-INF/LICENSE.txt
+ */
+public class JBossPackageScanClassResolver extends DefaultPackageScanClassResolver {
+
+    @Override
+    protected void find(PackageScanFilter test, String packageName, ClassLoader loader, Set<Class<?>> classes) {
+        if (log.isTraceEnabled()) {
+            log.trace("Searching for: " + test + " in package: " + packageName
+                    + " using classloader: " + loader.getClass().getName());
+        }
+
+        Enumeration<URL> urls;
+        try {
+            urls = getResources(loader, packageName);
+            if (!urls.hasMoreElements()) {
+                log.trace("No URLs returned by classloader");
+            }
+        }
+        catch (IOException ioe) {
+            log.warn("Could not read package: " + packageName, ioe);
+            return;
+        }
+
+        while (urls.hasMoreElements()) {
+            URL url = null;
+            try {
+                url = urls.nextElement();
+                if (log.isTraceEnabled()) {
+                    log.trace("URL from classloader: " + url);
+                }
+                VirtualFile root = VFS.getChild(url);
+                root.visit(new MatchingClassVisitor(test, classes));
+            } catch (IOException ioe) {
+                log.warn("Could not read entries in url: " + url, ioe);
+            } catch (URISyntaxException e) {
+                log.warn("Could not read entries in url: " + url, e);
+            }
+        }
+    }
+
+    private class MatchingClassVisitor extends AbstractVirtualFileVisitor {
+        private PackageScanFilter filter;
+        private Set<Class<?>> classes;
+
+        private MatchingClassVisitor(PackageScanFilter filter, Set<Class<?>> classes) {
+            super(VisitorAttributes.RECURSE_LEAVES_ONLY);
+            this.filter = filter;
+            this.classes = classes;
+        }
+
+        public void visit(VirtualFile file) {
+            if (file.getName().endsWith(".class")) {
+                String fqn = file.getPathName();
+                String qn;
+                if (fqn.indexOf("jar/") != -1) {
+                    qn = fqn.substring(fqn.indexOf("jar/") + 4);
+                } else {
+                    qn = fqn.substring(fqn.indexOf("/") + 1);
+                }
+
+                addIfMatching(filter, qn, classes);
+            }
+        }
+    }
+
+}

Modified: labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebDeploymentArchive.java
===================================================================
--- labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebDeploymentArchive.java	2011-04-29 04:14:45 UTC (rev 36978)
+++ labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebDeploymentArchive.java	2011-04-29 04:18:42 UTC (rev 36979)
@@ -52,6 +52,11 @@
         webModel = new WebModel(archiveName);
     }
 
+    public WebDeploymentArchive(String esbName, String warName) {
+        super(esbName);
+        webModel = new WebModel(esbName, warName);
+    }
+    
     public WebModel getWebModel() {
         assertNotFinalized();
         return webModel;

Modified: labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebModel.java
===================================================================
--- labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebModel.java	2011-04-29 04:14:45 UTC (rev 36978)
+++ labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebModel.java	2011-04-29 04:18:42 UTC (rev 36979)
@@ -34,6 +34,7 @@
 public class WebModel {
 
     private String esbName;
+    private String warName;
     private List<Filter> filters = new ArrayList<Filter>();
     private List<Servlet> servlets = new ArrayList<Servlet>();
     private Set<String> securityRoles = new LinkedHashSet<String>();
@@ -42,13 +43,33 @@
 
     public WebModel(String esbName) {
         AssertArgument.isNotNullAndNotEmpty(esbName, "esbName");
+        this.esbName = getESBDeploymentName(esbName);
+        this.warName = esbName;
+    }
+
+    public WebModel(String esbName, String warName) {
+        AssertArgument.isNotNullAndNotEmpty(esbName, "esbName");
+        AssertArgument.isNotNullAndNotEmpty(warName, "warName");
         this.esbName = esbName;
+        this.warName = warName;
     }
+    
+    private String getESBDeploymentName(String deploymentName)
+    {
+        final String esbName = deploymentName;
+        final int lastSeparator = esbName.lastIndexOf('.');
+        return ((lastSeparator >= 0) ? esbName.substring(0, lastSeparator) : esbName);
+    }
 
+    
     public String getEsbName() {
         return esbName;
     }
 
+    public String getWarName() {
+        return warName;
+    }
+    
     public List<Filter> getFilters() {
         return filters;
     }

Modified: labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/templates/jboss-web.xml.ftl
===================================================================
--- labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/templates/jboss-web.xml.ftl	2011-04-29 04:14:45 UTC (rev 36978)
+++ labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/templates/jboss-web.xml.ftl	2011-04-29 04:18:42 UTC (rev 36979)
@@ -4,5 +4,5 @@
     <#if webModel.authDomain??>
     <security-domain>${webModel.authDomain}</security-domain>
     </#if>
-
-</jboss-web>
\ No newline at end of file
+    <context-root>${webModel.esbName}</context-root>
+</jboss-web>

Modified: labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/camel/CamelGateway.java
===================================================================
--- labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/camel/CamelGateway.java	2011-04-29 04:14:45 UTC (rev 36978)
+++ labs/jbossesb/workspace/tcunning/as6/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/camel/CamelGateway.java	2011-04-29 04:18:42 UTC (rev 36979)
@@ -21,6 +21,8 @@
 
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 import java.util.HashSet;
 import java.util.Properties;
 import java.util.Set;
@@ -98,12 +100,19 @@
 
 	private static final Logger logger = Logger.getLogger(CamelGateway.class);
 
+	private static final String AS6_CLASS_RESOLVER = "org.jboss.soa.esb.listeners.gateway.camel.as6.JBossPackageScanClassResolver";
+	
 	private static final boolean isAS4;
+        private static final boolean isAS5;
+	private static final boolean isAS6;
+
 	static {
 		try {
 			MBeanServer mbeanServer = MBeanServerLocator.locateJBoss();
 			String versionNumber = (String)mbeanServer.getAttribute(new ObjectName("jboss.system:type=Server"), "VersionNumber");
 			isAS4 = (Integer.valueOf(versionNumber.substring(0, 1)).intValue() == 4);
+                        isAS5 = (Integer.valueOf(versionNumber.substring(0, 1)).intValue() == 5);
+			isAS6 = (Integer.valueOf(versionNumber.substring(0, 1)).intValue() == 6);
 		} catch (Throwable t) {
 			throw new RuntimeException("problem detecting JBoss AS version", t);
 		}
@@ -145,18 +154,41 @@
 		// we need to disable JMX so we don't depend on Spring classes
 		camelContext.disableJMX();
 		// configure correct classloading
-		PackageScanClassResolver packageScanClassResolver;
-		if (!isAS4) {
+		DefaultPackageScanClassResolver packageScanClassResolver = null;
+		if (isAS4) {
+                    packageScanClassResolver = (DefaultPackageScanClassResolver) camelContext.getPackageScanClassResolver();
+                    if (packageScanClassResolver == null) {
+                            packageScanClassResolver = new DefaultPackageScanClassResolver();
+                            camelContext.setPackageScanClassResolver(packageScanClassResolver);
+                    }
+		} else if (isAS5) {
 			// JBossESB on AS5+ needs this to handle VFS classloading URIs.
 			// JBossESB on AS4 will not work if we use this.
 			packageScanClassResolver = new JBossPackageScanClassResolver();
 			camelContext.setPackageScanClassResolver(packageScanClassResolver);
-		} else {
-			packageScanClassResolver = camelContext.getPackageScanClassResolver();
-			if (packageScanClassResolver == null) {
-				packageScanClassResolver = new DefaultPackageScanClassResolver();
-				camelContext.setPackageScanClassResolver(packageScanClassResolver);
-			}
+		} else if (isAS6) {		   
+		    try {
+		        Class c = Class.forName(AS6_CLASS_RESOLVER);
+		        Constructor con = c.getConstructor();
+		        packageScanClassResolver= (DefaultPackageScanClassResolver) con.newInstance();
+                        camelContext.setPackageScanClassResolver(packageScanClassResolver);		        
+		    } catch (InstantiationException e) {
+		        throw new ManagedLifecycleException(e);
+		    } catch (ClassNotFoundException e) {
+                        throw new ManagedLifecycleException(e);
+                    } catch (SecurityException e) {
+                        throw new ManagedLifecycleException(e);
+                    } catch (NoSuchMethodException e) {
+                        throw new ManagedLifecycleException(e);
+                    } catch (IllegalArgumentException e) {
+                        throw new ManagedLifecycleException(e);
+                    } catch (IllegalAccessException e) {
+                        throw new ManagedLifecycleException(e);
+                    } catch (InvocationTargetException e) {
+                        throw new ManagedLifecycleException(e);
+                    }
+		    		    
+                    camelContext.setPackageScanClassResolver(packageScanClassResolver);		    
 		}
 		Set<ClassLoader> classLoaders = new HashSet<ClassLoader>();
 		classLoaders.add(Thread.currentThread().getContextClassLoader());



More information about the jboss-svn-commits mailing list