User: d_jencks Date: 02/02/11 21:41:09 Modified: src/main/org/jboss/deployment MainDeployer.java MainDeployerMBean.java DeploymentInfo.java Log: cleanup of many deployment/undployment problems including bug 515537, deploy loops on failed deployment Revision Changes Path 1.14 +299 -215 jboss/src/main/org/jboss/deployment/MainDeployer.java Index: MainDeployer.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/deployment/MainDeployer.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- MainDeployer.java 12 Feb 2002 03:22:02 -0000 1.13 +++ MainDeployer.java 12 Feb 2002 05:41:09 -0000 1.14 @@ -7,65 +7,63 @@ package org.jboss.deployment; + + + + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.JarURLConnection; +import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; -import java.util.Set; +import java.util.Collection; import java.util.Enumeration; -import java.util.HashSet; -import java.util.Map; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.StringTokenizer; -import java.util.jar.JarFile; import java.util.jar.Attributes; import java.util.jar.JarEntry; +import java.util.jar.JarFile; import java.util.jar.Manifest; - -import java.net.JarURLConnection; -import java.net.URL; -import java.net.MalformedURLException; - -import java.io.InputStream; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.OutputStream; -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; - import javax.management.MBeanServer; -import javax.management.ObjectName; import javax.management.MalformedObjectNameException; - +import javax.management.ObjectName; import org.jboss.system.ServiceMBeanSupport; - import org.jboss.util.DirectoryBuilder; -import org.jboss.util.MBeanProxy; - /** - * Takes a series of URL to watch, detects changes and calls the appropriate Deployers. - * + * MainDeployer + * + * Takes a series of URL to watch, detects changes and calls the appropriate Deployers + * * @author <a href="mailto:[EMAIL PROTECTED]">Marc Fleury</a> - * @author <a href="mailto:[EMAIL PROTECTED]">Jason Dillon</a> - * @version $Revision: 1.13 $ + * @version $Revision: 1.14 $ */ public class MainDeployer extends ServiceMBeanSupport implements MainDeployerMBean, Runnable { - /** JMX Server **/ - private MBeanServer server; /** Deployers **/ - private Set deployers = new HashSet(); + private final Set deployers = new HashSet(); /** Scanned Directories **/ - private ArrayList directories = new ArrayList(); + private final ArrayList directories = new ArrayList(); /** I always feel like somebody is watching me, contains DeploymentInfo **/ - private Map deployments = new HashMap(); - private ArrayList deploymentsList = new ArrayList(); - + private final Map deployments = new HashMap(); + private final ArrayList deploymentsList = new ArrayList(); + /** Thread running **/ private boolean running = false; @@ -76,16 +74,20 @@ private int id = 0; /** Given a flat set of files, this is the order of deployment **/ - private String[] order = { "sar", "service.xml", "rar", "jar", "war", "ear", "zip" }; + private final String[] order = {"sar", "service.xml", "rar", "jar", "war", "ear", "zip"}; - public void setPeriod(int period) { + /** Get on period **/ + public void setPeriod(int period) + { this.period = period; } - public int getPeriod() { - return period; + public int getPeriod() + { + return period; } + /** * Directory get set logic, these are "scanning" directories * on the local filesystem @@ -106,16 +108,17 @@ // We are dealing with a relative path URL if (!( url.startsWith("file:") || url.startsWith("http:"))) { - url = "file:" + System.getProperty("jboss.system.home") + "/" + url; + url = "file:"+System.getProperty("jboss.system.home")+File.separator+url; } - // Only one entry try { URL dir = new URL(url); - if (!directories.contains(dir)) { - directories.add(dir); - } + + if (!directories.contains(dir)) + { + directories.add(dir); + } } catch (MalformedURLException bad) { @@ -123,8 +126,8 @@ return; } - - if (log.isDebugEnabled()) { + if (log.isDebugEnabled()) + { log.debug("Added directory scan "+url); } } @@ -140,40 +143,37 @@ try { int index = directories.lastIndexOf(new URL(url)); - if (index != -1) { - directories.remove(index); - } + if (index != -1) + { + directories.remove(index); + } } catch (MalformedURLException bad) { - log.warn("Failed to remove directory scan "+url); + log.warn("Failed to remove directory scan " + url); return; } - if (log.isDebugEnabled()) { + if (log.isDebugEnabled()) + { log.debug("Removed directory scan "+url); } } - public String[] getDeployed() + public Collection listDeployed() { - String[] urls = new String[deployments.size()]; - - int i = 0; - Iterator iterator = deployments.keySet().iterator(); - while (iterator.hasNext()) - { - urls[i++] = ((DeploymentInfo) iterator.next()).url.toString(); - } - return urls; + return new ArrayList(deploymentsList); } - public void addDeployer(DeployerMBean deployer) { - deployers.add(deployer); + public void addDeployer(DeployerMBean deployer) + { + log.info("adding deployer: " + deployer); + deployers.add(deployer); } - public void removeDeployer(DeployerMBean deployer) { - deployers.remove(deployer); + public void removeDeployer(DeployerMBean deployer) + { + deployers.remove(deployer); } @@ -186,15 +186,16 @@ */ public String getName() { - // - // What is this used for? Should this method be depricated? - // - return "Main Deployer"; } /** * Gets the ObjectName attribute of the AutoDeployer object + * + * @param server Description of Parameter + * @param name Description of Parameter + * @return The ObjectName value + * @exception MalformedObjectNameException Description of Exception */ protected ObjectName getObjectName(MBeanServer server, ObjectName name) throws MalformedObjectNameException @@ -210,7 +211,6 @@ // (start/stop) only one entry is present // FIXME: Should pull this from ServerConfig - addDirectory("deploy"); // Do a first pass @@ -229,11 +229,13 @@ running = false; } - public boolean getScan() { + public boolean getScan() + { return running; } - public void setScan(boolean scan) { + public void setScan(boolean scan) + { running = scan; } @@ -245,7 +247,6 @@ do { scan(); - // Sleep try { @@ -261,49 +262,43 @@ public void scan() { - try + // Scan directories for new deployments + for (Iterator newDeployments = scanNew().listIterator(); newDeployments.hasNext();) { - Iterator iter; - - // Scan diretories for new deployments - iter = scanNew().listIterator(); - while (iter.hasNext()) + URL deployable = (URL) newDeployments.next(); + try { - deploy((URL)iter.next()); + deploy(deployable); } - - // Undeploy and redeploy to the modified ones - iter = scanModified().listIterator(); - - while (iter.hasNext()) + catch (Throwable t) { - DeploymentInfo di = (DeploymentInfo)iter.next(); - try - { - // if the url is a file that doesn't exist, it was removed -> undeploy + log.error("Could not deploy: " + deployable, t); + } // end of try-catch + + } - // TODO: check connection on http protocol and see if it is removed. + // Undeploy the removed ones + for (Iterator removed = scanRemoved().listIterator(); removed.hasNext();) + { + DeploymentInfo di = (DeploymentInfo) removed.next(); + // if the url is a file that doesn't exist, it was removed -> undeploy + undeploy(di); + } - if (di.url.getProtocol().startsWith("file") && !new File(di.url.getFile()).exists()) - { - undeploy(di); - } - // it is a deployment - else - { - undeploy(di); deploy(di); - } - } - catch (Exception e) - { - log.warn("operation failed; ignoring", e); - } + // Undeploy and redeploy the modified ones + for (Iterator modified = scanModified().listIterator(); modified.hasNext();) + { + DeploymentInfo di = (DeploymentInfo) modified.next(); + undeploy(di); + try + { + deploy(di); } + catch (Throwable t) + { + log.error("Could not deploy: " + di.url, t); + } // end of try-catch } - catch (Exception e) - { - log.warn("operation failed; ignoring", e); - } } public void undeploy(String url) @@ -312,9 +307,10 @@ { DeploymentInfo sdi = (DeploymentInfo) deployments.get(new URL(url)); - if (sdi!= null) { + if (sdi!= null) + { undeploy(sdi); - } + } } catch (Exception e) { @@ -328,38 +324,56 @@ log.info("Undeploying "+di.url); // First remove all sub-deployments - Iterator subs = di.subDeployments.iterator(); - while (subs.hasNext()) + for (Iterator subs = di.subDeployments.iterator(); subs.hasNext();) { DeploymentInfo sub = (DeploymentInfo) subs.next(); - // undeploy((DeploymentInfo) subs.next()); if (log.isDebugEnabled()) - log.debug("DEPLOYMENT OF SUB "+sub.url); + { + log.debug("UNDEPLOYMENT OF SUB "+sub.url); + } undeploy(sub); } - // Them remove the deployment itself + // Then remove the deployment itself try { // Tell the respective deployer to undeploy this one if (di.deployer != null) + { di.deployer.undeploy(di); - + } + } + catch (Exception e) + { + log.error("Undeployment failed: " + di.url, e); + } + catch (Throwable t) + { + log.error("Undeployment failed: " + di.url, t); + } + try + { // remove from local maps deployments.remove(di.url); - if (deploymentsList.lastIndexOf(di) != -1) { + if (deploymentsList.lastIndexOf(di) != -1) + { deploymentsList.remove(deploymentsList.lastIndexOf(di)); - } + } // Nuke my stuff, this includes the class loader di.cleanup(log); - log.info("Undeployed "+di.url); + log.info("Undeployed "+di.url); + } catch (Exception e) { - log.error("Undeployment failed: " + di.url, e); + log.error("Undeployment cleanup failed: " + di.url, e); + } + catch (Throwable t) + { + log.error("Undeployment cleanup failed: " + di.url, t); } } @@ -398,7 +412,7 @@ } catch (DeploymentException e) { - log.error("Could not deploy URL "+url, e); + log.error("Couldn't deploy URL "+url, e); } } @@ -411,9 +425,12 @@ { // If we are already deployed return if (deployments.containsKey(deployment.url)) + { return; + } - log.info("Deploying: " + deployment.url.toString()); + if (log.isInfoEnabled()); + log.info("Deploying: " + deployment.url.toString()); // Create a local copy of that File, the sdi keeps track of the copy directory makeLocalCopy(deployment); @@ -424,47 +441,53 @@ // What deployer is able to deploy this file findDeployer(deployment); - if(deployment.deployer != null) { + if(deployment.deployer != null) + { deployment.deployer.init(deployment); - } + } // create subdeployments as needed deploySubPackages(deployment); // Deploy this SDI, if it is a deployable type - if (deployment.deployer != null) { + if (deployment.deployer != null) + { deployment.deployer.deploy(deployment); - } + } - deployment.status = "Deployed"; + deployment.status="Deployed"; - if (debug) { + if (debug) log.debug("Done deploying " + deployment.shortName); - } } - catch (DeploymentException e) + catch (DeploymentException de) { - deployment.status = "Deployment FAILED reason: " + e.getMessage(); - throw e; + log.error("could not deploy :" + deployment.url, de); + deployment.status="Deployment FAILED reason: " + de.getMessage(); + throw de; + } + catch (Throwable t) + { + log.error("could not deploy :" + deployment.url, t); + deployment.status="Deployment FAILED reason: "+t.getMessage(); + throw new DeploymentException("Could not deploy: " + deployment.url, t); } finally { // whether you do it or not, for the autodeployer deployment.lastDeployed = System.currentTimeMillis(); - // watch it, it will be picked up as modified below, deployments is a map duplicates are ok + //watch it, it will be picked up as modified below, deployments is a map duplicates are ok deployments.put(deployment.url, deployment); // Do we watch it? - - // FIXME: Should not hardcode deployment tmp dir - - if (!deployment.url.toString().startsWith("file:"+System.getProperty("jboss.system.home")+ "/tmp/deploy")) + if (!deployment.url.toString().startsWith("file:"+System.getProperty("jboss.system.home")+File.separator+"tmp"+File.separator+"deploy")) { deploymentsList.add(deployment); - if (debug) { + if (debug) + { log.debug("Watching new file: " + deployment.url); - } + } } } } @@ -480,22 +503,23 @@ // To deploy directories of beans one should just name the directory // mybean.ear/bla...bla, so that the directory gets picked up by the right deployer // - - Iterator iter = deployers.iterator(); - while (iter.hasNext()) + for (Iterator iterator = deployers.iterator(); iterator.hasNext(); ) { - DeployerMBean deployer = (DeployerMBean) iter.next(); + DeployerMBean deployer = (DeployerMBean) iterator.next(); if (deployer.accepts(sdi)) { sdi.deployer = deployer; if (debug) + { log.debug("using deployer "+deployer); + } return; } } - if (debug) + { log.debug("NO DEPLOYER for url "+sdi.url); + } } public void preDeregister() @@ -516,12 +540,13 @@ HashSet newDeployments = new HashSet(); boolean trace = log.isTraceEnabled(); // Scan directories - Iterator iter = directories.listIterator(); - while (iter.hasNext()) + for (Iterator iterator = directories.listIterator(); iterator.hasNext();) { - File dir = new File(((URL) iter.next()).getFile()); + File dir = new File(((URL) iterator.next()).getFile()); if (trace) + { log.trace("Scanning directory: " + dir); + } File[] files = dir.listFiles(); if (files == null) { @@ -531,10 +556,14 @@ for (int i = 0; i < files.length; i++) { if( trace ) + { log.trace("Checking deployment file: "+files[i]); + } // It is a new file if (!deployments.containsKey(files[i].toURL())) + { newDeployments.add(files[i].toURL()); + } } } @@ -548,52 +577,102 @@ } /** + * scanRemoved scans the existing deployments and return a + * Set with the removed deployments + */ + protected List scanRemoved() + { + HashSet removed = new HashSet(); + + if (log.isTraceEnabled()) + { + log.trace("Scanning installed deployments"); + } + // People already deployed, scan for modifications + for (Iterator it = deploymentsList.listIterator(); it.hasNext(); ) + { + DeploymentInfo deployment = (DeploymentInfo) it.next(); + if (deployment.url.getProtocol().startsWith("file")) + { + File theFile = new File(deployment.url.getFile()); + if (!theFile.exists()) + { + removed.add(deployment); + } + + } // end of if () + else + { + try + { + deployment.url.openConnection(); + } + catch (java.io.IOException ioe) + { + removed.add(deployment); + } // end of try-catch + } + } + return sortDeployments(removed); + } + /** * scanModified scans the existing deployments and return a * Set with the modified deployments */ protected ArrayList scanModified() { - try - { - HashSet modified = new HashSet(); - - if (log.isTraceEnabled()) - log.trace("Scanning installed deployments"); - - // People already deployed, scan for modifications - Iterator iter = deploymentsList.listIterator(); + HashSet modified = new HashSet(); - while (iter.hasNext()) - { - DeploymentInfo deployment = (DeploymentInfo) iter.next(); - long lastModified = 0; + if (log.isTraceEnabled()) + { + log.trace("Scanning installed deployments"); + } + // People already deployed, scan for modifications + for (Iterator it = deploymentsList.listIterator(); it.hasNext(); ) + { + DeploymentInfo deployment = (DeploymentInfo) it.next(); - // Get lastModified of file from file system - if (deployment.watch.getProtocol().startsWith("file")) + long lastModified = 0; + + // if noone told us what to watch, we'll look for something... + if (deployment.watch == null) + { + deployment.watch = deployment.url; + } + // Get lastModified of file from file system + if (deployment.watch.getProtocol().startsWith("file")) + { + File theFile = new File(deployment.watch.getFile()); + if (theFile.exists()) { - File theFile = new File(deployment.watch.getFile()); - if ( ! theFile.exists()) modified.add(deployment); - lastModified = theFile.lastModified(); } + } - // Use URL connection to get lastModified on http - else lastModified = deployment.watch.openConnection().getLastModified(); + // Use URL connection to get lastModified on http + else + { + try + { + lastModified = deployment.watch.openConnection().getLastModified(); + } + catch (java.io.IOException ioe) + { + //ignored, watch is missing. + } // end of try-catch + } - // Check the record in the DeploymentInfo against the physical one - if (deployment.lastDeployed < lastModified) - modified.add(deployment); + // Check the record in the DeploymentInfo against the physical one + if (deployment.lastDeployed < lastModified) + { + modified.add(deployment); } - return sortDeployments(modified); - } - catch (Throwable t) - { - log.error("operation failed", t); - return null; } + return sortDeployments(modified); } + /** * extractPackages * @@ -609,8 +688,9 @@ // FIXME do the sub deploy for directory and the move to // if (di.isXML) return; if (di.isXML || di.isDirectory) + { return ; - + } // J2EE legacy goo in manifest parseManifestLibraries(di); @@ -630,7 +710,10 @@ } catch (Exception e) { - throw new DeploymentException(e); + + //maybe this is not a jar nor a directory... + log.info("deploying non-jar/xml file: " + di.url); + return; } for (Enumeration e = jarFile.entries(); e.hasMoreElements();) @@ -643,22 +726,23 @@ // b- a class in a normal directory structure // is a "package" and will be deployed if (name.endsWith(".jar") - || name.endsWith(".sar") - || name.endsWith(".ear") - || name.endsWith(".rar") - || name.endsWith(".war") - || name.endsWith(".zip")) + || name.endsWith(".sar") + || name.endsWith(".ear") + || name.endsWith(".rar") + || name.endsWith(".war") + || name.endsWith(".zip")) { // Make sure the name is flat no directory structure in subs name // example war's WEBINF/lib/myjar.jar appears as myjar.jar in // the tmp directory if (name.lastIndexOf("/") != -1) + { name = name.substring(name.lastIndexOf("/")+1); - + } try { DirectoryBuilder builder = - new DirectoryBuilder(System.getProperty("jboss.system.home")); + new DirectoryBuilder(System.getProperty("jboss.system.home")); File localCopyDir = builder.cd("tmp").cd("deploy").get(); // We use the name of the entry as the name of the file under deploy @@ -688,7 +772,7 @@ { log.error("Error in subDeployment with name "+name, ex); throw new DeploymentException - ("Could not deploy sub deployment "+name+" of deployment "+di.url); + ("Could not deploy sub deployment "+name+" of deployment "+di.url); } } @@ -705,14 +789,11 @@ } // Order the deployments - Iterator iter = sortDeployments(subDeployments).listIterator(); - - // Deploy them all - while (iter.hasNext()) + for (Iterator lt = sortDeployments(subDeployments).listIterator(); lt.hasNext();) { try { - deploy((DeploymentInfo)iter.next()); + deploy((DeploymentInfo) lt.next()); } catch (DeploymentException e) { @@ -740,9 +821,10 @@ { ArrayList tmp = new ArrayList(); StringTokenizer st = new StringTokenizer(classPath); - if (debug) { - log.debug("resolveLibraries: " + classPath); - } + if (debug) + { + log.debug("resolveLibraries: "+classPath); + } while (st.hasMoreTokens()) { @@ -752,9 +834,10 @@ DeploymentInfo sub = null; - if (debug) { + if (debug) + { log.debug("new manifest entry for sdi at "+sdi.shortName+" entry is "+tk); - } + } try { @@ -771,7 +854,7 @@ catch (Exception ignore) { log.warn("The manifest entry in "+sdi.url+" references URL "+lib+ - " which could not be opened, entry ignored"); + " which could not be opened, entry ignored"); } } } @@ -801,13 +884,10 @@ sdi.localUrl = sdi.url; return; + // FIXME TODO add support for Directory copying over } // Are we already in the localCopyDir? - - // FIXME: Should not hard code deploy tmp dir, should also reference it as a URL, instead - // of this mixed mode crap (is this a file or a URL, url should not use File.sep) - else if (sdi.url.toString().indexOf(System.getProperty("jboss.system.home")+File.separator+"tmp"+File.separator+"deploy") != -1) { sdi.localUrl = sdi.url; @@ -815,13 +895,15 @@ } else { + // return new URL("file:"+f.getCanonicalPath()); + sdi.localUrl = new File (localCopyDir, getNextID ()+"."+sdi.shortName).toURL(); copy(sdi.url, sdi.localUrl); } } catch (Exception e) { - log.error("Could not make local copy for " + sdi.url, e); + log.error("Could not make local copy for "+sdi.url.toString(), e); } } @@ -836,10 +918,10 @@ } } - protected void copy(URL _src, URL _dest) throws IOException + protected void copy (URL _src, URL _dest) throws IOException { if (!_dest.getProtocol ().equals ("file")) - throw new IOException("only file: protocol is allowed as destination!"); + throw new IOException ("only file: protocol is allowed as destination!"); InputStream in; OutputStream out; @@ -847,8 +929,10 @@ String s = _dest.getFile (); File dir = new File (s.substring (0, s.lastIndexOf("/"))); if (!dir.exists ()) + { dir.mkdirs (); - + } + in = _src.openStream (); out = new FileOutputStream (s); @@ -876,8 +960,7 @@ for (int i = 0 ; i < order.length ; i++) { - Iterator it = urls.iterator(); - while (it.hasNext()) + for (Iterator it = urls.iterator(); it.hasNext();) { URL url = (URL) it.next(); @@ -900,8 +983,7 @@ for (int i = 0 ; i < order.length ; i++) { - Iterator it = urls.iterator(); - while (it.hasNext()) + for (Iterator it = urls.iterator(); it.hasNext();) { DeploymentInfo di = (DeploymentInfo) it.next(); @@ -914,29 +996,31 @@ // Unknown types deployed at the end list.addAll(urls); - + if (log.isTraceEnabled()) + { + log.trace("about to do something with: " + list); + } // end of if () return list; } public boolean isDeployed(String url) throws MalformedURLException { - DeploymentInfo di = getDeployment(new URL(url)); - - return (di != null); + URL deployURL = new URL(url); + DeploymentInfo di = getDeployment(deployURL); + return ( di != null ); } public DeploymentInfo getDeployment(URL url) { - return (DeploymentInfo)deployments.get(url); + return (DeploymentInfo) deployments.get(url); } public DeploymentInfo removeDeployment(DeploymentInfo di) { - return (DeploymentInfo)deployments.remove(di.url); + return (DeploymentInfo) deployments.remove(di.url); } - private int getNextID() { - return id++; - } + private int getNextID() { return id++;} } + 1.4 +31 -31 jboss/src/main/org/jboss/deployment/MainDeployerMBean.java Index: MainDeployerMBean.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/deployment/MainDeployerMBean.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- MainDeployerMBean.java 12 Feb 2002 03:22:02 -0000 1.3 +++ MainDeployerMBean.java 12 Feb 2002 05:41:09 -0000 1.4 @@ -1,53 +1,53 @@ /* - * JBoss, the OpenSource J2EE webOS - * - * Distributable under LGPL license. - * See terms of license at gnu.org. - */ - +* JBoss, the OpenSource J2EE webOS +* +* Distributable under LGPL license. +* See terms of license at gnu.org. +*/ package org.jboss.deployment; import java.net.URL; - +import java.util.Collection; import javax.management.ObjectName; - import org.jboss.system.ServiceMBean; import org.jboss.util.SafeObjectNameFactory; /** - * This is the interface of the AutoDeployer that is exposed for - * administration - * - * @author <a href="mailto:[EMAIL PROTECTED]">Rickard Öberg</a> - * @author <a href="mailto:[EMAIL PROTECTED]">Toby Allsopp</a> - * @author <a href="mailto:[EMAIL PROTECTED]">Marc Fleury</a> - * @version $Revision: 1.3 $ - * - * <p><b>20011223 marc fleury:</b> - * <ul> - * <li>add/RemoveURL, added the capacity to dynamically add a URL to watch - * <li>add/Removedeployer, dynamically add a new deployer - * <li>Changed ObjectName to JBOSs-SYSTEM realm (from EJB realm) - * <li>Rewrite - * </ul> - */ +* This is the interface of the AutoDeployer that is exposed for +* administration +* +* @see AutoDeployer +* +* @author <a href="mailto:[EMAIL PROTECTED]">Rickard Öberg</a> +* @author <a href="mailto:[EMAIL PROTECTED]">Toby Allsopp</a> +* @author <a href="mailto:[EMAIL PROTECTED]">Marc Fleury</a> +* @version $Revision: 1.4 $ +* <p><b>20011223 marc fleury:</b> +* <ul> +* <li>add/RemoveURL, added the capacity to dynamically add a URL to watch +* <li>add/Removedeployer, dynamically add a new deployer +* <li>Changed ObjectName to JBOSs-SYSTEM realm (from EJB realm) +* <li>Rewrite +* </ul> +*/ public interface MainDeployerMBean extends ServiceMBean { /** The default object name. */ - ObjectName OBJECT_NAME = SafeObjectNameFactory.create("jboss.system", - "service", - "MainDeployer"); + ObjectName OBJECT_NAME = SafeObjectNameFactory.create("jboss.system", + "service", + "MainDeployer"); + /** individual URLs for dynamically deploying **/ void deploy(String URL); void undeploy(String URL); void deploy(DeploymentInfo sdi) - throws DeploymentException; + throws DeploymentException; public void undeploy(DeploymentInfo sdi) - throws DeploymentException; + throws DeploymentException; /** Dynamically add directories to scan **/ @@ -59,9 +59,9 @@ void removeDeployer(DeployerMBean deployer); /** get all the watched URLs in this deployment **/ - String[] getDeployed(); + Collection listDeployed(); - /** Get set scan-period **/ + /** Get set scan-period**/ void setScan( boolean scan); boolean getScan(); void setPeriod(int period); 1.7 +20 -6 jboss/src/main/org/jboss/deployment/DeploymentInfo.java Index: DeploymentInfo.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/deployment/DeploymentInfo.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DeploymentInfo.java 9 Feb 2002 16:09:17 -0000 1.6 +++ DeploymentInfo.java 12 Feb 2002 05:41:09 -0000 1.7 @@ -54,7 +54,7 @@ * @author <a href="mailto:[EMAIL PROTECTED]">David Jencks</a> * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Schulze</a> * @author <a href="mailto:[EMAIL PROTECTED]">Christoph G. Jung</a> -* @version $Revision: 1.6 $ <p> +* @version $Revision: 1.7 $ <p> * * <b>20011211 marc fleury:</b> * <ul> @@ -89,6 +89,8 @@ public String shortName; public long lastDeployed = 0; + + public long lastModified = 0; //use for "should we redeploy failed" // A free form status for the "state" can be Deployed/failed etc etc public String status; @@ -222,12 +224,18 @@ public void cleanup(Logger log) { - if (!recursiveDelete(new File(localUrl.getFile()))) - if (log.isInfoEnabled()) - log.info("could not delete directory " + localUrl.toString()+" restart will delete it"); + if (localUrl == null || localUrl.equals(url)) + { + log.info("not deleting localUrl, it is null or not a copy: " + localUrl); + } // end of if () + else if (recursiveDelete(new File(localUrl.getFile()))) + { + log.info("Cleaned Deployment "+url); + } else - if (log.isInfoEnabled()) - log.info("Cleaned Deployment "+url); + { + log.info("could not delete directory " + localUrl.toString()+" restart will delete it"); + } if (!isXML) ServiceLibraries.getLibraries().removeClassLoader((UnifiedClassLoader) ucl); @@ -269,6 +277,12 @@ } return false; } + + public String toString() + { + return "DeploymentInfo:url=" + url; + } + }
_______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-development