[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