User: mulder  
  Date: 00/07/28 07:00:50

  Modified:    src/main/org/jboss/metadata/ejbjar EJBBean.java
                        EJBXMLReader.java
  Log:
  Change metadata to use Strings instead of Classes.
  Prevents icky ClassNotFoundExceptions and NoClassDefFoundErrors.
  Added convenience methods that take Classes and convert them to Strings.
  
  Revision  Changes    Path
  1.2       +10 -4     jboss/src/main/org/jboss/metadata/ejbjar/EJBBean.java
  
  Index: EJBBean.java
  ===================================================================
  RCS file: 
/products/cvs/ejboss/jboss/src/main/org/jboss/metadata/ejbjar/EJBBean.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- EJBBean.java      2000/07/04 00:10:05     1.1
  +++ EJBBean.java      2000/07/28 14:00:49     1.2
  @@ -4,14 +4,20 @@
   import org.jboss.metadata.*;
   import org.jboss.metadata.plugins.AbstractBean;
   
  +/**
  + * Holds the properties from ejb-jar.xml for an individual bean.
  + * Note that the "class" variable hold class names not Class objects so that
  + * the validation can be done elsewhere, and we can store the class names at
  + * configuration time even if the classes are not on the classpath.
  + */
   public class EJBBean extends AbstractBean {
       public String description;
       public String displayName;
  -    public Class homeClass;
  -    public Class remoteClass;
  -    public Class implementationClass;
  +    public String homeClass;
  +    public String remoteClass;
  +    public String implementationClass;
       public String persistanceType;
  -    public Class primaryKeyClass;
  +    public String primaryKeyClass;
       public boolean reentrant;
   
       public EJBBean() {
  
  
  
  1.5       +55 -99    jboss/src/main/org/jboss/metadata/ejbjar/EJBXMLReader.java
  
  Index: EJBXMLReader.java
  ===================================================================
  RCS file: 
/products/cvs/ejboss/jboss/src/main/org/jboss/metadata/ejbjar/EJBXMLReader.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- EJBXMLReader.java 2000/07/22 07:13:44     1.4
  +++ EJBXMLReader.java 2000/07/28 14:00:50     1.5
  @@ -15,23 +15,18 @@
       private EJBBean bean           = null;
       private MethodHolder method    = null;
       private Object ref             = null;
  -    
  +
       private String currentElement;
       private String contents;
       private Vector methods = new Vector();
  -    private ClassLoader loader;
   
       /*
       * Contains the list of warnings generated by the SAX parser.
       */
       private List warningList = new LinkedList();
  -    
  -    
  -    public EJBXMLReader() {
  -    }
   
  -    public void setClassLoader(ClassLoader loader) {
  -        this.loader = loader;
  +
  +    public EJBXMLReader() {
       }
   
       public String getFileName() {
  @@ -44,15 +39,15 @@
           InputSource is = new InputSource(input);
           try {
               parser.parse(is);
  -            
  +
               Iterator it = warningList.iterator();
  -            
  +
               while (it.hasNext()) {
                   System.out.println("Warning : " + (String)it.next());
               }
  -            
  +
               warningList.clear();
  -            
  +
           } catch(SAXException e) {
               e.printStackTrace();
               throw new IOException(e.getMessage());
  @@ -61,8 +56,8 @@
           return server;
       }
   
  -    
  -    
  +
  +
       public void startDocument() throws SAXException {
       }
   
  @@ -73,21 +68,21 @@
           currentElement = name;
           contents = null;
   
  -        
  +
           if(name.equals("ejb-jar"))
               server = new EJBServer();
  -        
  +
           else if (name.equals("entity") || name.equals("session")) {
               bean = new EJBBean();
               container = new EJBContainer();
           }
  -        
  +
           else if (name.equals("method"))
               method = new MethodHolder();
  -        
  +
           else if (name.equals("container-transaction"))
               methods.clear();
  -            
  +
           else if (name.equals("ejb-ref"))
               ref = "TODO";
   
  @@ -101,7 +96,7 @@
       }
   
       public void endElement(String name) throws SAXException {
  -        
  +
           if (name.equals("entity") || name.equals("session")) {
               bean.setContainerMetaData(container);
               container = null;
  @@ -109,9 +104,9 @@
               bean = null;
           }
   
  -        else if (name.equals("ejb-ref")) 
  +        else if (name.equals("ejb-ref"))
               ref = null;
  -            
  +
           else if (name.equals("ejb-name")) {
               if(bean != null)
                   bean.setName(contents);
  @@ -119,7 +114,7 @@
                   method.ejbName = contents;
               // otherwise, a container transaction bean reference
           }
  -        
  +
           else if (name.equals("method")) {
               methods.add(method.method);
               if(method.isHome) {
  @@ -138,15 +133,15 @@
                   } catch(IllegalArgumentException e) {// a Home?
                       System.out.println("Couldn't find bean '"+method.ejbName+"' to 
add method '"+method.method.getName()+"' to!");
                   }
  -            }  
  -        } 
  -        
  +            }
  +        }
  +
           else if (name.equals("description")) {
               if(bean != null)
                   bean.description = contents;
               // otherwise, a container transaction description
  -        } 
  -        
  +        }
  +
           else if (name.equals("display-name")) {
               if (bean != null) {
                   bean.displayName = contents;
  @@ -155,131 +150,92 @@
                // set the display name in the ejb-jar file
               }
           }
  -        
  +
           else if (name.equals("home")) {
  -            
               if (ref != null) {
  -                
                   // TODO :
                   // handle <home> in ejb-refs
  -            }
  -            
  -            else {
  -                try {
  -                    bean.homeClass = loadClass(contents);
  -                }
  -                catch(ClassNotFoundException e) {
  -                    addWarning("Unable to locate class '"+contents+"'");
  -                }
  +            } else {
  +                bean.homeClass = contents;
               }
           }
  -            
  +
           else if(name.equals("remote")) {
  -            
  +
               if (ref != null) {
  -                
  +
                   // TODO :
                   // handle <remote> in ejb-refs
               }
  -            
  +
               else {
  -                try {
  -                    bean.remoteClass = loadClass(contents);
  -                }
  -                catch(ClassNotFoundException e) {
  -                    addWarning("Unable to locate class '"+contents+"'");
  -                }
  +                bean.remoteClass = contents;
               }
           }
  -        
  +
           else if(name.equals("ejb-class"))
  -            try {
  -                bean.implementationClass = loadClass(contents);
  -            } catch(ClassNotFoundException e) {
  -                addWarning("Unable to locate class '"+contents+"'");
  -            }
  -        
  +            bean.implementationClass = contents;
  +
           else if(name.equals("prim-key-class"))
  -            try {
  -                if(MetaDataFactory.primitives.containsKey(contents))
  -                    bean.primaryKeyClass = 
(Class)MetaDataFactory.primitives.get(contents);
  -                else
  -                    bean.primaryKeyClass = loadClass(contents);
  -            } catch(ClassNotFoundException e) {
  -                addWarning("Unable to locate class '"+contents+"'");
  -            }
  -        
  +            bean.primaryKeyClass = contents;
  +
           else if(name.equals("persistence-type"))
               bean.persistanceType = contents;
  -        
  +
           else if(name.equals("reentrant"))
               bean.reentrant = new Boolean(contents).booleanValue();
  -        
  +
           else if(name.equals("field-name")) {
               EJBField field = new EJBField();
               field.setName(contents);
               field.isCMP = true;
               bean.addField(field);
           }
  -        
  +
           else if(name.equals("method-name"))
               method.method.setName(contents);
  -        
  +
           else if(name.equals("method-param")) {
               LinkedList list = new 
LinkedList(Arrays.asList(method.method.getParameterTypes()));
  -            try {
  -                if(MetaDataFactory.primitives.containsKey(contents))
  -                    list.add(MetaDataFactory.primitives.get(contents));
  -                else
  -                    list.add(loadClass(contents));
  -                method.method.setParameterTypes((Class[])list.toArray(new 
Class[list.size()]));
  -            } catch(ClassNotFoundException e) {
  -                addWarning("Unable to locate class '"+contents+"'");
  -            }
  +            list.add(contents);
  +            method.method.setParameterTypes((String[])list.toArray(new 
String[list.size()]));
           }
  -        
  +
           else if(name.equals("method-intf"))
               method.isHome = contents.equalsIgnoreCase("Home");
  -        
  +
           else if(name.equals("trans-attribute")) {
               byte value;
  -            
  +
               if(contents.equals("Required"))
                   value = EJBMethod.TX_REQUIRED;
  -            
  +
               else if(contents.equals("RequiresNew"))
                   value = EJBMethod.TX_REQUIRES_NEW;
  -            
  +
               else if(contents.equals("Supports"))
                   value = EJBMethod.TX_SUPPORTS;
  -            
  +
               else if(contents.equals("Never"))
                   value = EJBMethod.TX_NEVER;
  -            
  +
               else if(contents.equals("NotSupported"))
                   value = EJBMethod.TX_NOT_SUPPORTED;
  -            
  +
               else if(contents.equals("Mandatory"))
                   value = EJBMethod.TX_MANDATORY;
  -            
  +
               else {
                   addWarning("Unknown transaction type '"+contents+"'");
                   return;
               }
  -            
  -            
  +
  +
               for(int i=0; i<methods.size(); i++)
                   ((EJBMethod)methods.get(i)).transactionAttribute = value;
           }
       }
   
  -    private Class loadClass(String name) throws ClassNotFoundException {
  -        if(loader == null)
  -            return Class.forName(name);
  -        else
  -            return loader.loadClass(name);
  -    }
  -
       private void addWarning(String warning) {
           warningList.add(warning);
       }
  @@ -289,6 +245,6 @@
           String ejbName;
           boolean isHome;
       }
  -    
  -    
  +
  +
   }
  
  
  

Reply via email to