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;
}
-
-
+
+
}