User: salborini
  Date: 00/08/11 17:38:02

  Modified:    src/main/org/jboss/metadata BeanMetaData.java MetaData.java
                        MethodMetaData.java
  Added:       src/main/org/jboss/metadata ApplicationMetaData.java
                        ConfigurationMetaData.java EjbRefMetaData.java
                        EntityMetaData.java EnvEntryMetaData.java
                        ResourceRefMetaData.java
                        SecurityRoleRefMetaData.java SessionMetaData.java
                        XmlFileLoader.java XmlLoadable.java
  Removed:     src/main/org/jboss/metadata ContainerMetaData.java
                        FieldMetaData.java MetaDataFactory.java
                        MetaDataPlugin.java ServerMetaData.java
  Log:
  The new metadata package
  
  Revision  Changes    Path
  1.4       +211 -82   jboss/src/main/org/jboss/metadata/BeanMetaData.java
  
  Index: BeanMetaData.java
  ===================================================================
  RCS file: /products/cvs/ejboss/jboss/src/main/org/jboss/metadata/BeanMetaData.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BeanMetaData.java 2000/07/28 14:00:48     1.3
  +++ BeanMetaData.java 2000/08/12 00:37:57     1.4
  @@ -6,89 +6,218 @@
    */
   package org.jboss.metadata;
   
  +import java.util.Iterator;
  +import java.util.ArrayList;
   import java.util.Set;
   
  +import org.w3c.dom.Element;
  +import org.w3c.dom.NodeList;
  +
  +import org.jboss.ejb.DeploymentException;
  +
   /**
  - * The metadata for a specific EJB.  The bean may iself have properties, and
  - * it has several collections of other metadata instances that may have
  - * additional properties.
  + *   <description> 
  + *      
  + *   @see <related>
  + *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
  + *   @version $Revision: 1.4 $
    */
  -public interface BeanMetaData extends MetaData {
  -    /**
  -     * Gets the metadata for a method of this bean.  The method is identified
  -     * by its name and argument class names.
  -     * @throws java.lang.IllegalArgumentException
  -     *      Occurs when no method with the specified name and arguments can be
  -     *      found.
  -     */
  -    public MethodMetaData getMethod(String name, String[] args);
  -
  -    /**
  -     * Gets the metadata for a method of this bean.  The method is identified
  -     * by its name and argument classes.
  -     * @throws java.lang.IllegalArgumentException
  -     *      Occurs when no method with the specified name and arguments can be
  -     *      found.
  -     */
  -    public MethodMetaData getMethod(String name, Class[] args);
  -
  -    /**
  -     * Gets the metadata for a method of this bean's home interface.  The
  -     * method is identified by its name and argument class names.
  -     * @throws java.lang.IllegalArgumentException
  -     *      Occurs when no method with the specified name and arguments can be
  -     *      found.
  -     */
  -    public MethodMetaData getHomeMethod(String name, String[] args);
  -
  -    /**
  -     * Gets the metadata for a method of this bean's home interface.  The
  -     * method is identified by its name and argument classes.
  -     * @throws java.lang.IllegalArgumentException
  -     *      Occurs when no method with the specified name and arguments can be
  -     *      found.
  -     */
  -    public MethodMetaData getHomeMethod(String name, Class[] args);
  -
  -    /**
  -     * Gets the metadata for a field of this bean.  This is generally used for
  -     * persistence but may have properties for other things as well.
  -     * @throws java.lang.IllegalArgumentException
  -     *      Occurs when no field with the specified name can be found.
  -     */
  -    public FieldMetaData getField(String name);
  -
  -    /**
  -     * Gets the metadata for this bean's container.  One set of container
  -     * metadata may be shared across several beans, or they may all have
  -     * individual instances.
  -     */
  -    public ContainerMetaData getContainer();
  -
  -    /**
  -     * Gets the metadata for all the methods of this bean.  Each element in the
  -     * Set is of type MethodMetaData.
  -     * @see org.jboss.metadata.MethodMetaData
  -     */
  -    public Set getMethods();
  -
  -    /**
  -     * Gets the metadata for all the methods of this bean's home interface.
  -     * Each element in the Set is of type MethodMetaData.
  -     * @see org.jboss.metadata.MethodMetaData
  -     */
  -    public Set getHomeMethods();
  -
  -    /**
  -     * Gets the metadata for all the fields of this bean.  Each element in the
  -     * Set is of type FieldMetaData.
  -     * @see org.jboss.metadata.FieldMetaData
  -     */
  -    public Set getFields();
  -
  -    /**
  -     * Gets the EJB name of this bean.  This is the unique identifier for each
  -     * bean (it must be globally unique).
  -     */
  -    public String getName();
  -}
  \ No newline at end of file
  +public abstract class BeanMetaData extends MetaData {
  +    // Constants -----------------------------------------------------
  +     
  +     // Attributes ----------------------------------------------------
  +     private ApplicationMetaData application;
  +    
  +     // from ejb-jar.xml
  +     private String ejbName;
  +     private String homeClass;
  +     private String remoteClass;
  +    private String ejbClass;
  +    protected boolean session;
  +     
  +     private ArrayList ejbReferences = new ArrayList();
  +     private ArrayList environmentEntries = new ArrayList();
  +    private ArrayList securityRoleReferences = new ArrayList();
  +     private ArrayList resourceReferences = new ArrayList();
  +     
  +     private ArrayList permissionMethods = new ArrayList();
  +     private ArrayList transactionMethods = new ArrayList();
  +     
  +     // from jboss.xml
  +     private String jndiName;
  +     protected String configurationName;
  +     private ConfigurationMetaData configuration;
  +
  +     
  +     // Static --------------------------------------------------------
  +    
  +    // Constructors --------------------------------------------------
  +    public BeanMetaData(ApplicationMetaData app) {
  +             application = app;
  +     }
  +     
  +    // Public --------------------------------------------------------
  +    public boolean isSession() { return session; }
  +
  +     public boolean isEntity() { return !session; }
  +                                             
  +     public String getHome() { return homeClass; }
  +     
  +     public String getRemote() { return remoteClass; }
  +     
  +     public String getEjbClass() { return ejbClass; }
  +     
  +     public String getEjbName() { return ejbName; }
  +     
  +     public Iterator getEjbReferences() { return ejbReferences.iterator(); }
  +     
  +     public Iterator getEnvironmentEntries() { return 
environmentEntries.iterator(); }
  +     
  +     public Iterator getSecurityRoleReferences() { return 
securityRoleReferences.iterator(); }
  +     
  +     public Iterator getResourceReferences() { return 
resourceReferences.iterator(); }
  +     
  +     public String getJndiName() { 
  +             // jndiName may be set in jboss.xml
  +             if (jndiName == null) {
  +                     jndiName = ejbName;
  +             }
  +             return jndiName;
  +     }
  +     
  +     public String getConfigurationName() {
  +             if (configurationName == null) {
  +                     configurationName = getDefaultConfigurationName();
  +             }
  +             return configurationName;
  +     }
  +                     
  +     
  +     public ConfigurationMetaData getContainerConfiguration() {
  +             if (configuration == null) {
  +                     configuration = 
application.getConfigurationMetaDataByName(getConfigurationName());
  +             }
  +             return configuration;
  +     }
  +     
  +     public ApplicationMetaData getApplicationMetaData() { return application; }
  +     
  +     public abstract String getDefaultConfigurationName();
  +     
  +     public Iterator getTransactionMethods() { return 
transactionMethods.iterator(); }
  +     
  +     public Iterator getPermissionMethods() { return permissionMethods.iterator(); }
  +     
  +     
  +     public void addTransactionMethod(MethodMetaData method) { 
  +             transactionMethods.add(method);
  +     }
  +     
  +     public void addPermissionMethod(MethodMetaData method) { 
  +             permissionMethods.add(method);
  +     }
  +     
  +     public byte getMethodTransactionType(String methodName, Class[] params, 
boolean remote) {
  +             Iterator iterator = getTransactionMethods();
  +             while (iterator.hasNext()) {
  +                     MethodMetaData m = (MethodMetaData)iterator.next();
  +                     if (m.patternMatches(methodName, params, remote)) return 
m.getTransactionType();
  +             }
  +             // not found
  +             return TX_UNKNOWN;
  +     }
  +
  +     public Set getMethodPermissions(String methodName, Class[] params, boolean 
remote) {
  +             Iterator iterator = getPermissionMethods();
  +             while (iterator.hasNext()) {
  +                     MethodMetaData m = (MethodMetaData)iterator.next();
  +                     if (m.patternMatches(methodName, params, remote)) return 
m.getRoles();
  +             }
  +             // not found
  +             return null;
  +     }
  +
  +     public void importEjbJarXml(Element element) throws DeploymentException {
  +    
  +         // set the ejb-name
  +             ejbName = getElementContent(getUniqueChild(element, "ejb-name"));
  +
  +             // set the classes
  +             homeClass = getElementContent(getUniqueChild(element, "home"));
  +             remoteClass = getElementContent(getUniqueChild(element, "remote"));
  +             ejbClass = getElementContent(getUniqueChild(element, "ejb-class"));
  +             
  +             // set the environment entries
  +             Iterator iterator = getChildrenByTagName(element, "env-entry");
  +             
  +             while (iterator.hasNext()) {
  +                     Element envEntry = (Element)iterator.next();
  +                     
  +                     EnvEntryMetaData envEntryMetaData = new EnvEntryMetaData();
  +                     envEntryMetaData.importEjbJarXml(envEntry);
  +                     
  +                     environmentEntries.add(envEntryMetaData);
  +             }
  +             
  +             // set the ejb references
  +             iterator = getChildrenByTagName(element, "ejb-ref");
  +             
  +             while (iterator.hasNext()) {
  +                     Element ejbRef = (Element) iterator.next();
  +                 
  +                     EjbRefMetaData ejbRefMetaData = new EjbRefMetaData();
  +                     ejbRefMetaData.importEjbJarXml(ejbRef);
  +                     
  +                     ejbReferences.add(ejbRefMetaData);
  +             }
  +             
  +             // set the security roles references
  +             iterator = getChildrenByTagName(element, "security-role-ref");
  +             
  +             while (iterator.hasNext()) {
  +                     Element secRoleRef = (Element) iterator.next();
  +                     
  +                     SecurityRoleRefMetaData securityRoleRefMetaData = new 
SecurityRoleRefMetaData();
  +                     securityRoleRefMetaData.importEjbJarXml(secRoleRef);
  +                     
  +                     securityRoleReferences.add(securityRoleRefMetaData);
  +             }
  +                     
  +             // set the resource references
  +        iterator = getChildrenByTagName(element, "resource-ref");
  +             
  +             while (iterator.hasNext()) {
  +                     Element resourceRef = (Element) iterator.next();
  +                     
  +                     ResourceRefMetaData resourceRefMetaData = new 
ResourceRefMetaData();
  +                     resourceRefMetaData.importEjbJarXml(resourceRef);
  +                     
  +                     resourceReferences.add(resourceRefMetaData);
  +             }
  +     }
  +
  +     public void importJbossXml(Element element) throws DeploymentException {
  +             // we must not set defaults here, this might never be called
  +             
  +             // set the jndi name, (optional)                
  +             jndiName = getElementContent(getOptionalChild(element, "jndi-name"));
  +             
  +             // set the configuration (optional)
  +             configurationName = getElementContent(getOptionalChild(element, 
"configuration-name"));
  +             
  +             // TODO set the resource references (optional)
  +             Iterator iterator = getChildrenByTagName(element, "resource-ref");
  +             
  +     
  +     }
  +     
  +     
  +     
  +    // Package protected ---------------------------------------------
  +    
  +    // Protected -----------------------------------------------------
  +    
  +    // Private -------------------------------------------------------
  +
  +    // Inner classes -------------------------------------------------
  +}
  
  
  
  1.3       +114 -46   jboss/src/main/org/jboss/metadata/MetaData.java
  
  Index: MetaData.java
  ===================================================================
  RCS file: /products/cvs/ejboss/jboss/src/main/org/jboss/metadata/MetaData.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MetaData.java     2000/07/07 23:47:46     1.2
  +++ MetaData.java     2000/08/12 00:37:59     1.3
  @@ -6,52 +6,120 @@
    */
   package org.jboss.metadata;
   
  -import java.util.*;
  +import java.util.ArrayList;
  +import java.util.Iterator;
  +import java.util.Collection;
  +
  +import org.w3c.dom.Element;
  +import org.w3c.dom.NodeList;
  +import org.w3c.dom.Node;
   
  -/**
  - * The base class for all the metadata classes.  All the metadata type support
  - * named properties, which you can get or set.  In addition, individual metadata
  - * implementation may be part of a set, represented by the metadata manager.
  - * Each set generally holds all the metadata from a specific configuration file
  - * or source.
  - */
  -public interface MetaData extends Map {
  -    /**
  -     * Tells whether this specific metadata has a property by the specified name.
  -     */
  -    public boolean hasProperty(String name);
  -
  -    /**
  -     * Gets a property by name.
  -     * @param name The name of the property you want
  -     * @return The value of the specified property, or null if the property
  -     *      exists but has not been set or has been set to null
  -     * @throws java.lang.IllegalArgumentException
  -     *      Occurs when the specified property does not exist
  -     */
  -    public Object getProperty(String name);
  -
  -    /**
  -     * Sets the value of a property.
  -     * @param name The name of the property you're setting
  -     * @param value The value you want to set for the specified property (may be
  -     *      null)
  -     * @throws java.lang.IllegalArgumentException
  -     *      Occurs when the specified property does not exist
  -     */
  -    public void setProperty(String name, Object value);
  +import org.jboss.ejb.DeploymentException;
   
  -    /**
  -     * Gets the names of all the properties present in this metadata.  These
  -     * properties may have a value of null, but they definitely exist.
  -     */
  -    public String[] getPropertyNames();
   
  -
  -    /**
  -     * Gets the manager for the plugin that this metadata is a part of (i.e.
  -     * jBoss, JAWS, etc.).  This will be null if the metadata is not part of
  -     * a specific plugin (for example, if it is the aggregate of all plugins).
  -     */
  -    public MetaDataPlugin getManager();
  -}
  \ No newline at end of file
  +/**
  + *   <description> 
  + *      
  + *   @see <related>
  + *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
  + *   @version $Revision: 1.3 $
  + */
  +public abstract class MetaData implements XmlLoadable {
  +    // Constants -----------------------------------------------------
  +     public static final byte TX_NOT_SUPPORTED  = 0;
  +    public static final byte TX_REQUIRED       = 1;
  +    public static final byte TX_SUPPORTS       = 2;
  +    public static final byte TX_REQUIRES_NEW   = 3;
  +    public static final byte TX_MANDATORY      = 4;
  +    public static final byte TX_NEVER          = 5;
  +    public static final byte TX_UNKNOWN        = 6;
  +    
  +    // Attributes ----------------------------------------------------
  +    
  +    // Static --------------------------------------------------------
  +    public static Iterator getChildrenByTagName(Element element, String tagName) {
  +             // getElementsByTagName gives the corresponding elements in the whole 
descendance.
  +         // We want only children
  +             
  +             NodeList children = element.getChildNodes();
  +             ArrayList goodChildren = new ArrayList();
  +             for (int i=0; i<children.getLength(); i++) {
  +                     Node currentChild = children.item(i);
  +                     if (currentChild.getNodeType() == Node.ELEMENT_NODE && 
  +                             ((Element)currentChild).getTagName().equals(tagName)) {
  +                             goodChildren.add((Element)currentChild);
  +                     }
  +             }
  +             return goodChildren.iterator();
  +     }
  +     
  +     
  +     public static Element getUniqueChild(Element element, String tagName) throws 
DeploymentException {
  +             Iterator goodChildren = getChildrenByTagName(element, tagName);
  +             
  +             if (goodChildren.hasNext()) {
  +                     Element child = (Element)goodChildren.next();
  +                     if (goodChildren.hasNext()) {
  +                             throw new DeploymentException("expected only one " + 
tagName + " tag");
  +                     }
  +                     return child;
  +             } else {
  +                     throw new DeploymentException("expected one " + tagName + " 
tag");
  +             }
  +     }
  +     
  +     
  +     public static Element getOptionalChild(Element element, String tagName) throws 
DeploymentException {
  +             Iterator goodChildren = getChildrenByTagName(element, tagName);
  +
  +             if (goodChildren.hasNext()) {
  +                     Element child = (Element)goodChildren.next();
  +                     if (goodChildren.hasNext()) {
  +                             throw new DeploymentException("expected only one " + 
tagName + " tag");
  +                     }
  +                     return child;
  +             } else {
  +                     return null;
  +             }
  +     }
  +     
  +     public static String getElementContent(Element element) throws 
DeploymentException {
  +             if (element == null) return null;
  +             
  +             NodeList children = element.getChildNodes();
  +             if ((children.getLength() == 1) && (children.item(0).getNodeType() == 
Node.TEXT_NODE)) {
  +                 return children.item(0).getNodeValue();
  +             } else {
  +                     return null;
  +             }
  +     }
  +             
  +    
  +    // Constructors --------------------------------------------------
  +    
  +    // Public --------------------------------------------------------
  +    public void importXml (Element element) throws DeploymentException {
  +             String rootTag = 
element.getOwnerDocument().getDocumentElement().getTagName();
  +             
  +             if (rootTag.equals("jboss")) {
  +                     // import jboss.xml
  +                     importJbossXml(element);
  +             } else if (rootTag.equals("ejb-jar")) {
  +                 // import ejb-jar.xml
  +                     importEjbJarXml(element);
  +             } else {
  +                     throw new DeploymentException("Unrecognized root tag : "+ 
rootTag);
  +             }
  +     }
  +     
  +     public void importEjbJarXml (Element element) throws DeploymentException {}
  +     public void importJbossXml (Element element) throws DeploymentException {}
  +     
  +    // Package protected ---------------------------------------------
  +    
  +    // Protected -----------------------------------------------------
  +     
  +     // Private -------------------------------------------------------
  +    
  +    // Inner classes -------------------------------------------------
  +}
  
  
  
  1.4       +140 -15   jboss/src/main/org/jboss/metadata/MethodMetaData.java
  
  Index: MethodMetaData.java
  ===================================================================
  RCS file: 
/products/cvs/ejboss/jboss/src/main/org/jboss/metadata/MethodMetaData.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- MethodMetaData.java       2000/07/28 14:00:48     1.3
  +++ MethodMetaData.java       2000/08/12 00:37:59     1.4
  @@ -6,20 +6,145 @@
    */
   package org.jboss.metadata;
   
  +import java.util.ArrayList;
  +import java.util.Iterator;
  +import java.util.Set;
  +
  +import org.w3c.dom.Element;
  +
  +import org.jboss.ejb.DeploymentException;
  +
   /**
  - * The metadata for one method of an EJB or the EJB's home interface.
  + *   <description> 
  + *      
  + *   @see <related>
  + *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
  + *   @version $Revision: 1.4 $
    */
  -public interface MethodMetaData extends MetaData {
  -    /**
  -     * Gets the name of this method.  The name and parameter class types of a
  -     * method together are the unique identifier.
  -     */
  -    public String getName();
  -
  -    /**
  -     * Gets the names of the classes of the parameter types of this method.
  -     * The name and parameter class types of a method together are the
  -     * unique identifier.
  -     */
  -    public String[] getParameterTypes();
  -}
  \ No newline at end of file
  +public class MethodMetaData extends MetaData {
  +    // Constants -----------------------------------------------------
  +    
  +    // Attributes ----------------------------------------------------
  +     private String methodName;
  +     private String ejbName;
  +     
  +     private boolean intf = false;
  +     private boolean home;
  +    
  +     private boolean param = false;
  +     private ArrayList paramList = new ArrayList();
  +
  +     private byte transactionType;
  +     
  +     private Set permissions;
  +     
  +    // Static --------------------------------------------------------
  +    
  +    // Constructors --------------------------------------------------
  +    public MethodMetaData () {
  +     }
  +     
  +    // Public --------------------------------------------------------
  +     
  +     public String getMethodName() { return methodName; }
  +     
  +     public String getEjbName() { return ejbName; }
  +     
  +     public boolean isHomeMethod() { return home; }
  +    public boolean isRemoteMethod() { return !home; }
  +    
  +     public boolean isIntfGiven() { return intf; }
  +     
  +    public boolean isParamGiven() { return param; }
  +     
  +     public Iterator getParams() { return paramList.iterator(); }
  +
  +     public byte getTransactionType() { return transactionType; }
  +     
  +     public void setTransactionType(byte type) {
  +         transactionType = type;
  +     }
  +
  +     public Set getRoles() { return permissions; }
  +     
  +     public void setRoles(Set perm) { permissions = perm; }
  +     
  +     
  +     public boolean patternMatches(String name, Class[] arg, boolean remote) {
  +             return patternMatches(name, getClassNames(arg), remote);
  +     }
  +     
  +     public boolean patternMatches(String name, String[] arg, boolean remote) {
  +             
  +             // the wildcard matches everything
  +             if (getMethodName().equals("*")) return true;
  +             
  +             if (! getMethodName().equals(name)) {
  +             // different names -> no
  +                     return false;
  +                     
  +             } else {
  +                     // we have the same name
  +                     // next check: home or remote
  +                     if (isIntfGiven() && (isRemoteMethod() != remote)) return 
false;
  +                             
  +                     if (! isParamGiven()) {
  +                     // no param given in descriptor -> ok
  +                             return true;
  +                     } else {
  +                             // we *have* to check the parameters
  +                             return sameParams(arg, (String[])paramList.toArray());
  +                     }
  +             }
  +     }
  +                     
  +     
  +    public void importEjbJarXml(Element element) throws DeploymentException {
  +             methodName = getElementContent(getUniqueChild(element, "method-name"));
  +             ejbName = getElementContent(getUniqueChild(element, "ejb-name"));
  +             
  +             Element intfElement = getOptionalChild(element, "method-intf");
  +             if (intfElement != null) {
  +                     intf = true;
  +                     String homeRemote = getElementContent(intfElement);
  +                     if (homeRemote.equals("Home")) {
  +                             home = true;
  +                     } else if (homeRemote.equals("Remote")) {
  +                             home = false;
  +                     } else {
  +                             throw new DeploymentException("method-intf tag should 
be 'Home' or 'Remote'");
  +                     }
  +             }
  +             
  +             Element paramsElement = getOptionalChild(element, "method-params");
  +         if (paramsElement != null) {
  +                     param = true;
  +                     Iterator paramsIterator = getChildrenByTagName(paramsElement, 
"method-param");
  +                     while (paramsIterator.hasNext()) {
  +                             
paramList.add(getElementContent((Element)paramsIterator.next()));
  +                     }
  +             }
  +     }               
  +    
  +     // Package protected ---------------------------------------------
  +    
  +    // Protected -----------------------------------------------------
  +    
  +    // Private -------------------------------------------------------
  +    private static String[] getClassNames(Class[] source) {
  +        String out[] = new String[source.length];
  +        for(int i=0; i<out.length; i++)
  +            out[i] = source[i].getName();
  +        return out;
  +    }
  +
  +     private boolean sameParams(String[] list1, String[] list2) {
  +        if(list1.length != list2.length) return false;
  +        for(int i=0; i<list1.length; i++)
  +            if(!list1[i].equals(list2[i]))
  +                return false;
  +        return true;
  +    }
  +
  +    // Inner classes -------------------------------------------------
  +}
  
  
  
  1.1                  jboss/src/main/org/jboss/metadata/ApplicationMetaData.java
  
  Index: ApplicationMetaData.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.metadata;
  
  import java.net.URL;
  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.Collection;
  import java.util.HashMap;
  import java.util.Set;
  import java.util.HashSet;
  
  import org.w3c.dom.Element;
  import org.w3c.dom.NodeList;
  
  import org.jboss.ejb.DeploymentException;
  
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
   *   @version $Revision: 1.1 $
   */
  public class ApplicationMetaData extends MetaData {
        // Constants -----------------------------------------------------
        
        // Attributes ----------------------------------------------------
        private URL url;
  
        private ArrayList beans = new ArrayList();
        private ArrayList securityRoles = new ArrayList();
        private ArrayList configurations = new ArrayList();
        private HashMap resources = new HashMap();
        private HashMap homeJndiMap = null;
        
        
        // Static --------------------------------------------------------
        
        // Constructors --------------------------------------------------
        public ApplicationMetaData (URL u) {
                url = u;
        }
        
        public ApplicationMetaData () {
        }
                                                
        // Public --------------------------------------------------------
        public URL getUrl() { return url; }
  
        public void setUrl(URL u) { url = u; } 
        
        public Iterator getEnterpriseBeans() {
                return beans.iterator(); 
        }
        
        public BeanMetaData getBeanByEjbName(String ejbName) {
                Iterator iterator = getEnterpriseBeans();
                while (iterator.hasNext()) {
                        BeanMetaData current = (BeanMetaData) iterator.next();
                        if (current.getEjbName().equals(ejbName)) return current;
                }
                // not found
                return null;
        }
        
        public Iterator getConfigurations() {
                return configurations.iterator();
        }
        
        public ConfigurationMetaData getConfigurationMetaDataByName(String name) {
                Iterator iterator = getConfigurations();
                while (iterator.hasNext()) {
                        ConfigurationMetaData current = (ConfigurationMetaData) 
iterator.next();
                        if (current.getName().equals(name)) return current;
                }
                // not found
                return null;
        }
        
        public String getResourceByName(String name) {
                // if not found, the container will use default
                return (String)resources.get(name);
        }
        
        public String getJndiFromHome(String homeClass) {
                // homeJndiName must be initialized once jboss.xml has been processed
                
                if (homeJndiMap == null) makeHomeJndiMap();
                return (String)homeJndiMap.get(homeClass);
        }
        
        
        
        public void importEjbJarXml (Element element) throws DeploymentException {
                
                // find the beans               
                Element enterpriseBeans = getUniqueChild(element, "enterprise-beans");
                
                // entities
                Iterator iterator = getChildrenByTagName(enterpriseBeans, "entity");
                while (iterator.hasNext()) {
                        Element currentEntity = (Element)iterator.next();
                        EntityMetaData entityMetaData = new EntityMetaData(this);
                        entityMetaData.importEjbJarXml(currentEntity);
                        beans.add(entityMetaData);
                }
                
                // sessions
                iterator = getChildrenByTagName(enterpriseBeans, "session");
                while (iterator.hasNext()) {
                        Element currentSession = (Element)iterator.next();
                        SessionMetaData sessionMetaData = new SessionMetaData(this);
                        sessionMetaData.importEjbJarXml(currentSession);
                        beans.add(sessionMetaData);
                }
                
                // read the assembly descriptor (optional)
                Element assemblyDescriptor = getOptionalChild(element, 
"assembly-descriptor");
                
                if (assemblyDescriptor != null) {
                        
                        // set the security roles (optional)
                        iterator = getChildrenByTagName(assemblyDescriptor, 
"security-role");
                        while (iterator.hasNext()) {
                                Element securityRole = (Element)iterator.next(); 
                                String role = 
getElementContent(getUniqueChild(securityRole, "role-name"));
                                securityRoles.add(role);
                        }
                                
                        // set the method permissions (optional)
                        iterator = getChildrenByTagName(assemblyDescriptor, 
"method-permission");
                        while (iterator.hasNext()) {
                                Element methodPermission = (Element)iterator.next();
                                
                                // find the list of roles
                                Set roles = new HashSet();
                                Iterator rolesIterator = 
getChildrenByTagName(methodPermission, "role-name");
                                while (rolesIterator.hasNext()) {
                                        
roles.add(getElementContent((Element)rolesIterator.next()));
                                }
                                
                                // find the methods
                                Iterator methods = 
getChildrenByTagName(methodPermission, "method");
                                while (methods.hasNext()) {
                                        
                                        // load the method
                                        MethodMetaData method = new MethodMetaData();
                                        
method.importEjbJarXml((Element)methods.next());
                        method.setRoles(roles);
                                        
                                        // give the method to the right bean
                                        BeanMetaData bean = 
getBeanByEjbName(method.getEjbName());
                                        bean.addPermissionMethod(method);
                                }
                                
                        }
                                
                        // set the container transactions (optional)
                iterator = getChildrenByTagName(assemblyDescriptor, 
"container-transaction");
                        while (iterator.hasNext()) {
                                Element containerTransaction = 
(Element)iterator.next();
                                
                                // find the type of the transaction
                                byte transactionType;
                                String type = 
getElementContent(getUniqueChild(containerTransaction, "trans-attribute"));
                                if (type.equals("NotSupported")) {
                                        transactionType = TX_NOT_SUPPORTED;
                                } else if (type.equals("Supports")) {
                                        transactionType = TX_SUPPORTS;
                                } else if (type.equals("Required")) {
                                        transactionType = TX_REQUIRED;
                                } else if (type.equals("RequiresNew")) {
                                        transactionType = TX_REQUIRES_NEW;
                                } else if (type.equals("Mandatory")) {
                                        transactionType = TX_MANDATORY;
                                } else if (type.equals("Never")) {
                                        transactionType = TX_NEVER;
                                } else {
                                        throw new DeploymentException("invalid 
transaction-attribute : " + type);
                                }
  
                                // find the methods
                                Iterator methods = 
getChildrenByTagName(containerTransaction, "method");
                                while (methods.hasNext()) {
                                        
                                        // load the method
                                        MethodMetaData method = new MethodMetaData();
                                        
method.importEjbJarXml((Element)methods.next());
                        method.setTransactionType(transactionType);
                                        
                                        // give the method to the right bean
                                        BeanMetaData bean = 
getBeanByEjbName(method.getEjbName());
                                        bean.addTransactionMethod(method);
                                }                                       
                        }
                }
        }
        
        
        public void importJbossXml(Element element) throws DeploymentException {
                Iterator iterator;
                
                // all the tags are optional
                
                // find the container configurations (we need them first to use them 
in the beans)
                Element confs = getUniqueChild(element, "container-configurations");
                if (confs != null) {
                        iterator = getChildrenByTagName(confs, 
"container-configuration");
                        while (iterator.hasNext()) {
                                Element conf = (Element)iterator.next();
                                ConfigurationMetaData configurationMetaData = new 
ConfigurationMetaData();
                                configurationMetaData.importJbossXml(conf);
                                configurations.add(configurationMetaData);
                        }
                }
                
                // update the enterprise beans
                Element entBeans = getUniqueChild(element, "enterprise-beans");
                if (entBeans != null) {
                        iterator = getChildrenByTagName(entBeans, "entity");
                        while (iterator.hasNext()) {
                                Element bean = (Element) iterator.next();
                                String ejbName = 
getElementContent(getUniqueChild(bean, "ejb-name"));
                                BeanMetaData beanMetaData = getBeanByEjbName(ejbName);
                                if (beanMetaData == null) {
                                        throw new DeploymentException("bean not found 
: " + ejbName);
                                }
                                beanMetaData.importJbossXml(bean);
                        }
                
                        iterator = getChildrenByTagName(entBeans, "session");
                        while (iterator.hasNext()) {
                                Element bean = (Element) iterator.next();
                                String ejbName = 
getElementContent(getUniqueChild(bean, "ejb-name"));
                                BeanMetaData beanMetaData = getBeanByEjbName(ejbName);
                                if (beanMetaData == null) {
                                        throw new DeploymentException("bean not found 
: " + ejbName);
                                }
                                beanMetaData.importJbossXml(bean);
                        }
                }
                
                // set the resource managers
            Element resmans = getOptionalChild(element, "resource-managers");
                if (resmans != null) {
                        iterator = getChildrenByTagName(resmans, "resource-manager");
                        while (iterator.hasNext()) {
                                Element resourceManager = (Element)iterator.next();
                                String resName = 
getElementContent(getUniqueChild(resourceManager, "res-name"));
                                
                                String jndi = 
getElementContent(getOptionalChild(resourceManager, "jndi-name"));
                                String url = 
getElementContent(getOptionalChild(resourceManager, "res-url"));
                                
                                if (jndi != null && url == null) {
                                        resources.put(resName, jndi);
                                } else if (jndi == null && url != null) {
                                        resources.put(resName, url);
                                } else {
                                        throw new DeploymentException("Resource " + 
resName + " : expected res-url or jndi-name tag");
                                }
                        }
                }
        }
        
        // Package protected ---------------------------------------------
        
        // Protected -----------------------------------------------------
        
        // Private -------------------------------------------------------
        private void makeHomeJndiMap() {
                homeJndiMap = new HashMap();
                
                Iterator iterator = getEnterpriseBeans();
                while (iterator.hasNext()) {
                        BeanMetaData bean = (BeanMetaData)iterator.next();
                        homeJndiMap.put(bean.getHome(), bean.getJndiName());
                }
        }
                
        
        
        // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  jboss/src/main/org/jboss/metadata/ConfigurationMetaData.java
  
  Index: ConfigurationMetaData.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.metadata;
  
  import org.w3c.dom.Element;
  
  import org.jboss.ejb.DeploymentException;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
   *   @version $Revision: 1.1 $
   */
  public class ConfigurationMetaData extends MetaData {
      
        // Constants -----------------------------------------------------
      public static final String DEFAULT_CMP = "Default CMP EntityBean";
        public static final String DEFAULT_BMP = "Default BMP EntityBean";
        public static final String DEFAULT_STATELESS = "Default Stateless SessionBean";
        public static final String DEFAULT_STATEFUL = "Default Stateful SessionBean";
        
        public static final byte A_COMMIT_OPTION = 0;
        public static final byte B_COMMIT_OPTION = 1;
        public static final byte C_COMMIT_OPTION = 2;
        
        
      // Attributes ----------------------------------------------------
        private String name;
        private String containerInvoker;
        private String instancePool;
        private String instanceCache;
        private String persistenceManager;
        private String transactionManager;
      private byte commitOption;
        private boolean callLogging;
        
        // TODO security manager
        // TODO realm mapping
        
        private Element containerInvokerConf;
        private Element containerPoolConf;
        private Element containerCacheConf;
        
        
      // Static --------------------------------------------------------
      
      // Constructors --------------------------------------------------
      public ConfigurationMetaData () {
        }
        
      // Public --------------------------------------------------------
        
        public String getName() { return name; }
        
        public String getContainerInvoker() { return containerInvoker; }
        
        public String getInstancePool() { return instancePool; }
        
        public String getInstanceCache() { return instanceCache; }
        
        public String getPersistenceManager() { return persistenceManager; }
        
        public String getTransactionManager() { return transactionManager; }
        
      public Element getContainerInvokerConf() { return containerInvokerConf; }
        public Element getContainerPoolConf() { return containerPoolConf; }
        public Element getContainerCacheConf() { return containerCacheConf; }
        
        public boolean getCallLogging() { return callLogging; }
        
        public byte getCommitOption() { return commitOption; }
        
        
        public void importJbossXml(Element element) throws DeploymentException {
                
                // set the configuration name
                name = getElementContent(getUniqueChild(element, "container-name"));
                
                // set call logging
                callLogging = 
Boolean.valueOf(getElementContent(getUniqueChild(element, 
"call-logging"))).booleanValue();
                
                // set the container invoker
                containerInvoker = getElementContent(getUniqueChild(element, 
"container-invoker"));
                
                // set the instance pool
                instancePool = getElementContent(getOptionalChild(element, 
"instance-pool"));
                
                // set the instance cache
                instanceCache = getElementContent(getOptionalChild(element, 
"instance-cache"));
                
                // set the persistence manager
                persistenceManager = getElementContent(getOptionalChild(element, 
"persistence-manager"));
                
                // set the transaction manager
                transactionManager = getElementContent(getOptionalChild(element, 
"transaction-manager"));
  
          // set the commit option
                String commit = getElementContent(getOptionalChild(element, 
"commit-option"));
                if (commit != null) {
                        if (commit.equals("A")) {
                                commitOption = A_COMMIT_OPTION;
                        } else if (commit.equals("B")) {
                                commitOption = B_COMMIT_OPTION;
                        } else if (commit.equals("C")) {
                                commitOption = C_COMMIT_OPTION;
                        } else throw new DeploymentException("Invalid commit option");
                }
                
                // the classes which can understand the following are dynamically 
loaded during deployment : 
                // We save the Elements for them to use later
                
                // configuration for container invoker
            containerInvokerConf = getOptionalChild(element, "container-invoker-conf");
                
                // configuration for instance pool
                containerPoolConf = getOptionalChild(element, "container-pool-conf");
                
                // configuration for instance cache
                containerCacheConf = getOptionalChild(element, "container-cache-conf");
                
        }               
      
        // Package protected ---------------------------------------------
      
      // Protected -----------------------------------------------------
      
      // Private -------------------------------------------------------
      
      // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  jboss/src/main/org/jboss/metadata/EjbRefMetaData.java
  
  Index: EjbRefMetaData.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.metadata;
  
  import org.w3c.dom.Element;
  
  import org.jboss.ejb.DeploymentException;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
   *   @version $Revision: 1.1 $
   */
  public class EjbRefMetaData extends MetaData {
      // Constants -----------------------------------------------------
      
      // Attributes ----------------------------------------------------
        
        // the name used in the bean code
        private String name;
        
        // entity or session
        private String type;
        
        // the 2 interfaces
      private String home;
      private String remote;
        
        // the jndi name: we must map "name" to "link"
      private String link;
        
      // Static --------------------------------------------------------
      
      // Constructors --------------------------------------------------
      public EjbRefMetaData () {
        }
        
      // Public --------------------------------------------------------
        
        public String getName() { return name; }
        
        public String getType() { return type; }
        
        public String getHome() { return home; }
        
        public String getRemote() { return remote; }
        
        public String getLink() { return link; }
  
      public void importEjbJarXml(Element element) throws DeploymentException {
                name = getElementContent(getUniqueChild(element, "ejb-ref-name"));
                type = getElementContent(getUniqueChild(element, "ejb-ref-type"));
                home = getElementContent(getUniqueChild(element, "home"));
                remote = getElementContent(getUniqueChild(element, "remote"));
                link = getElementContent(getOptionalChild(element, "ejb-link"));
        }               
      
        // Package protected ---------------------------------------------
      
      // Protected -----------------------------------------------------
      
      // Private -------------------------------------------------------
      
      // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  jboss/src/main/org/jboss/metadata/EntityMetaData.java
  
  Index: EntityMetaData.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.metadata;
  
  import java.util.ArrayList;
  import java.util.Iterator;
  
  import org.w3c.dom.Element;
  import org.jboss.ejb.DeploymentException;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
   *   @version $Revision: 1.1 $
   */
  public class EntityMetaData extends BeanMetaData {
      // Constants -----------------------------------------------------
      
      // Attributes ----------------------------------------------------
        private boolean cmp;
      private String primaryKeyClass;
      private boolean reentrant;
      private ArrayList cmpFields = new ArrayList();
        private String primKeyField;
        
      // Static --------------------------------------------------------
      
      // Constructors --------------------------------------------------
        public EntityMetaData(ApplicationMetaData app) {
                super(app);
                session = false;
        }
  
      // Public --------------------------------------------------------
        public boolean isCMP() { return cmp; }
        public boolean isBMP() { return !cmp; }
        public boolean isReentrant() { return reentrant; }
        public String getPrimaryKeyClass() { return primaryKeyClass; }
        public String[] getCMPFields() { return (String[]) cmpFields.toArray(); }
        public String getPrimKeyField() { return primKeyField; }
        
        public String getDefaultConfigurationName() {
                if (isCMP()) {
                        return ConfigurationMetaData.DEFAULT_CMP;
                } else {
                        return ConfigurationMetaData.DEFAULT_BMP;
                }
        }
        
        public void importEjbJarXml(Element element) throws DeploymentException {
                super.importEjbJarXml(element);
                
                // set persistence type
                String persistenceType = getElementContent(getUniqueChild(element, 
"persistence-type"));
                if (persistenceType.equals("Bean")) {
                        cmp = false;
                } else if (persistenceType.equals("Container")) {
                        cmp = true;
                } else {
                        throw new DeploymentException("persistence-type should be 
'Bean' or 'Container'");
                }
                
                // set primary key class
                primaryKeyClass = getElementContent(getUniqueChild(element, 
"prim-key-class"));
      
                // set reentrant
                reentrant = Boolean.valueOf(getElementContent(getUniqueChild(element, 
"reentrant"))).booleanValue();
                
                // set the cmp fields
                if (isCMP()) {
                        Iterator iterator = getChildrenByTagName(element, 
"cmp-fields");                        
                        while (iterator.hasNext()) {
                                Element field = (Element)iterator.next();
                                cmpFields.add(getElementContent(getUniqueChild(field, 
"field-name")));
                        }
                }
                
                // set the primary key field
                if (isCMP()) {
                        primKeyField = getElementContent(getOptionalChild(element, 
"primkey-field"));
                }
        }
  
  
        
      // Package protected ---------------------------------------------
      
      // Protected -----------------------------------------------------
      
      // Private -------------------------------------------------------
      
      // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  jboss/src/main/org/jboss/metadata/EnvEntryMetaData.java
  
  Index: EnvEntryMetaData.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.metadata;
  
  import org.w3c.dom.Element;
  
  import org.jboss.ejb.DeploymentException;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
   *   @version $Revision: 1.1 $
   */
  public class EnvEntryMetaData extends MetaData {
      // Constants -----------------------------------------------------
      
      // Attributes ----------------------------------------------------
        private String name;
        private String type;
      private String value;
      // Static --------------------------------------------------------
      
      // Constructors --------------------------------------------------
      public EnvEntryMetaData () {
        }
        
      // Public --------------------------------------------------------
        
        public String getName() { return name; }
        
        public String getType() { return type; }
        
        public String getValue() { return value; }
      
      public void importEjbJarXml(Element element) throws DeploymentException {
                name = getElementContent(getUniqueChild(element, "env-entry-name"));
                type = getElementContent(getUniqueChild(element, "env-entry-type"));
                value = getElementContent(getUniqueChild(element, "env-entry-value"));
        }               
      
        // Package protected ---------------------------------------------
      
      // Protected -----------------------------------------------------
      
      // Private -------------------------------------------------------
      
      // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  jboss/src/main/org/jboss/metadata/ResourceRefMetaData.java
  
  Index: ResourceRefMetaData.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.metadata;
  
  import org.w3c.dom.Element;
  
  import org.jboss.ejb.DeploymentException;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
   *   @version $Revision: 1.1 $
   */
  public class ResourceRefMetaData extends MetaData {
      // Constants -----------------------------------------------------
      
      // Attributes ----------------------------------------------------
        private String refName;      // the name used in the bean code (from 
ejb-jar.xml)
        private String name;         // the name of the resource used by jboss
        // the jndi name will be found in the ApplicationMetaData where resources are 
declared
        
      private String type;
        private boolean containerAuth;
        
      // Static --------------------------------------------------------
      
      // Constructors --------------------------------------------------
      public ResourceRefMetaData () {
        }
        
      // Public --------------------------------------------------------
        
        public String getRefName() { return refName; }
        
        public String getResourceName() { 
                if (name == null) {
                        // default is refName
                        name = refName;
                } 
                return name;
        }
        
        
        public String getType() { return type; }
  
        public boolean isContainerAuth() { return containerAuth; }
  
  
      public void importEjbJarXml(Element element) throws DeploymentException {
                refName = getElementContent(getUniqueChild(element, "res-ref-name"));
                
                type = getElementContent(getUniqueChild(element, "res-type"));
                
                String auth = getElementContent(getUniqueChild(element, "res-auth"));
                if (auth.equals("Container")) {
                        containerAuth = true;
                } else if (auth.equals("Application")) {
                        containerAuth = false;
                } else {
                        throw new DeploymentException("res-auth tag should be 
'Container' or 'Application'");
                }
        }
        
        public void importJbossXml(Element element) throws DeploymentException {
                name = getElementContent(getUniqueChild(element, "resource-name"));
        }
      
        // Package protected ---------------------------------------------
      
      // Protected -----------------------------------------------------
      
      // Private -------------------------------------------------------
      
      // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  jboss/src/main/org/jboss/metadata/SecurityRoleRefMetaData.java
  
  Index: SecurityRoleRefMetaData.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.metadata;
  
  import org.w3c.dom.Element;
  
  import org.jboss.ejb.DeploymentException;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
   *   @version $Revision: 1.1 $
   */
  public class SecurityRoleRefMetaData extends MetaData {
      // Constants -----------------------------------------------------
      
      // Attributes ----------------------------------------------------
        private String name;
      private String link;
        
      // Static --------------------------------------------------------
      
      // Constructors --------------------------------------------------
      public SecurityRoleRefMetaData () {
        }
        
      // Public --------------------------------------------------------
        
        public String getName() { return name; }
        
        public String getLink() { return link; }
  
      public void importEjbJarXml(Element element) throws DeploymentException {
                name = getElementContent(getUniqueChild(element, "role-name"));
                link = getElementContent(getOptionalChild(element, "role-link"));
        }               
      
        // Package protected ---------------------------------------------
      
      // Protected -----------------------------------------------------
      
      // Private -------------------------------------------------------
      
      // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  jboss/src/main/org/jboss/metadata/SessionMetaData.java
  
  Index: SessionMetaData.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.metadata;
  
  import org.w3c.dom.Element;
  import org.w3c.dom.NodeList;
  
  import org.jboss.ejb.DeploymentException;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
   *   @version $Revision: 1.1 $
   */
  public class SessionMetaData extends BeanMetaData {
      // Constants -----------------------------------------------------
      
      // Attributes ----------------------------------------------------
        private boolean stateful;
        private boolean containerManagedTx;
  
      // Static --------------------------------------------------------
      
      // Constructors --------------------------------------------------
      public SessionMetaData(ApplicationMetaData app) {
                super(app);
                session = true;
        }
        
      // Public --------------------------------------------------------
      public boolean isStateful() { return stateful; }
      public boolean isStateless() { return !stateful; }
      public boolean isContainerManagedTx() { return containerManagedTx; }
        public boolean isBeanManagedTx() { return !containerManagedTx; }
                
        public String getDefaultConfigurationName() {
                if (isStateful()) {
                        return ConfigurationMetaData.DEFAULT_STATEFUL;
                } else {
                        return ConfigurationMetaData.DEFAULT_STATELESS;
                }
        }
        
        public void importEjbJarXml(Element element) throws DeploymentException {
                super.importEjbJarXml(element);
                
                // set the session type 
                String sessionType = getElementContent(getUniqueChild(element, 
"session-type"));
                if (sessionType.equals("Stateful")) {
                        stateful = true;
                } else if (sessionType.equals("Stateless")) {
                        stateful = false;
                } else {
                        throw new DeploymentException("bean " + getEjbName() + ", 
session type should be 'Stateful' or 'Stateless'");
                }
                        
                // set the transaction type
                String transactionType = getElementContent(getUniqueChild(element, 
"transaction-type"));
                if (transactionType.equals("Bean")) {
                        containerManagedTx = false;
                } else if (transactionType.equals("Container")) {
                        containerManagedTx = true;
                } else {
                        throw new DeploymentException("bean " + getEjbName() + ", 
transaction type should be 'Bean' or 'Container'");
                }
        }
                        
        // Package protected ---------------------------------------------
      
      // Protected -----------------------------------------------------
      
      // Private -------------------------------------------------------
      
      // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  jboss/src/main/org/jboss/metadata/XmlFileLoader.java
  
  Index: XmlFileLoader.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.metadata;
  
  import java.net.URL;
  import java.io.IOException;
  import java.io.Reader;
  import java.io.InputStreamReader;
  
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  import org.xml.sax.Parser;
  import org.xml.sax.InputSource;
  import org.xml.sax.SAXException;
  
  import org.jboss.ejb.DeploymentException;
  
  /**
   *   <description>
   *
   *   @see <related>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
   *   @version $Revision: 1.1 $
   */
  public class XmlFileLoader {
        // Constants -----------------------------------------------------
  
        // Attributes ----------------------------------------------------
        ClassLoader classLoader;
  
        ApplicationMetaData metaData;
        
        // Static --------------------------------------------------------
  
        // Constructors --------------------------------------------------
        public XmlFileLoader() {
        }
  
        // Public --------------------------------------------------------
        public ApplicationMetaData getMetaData() {
                return metaData;
      }
        
        public void setClassLoader(ClassLoader cl) {
                classLoader = cl;
        }
  
        public ClassLoader getClassLoader() {
                return classLoader;
        }
  
        /**
        * load()
        *
        * This method creates the ApplicationMetaData. 
        * The configuration files are found in the classLoader.
        * The default jboss.xml and jaws.xml files are always read first, then we 
override 
        * the defaults if the user provides them
        *
        */
        public ApplicationMetaData load() throws Exception {
                // create the metadata
                metaData = new ApplicationMetaData();
                
                // Load ejb-jar.xml
                
                // we can always find the files in the classloader
                URL ejbjarUrl = getClassLoader().getResource("META-INF/ejb-jar.xml");
                
                if (ejbjarUrl == null) {
                        throw new DeploymentException("no ejb-jar.xml found");
                }
                
                System.out.println("Loading ejb-jar.xml : " + ejbjarUrl.toString());
                Document ejbjarDocument = getDocument(ejbjarUrl);
                
                // the url may be used to report errors
                metaData.setUrl(ejbjarUrl);
                metaData.importEjbJarXml(ejbjarDocument.getDocumentElement());
                
                // Load jbossdefault.xml from the default classLoader
                // we always load defaults first
                URL defaultJbossUrl = getClass().getResource("defaultjboss.xml");
                
                if (defaultJbossUrl == null) {
                        throw new DeploymentException("no defaultjboss.xml found");
                }
                
                System.out.println("Loading defaultjboss.xml : " + 
defaultJbossUrl.toString());
                Document defaultJbossDocument = getDocument(defaultJbossUrl);
                
                metaData.setUrl(defaultJbossUrl);
                metaData.importJbossXml(defaultJbossDocument.getDocumentElement());
                
                // Load jboss.xml
                // if this file is provided, then we override the defaults
                URL jbossUrl = getClassLoader().getResource("META-INF/jboss.xml");
                
                if (jbossUrl != null) {
                        System.out.println(jbossUrl.toString() + " found. Overriding 
defaults");
                        Document jbossDocument = getDocument(jbossUrl);
                        
                        metaData.setUrl(jbossUrl);
                        metaData.importJbossXml(jbossDocument.getDocumentElement());
                }       
                
                return metaData;
        }
  
        // Package protected ---------------------------------------------
  
        // Protected -----------------------------------------------------
        protected Document getDocument(URL url) throws IOException {
                Reader in = new InputStreamReader(url.openStream());
                com.sun.xml.tree.XmlDocumentBuilder xdb = new 
com.sun.xml.tree.XmlDocumentBuilder();
                Parser parser = new com.sun.xml.parser.Parser();
                xdb.setParser(parser);
                
                try {
                    parser.parse(new InputSource(in));
                        return xdb.getDocument();
                } 
                catch (SAXException se) { 
                        throw new IOException(se.getMessage()); 
                }
        }
  
        // Private -------------------------------------------------------
  
        // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  jboss/src/main/org/jboss/metadata/XmlLoadable.java
  
  Index: XmlLoadable.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.metadata;
  
  import org.w3c.dom.Element;
  
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
   *   @version $Revision: 1.1 $
   */
  public interface XmlLoadable {
      
      // Public --------------------------------------------------------
      public void importXml(Element element) throws Exception;
  }
  
  
  

Reply via email to