User: dmaplesden
  Date: 01/11/26 11:47:19

  Modified:    src/main/org/jboss/deployment ServiceDeployer.java
  Log:
  Slight change to allow directories to be added to the classpath as well as jars and 
zips
  
  Revision  Changes    Path
  1.16      +144 -118  jboss/src/main/org/jboss/deployment/ServiceDeployer.java
  
  Index: ServiceDeployer.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/deployment/ServiceDeployer.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- ServiceDeployer.java      2001/11/24 19:46:42     1.15
  +++ ServiceDeployer.java      2001/11/26 19:47:19     1.16
  @@ -49,17 +49,17 @@
    * @author <a href="mailto:[EMAIL PROTECTED]";>Marc Fleury</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>David Maplesden</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>David Jencks</a>
  - * @version   $Revision: 1.15 $ <p>
  + * @version   $Revision: 1.16 $ <p>
    *
    *      <b>20010830 marc fleury:</b>
    *      <ul>initial import
    *        <li>
    *      </ul>
  - *      
  + *
    *      <p><b>20010905 david maplesden:</b>
    *      <ul>
  - *      <li>Changed deployment procedure to deploy all listed mbeans, then 
  - *      initialise them all before finally starting them all.  Changed services 
  + *      <li>Changed deployment procedure to deploy all listed mbeans, then
  + *      initialise them all before finally starting them all.  Changed services
    *      sets to lists to maintain ordering.
    *      </ul>
    *
  @@ -70,7 +70,7 @@
    *        deploy. Made undeploy work, and implemented sar dependency management
    *        and recursive deploy/undeploy.
    *      </ol>
  - *      
  + *
    *      <p><b>20010907 david maplesden:</b>
    *      <ul>
    *      <li>Added support for "depends" tag
  @@ -136,15 +136,15 @@
   
      /**
       * Deploys a package identified by a url string. This stops if a previous
  -    * version exists. The package can be a *service.xml file, a sar service 
  +    * version exists. The package can be a *service.xml file, a sar service
       * archive, or a plain jar or zip file with no deployment descriptor.
  -    * In any case, all classes found in the package or sar subpackages are 
  -    * added to the extensible classloader.  If there are classpath elements 
  -    * in the configuration file, the named packages are loaded 
  -    * (in separate classloaders) unless they have been explicitly undeployed, 
  +    * In any case, all classes found in the package or sar subpackages are
  +    * added to the extensible classloader.  If there are classpath elements
  +    * in the configuration file, the named packages are loaded
  +    * (in separate classloaders) unless they have been explicitly undeployed,
       * in which case deployment of this package is suspended until they have been
  -    * redeployed.  Then the mbeans named in the configuration file are created 
  -    * using the ServiceController.  Dependencies between mbeans are handled by 
  +    * redeployed.  Then the mbeans named in the configuration file are created
  +    * using the ServiceController.  Dependencies between mbeans are handled by
       * the ServiceController.
       *
       * @param urlString                  The location of the package to deploy
  @@ -164,23 +164,23 @@
            return sdi;
         }
   
  -      if (sdi.state == EMPTY || sdi.state == GHOST) 
  +      if (sdi.state == EMPTY || sdi.state == GHOST)
         {
  -         deployLocalClasses(url, null, true);              
  +         deployLocalClasses(url, null, true);
            //Let others waiting on our classes finish deploying.
            resolveSuspensions(url, sdi);
         } // end of if ()
  -      
   
  +
         if(sdi.dd != null){
            boolean suspended = deployNeededPackages(url, sdi);
   
            //Copy local directory if local-directory element is present
  -         try 
  +         try
            {
               NodeList lds = sdi.dd.getElementsByTagName("local-directory");
               log.debug("about to copy " + lds.getLength() + " local directories");
  -            for (int i = 0; i< lds.getLength(); i++) 
  +            for (int i = 0; i< lds.getLength(); i++)
               {
                   Element ld = (Element)lds.item(i);
                   String path = ld.getAttribute("path");
  @@ -194,14 +194,14 @@
   
                   inflateJar(localUrl, localBaseDir, path);
               } // end of for ()
  -            
  +
   
  -         } catch (Exception e) 
  +         } catch (Exception e)
            {
                log.error("Problem copying local directory", e);
            } // end of try-catch
            //if we are suspended, we must wait till all classes are available.
  -         if (!suspended) 
  +         if (!suspended)
            {
               addMBeans(url, sdi);
            } // end of if ()
  @@ -210,104 +210,114 @@
         return sdi;
      }
   
  -   private void resolveSuspensions(URL url, SarDeploymentInfo sdi) 
  +   private void resolveSuspensions(URL url, SarDeploymentInfo sdi)
          throws DeploymentException
      {
         Iterator suspensions = (sdi.weSupplyClassesTo).iterator();
  -      while (suspensions.hasNext()) 
  +      while (suspensions.hasNext())
         {
            //check if all suspension dependencies resolved and if so call
            //addMBeans on it.
            URL suspendedUrl = (URL) suspensions.next();
            SarDeploymentInfo suspendedSdi = getSdi(suspendedUrl, false);
  -         if (suspendedSdi.state != SUSPENDED) 
  +         if (suspendedSdi.state != SUSPENDED)
            {
               throw new DeploymentException("Depending module " + suspendedUrl + " is 
not marked as suspended when deploying url: " + url);
            } // end of if ()
  -         
  +
            boolean canDeploySuspended = true;
            Iterator others = suspendedSdi.weNeedClassesFrom.iterator();
  -         while (others.hasNext()) 
  +         while (others.hasNext())
            {
               URL otherUrl = (URL)others.next();
               SarDeploymentInfo otherSdi = getSdi(otherUrl, false);
               if (otherUrl != url && otherSdi.state != LOCALCLASSESLOADED
                   && otherSdi.state != CLASSESLOADED
  -                && otherSdi.state != MBEANSLOADED) 
  +                && otherSdi.state != MBEANSLOADED)
               {
                  canDeploySuspended = false;
                  break;
               } // end of if ()
   
            } // end of while ()
  -         if (canDeploySuspended) 
  +         if (canDeploySuspended)
            {
  -            addMBeans(suspendedUrl, suspendedSdi);        
  +            addMBeans(suspendedUrl, suspendedSdi);
            } // end of if ()
         } // end of while ()
      }
  -     
  +
   
  -   private SarDeploymentInfo deployLocalClasses(URL url, URL needsme, boolean 
reloadSuspended) 
  +   private SarDeploymentInfo deployLocalClasses(URL url, URL needsme, boolean 
reloadSuspended)
           throws DeploymentException
      {
         SarDeploymentInfo sdi = getSdi(url, false);
  -      
  -      if (reloadSuspended || sdi.state == EMPTY || sdi.state == GHOST) 
  +
  +      if (reloadSuspended || sdi.state == EMPTY || sdi.state == GHOST)
         {
  -         try 
  +         try
            {
               log.debug("deploying document " + url);
  -            File localCopy = getLocalCopy(url, sdi);
  -            URL localUrl = localCopy.toURL();
  -            String localName = localCopy.getName();//just the filename, no path
  -            extractPackages(localUrl, sdi);
  -            log.debug("jars from deployment: " + sdi.getClassUrls());
  -            log.debug("xml's from deployment: " + sdi.getXmlUrls());
  -
  -            //OK, what are we trying to deploy?
  -            //A plain xml file with mbean classpath elements and mbean config.
  -            if (localName.endsWith("service.xml"))
  +
  +            if(url.toString().endsWith("/"))  //adding directory to classpath
               {
  -               sdi.dd = getDocument(localUrl);
  -               sdi.state = LOCALCLASSESLOADED;
  +               sdi.addClassUrl(url);
  +               sdi.createClassLoader();
  +               sdi.state = CLASSESLOADED;
               }
  -            //a service archive with classes, jars, and META-INF/jboss-service.xml 
  -            //configuration file
  -            else if (localName.endsWith(".sar"))
  +            else
               {
  -               sdi.createClassLoader();
  -            docfound:
  +
  +               File localCopy = getLocalCopy(url, sdi);
  +               URL localUrl = localCopy.toURL();
  +               String localName = localCopy.getName();//just the filename, no path
  +               extractPackages(localUrl, sdi);
  +               log.debug("jars from deployment: " + sdi.getClassUrls());
  +               log.debug("xml's from deployment: " + sdi.getXmlUrls());
  +
  +               //OK, what are we trying to deploy?
  +               //A plain xml file with mbean classpath elements and mbean config.
  +               if (localName.endsWith("service.xml"))
                  {
  -                  for (Iterator i = sdi.getXmlUrls().iterator(); i.hasNext();) 
  +                  sdi.dd = getDocument(localUrl);
  +                  sdi.state = LOCALCLASSESLOADED;
  +               }
  +               //a service archive with classes, jars, and 
META-INF/jboss-service.xml
  +               //configuration file
  +               else if (localName.endsWith(".sar"))
  +               {
  +                  sdi.createClassLoader();
  +               docfound:
                     {
  -                     URL docUrl = (URL)i.next(); 
  -                     if (docUrl.getFile().endsWith("META-INF/jboss-service.xml")) 
  +                     for (Iterator i = sdi.getXmlUrls().iterator(); i.hasNext();)
                        {
  -                        sdi.dd = getDocument(docUrl);
  -                        break docfound;
  -                     } // end of if ()
  -                  
  -                  } // end of for ()
  -                  throw new DeploymentException("No META-INF/jboss-service.xml 
found in alleged sar!");
  +                        URL docUrl = (URL)i.next();
  +                        if (docUrl.getFile().endsWith("META-INF/jboss-service.xml"))
  +                        {
  +                           sdi.dd = getDocument(docUrl);
  +                           break docfound;
  +                        } // end of if ()
  +
  +                     } // end of for ()
  +                     throw new DeploymentException("No META-INF/jboss-service.xml 
found in alleged sar!");
  +                  }
  +                  sdi.state = LOCALCLASSESLOADED;
  +                  log.debug("got document jboss-service.xml from cl");
                  }
  -               sdi.state = LOCALCLASSESLOADED;
  -               log.debug("got document jboss-service.xml from cl");
  -            }
   
  -            //Or maybe its just a jar to be put in the extensible classloader.
  -            else if(localName.endsWith(".jar")
  -                   || localName.endsWith(".zip"))
  -            {
  -               sdi.createClassLoader();
  -               sdi.state = CLASSESLOADED;
  -            }
  -            //Not for us.
  -            else
  -            {
  -               throw new Exception("not a deployable file type");
  +               //Or maybe its just a jar to be put in the extensible classloader.
  +               else if(localName.endsWith(".jar")
  +                      || localName.endsWith(".zip"))
  +               {
  +                  sdi.createClassLoader();
  +                  sdi.state = CLASSESLOADED;
  +               }
  +               //Not for us.
  +               else
  +               {
  +                  throw new Exception("not a deployable file type");
  +               }
               }
  -          
            }
            catch (Exception ignored)
            {
  @@ -320,9 +330,9 @@
         //in any case, we may need to add class dependency info
         if ((needsme != null) && !sdi.weSupplyClassesTo.contains(needsme))
         {
  -         sdi.weSupplyClassesTo.add(needsme);   
  +         sdi.weSupplyClassesTo.add(needsme);
         } // end of if ()
  -      
  +
         return sdi;
   
      }
  @@ -369,7 +379,7 @@
                  log.debug("archives are " + archives);
               }
   
  -            if (codebase.startsWith("file:") && archives.equals(""))
  +            if (codebase.startsWith("file:") && archives.equals("*"))
               {
                  try
                  {
  @@ -408,39 +418,55 @@
                  }
               }
   
  -            // Still no codebase? get the system default
  -            else if (codebase.equals(""))
  +            else if(codebase.length() > 0 && archives.equals(""))
               {
  -               codebase = System.getProperty("jboss.system.libraryDirectory");
  +                  try
  +                  {
  +                     URL u = new URL(codebase);
  +                     if (!weNeedClassesFrom.contains(u))
  +                     {
  +                        weNeedClassesFrom.add(u);
  +                     }
  +                  }
  +                  catch (MalformedURLException mfue)
  +                  {
  +                     log.error("couldn't resolve package reference: ", mfue);
  +                  }
               }
   
               // We have an archive whatever the codebase go ahead and load the 
libraries
  -            if (!archives.equals(""))
  +            else if (!archives.equals(""))
               {
   
  +               // Still no codebase? get the system default
  +               if (codebase.equals(""))
  +               {
  +                   codebase = System.getProperty("jboss.system.libraryDirectory");
  +               }
  +
                  StringTokenizer st = new StringTokenizer(archives, ",");
                  //iterate through the packages in archives
                  while (st.hasMoreTokens())
                  {
                     String jar = st.nextToken().trim();
                     String urlString = codebase + jar;
  -                  try 
  +                  try
                     {
                        URL u = new URL(urlString);
  -                     if (!weNeedClassesFrom.contains(u)) 
  +                     if (!weNeedClassesFrom.contains(u))
                        {
                           weNeedClassesFrom.add(u);
                        } // end of if ()
  -                  } catch (MalformedURLException mfue) 
  +                  } catch (MalformedURLException mfue)
                     {
                        log.error("couldn't resolve package reference: ", mfue);
                     } // end of try-catch
                 }
               }
   
  -            else if (codebase.startsWith("http:"))
  +            else //codebase is empty and archives is empty
               {
  -               throw new DeploymentException("Loading from a http:// codebase with 
no jars specified. Please fix jboss-service.xml in your configuration");
  +               throw new DeploymentException("Loading from an empty codebase with 
no jars specified. Please fix jboss-service.xml in your configuration");
               }
            }
            //Ok, now we've found the list of urls we need... deploy their classes.
  @@ -449,28 +475,28 @@
            URL neededUrl = null;
            while (jars.hasNext())
            {
  -             try 
  +             try
                {
                   neededUrl = (URL)jars.next();
                   SarDeploymentInfo jarSdi = getSdi(neededUrl, true);
                   //find out if any of these were undeployed... if so we can't deploy 
them nor our mbeans
                   if (jarSdi.state == GHOST) {
  -                   suspended = true;                    
  -                   log.debug("did not deploy classes for " + neededUrl + ", it's a 
ghost, we are suspended"); 
  +                   suspended = true;
  +                   log.debug("did not deploy classes for " + neededUrl + ", it's a 
ghost, we are suspended");
                   } // end of if ()
  -                else 
  +                else
                   {
  -                   deployLocalClasses(neededUrl, url, false);          
  -                   log.debug("deployed classes for " + neededUrl); 
  +                   deployLocalClasses(neededUrl, url, false);
  +                   log.debug("deployed classes for " + neededUrl);
   
                   } // end of else
  -                
  +
                } catch (DeploymentException e) {
                   log.error("problem deploying classes for " + neededUrl, e);
                    //put in list of failures TODO
                } // end of try-catch
  -             
  -             
  +
  +
            } // end of while ()
            return suspended;
   
  @@ -499,41 +525,41 @@
         log.debug("undeploying document " + url);
   
         SarDeploymentInfo sdi = getSdi(url, false);
  -      
  +
         //first of all, undeploy the depending (via depends tag) packages' mbeans and 
our mbeans.
         removeMBeans(url, sdi);
   
         //Now undeploy mbeans from packages we supply classes to.
         //Mark them suspended.. they are waiting for our classes to come back.
         Iterator suppliedToPackages = sdi.weSupplyClassesTo.iterator();
  -      while (suppliedToPackages.hasNext()) 
  +      while (suppliedToPackages.hasNext())
         {
            URL suppliedToPackage = (URL)suppliedToPackages.next();
            SarDeploymentInfo suppliedToSdi = getSdi(suppliedToPackage, false);
  -         if (suppliedToSdi.state == MBEANSLOADED) 
  +         if (suppliedToSdi.state == MBEANSLOADED)
            {
               removeMBeans(suppliedToPackage, suppliedToSdi);
               suppliedToSdi.state = SUSPENDED;
            } // end of if ()
  -         
  +
         } // end of while ()
   
  -      //Now tell packages we need classes from we are leaving: 
  +      //Now tell packages we need classes from we are leaving:
         //if they are ghosts (undeployed but remembering we need them)
         //and we are the last dependency, we can forget about them completely.
  -      //if they are not explicitly deployed (use parents isDeployed), 
  +      //if they are not explicitly deployed (use parents isDeployed),
         //and we are the last dependency, we can undeploy them also.
         Iterator weNeedClassesFrom = sdi.weNeedClassesFrom.iterator();
  -      while (weNeedClassesFrom.hasNext()) 
  +      while (weNeedClassesFrom.hasNext())
         {
            URL packageWeUse = (URL)weNeedClassesFrom.next();
            SarDeploymentInfo packageWeUseInfo = getSdi(packageWeUse, false);
            packageWeUseInfo.weSupplyClassesTo.remove(url);
            //if we're the last dependency for that package...
  -         if (packageWeUseInfo.weSupplyClassesTo.isEmpty()) 
  +         if (packageWeUseInfo.weSupplyClassesTo.isEmpty())
            {
               //and it was undeployed
  -            if (packageWeUseInfo.state == GHOST) 
  +            if (packageWeUseInfo.state == GHOST)
               {
                  //bye bye
                  urlToSarDeploymentInfoMap.remove(packageWeUse);
  @@ -545,30 +571,30 @@
                  undeploy(packageWeUse, null);
               } // end of if ()
            } // end of if ()
  -         
  -         
  +
  +
         } // end of while ()
  -      //Ok, we're done with upwards and downwards dependencies: 
  +      //Ok, we're done with upwards and downwards dependencies:
         //we can decide if we're a ghost, and remove our classloader, and maybe 
ourselves.
         ServiceLibraries.getLibraries().removeClassLoader(sdi.removeClassLoader());
         //delete the copied directories if possible.
         sdi.cleanup(getLog());
   
         //sdi.classloader = null;
  -      if (sdi.weSupplyClassesTo.isEmpty()) 
  +      if (sdi.weSupplyClassesTo.isEmpty())
         {
            //no one is using us, we can disappear without a trace
            urlToSarDeploymentInfoMap.remove(url);
         } // end of if ()
  -      else 
  +      else
         {
            //someone is still suspended on us, we turn into a ghost so they
            //can be deployed if we are redeployed.
  -         sdi.state = GHOST;         
  +         sdi.state = GHOST;
         } // end of else
         //Hey, man, we're all cleaned up!
      }
  -      
  +
   
      /**
       * MBeanRegistration interface. Get the mbean server.
  @@ -606,20 +632,20 @@
            getServer().invoke(getServiceControllerName(),
                               "registerAndStartService",
                               new Object[] {objectName, null},
  -                            new String[] {"javax.management.ObjectName", 
  +                            new String[] {"javax.management.ObjectName",
                                             "java.lang.String"});
         }
         catch (Exception e)
         {
            log.error("Problem postregistering ServiceDeployer", e);
         }
  -         
  +
      }
   
      protected Document getDocument(URL url)
         throws DeploymentException
      {
  -      try 
  +      try
         {
            DocumentBuilder parser = 
DocumentBuilderFactory.newInstance().newDocumentBuilder();
            InputStream stream = url.openStream();
  @@ -636,7 +662,7 @@
            log.warn("ParserConfigurationException getting document:", pce);
            throw new DeploymentException(pce.getMessage());
         }
  -      catch (Exception e) 
  +      catch (Exception e)
         {
            log.warn("Exception getting document:", e);
            throw new DeploymentException(e.getMessage());
  @@ -716,7 +742,7 @@
   
      /* Calls server.invoke, unwraps exceptions, and returns server output
       */
  -   private Object invoke(ObjectName name, String method, Object[] args, String[] 
sig) 
  +   private Object invoke(ObjectName name, String method, Object[] args, String[] 
sig)
      {
         try
         {
  @@ -758,9 +784,9 @@
            if (createIfMissing)
            {
               sdi = new SarDeploymentInfo(url);
  -            urlToSarDeploymentInfoMap.put(url, sdi);          
  +            urlToSarDeploymentInfoMap.put(url, sdi);
            } // end of if ()
  -         else 
  +         else
            {
               throw new DeploymentException(url + " is not deployed as expected");
            } // end of else
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to