[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