User: starksm Date: 01/11/20 01:42:48 Modified: src/main/org/jboss/deployment Tag: Branch_2_4 DeployerMBeanSupport.java Installer.java InstallerFactory.java J2eeDeployer.java Log: Change to the unified log4j based org.jboss.logging.Logger class. Revision Changes Path No revision No revision 1.1.6.2 +3 -3 jboss/src/main/org/jboss/deployment/DeployerMBeanSupport.java Index: DeployerMBeanSupport.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/deployment/DeployerMBeanSupport.java,v retrieving revision 1.1.6.1 retrieving revision 1.1.6.2 diff -u -r1.1.6.1 -r1.1.6.2 --- DeployerMBeanSupport.java 2001/09/30 22:22:57 1.1.6.1 +++ DeployerMBeanSupport.java 2001/11/20 09:42:48 1.1.6.2 @@ -19,7 +19,7 @@ * <description> * * @author Toby Allsopp ([EMAIL PROTECTED]) - * @version $Revision: 1.1.6.1 $ + * @version $Revision: 1.1.6.2 $ */ public abstract class DeployerMBeanSupport extends ServiceMBeanSupport @@ -54,7 +54,7 @@ } catch (Throwable t) { - log.exception(t); + log.error("undeploy failure", t); if (t instanceof Exception) { if (t instanceof IOException) throw (IOException) t; @@ -72,7 +72,7 @@ } catch (Throwable t) { - log.exception(t); + log.error("deploy failure", t); if (t instanceof Exception) { if (t instanceof IOException) throw (IOException) t; 1.8.2.4 +3 -3 jboss/src/main/org/jboss/deployment/Installer.java Index: Installer.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/deployment/Installer.java,v retrieving revision 1.8.2.3 retrieving revision 1.8.2.4 diff -u -r1.8.2.3 -r1.8.2.4 --- Installer.java 2001/11/02 08:42:30 1.8.2.3 +++ Installer.java 2001/11/20 09:42:48 1.8.2.4 @@ -39,7 +39,7 @@ import javax.management.JMException; import javax.management.ObjectName; -import org.jboss.logging.Log; +import org.jboss.logging.Logger; import org.jboss.util.MBeanProxy; import org.jboss.util.ServiceMBeanSupport; @@ -56,7 +56,7 @@ * * @see <related> * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Schulze</a> - * @version $Revision: 1.8.2.3 $ + * @version $Revision: 1.8.2.4 $ */ public class Installer { @@ -79,7 +79,7 @@ Deployment d; // the log4j category for output - Category log; + Logger log; // to get the Log and the temprary deployment dir InstallerFactory factory; 1.3.6.4 +8 -12 jboss/src/main/org/jboss/deployment/InstallerFactory.java Index: InstallerFactory.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/deployment/InstallerFactory.java,v retrieving revision 1.3.6.3 retrieving revision 1.3.6.4 diff -u -r1.3.6.3 -r1.3.6.4 --- InstallerFactory.java 2001/11/02 08:42:30 1.3.6.3 +++ InstallerFactory.java 2001/11/20 09:42:48 1.3.6.4 @@ -33,23 +33,19 @@ import java.util.zip.ZipEntry; import java.util.Enumeration; - import javax.management.MBeanServer; import javax.management.MBeanException; import javax.management.JMException; import javax.management.ObjectName; -import org.jboss.util.MBeanProxy; -import org.jboss.util.ServiceMBeanSupport; - -import org.jboss.metadata.XmlFileLoader; - -import org.jboss.deployment.DeploymentException; - -import org.apache.log4j.Category; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.jboss.deployment.DeploymentException; +import org.jboss.logging.Logger; +import org.jboss.metadata.XmlFileLoader; +import org.jboss.util.MBeanProxy; +import org.jboss.util.ServiceMBeanSupport; /** This class is used by the J2eeDeployer to create, remove or find a particular @@ -58,7 +54,7 @@ * @see <related> * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Schulze</a> * @author <a href="mailto:[EMAIL PROTECTED]">Bill Burke</a> - * @version $Revision: 1.3.6.3 $ + * @version $Revision: 1.3.6.4 $ */ public class InstallerFactory { @@ -69,7 +65,7 @@ // the deployment base directory (for the temporary files) protected File baseDir; // the logger if there is something to say - protected Category log; + protected Logger log; // Constructors -------------------------------------------------- @@ -78,7 +74,7 @@ * @param _tmpDir the temporary deployment directory * @param _log the Log for output */ - public InstallerFactory(File _tmpDir, Category _log) throws IOException + public InstallerFactory(File _tmpDir, Logger _log) throws IOException { baseDir = _tmpDir.getCanonicalFile(); 1.31.2.4 +421 -396 jboss/src/main/org/jboss/deployment/J2eeDeployer.java Index: J2eeDeployer.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/deployment/J2eeDeployer.java,v retrieving revision 1.31.2.3 retrieving revision 1.31.2.4 diff -u -r1.31.2.3 -r1.31.2.4 --- J2eeDeployer.java 2001/11/02 08:42:30 1.31.2.3 +++ J2eeDeployer.java 2001/11/20 09:42:48 1.31.2.4 @@ -1,9 +1,9 @@ /* -* JBoss, the OpenSource EJB server -* -* Distributable under LGPL license. -* See terms of license at gnu.org. -*/ + * JBoss, the OpenSource EJB server + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ package org.jboss.deployment; import java.net.URL; @@ -33,59 +33,56 @@ import java.util.zip.ZipEntry; import java.util.Enumeration; - import javax.management.MBeanServer; import javax.management.MBeanException; import javax.management.JMException; import javax.management.ObjectName; import javax.management.RuntimeMBeanException; import javax.management.RuntimeErrorException; - -import org.jboss.logging.Log; -import org.jboss.util.MBeanProxy; -import org.jboss.util.ServiceMBeanSupport; -import org.jboss.metadata.XmlFileLoader; +import org.w3c.dom.Document; +import org.w3c.dom.Element; import org.jboss.deployment.DeploymentException; import org.jboss.ejb.ContainerFactoryMBean; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; +import org.jboss.logging.Logger; +import org.jboss.metadata.XmlFileLoader; +import org.jboss.util.MBeanProxy; +import org.jboss.util.ServiceMBeanSupport; /** J2eeDeployer allows to deploy single EJB.jars as well as Web.wars -* (if a Servlet Container is present) or even Application.ears. <br> -* The deployment is done by determining the file type of the given url. -* The file must be a valid zip file or a directory and must contain either a META-INF/ejb-jar.xml -* or META-INF/application.xml or a WEB-INF/web.xml file. -* Depending on the file type, the whole file (EJBs, WARs) -* or only the relevant packages (EAR) becoming downloaded. <br> -* <i> replacing alternative DDs and validation is not yet implementet! </i> -* The uploaded files are getting passed through to the responsible deployer -* (ContainerFactory for JBoss and EmbededTomcatService for Tomcat). -* -* @author <a href="mailto:[EMAIL PROTECTED]">Daniel Schulze</a> -* @author Toby Allsopp ([EMAIL PROTECTED]) -* @author [EMAIL PROTECTED] -* @version $Revision: 1.31.2.3 $ -*/ -public class J2eeDeployer + * (if a Servlet Container is present) or even Application.ears. <br> + * The deployment is done by determining the file type of the given url. + * The file must be a valid zip file or a directory and must contain either a META-INF/ejb-jar.xml + * or META-INF/application.xml or a WEB-INF/web.xml file. + * Depending on the file type, the whole file (EJBs, WARs) + * or only the relevant packages (EAR) becoming downloaded. <br> + * <i> replacing alternative DDs and validation is not yet implementet! </i> + * The uploaded files are getting passed through to the responsible deployer + * (ContainerFactory for JBoss and EmbededTomcatService for Tomcat). + * + * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Schulze</a> + * @author Toby Allsopp ([EMAIL PROTECTED]) + * @author [EMAIL PROTECTED] + * @version $Revision: 1.31.2.4 $ + */ +public class J2eeDeployer extends ServiceMBeanSupport implements J2eeDeployerMBean { // Constants ----------------------------------------------------- public File DEPLOYMENT_DIR = null;//"/home/deployment"; // default? MUST BE ABSOLUTE PATH!!! - public static String CONFIG = "deployment.cfg"; + public static String CONFIG = "deployment.cfg"; - public static final int EASY = 0; - public static final int RESTRICTIVE = 1; - + public static final int EASY = 0; + public static final int RESTRICTIVE = 1; + // Attributes ---------------------------------------------------- // my server to lookup for the special deployers // <comment author="cgjung">better be protected for subclassing </comment> protected MBeanServer server; - + // <comment author="cgjung">better be protected for subclassing </comment> protected String name; @@ -97,16 +94,16 @@ String jarDeployerName; String warDeployerName; - int classpathPolicy = EASY; - - // <comment author="cgjung"> better be protected for subclassing </comment> - protected InstallerFactory installer; + int classpathPolicy = EASY; + + // <comment author="cgjung"> better be protected for subclassing </comment> + protected InstallerFactory installer; // Static -------------------------------------------------------- /** only for testing...*/ - public static void main (String[] _args) throws Exception + public static void main(String[] _args) throws Exception { - new J2eeDeployer().deploy (_args[0]); + new J2eeDeployer().deploy(_args[0]); } // Constructors -------------------------------------------------- @@ -115,7 +112,7 @@ this("Default", "EJB:service=ContainerFactory", ":service=EmbeddedTomcat"); } - public J2eeDeployer (String _name, String jarDeployerName, String warDeployerName) + public J2eeDeployer(String _name, String jarDeployerName, String warDeployerName) { setDeployerName(_name); setJarDeployerName(jarDeployerName); @@ -126,7 +123,6 @@ { name = name.equals("") ? "" : " "+name; this.name = name; - this.log = Log.createLog(getName()); } public String getDeployerName() @@ -148,40 +144,40 @@ { this.warDeployerName = warDeployerName; } - + public String getWarDeployerName() { return warDeployerName; } - + // Public -------------------------------------------------------- - + public FilenameFilter getDeployableFilter() { return new FilenameFilter() + { + public boolean accept(File dir, String filename) { - public boolean accept(File dir, String filename) - { - return - filename.endsWith(".jar") || - filename.endsWith(".war") || - filename.endsWith(".ear") || - filename.endsWith(".zip"); - } - }; + return + filename.endsWith(".jar") || + filename.endsWith(".war") || + filename.endsWith(".ear") || + filename.endsWith(".zip"); + } + }; } /** Deploys the given URL independent if it is a EJB.jar, Web.war - * or Application.ear. In case of already deployed, it performes a - * redeploy. - * @param _url the url (file or http) to the archiv to deploy - * @throws MalformedURLException in case of a malformed url - * @throws J2eeDeploymentException if something went wrong... - * @throws IOException if trouble while file download occurs - */ - public void deploy (String _url) throws MalformedURLException, IOException, J2eeDeploymentException + * or Application.ear. In case of already deployed, it performes a + * redeploy. + * @param _url the url (file or http) to the archiv to deploy + * @throws MalformedURLException in case of a malformed url + * @throws J2eeDeploymentException if something went wrong... + * @throws IOException if trouble while file download occurs + */ + public void deploy(String _url) throws MalformedURLException, IOException, J2eeDeploymentException { - URL url = new URL (_url); + URL url = new URL(_url); // <comment author="cgjung">factored out for subclass access </comment> ObjectName lCollector = createCollectorName(); @@ -189,7 +185,7 @@ // undeploy first if it is a redeploy try { - undeploy (_url); + undeploy(_url); // Remove application data by its id // <comment author="cgjung"> factored out for subclass access </comment> removeFromCollector(_url,lCollector); @@ -198,131 +194,139 @@ {} // now try to deploy - log.log ("Deploy J2EE application: " + _url); + log.info("Deploy J2EE application: " + _url); - Deployment d = installApplication (url); - - try - { - // <comment author="cgjung"> factored out for subclass access - startApplication (d); - log.log ("J2EE application: " + _url + " is deployed."); - } + Deployment d = installApplication(url); + + try + { + // <comment author="cgjung"> factored out for subclass access + startApplication(d); + log.info("J2EE application: " + _url + " is deployed."); + } catch (Exception _e) { - try - { - stopApplication (d); - } - catch (Exception _e2) - { - log.error("unable to stop application "+d.name+": "+_e2); - } - finally - { - try - { - uninstallApplication (_url); - } - catch (Exception _e3) - { - log.error("unable to uninstall application "+d.name+": "+_e3); - } - } - - if (_e instanceof J2eeDeploymentException) - { - throw (J2eeDeploymentException)_e; - } - else - { - log.exception(_e); - throw new J2eeDeploymentException ("fatal error: "+_e); - } - } + try + { + stopApplication(d); + } + catch (Exception _e2) + { + log.error("unable to stop application "+d.name+": "+_e2); + } + finally + { + try + { + uninstallApplication(_url); + } + catch (Exception _e3) + { + log.error("unable to uninstall application "+d.name+": "+_e3); + } + } + + if (_e instanceof J2eeDeploymentException) + { + throw (J2eeDeploymentException)_e; + } + else + { + log.error("fatal error", _e); + throw new J2eeDeploymentException("fatal error: "+_e); + } + } } - + /** creation of collector name factored out. * @author schaefera * @author cgjung */ - protected ObjectName createCollectorName() { - try { + protected ObjectName createCollectorName() + { + try + { return new ObjectName( "Management", "service", "Collector" ); } - catch( Exception e ) { - return null; + catch( Exception e ) + { + return null; } } - /** report of removal to data collector factored out for subclass access + /** report of removal to data collector factored out for subclass access * a try/catch for dealing with an uninstalled collector has been added. * @author schaefera * @author cgjung */ - protected void removeFromCollector(String _url, ObjectName lCollector) { - try{ - server.invoke( - lCollector, - "removeApplication", - new Object[] { _url }, - new String[] { "java.lang.String" } + protected void removeFromCollector(String _url, ObjectName lCollector) + { + try + { + server.invoke( + lCollector, + "removeApplication", + new Object[] + { _url }, + new String[] + { "java.lang.String" } ); - } catch(Exception e) { - log.log("Report of undeployment of J2EE application: " + _url + " could not be reported."); - } + } catch(Exception e) + { + log.info("Report of undeployment of J2EE application: " + _url + " could not be reported."); + } } /** Undeploys the given URL (if it is deployed). - * Actually only the file name is of interest, so it dont has to be - * an URL to be undeployed, the file name is ok as well. - * @param _url the url to to undeploy - * @throws MalformedURLException in case of a malformed url - * @throws J2eeDeploymentException if something went wrong (but should have removed all files) - * @throws IOException if file removement fails - */ - public void undeploy (String _app) throws IOException, J2eeDeploymentException - { - Deployment d = installer.findDeployment (_app); - - if (d == null) - throw new J2eeDeploymentException ("The application \""+name+"\" has not been deployed."); - - try - { - stopApplication (d); - } - catch (J2eeDeploymentException _e) - { - throw _e; - } - finally - { - uninstallApplication (d); - } + * Actually only the file name is of interest, so it dont has to be + * an URL to be undeployed, the file name is ok as well. + * @param _url the url to to undeploy + * @throws MalformedURLException in case of a malformed url + * @throws J2eeDeploymentException if something went wrong (but should have removed all files) + * @throws IOException if file removement fails + */ + public void undeploy(String _app) throws IOException, J2eeDeploymentException + { + Deployment d = installer.findDeployment(_app); + + if (d == null) + throw new J2eeDeploymentException("The application \""+name+"\" has not been deployed."); + + try + { + stopApplication(d); + } + catch (J2eeDeploymentException _e) + { + throw _e; + } + finally + { + uninstallApplication(d); + } } /** Checks if the given URL is currently deployed or not. - * Actually only the file name is of interest, so it dont has to be - * an URL to be undeployed, the file name is ok as well. - * @param _url the url to to check - * @return true if _url is deployed - * @throws MalformedURLException in case of a malformed url - * @throws J2eeDeploymentException if the app seems to be deployed, but some of its modules - * are not. - */ - public boolean isDeployed (String _url) throws MalformedURLException, J2eeDeploymentException + * Actually only the file name is of interest, so it dont has to be + * an URL to be undeployed, the file name is ok as well. + * @param _url the url to to check + * @return true if _url is deployed + * @throws MalformedURLException in case of a malformed url + * @throws J2eeDeploymentException if the app seems to be deployed, but some of its modules + * are not. + */ + public boolean isDeployed(String _url) throws MalformedURLException, J2eeDeploymentException { - boolean result = false; - - Deployment d = installer.findDeployment (_url); - - if (d != null) - { - result = checkApplication (d); - } - - return result; + boolean result = false; + + Deployment d = installer.findDeployment(_url); + + if (d != null) + { + result = checkApplication(d); + } + + return result; } // ServiceMBeanSupport overrides --------------------------------- @@ -344,15 +348,15 @@ { URL tmpDirUrl = getClass().getResource("/tmp.properties"); if( tmpDirUrl == null ) - throw new IOException ("Failed to get /tmp.properties URL; Temporary directory does not exist!"); + throw new IOException("Failed to get /tmp.properties URL; Temporary directory does not exist!"); //check if the deployment dir was set meaningful - File dir = new File(new File(tmpDirUrl.getFile()).getParentFile(), "deploy/"+getDeployerName()); - if (!dir.exists () && - !dir.mkdirs ()) - throw new IOException ("Temporary directory \""+dir.getCanonicalPath ()+"\" does not exist!"); + File dir = new File(new File(tmpDirUrl.getFile()).getParentFile(), "deploy/"+getDeployerName()); + if (!dir.exists() && + !dir.mkdirs()) + throw new IOException("Temporary directory \""+dir.getCanonicalPath()+"\" does not exist!"); - installer = new InstallerFactory(dir, category); - + installer = new InstallerFactory(dir, log); + // Save JMX name of the deployers jarDeployer = new ObjectName(jarDeployerName); warDeployer= new ObjectName(warDeployerName); @@ -362,205 +366,219 @@ protected void startService() throws Exception { - if (!warDeployerAvailable ()) - log.log ("No web container found - only EJB deployment available..."); - + if (!warDeployerAvailable()) + log.info("No web container found - only EJB deployment available..."); + // clean up the deployment directory since on some Windowz the file removement // during runtime doesnt work... - log.log("Cleaning up deployment directory"); - installer.unclutter(); + log.info("Cleaning up deployment directory"); + installer.unclutter(); } /** undeploys all deployments */ protected void stopService() { - log.log ("Undeploying all applications."); + log.info("Undeploying all applications."); - Deployment[] deps = installer.getDeployments(); + Deployment[] deps = installer.getDeployments(); int count = 0; for (int i = 0, l = deps.length; i<l; ++i) { - try - { - stopApplication (deps[i]); - } - catch (J2eeDeploymentException _e) - { - //throw _e; - log.exception(_e); - } - finally - { - try { - uninstallApplication (deps[i]); - } catch (IOException _ioe) - {log.exception(_ioe);} - } - ++count; - } - log.log ("Undeployed "+count+" applications."); + try + { + stopApplication(deps[i]); + } + catch (J2eeDeploymentException _e) + { + log.error("stopApplication", _e); + } + finally + { + try + { + uninstallApplication(deps[i]); + } catch (IOException _ioe) + { + log.error("uninstallApplication", _ioe); + } + } + ++count; + } + log.info("Undeployed "+count+" applications."); } // Private ------------------------------------------------------- - /** determines deployment type and installs (downloads) all packages needed - * by the given deployment of the given deployment. <br> - * This means download the needed packages do some validation... - * <i> Validation and do some other things is not yet implemented </i> - * <comment author="cgjung"> better be protected for subclassing </comment> - * @param _downloadUrl the url that points to the app to install - * @throws IOException if the download fails - * @throws J2eeDeploymentException if the given package is somehow inconsistent - */ - protected Deployment installApplication (URL _downloadUrl) throws IOException, J2eeDeploymentException + /** determines deployment type and installs (downloads) all packages needed + * by the given deployment of the given deployment. <br> + * This means download the needed packages do some validation... + * <i> Validation and do some other things is not yet implemented </i> + * <comment author="cgjung"> better be protected for subclassing </comment> + * @param _downloadUrl the url that points to the app to install + * @throws IOException if the download fails + * @throws J2eeDeploymentException if the given package is somehow inconsistent + */ + protected Deployment installApplication(URL _downloadUrl) throws IOException, J2eeDeploymentException { - return installer.install(_downloadUrl); + return installer.install(_downloadUrl); } /** Deletes the file tree of the specified application. <br> * <comment author="cgjung">better be protected for subclassing</comment> * @param _name the directory (DEPLOYMENT_DIR/<_name> to remove recursivly - * @throws IOException if something goes wrong - */ - protected void uninstallApplication (String _pattern) throws IOException + * @throws IOException if something goes wrong + */ + protected void uninstallApplication(String _pattern) throws IOException { - Deployment d = installer.findDeployment (_pattern); - - if (d != null) - uninstallApplication (d); + Deployment d = installer.findDeployment(_pattern); + + if (d != null) + uninstallApplication(d); } - protected void uninstallApplication (Deployment _d) throws IOException - { - log.log ("Destroying application " + _d.name); - installer.uninstall(_d); - } - - - + protected void uninstallApplication(Deployment _d) throws IOException + { + log.info("Destroying application " + _d.name); + installer.uninstall(_d); + } + + + /** Starts the successful downloaded deployment. <br> - * Means the modules are deployed by the responsible container deployer - * <comment author="cgjung">better be protected for subclassing </comment> - * @param _d the deployment to start - * @throws J2eeDeploymentException if an error occures for one of these - * modules - */ - protected void startApplication (Deployment _d) throws J2eeDeploymentException + * Means the modules are deployed by the responsible container deployer + * <comment author="cgjung">better be protected for subclassing </comment> + * @param _d the deployment to start + * @throws J2eeDeploymentException if an error occures for one of these + * modules + */ + protected void startApplication(Deployment _d) throws J2eeDeploymentException { - // save the old classloader - ClassLoader oldCl = Thread.currentThread().getContextClassLoader (); + // save the old classloader + ClassLoader oldCl = Thread.currentThread().getContextClassLoader(); // set the context classloader for this application createContextClassLoader(_d); - + // save the application classloader for later ClassLoader appCl = Thread.currentThread().getContextClassLoader(); - + DeploymentNotification evt = new DeploymentNotification( this, nextSequenceNumber(), - _d, DeploymentNotification.PREDEPLOY ); + _d, DeploymentNotification.PREDEPLOY ); sendNotification(evt); - - // <comment author="cgjung">module deployment factored out for subclass + + // <comment author="cgjung">module deployment factored out for subclass // access </comment> // redirect all modules to the responsible deployers - startModules(_d,appCl,oldCl); + startModules(_d,appCl,oldCl); evt = new DeploymentNotification( this, nextSequenceNumber(), - _d, DeploymentNotification.POSTDEPLOY ); + _d, DeploymentNotification.POSTDEPLOY ); sendNotification(evt); } - + /** factored out method to start individual modules and reinstall * context classloader afterwards */ protected void startModules(Deployment _d, ClassLoader appCl, ClassLoader oldCl) throws J2eeDeploymentException { - Deployment.Module m = null; - String moduleName = null; - String message; - try { - // Deploy the ejb modules - moduleName = _d.name; - Vector tmp = new java.util.Vector(); - Iterator it = _d.ejbModules.iterator(); - while( it.hasNext() ) { - m = (Deployment.Module) it.next(); - tmp.add( m.localUrls.firstElement().toString() ); - } - String[] jarUrls = new String[ tmp.size() ]; - tmp.toArray( jarUrls ); - // Call the ContainerFactory that is loaded in the JMX server - server.invoke(jarDeployer, "deploy", - new Object[]{ _d.localUrl.toString(), jarUrls, moduleName }, - new String[]{ String.class.getName(), String[].class.getName(), String.class.getName() } ); - - // Deploy the web application modules - it = _d.webModules.iterator(); - if (it.hasNext() && !warDeployerAvailable()) - throw new J2eeDeploymentException("application contains war files but no web container available"); - - while( it.hasNext() ) { - m = (Deployment.Module)it.next(); - moduleName = m.name; - log.log("Starting module " + moduleName); - - // Call the TomcatDeployer that is loaded in the JMX server - server.invoke(warDeployer, "deploy", - new Object[] { m.webContext, m.localUrls.firstElement().toString()}, new String[] { "java.lang.String", "java.lang.String" }); - - // since tomcat changes the context classloader... - Thread.currentThread().setContextClassLoader(appCl); - } - } - catch (MBeanException e) { - log.error("Starting "+moduleName+" failed!"); - e.getTargetException().printStackTrace(); - throw new J2eeDeploymentException("Error while starting "+moduleName+": " + e.getTargetException().getMessage(), e.getTargetException()); - } - catch (RuntimeErrorException e) { - log.error("Starting "+moduleName+" failed!"); - e.getTargetError().printStackTrace(); - throw new J2eeDeploymentException("Error while starting "+moduleName+": " + e.getTargetError().getMessage(), e.getTargetError()); - } - catch (RuntimeMBeanException e) { - log.error("Starting "+moduleName+" failed!"); - e.getTargetException().printStackTrace(); - throw new J2eeDeploymentException("Error while starting "+moduleName+": " + e.getTargetException().getMessage(), e.getTargetException()); - } - catch (JMException e) { - log.error("Starting failed!"); - e.printStackTrace(); - throw new J2eeDeploymentException("Fatal error while interacting with deployer MBeans... " + e.getMessage()); - } - finally { - Thread.currentThread().setContextClassLoader(oldCl); - } - + Deployment.Module m = null; + String moduleName = null; + String message; + try + { + // Deploy the ejb modules + moduleName = _d.name; + Vector tmp = new java.util.Vector(); + Iterator it = _d.ejbModules.iterator(); + while( it.hasNext() ) + { + m = (Deployment.Module) it.next(); + tmp.add( m.localUrls.firstElement().toString() ); + } + String[] jarUrls = new String[ tmp.size() ]; + tmp.toArray( jarUrls ); + // Call the ContainerFactory that is loaded in the JMX server + server.invoke(jarDeployer, "deploy", + new Object[] + { _d.localUrl.toString(), jarUrls, moduleName }, + new String[] + { String.class.getName(), String[].class.getName(), String.class.getName() } ); + + // Deploy the web application modules + it = _d.webModules.iterator(); + if (it.hasNext() && !warDeployerAvailable()) + throw new J2eeDeploymentException("application contains war files but no web container available"); + + while( it.hasNext() ) + { + m = (Deployment.Module)it.next(); + moduleName = m.name; + log.info("Starting module " + moduleName); + + // Call the TomcatDeployer that is loaded in the JMX server + server.invoke(warDeployer, "deploy", + new Object[] + { m.webContext, m.localUrls.firstElement().toString()}, new String[] + { "java.lang.String", "java.lang.String" }); + + // since tomcat changes the context classloader... + Thread.currentThread().setContextClassLoader(appCl); + } + } + catch (MBeanException e) + { + log.error("Starting "+moduleName+" failed!"); + e.getTargetException().printStackTrace(); + throw new J2eeDeploymentException("Error while starting "+moduleName+": " + e.getTargetException().getMessage(), e.getTargetException()); + } + catch (RuntimeErrorException e) + { + log.error("Starting "+moduleName+" failed!"); + e.getTargetError().printStackTrace(); + throw new J2eeDeploymentException("Error while starting "+moduleName+": " + e.getTargetError().getMessage(), e.getTargetError()); + } + catch (RuntimeMBeanException e) + { + log.error("Starting "+moduleName+" failed!"); + e.getTargetException().printStackTrace(); + throw new J2eeDeploymentException("Error while starting "+moduleName+": " + e.getTargetException().getMessage(), e.getTargetException()); + } + catch (JMException e) + { + log.error("Starting failed!"); + e.printStackTrace(); + throw new J2eeDeploymentException("Fatal error while interacting with deployer MBeans... " + e.getMessage()); + } + finally + { + Thread.currentThread().setContextClassLoader(oldCl); + } + } /** Stops a running deployment. <br> - * Means the modules are undeployed by the responsible container deployer - * <comment author="cgjung">better protected for subclassing</comment> - * @param _d the deployment to stop - * @throws J2eeDeploymentException if an error occures for one of these - * modules - */ - protected void stopApplication (Deployment _d) throws J2eeDeploymentException + * Means the modules are undeployed by the responsible container deployer + * <comment author="cgjung">better protected for subclassing</comment> + * @param _d the deployment to stop + * @throws J2eeDeploymentException if an error occures for one of these + * modules + */ + protected void stopApplication(Deployment _d) throws J2eeDeploymentException { // save the old classloader, tomcat replaces my classloader somehow?! - ClassLoader oldCl = Thread.currentThread().getContextClassLoader (); - StringBuffer error = new StringBuffer (); + ClassLoader oldCl = Thread.currentThread().getContextClassLoader(); + StringBuffer error = new StringBuffer(); DeploymentNotification evt = new DeploymentNotification( this, nextSequenceNumber(), - _d, DeploymentNotification.PREUNDEPLOY ); + _d, DeploymentNotification.PREUNDEPLOY ); sendNotification(evt); - + // stop the web modules if( warDeployer != null ) { for( Iterator webModules = _d.webModules.iterator(); webModules.hasNext(); ) { - Deployment.Module m = (Deployment.Module)webModules.next (); + Deployment.Module m = (Deployment.Module)webModules.next(); stopModule( warDeployer, m.name, m.localUrls.firstElement().toString(), error ); } } @@ -568,155 +586,162 @@ { // in case we are not running with tomcat // should only happen for tomcat (i=1) - log.warning("Cannot find web container"); + log.warn("Cannot find web container"); } - + // stop the jar modules (the ContainerFactory is responsible for undeploying // all jars associated w/ a given application) stopModule( jarDeployer, _d.name, _d.localUrl.toString(), error ); - - if (!error.toString ().equals ("")) // there was at least one error... - throw new J2eeDeploymentException ("Error(s) on stopping application "+_d.name+":\n"+error.toString ()); - + + if (!error.toString().equals("")) // there was at least one error... + throw new J2eeDeploymentException("Error(s) on stopping application "+_d.name+":\n"+error.toString()); + // restore the classloader - Thread.currentThread().setContextClassLoader (oldCl); + Thread.currentThread().setContextClassLoader(oldCl); evt = new DeploymentNotification( this, nextSequenceNumber(), - _d, DeploymentNotification.POSTUNDEPLOY ); + _d, DeploymentNotification.POSTUNDEPLOY ); sendNotification(evt); } - + private void stopModule( ObjectName container, String moduleName, String moduleUrl, StringBuffer error ) { try { // Call the ContainerFactory/EmbededTomcat that is loaded in the JMX server Object result = server.invoke(container, "isDeployed", - new Object[] { moduleUrl }, new String[] { "java.lang.String" }); - if (((Boolean)result).booleanValue ()) + new Object[] + { moduleUrl }, new String[] + { "java.lang.String" }); + if (((Boolean)result).booleanValue()) { - log.log ("Stopping module " + moduleName); + log.info("Stopping module " + moduleName); server.invoke(container, "undeploy", - new Object[] { moduleUrl }, new String[] { "java.lang.String" }); + new Object[] + { moduleUrl }, new String[] + { "java.lang.String" }); } else - log.log ("Module " + moduleName + " is not running"); + log.info("Module " + moduleName + " is not running"); } catch (MBeanException _mbe) { - log.error ("Unable to stop module " + moduleName + ": " + _mbe.getTargetException ().getMessage ()); - error.append("Unable to stop module " + moduleName + ": " + _mbe.getTargetException ().getMessage ()); - error.append ("/n"); + log.error("Unable to stop module " + moduleName + ": " + _mbe.getTargetException().getMessage()); + error.append("Unable to stop module " + moduleName + ": " + _mbe.getTargetException().getMessage()); + error.append("/n"); } catch (JMException _jme) { - log.error ("Unable to stop module " + moduleName + ": " + _jme.getMessage ()); - error.append("Unable to stop module " + moduleName + ": fatal error while calling " + container + ": " + _jme.getMessage ()); - error.append ("/n"); + log.error("Unable to stop module " + moduleName + ": " + _jme.getMessage()); + error.append("Unable to stop module " + moduleName + ": fatal error while calling " + container + ": " + _jme.getMessage()); + error.append("/n"); } } - + /** Checks the Deplyment if it is correctly deployed. - * @param app to check - * @throws J2eeDeploymentException if some inconsistency in the deployment is - * detected - */ - private boolean checkApplication (Deployment _d) throws J2eeDeploymentException + * @param app to check + * @throws J2eeDeploymentException if some inconsistency in the deployment is + * detected + */ + private boolean checkApplication(Deployment _d) throws J2eeDeploymentException { boolean result = false; int count = 0; int others = 0; - - + + // Call the ContainerFactory/EmbededTomcat that is loaded in the JMX server Object o = checkModule( jarDeployer, _d.name, _d.localUrl.toString() ); - + if( o == null ) - ++others; + ++others; else - result = ((Boolean) o).booleanValue(); - + result = ((Boolean) o).booleanValue(); + if (warDeployer != null ) { for( Iterator webModules = _d.webModules.iterator(); webModules.hasNext(); ) { - Deployment.Module m = (Deployment.Module)webModules.next (); + Deployment.Module m = (Deployment.Module)webModules.next(); o = checkModule( warDeployer, m.name, m.localUrls.firstElement().toString() ); - + if (o == null) // had an exception ++others; else if (count++ == 0) // first module -> set state - result = ((Boolean)o).booleanValue (); - else if (result != ((Boolean)o).booleanValue ()) // only if differs from state + result = ((Boolean)o).booleanValue(); + else if (result != ((Boolean)o).booleanValue()) // only if differs from state ++others; } } else { // in case we are not running with tomcat - log.warning("Cannot find web container"); + log.warn("Cannot find web container"); } - + if (others > 0) // there was at least one error... - throw new J2eeDeploymentException ("Application "+_d.name+" is not correctly deployed! ("+ + throw new J2eeDeploymentException("Application "+_d.name+" is not correctly deployed! ("+ (result ? count-others : others)+ " modules are running "+ (result ? others : count-others)+ " are not)"); - return result; + return result; } - + private Object checkModule( ObjectName container, String moduleName, String moduleUrl ) - { - try - { - log.log ("Checking module " + moduleName); - // Call the ContainerFactory/EmbededTomcat that is loaded in the JMX server - return server.invoke(container, "isDeployed", - new Object[] { moduleUrl }, new String[] { "java.lang.String" }); - } - catch (MBeanException _mbe) - { - log.error ("Error while checking module " + moduleName + ": " + _mbe.getTargetException ().getMessage ()); - return null; - } - catch (JMException _jme) - { - log.error ("Fatal error while checking module " + moduleName + ": " + _jme.getMessage ()); - return null; - } - } - - - - /** tests if the web container deployer is available + { + try + { + log.info("Checking module " + moduleName); + // Call the ContainerFactory/EmbededTomcat that is loaded in the JMX server + return server.invoke(container, "isDeployed", + new Object[] + { moduleUrl }, new String[] + { "java.lang.String" }); + } + catch (MBeanException _mbe) + { + log.error("Error while checking module " + moduleName + ": " + _mbe.getTargetException().getMessage()); + return null; + } + catch (JMException _jme) + { + log.error("Fatal error while checking module " + moduleName + ": " + _jme.getMessage()); + return null; + } + } + + + + /** tests if the web container deployer is available * <comment author="cgjung"> better be protected for subclassing </comment> */ - protected boolean warDeployerAvailable () + protected boolean warDeployerAvailable() { - return server.isRegistered (warDeployer); + return server.isRegistered(warDeployer); } - - + + /** - * creates an application class loader for this deployment - * this class loader will be shared between jboss and tomcat via the contextclassloader. May throw - * a J2eeDeploymentException to indicate problems stting up the classloader. - * <comment author="cgjung"> should be protected in order to allow reasonable subclassing. Needs an - * exception in case that you do more sophisticated meta-data installations. - * </comment> - */ - protected void createContextClassLoader(Deployment deployment) throws J2eeDeploymentException { - + * creates an application class loader for this deployment + * this class loader will be shared between jboss and tomcat via the contextclassloader. May throw + * a J2eeDeploymentException to indicate problems stting up the classloader. + * <comment author="cgjung"> should be protected in order to allow reasonable subclassing. Needs an + * exception in case that you do more sophisticated meta-data installations. + * </comment> + */ + protected void createContextClassLoader(Deployment deployment) throws J2eeDeploymentException + { + // get urls we want all classloaders of this application to share - URL[] urls = new URL[deployment.commonUrls.size ()]; - for (int i = 0, l = deployment.commonUrls.size (); i < l; ++i) - urls[i] = (URL)deployment.commonUrls.elementAt (i); - + URL[] urls = new URL[deployment.commonUrls.size()]; + for (int i = 0, l = deployment.commonUrls.size(); i < l; ++i) + urls[i] = (URL)deployment.commonUrls.elementAt(i); + // create classloader ClassLoader parent = Thread.currentThread().getContextClassLoader(); URLClassLoader appCl = new URLClassLoader(urls, parent); - + // set it as the context class loader for the deployment thread Thread.currentThread().setContextClassLoader(appCl); }
_______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-development