User: mulder
Date: 00/07/03 17:10:06
Added: src/main/org/jboss/metadata/ejbjar EJBBean.java
EJBContainer.java EJBField.java EJBMethod.java
EJBPlugin.java EJBServer.java EJBXMLReader.java
Log:
Added new metadata classes to CVS. Currently read-only (reads XML files
written by EJX). We plan to add GUI and write support for EJX.
Revision Changes Path
1.1 jboss/src/main/org/jboss/metadata/ejbjar/EJBBean.java
Index: EJBBean.java
===================================================================
package org.jboss.metadata.ejbjar;
import java.util.*;
import org.jboss.metadata.*;
import org.jboss.metadata.plugins.AbstractBean;
public class EJBBean extends AbstractBean {
public String description;
public String displayName;
public Class homeClass;
public Class remoteClass;
public Class implementationClass;
public String persistanceType;
public Class primaryKeyClass;
public boolean reentrant;
public EJBBean() {
super();
setContainerMetaData(new EJBContainer());
}
public MetaDataPlugin getManager() {
return EJBPlugin.instance();
}
}
1.1 jboss/src/main/org/jboss/metadata/ejbjar/EJBContainer.java
Index: EJBContainer.java
===================================================================
package org.jboss.metadata.ejbjar;
import java.util.*;
import org.jboss.metadata.*;
import org.jboss.metadata.plugins.AbstractContainer;
public class EJBContainer extends AbstractContainer implements ContainerMetaData {
public EJBContainer() {
}
public MetaDataPlugin getManager() {
return EJBPlugin.instance();
}
}
1.1 jboss/src/main/org/jboss/metadata/ejbjar/EJBField.java
Index: EJBField.java
===================================================================
package org.jboss.metadata.ejbjar;
import org.jboss.metadata.MetaDataPlugin;
import org.jboss.metadata.plugins.*;
public class EJBField extends AbstractField {
public boolean isCMP;
public EJBField() {
}
public MetaDataPlugin getManager() {
return EJBPlugin.instance();
}
}
1.1 jboss/src/main/org/jboss/metadata/ejbjar/EJBMethod.java
Index: EJBMethod.java
===================================================================
package org.jboss.metadata.ejbjar;
import org.jboss.metadata.*;
import org.jboss.metadata.plugins.AbstractMethod;
public class EJBMethod extends AbstractMethod {
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 byte transactionAttribute = TX_SUPPORTS;
public EJBMethod() {
}
public MetaDataPlugin getManager() {
return EJBPlugin.instance();
}
}
1.1 jboss/src/main/org/jboss/metadata/ejbjar/EJBPlugin.java
Index: EJBPlugin.java
===================================================================
package org.jboss.metadata.ejbjar;
import org.jboss.metadata.MetaDataPlugin;
import org.jboss.metadata.io.XMLReader;
public class EJBPlugin implements MetaDataPlugin {
private final static EJBPlugin instance = new EJBPlugin();
public static EJBPlugin instance() {
return instance;
}
private EJBPlugin() {}
public Class getServerClass() {
return EJBServer.class;
}
public Class getBeanClass() {
return EJBBean.class;
}
public Class getContainerClass() {
return EJBContainer.class;
}
public Class getMethodClass() {
return EJBMethod.class;
}
public Class getFieldClass() {
return EJBField.class;
}
public XMLReader getXMLReader() {
return new EJBXMLReader();
}
public boolean equals(Object o) {
return o instanceof EJBPlugin;
}
public int hashCode() {
return getClass().hashCode();
}
}
1.1 jboss/src/main/org/jboss/metadata/ejbjar/EJBServer.java
Index: EJBServer.java
===================================================================
package org.jboss.metadata.ejbjar;
import org.jboss.metadata.*;
import org.jboss.metadata.plugins.*;
public class EJBServer extends AbstractServer {
static {
MetaDataFactory.addPlugin(EJBPlugin.instance());
}
public EJBServer() {
}
public MetaDataPlugin getManager() {
return EJBPlugin.instance();
}
}
1.1 jboss/src/main/org/jboss/metadata/ejbjar/EJBXMLReader.java
Index: EJBXMLReader.java
===================================================================
package org.jboss.metadata.ejbjar;
import java.io.*;
import java.util.*;
import org.xml.sax.*;
import com.sun.xml.parser.*;
import org.jboss.metadata.io.XMLReader;
import org.jboss.metadata.*;
public class EJBXMLReader extends HandlerBase implements XMLReader {
private EJBServer server = null;
private EJBContainer container = null;
private EJBBean bean = null;
private MethodHolder method = null;
private String currentElement;
private String contents;
private Vector methods = new Vector();
private ClassLoader loader;
public EJBXMLReader() {
}
public void setClassLoader(ClassLoader loader) {
this.loader = loader;
}
public String getFileName() {
return "ejb-jar.xml";
}
public ServerMetaData readXML(Reader input) throws IOException {
com.sun.xml.parser.Parser parser = new com.sun.xml.parser.Parser();
parser.setDocumentHandler(this);
InputSource is = new InputSource(input);
try {
parser.parse(is);
} catch(SAXException e) {
e.printStackTrace();
throw new IOException(e.getMessage());
}
return server;
}
public void startDocument() throws SAXException {
}
public void endDocument() throws SAXException {
}
public void startElement(String name, AttributeList atts) throws SAXException {
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();
}
public void characters(char[] data, int start, int length) throws SAXException {
if(contents == null)
contents = new String(data, start, length);
else
contents += new String(data, start, length);
}
public void endElement(String name) throws SAXException {
if(name.equals("entity") || name.equals("session")) {
bean.setContainerMetaData(container);
container = null;
server.addBean(bean);
bean = null;
} else if(name.equals("ejb-name")) {
if(bean != null)
bean.setName(contents);
else if(method != null)
method.ejbName = contents;
// otherwise, a container transaction bean reference
} else if(name.equals("method")) {
methods.add(method.method);
if(method.isHome) {
try {
EJBBean bean = (EJBBean)server.getBean(method.ejbName);
bean.addHomeMethod(method.method);
method = null;
} catch(IllegalArgumentException e) {// a Home?
System.out.println("Couldn't find bean '"+method.ejbName+"' to
add home method '"+method.method.getName()+"' to!");
}
} else {
try {
EJBBean bean = (EJBBean)server.getBean(method.ejbName);
bean.addMethod(method.method);
method = null;
} 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"))
bean.displayName = contents;
else if(name.equals("home"))
try {
bean.homeClass = loadClass(contents);
} catch(ClassNotFoundException e) {
throw new SAXException("Unable to locate class '"+contents+"'");
}
else if(name.equals("remote"))
try {
bean.remoteClass = loadClass(contents);
} catch(ClassNotFoundException e) {
throw new SAXException("Unable to locate class '"+contents+"'");
}
else if(name.equals("ejb-class"))
try {
bean.implementationClass = loadClass(contents);
} catch(ClassNotFoundException e) {
throw new SAXException("Unable to locate class '"+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) {
throw new SAXException("Unable to locate class '"+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) {
throw new SAXException("Unable to locate class '"+contents+"'");
}
} 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 throw new SAXException("Unknown transaction type '"+contents+"'");
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 class MethodHolder {
EJBMethod method = new EJBMethod();
String ejbName;
boolean isHome;
}
}