[jboss-svn-commits] JBL Code SVN: r27016 - in labs/jbossesb/trunk/product: rosetta/src/org/jboss/internal/soa/esb/smooks and 9 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jun 18 12:42:46 EDT 2009
Author: tfennelly
Date: 2009-06-18 12:42:46 -0400 (Thu, 18 Jun 2009)
New Revision: 27016
Added:
labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/smooks/
labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/smooks/SmooksCleanable.java
labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/Cleanable.java
Modified:
labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecyclePriorities.java
labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/services/security/auth/ws/WSSecurityInfoExtractor.java
labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/converters/SmooksInstanceManager.java
labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/smooks/SmooksAction.java
labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/smooks/splitting/AbstractStreamSplitter.java
labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/AbstractWsdlContractPublisher.java
labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/wise/SmooksHandler.java
labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/wise/SmooksMapper.java
labs/jbossesb/trunk/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java
Log:
https://jira.jboss.org/jira/browse/JBESB-2521
Call Smooks.close() as part of the cleanup of any components using Smooks
Added: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/smooks/SmooksCleanable.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/smooks/SmooksCleanable.java (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/smooks/SmooksCleanable.java 2009-06-18 16:42:46 UTC (rev 27016)
@@ -0,0 +1,44 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * 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.internal.soa.esb.smooks;
+
+import org.jboss.soa.esb.Cleanable;
+import org.jboss.internal.soa.esb.assertion.AssertArgument;
+import org.milyn.Smooks;
+
+/**
+ * {@link Cleanable} wrapper for a {@link Smooks} instance.
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public class SmooksCleanable implements Cleanable {
+
+ private Smooks smooksInstance;
+
+ public SmooksCleanable(Smooks smooksInstance) {
+ AssertArgument.isNotNull(smooksInstance, "smooksInstance");
+ this.smooksInstance = smooksInstance;
+ }
+
+ public void clean() {
+ smooksInstance.close();
+ }
+}
Added: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/Cleanable.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/Cleanable.java (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/Cleanable.java 2009-06-18 16:42:46 UTC (rev 27016)
@@ -0,0 +1,91 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * 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;
+
+import org.milyn.SmooksException;
+import org.jboss.soa.esb.lifecycle.LifecyclePriorities;
+import org.jboss.soa.esb.lifecycle.LifecycleResourceException;
+import org.jboss.soa.esb.lifecycle.LifecycleResourceFactory;
+import org.jboss.soa.esb.lifecycle.LifecycleResource;
+import org.apache.log4j.Logger;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Cleanable component.
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public interface Cleanable {
+
+ /**
+ * Clean component.
+ * <p/>
+ * Implementations must gracefully handle errors.
+ */
+ void clean();
+
+ /**
+ * Lifecycle Manager for {@link Cleanable} components.
+ * <p/>
+ * Note that these components will be cleaned up before any other components,
+ * in the reverse order to which they were added. If your components are dependencies
+ * of other lifecycle managed components (not managed by this Lifecycle Manager), then you
+ * may need to manage your components lifecycle explicitly (under a higher
+ * {@link LifecyclePriorities priority} etc).
+ */
+ public static class LifecycleManager {
+ protected static Logger logger = Logger.getLogger(LifecycleManager.class);
+
+ private static final LifecycleResource<List<Cleanable>> cleanableResources =
+ new LifecycleResource<List<Cleanable>>(new Factory(), LifecyclePriorities.BASIC_CLEANABLE_RESOURCE_PRIORITY);
+
+ public static void register(Cleanable cleanable) {
+ List<Cleanable> cleanables;
+ try {
+ cleanables = cleanableResources.getLifecycleResource();
+ } catch (LifecycleResourceException e) {
+ throw new SmooksException("Failed to register Cleanable instance for cleanup.", e);
+ }
+ cleanables.add(cleanable);
+ }
+
+ private static class Factory implements LifecycleResourceFactory<List<Cleanable>> {
+
+ public List<Cleanable> createLifecycleResource(String lifecycleIdentity) throws LifecycleResourceException {
+ return new ArrayList<Cleanable>();
+ }
+
+ public void destroyLifecycleResource(List<Cleanable> cleanables, String lifecycleIdentity) throws LifecycleResourceException {
+ // Clean in the reverse order to which they were added...
+ for(int i = cleanables.size() - 1; i >= 0; i--) {
+ try {
+ cleanables.get(i).clean();
+ } catch (Exception e) {
+ logger.error("Unexpected clean exception.", e);
+ }
+ }
+ }
+ }
+
+ }
+}
Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecyclePriorities.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecyclePriorities.java 2009-06-18 15:20:42 UTC (rev 27015)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecyclePriorities.java 2009-06-18 16:42:46 UTC (rev 27016)
@@ -32,6 +32,11 @@
public final class LifecyclePriorities
{
/**
+ * Basic {@link org.jboss.soa.esb.Cleanable} resource priority.
+ */
+ public static final int BASIC_CLEANABLE_RESOURCE_PRIORITY = 1;
+
+ /**
* The rule base priority.
*/
public static final int RULE_BASE_PRIORITY = 50000;
Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/services/security/auth/ws/WSSecurityInfoExtractor.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/services/security/auth/ws/WSSecurityInfoExtractor.java 2009-06-18 15:20:42 UTC (rev 27015)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/services/security/auth/ws/WSSecurityInfoExtractor.java 2009-06-18 16:42:46 UTC (rev 27016)
@@ -32,6 +32,8 @@
import org.jboss.soa.esb.services.security.auth.SecurityInfoExtractor;
import org.jboss.soa.esb.services.security.principals.User;
import org.jboss.soa.esb.util.ClassUtil;
+import org.jboss.soa.esb.Cleanable;
+import org.jboss.internal.soa.esb.smooks.SmooksCleanable;
import org.milyn.Smooks;
import org.milyn.payload.JavaResult;
import org.xml.sax.SAXException;
@@ -122,7 +124,9 @@
try
{
this.smooks = new Smooks( ClassUtil.getResourceAsStream(configFile, getClass()));
- }
+ // Register the instance for cleanup...
+ Cleanable.LifecycleManager.register(new SmooksCleanable(this.smooks));
+ }
catch (final SAXException e)
{
throw new IllegalStateException("Could not parse " + configFile, e);
Modified: labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/converters/SmooksInstanceManager.java
===================================================================
--- labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/converters/SmooksInstanceManager.java 2009-06-18 15:20:42 UTC (rev 27015)
+++ labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/converters/SmooksInstanceManager.java 2009-06-18 16:42:46 UTC (rev 27016)
@@ -20,8 +20,9 @@
package org.jboss.soa.esb.actions.converters;
import org.jboss.soa.esb.ConfigurationException;
-import org.jboss.soa.esb.util.ClassUtil;
+import org.jboss.soa.esb.Cleanable;
import org.jboss.internal.soa.esb.assertion.AssertArgument;
+import org.jboss.internal.soa.esb.smooks.SmooksCleanable;
import org.apache.log4j.Logger;
import org.milyn.Smooks;
import org.milyn.SmooksException;
@@ -31,9 +32,7 @@
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.InitialContext;
-import java.io.InputStream;
import java.io.IOException;
-import java.util.Arrays;
/**
* Smooks instance manager.
@@ -84,6 +83,9 @@
try {
Smooks instance = new Smooks(configurationSourceURI);
+ // Register the instance for cleanup...
+ Cleanable.LifecycleManager.register(new SmooksCleanable(instance));
+
// We need to disable the resource config store's shutdown hook
// because the ESB container lifecycle handles this through
// calling the destroy method...
Modified: labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/smooks/SmooksAction.java
===================================================================
--- labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/smooks/SmooksAction.java 2009-06-18 15:20:42 UTC (rev 27015)
+++ labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/smooks/SmooksAction.java 2009-06-18 16:42:46 UTC (rev 27016)
@@ -20,6 +20,7 @@
package org.jboss.soa.esb.smooks;
import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.Cleanable;
import org.jboss.soa.esb.actions.AbstractActionPipelineProcessor;
import org.jboss.soa.esb.actions.ActionLifecycleException;
import org.jboss.soa.esb.actions.ActionProcessingException;
@@ -28,6 +29,7 @@
import org.jboss.soa.esb.message.Message;
import org.jboss.soa.esb.message.MessagePayloadProxy;
import org.jboss.soa.esb.message.Properties;
+import org.jboss.internal.soa.esb.smooks.SmooksCleanable;
import org.milyn.Smooks;
import org.milyn.profile.Profile;
import org.milyn.container.ExecutionContext;
@@ -135,6 +137,10 @@
try
{
smooks = new Smooks(smooksConfig);
+
+ // Register the instance for cleanup...
+ Cleanable.LifecycleManager.register(new SmooksCleanable(smooks));
+
// We need to disable the resource config store's shutdown hook
// because the ESB container lifecycle handles this through
// calling the destroy method...
@@ -216,7 +222,6 @@
@Override
public void destroy() throws ActionLifecycleException
{
- smooks.close();
super.destroy();
}
Modified: labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/smooks/splitting/AbstractStreamSplitter.java
===================================================================
--- labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/smooks/splitting/AbstractStreamSplitter.java 2009-06-18 15:20:42 UTC (rev 27015)
+++ labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/smooks/splitting/AbstractStreamSplitter.java 2009-06-18 16:42:46 UTC (rev 27016)
@@ -21,7 +21,9 @@
import org.jboss.soa.esb.Configurable;
import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.Cleanable;
import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.internal.soa.esb.smooks.SmooksCleanable;
import org.milyn.Smooks;
import org.milyn.event.report.HtmlReportGenerator;
import org.milyn.container.ExecutionContext;
@@ -52,8 +54,11 @@
reportPath = config.getAttribute("reportPath");
try {
smooks = new Smooks(splitterConfig);
+
+ // Register the instance for cleanup...
+ Cleanable.LifecycleManager.register(new SmooksCleanable(smooks));
} catch (Exception e) {
- e.printStackTrace();
+ throw new ConfigurationException("Error creating Smooks instance.", e);
}
}
Modified: labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/AbstractWsdlContractPublisher.java
===================================================================
--- labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/AbstractWsdlContractPublisher.java 2009-06-18 15:20:42 UTC (rev 27015)
+++ labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/AbstractWsdlContractPublisher.java 2009-06-18 16:42:46 UTC (rev 27016)
@@ -23,8 +23,10 @@
import org.jboss.internal.soa.esb.publish.ContractInfo;
import org.jboss.internal.soa.esb.publish.ServletContractPublisher;
import org.jboss.internal.soa.esb.util.StreamUtils;
+import org.jboss.internal.soa.esb.smooks.SmooksCleanable;
import org.jboss.soa.esb.listeners.config.Action;
import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.Cleanable;
import org.jboss.soa.esb.http.HttpClientFactory;
import org.jboss.soa.esb.addressing.EPR;
import org.xml.sax.SAXException;
@@ -199,6 +201,9 @@
// Initialise the transformer with the rewriting resource configs...
transformer = new Smooks("/org/jboss/soa/esb/actions/soap/wsdltrans.xml");
+ // Register the instance for cleanup...
+ Cleanable.LifecycleManager.register(new SmooksCleanable(transformer));
+
// And add the user defined config, if there is one....
String wsdlTransformConfig = actionProperties.getProperty("wsdlTransform");
if(wsdlTransformConfig != null) {
Modified: labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/wise/SmooksHandler.java
===================================================================
--- labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/wise/SmooksHandler.java 2009-06-18 15:20:42 UTC (rev 27015)
+++ labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/wise/SmooksHandler.java 2009-06-18 16:42:46 UTC (rev 27016)
@@ -35,6 +35,8 @@
import org.milyn.javabean.repository.BeanRepository;
import org.milyn.resource.URIResourceLocator;
import org.xml.sax.SAXException;
+import org.jboss.soa.esb.Cleanable;
+import org.jboss.internal.soa.esb.smooks.SmooksCleanable;
/**
* A SOAPHandler extension. It apply smooks transformation on soap message.
@@ -73,8 +75,12 @@
public SmooksHandler(String resource, Map beans) throws IllegalArgumentException, SAXException, IOException {
this.smooksResource = resource;
this.beansMap = beans;
- smooks = new Smooks();
- smooks.addConfigurations("smooks-resource", new URIResourceLocator().getResource(smooksResource));
+
+ smooks = new Smooks();
+ smooks.addConfigurations("smooks-resource", new URIResourceLocator().getResource(smooksResource));
+ // Register the instance for cleanup...
+ Cleanable.LifecycleManager.register(new SmooksCleanable(smooks));
+
}
public Set getHeaders() {
Modified: labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/wise/SmooksMapper.java
===================================================================
--- labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/wise/SmooksMapper.java 2009-06-18 15:20:42 UTC (rev 27015)
+++ labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/wise/SmooksMapper.java 2009-06-18 16:42:46 UTC (rev 27016)
@@ -27,6 +27,8 @@
import org.milyn.payload.JavaResult;
import org.milyn.resource.URIResourceLocator;
import org.xml.sax.SAXException;
+import org.jboss.soa.esb.Cleanable;
+import org.jboss.internal.soa.esb.smooks.SmooksCleanable;
/**
* A WiseMapper based on smooks, copied from the wise codebase
@@ -72,8 +74,11 @@
throws IOException, IllegalArgumentException, SAXException {
this.smooksResource = smooksResource;
this.smooksReport = smooksReport;
- smooks = new Smooks();
- smooks.addConfigurations("smooks-resource", new URIResourceLocator().getResource(smooksResource));
+
+ smooks = new Smooks();
+ smooks.addConfigurations("smooks-resource", new URIResourceLocator().getResource(smooksResource));
+ // Register the instance for cleanup...
+ Cleanable.LifecycleManager.register(new SmooksCleanable(smooks));
}
/**
Modified: labs/jbossesb/trunk/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java
===================================================================
--- labs/jbossesb/trunk/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java 2009-06-18 15:20:42 UTC (rev 27015)
+++ labs/jbossesb/trunk/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java 2009-06-18 16:42:46 UTC (rev 27016)
@@ -52,7 +52,9 @@
import org.jboss.internal.soa.esb.util.ESBProperties;
import org.jboss.internal.soa.esb.util.LRUCache;
import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.Cleanable;
import org.jboss.internal.soa.esb.util.XMLHelper;
+import org.jboss.internal.soa.esb.smooks.SmooksCleanable;
import org.jboss.soa.esb.dom.YADOMUtil;
import org.jboss.soa.esb.http.HttpClientFactory;
import org.jboss.system.ServiceMBeanSupport;
@@ -484,6 +486,8 @@
smooks = new Smooks();
smooks.addConfigurations("smooks-resource", new ByteArrayInputStream(smooksResource.getBytes("UTF-8")));
smooksCache.put(smooksResource, smooks);
+ // Register the instance for cleanup...
+ Cleanable.LifecycleManager.register(new SmooksCleanable(smooks));
}
smooks.filter(new DOMSource(messageDoc), new DOMResult(), smooks.createExecutionContext());
More information about the jboss-svn-commits
mailing list