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