jboynes     2004/02/12 15:22:19

  Modified:    
modules/deployment/src/java/org/apache/geronimo/deployment/service
                        ServiceConfigBuilder.java
  Log:
  Support depency nesting inside component definition files
  
  Revision  Changes    Path
  1.2       +36 -8     
incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java
  
  Index: ServiceConfigBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ServiceConfigBuilder.java 12 Feb 2004 18:27:39 -0000      1.1
  +++ ServiceConfigBuilder.java 12 Feb 2004 23:22:19 -0000      1.2
  @@ -60,9 +60,12 @@
   import java.io.File;
   import java.io.FileOutputStream;
   import java.io.IOException;
  +import java.io.InputStream;
   import java.net.URI;
   import java.net.URISyntaxException;
   import java.net.URL;
  +import java.net.MalformedURLException;
  +import java.net.URLClassLoader;
   import java.util.Collections;
   import java.util.HashSet;
   import java.util.Set;
  @@ -83,6 +86,7 @@
   import org.apache.geronimo.deployment.xbeans.GbeanType;
   import org.apache.geronimo.deployment.xbeans.ReferenceType;
   import org.apache.geronimo.deployment.xbeans.ReferencesType;
  +import org.apache.geronimo.deployment.xbeans.ServiceDocument;
   import org.apache.geronimo.gbean.GBeanInfo;
   import org.apache.geronimo.gbean.GBeanInfoFactory;
   import org.apache.geronimo.gbean.GConstructorInfo;
  @@ -144,7 +148,7 @@
                   throw new DeploymentException(e);
               }
               addIncludes(context, configType);
  -            addDependencies(context, configType);
  +            addDependencies(context, configType.getDependencyArray());
               ClassLoader cl = context.getClassLoader(repository);
               addGBeans(context, configType, cl);
               context.close();
  @@ -171,27 +175,51 @@
               String name = uri.toString();
               int idx = name.lastIndexOf('/');
               if (idx != -1) {
  -                name = name.substring(idx+1);
  +                name = name.substring(idx + 1);
               }
               URI path;
               try {
                   path = new URI(name);
               } catch (URISyntaxException e) {
  -                throw new DeploymentException("Unable to generate path for 
include: "+uri, e);
  +                throw new DeploymentException("Unable to generate path for 
include: " + uri, e);
               }
               try {
                   URL url = repository.getURL(uri);
                   context.addInclude(path, url);
               } catch (IOException e) {
  -                throw new DeploymentException("Unable to add include: "+uri, 
e);
  +                throw new DeploymentException("Unable to add include: " + 
uri, e);
               }
           }
       }
   
  -    private void addDependencies(DeploymentContext context, 
ConfigurationType configType) throws DeploymentException {
  -        DependencyType[] deps = configType.getDependencyArray();
  +    private void addDependencies(DeploymentContext context, DependencyType[] 
deps) throws DeploymentException {
           for (int i = 0; i < deps.length; i++) {
  -            context.addDependency(getDependencyURI(deps[i]));
  +            URI dependencyURI = getDependencyURI(deps[i]);
  +            context.addDependency(dependencyURI);
  +
  +            URL url;
  +            try {
  +                url = repository.getURL(dependencyURI);
  +            } catch (MalformedURLException e) {
  +                throw new DeploymentException("Unable to get URL for 
dependency " + dependencyURI, e);
  +            }
  +            ClassLoader depCL = new URLClassLoader(new URL[]{url}, 
ClassLoader.getSystemClassLoader());
  +            InputStream is = 
depCL.getResourceAsStream("META-INF/geronimo-service.xml");
  +            if (is != null) {
  +                // it has a geronimo-service.xml file
  +                ServiceDocument serviceDoc = null;
  +                try {
  +                    serviceDoc = ServiceDocument.Factory.parse(is);
  +                } catch (org.apache.xmlbeans.XmlException e) {
  +                    throw new DeploymentException("Invalid 
geronimo-service.xml file in " + url, e);
  +                } catch (IOException e) {
  +                    throw new DeploymentException("Unable to parse 
geronimo-service.xml file in " + url, e);
  +                }
  +                DependencyType[] dependencyDeps = 
serviceDoc.getService().getDependencyArray();
  +                if (dependencyDeps != null) {
  +                    addDependencies(context, dependencyDeps);
  +                }
  +            }
           }
       }
   
  
  
  

Reply via email to