User: pra
Date: 00/12/06 05:02:30
Modified: src/main/org/jboss/metadata ApplicationMetaData.java
BeanMetaData.java ConfigurationMetaData.java
Added: src/main/org/jboss/metadata MessageDrivenMetaData.java
Log:
Changed MetaData classes to support MessageDriven beans. Added MetaData class for
MessageDriven beans
Revision Changes Path
1.11 +27 -2 jboss/src/main/org/jboss/metadata/ApplicationMetaData.java
Index: ApplicationMetaData.java
===================================================================
RCS file:
/products/cvs/ejboss/jboss/src/main/org/jboss/metadata/ApplicationMetaData.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- ApplicationMetaData.java 2000/11/24 18:51:41 1.10
+++ ApplicationMetaData.java 2000/12/06 13:02:29 1.11
@@ -22,10 +22,12 @@
/**
* <description>
- *
+ *
+ * MessageDriven Bean added
* @see <related>
* @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
- * @version $Revision: 1.10 $
+ * @author Peter Antman ([EMAIL PROTECTED])
+ * @version $Revision: 1.11 $
*/
public class ApplicationMetaData extends MetaData {
// Constants -----------------------------------------------------
@@ -122,6 +124,19 @@
beans.add(sessionMetaData);
}
+ // MDB
+ iterator = getChildrenByTagName(enterpriseBeans, "message-driven");
+ while (iterator.hasNext()) {
+ Element currentMessageDriven = (Element)iterator.next();
+ MessageDrivenMetaData messageDrivenMetaData = new
MessageDrivenMetaData(this);
+ try {
+ messageDrivenMetaData.importEjbJarXml(currentMessageDriven);
+ } catch (DeploymentException e) {
+ throw new DeploymentException("Error in ejb-jar.xml for Message Driven
Bean " + messageDrivenMetaData.getEjbName() + ": " + e.getMessage());
+ }
+ beans.add(messageDrivenMetaData);
+ }
+
// read the assembly descriptor (optional)
Element assemblyDescriptor = getOptionalChild(element,
"assembly-descriptor");
@@ -283,6 +298,16 @@
beanMetaData.importJbossXml(bean);
}
+ iterator = getChildrenByTagName(entBeans, "message-driven");
+ while (iterator.hasNext()) {
+ Element bean = (Element) iterator.next();
+ ejbName = getElementContent(getUniqueChild(bean, "ejb-name"));
+ BeanMetaData beanMetaData = getBeanByEjbName(ejbName);
+ if (beanMetaData == null) {
+ throw new DeploymentException("found in jboss.xml but not in
ejb-jar.xml");
+ }
+ beanMetaData.importJbossXml(bean);
+ }
} catch (DeploymentException e) {
throw new DeploymentException("Error in jboss.xml for Bean " + ejbName +
": " + e.getMessage());
}
1.13 +12 -5 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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- BeanMetaData.java 2000/11/29 01:35:16 1.12
+++ BeanMetaData.java 2000/12/06 13:02:29 1.13
@@ -24,7 +24,8 @@
*
* @see <related>
* @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
- * @version $Revision: 1.12 $
+ * @author Peter Antman ([EMAIL PROTECTED])
+ * @version $Revision: 1.13 $
*/
public abstract class BeanMetaData extends MetaData {
// Constants -----------------------------------------------------
@@ -35,9 +36,10 @@
// from ejb-jar.xml
private String ejbName;
private String homeClass;
- private String remoteClass;
+ private String remoteClass;
private String ejbClass;
protected boolean session;
+ protected boolean messageDriven = false;
private HashMap ejbReferences = new HashMap();
private ArrayList environmentEntries = new ArrayList();
@@ -63,7 +65,9 @@
// Public --------------------------------------------------------
public boolean isSession() { return session; }
- public boolean isEntity() { return !session; }
+ public boolean isMessageDriven() { return messageDriven; }
+
+ public boolean isEntity() { return !session && !messageDriven; }
public String getHome() { return homeClass; }
@@ -169,8 +173,11 @@
ejbName = getElementContent(getUniqueChild(element, "ejb-name"));
// set the classes
- homeClass = getElementContent(getUniqueChild(element, "home"));
- remoteClass = getElementContent(getUniqueChild(element, "remote"));
+ // Not for MessageDriven
+ if (!messageDriven) {
+ homeClass = getElementContent(getUniqueChild(element, "home"));
+ remoteClass = getElementContent(getUniqueChild(element, "remote"));
+ }
ejbClass = getElementContent(getUniqueChild(element, "ejb-class"));
// set the environment entries
1.8 +4 -3 jboss/src/main/org/jboss/metadata/ConfigurationMetaData.java
Index: ConfigurationMetaData.java
===================================================================
RCS file:
/products/cvs/ejboss/jboss/src/main/org/jboss/metadata/ConfigurationMetaData.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ConfigurationMetaData.java 2000/11/24 19:00:06 1.7
+++ ConfigurationMetaData.java 2000/12/06 13:02:29 1.8
@@ -15,7 +15,7 @@
*
* @see <related>
* @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
- * @version $Revision: 1.7 $
+ * @version $Revision: 1.8 $
*/
public class ConfigurationMetaData extends MetaData {
@@ -24,12 +24,13 @@
public static final String BMP_13 = "Standard BMP EntityBean";
public static final String STATELESS_13 = "Standard Stateless SessionBean";
public static final String STATEFUL_13 = "Standard Stateful SessionBean";
-
+ public static final String MESSAGE_DRIVEN_13 = "Standard Message Driven Bean";
public static final String CMP_12 = "jdk1.2.2 CMP EntityBean";
public static final String BMP_12 = "jdk1.2.2 BMP EntityBean";
public static final String STATELESS_12 = "jdk1.2.2 Stateless SessionBean";
public static final String STATEFUL_12 = "jdk1.2.2 Stateful SessionBean";
-
+ public static final String MESSAGE_DRIVEN_12 = "jdk1.2.2 Message Driven Bean";
+
public static final byte A_COMMIT_OPTION = 0;
public static final byte B_COMMIT_OPTION = 1;
public static final byte C_COMMIT_OPTION = 2;
1.1 jboss/src/main/org/jboss/metadata/MessageDrivenMetaData.java
Index: MessageDrivenMetaData.java
===================================================================
/*
* jBoss, the OpenSource EJB server
*
* Distributable under GPL license.
* See terms of license at gnu.org.
*/
package org.jboss.metadata;
import javax.jms.Session;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.jboss.ejb.DeploymentException;
/**
* <description>
* Based on SessionMetaData
*
* Have to add changes ApplicationMetaData and ConfigurationMetaData
* @see <related>
' * @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
* @author Peter Antman ([EMAIL PROTECTED])
* @version $Revision: 1.1 $
*/
public class MessageDrivenMetaData extends BeanMetaData {
// Constants -----------------------------------------------------
public static final int AUTO_ACKNOWLEDGE_MODE = Session.AUTO_ACKNOWLEDGE;
public static final int DUPS_OK_ACKNOWLEDGE_MODE = Session.DUPS_OK_ACKNOWLEDGE;
public static final int CLIENT_ACKNOWLEDGE_MODE = Session.CLIENT_ACKNOWLEDGE;
public static final byte DURABLE_SUBSCRIPTION = 0;
public static final byte NON_DURABLE_SUBSCRIPTION = 1;
// Attributes ----------------------------------------------------
private boolean containerManagedTx;
private int acknowledgeMode = AUTO_ACKNOWLEDGE_MODE;
private String destinationType;
private byte subscriptionDurability = NON_DURABLE_SUBSCRIPTION;
private String messageSelector = null;
private String destinationJndiName;
// Static --------------------------------------------------------
// Constructors --------------------------------------------------
public MessageDrivenMetaData(ApplicationMetaData app) {
super(app);
messageDriven = true;
session = false;
}
// Public --------------------------------------------------------
public boolean isContainerManagedTx() { return containerManagedTx; }
public boolean isBeanManagedTx() { return !containerManagedTx; }
/**
* returns MessageDrivenMetaData.AUTO_ACKNOWLADGE_MODE or
* MessageDrivenMetaData.DUPS_OK_AKNOWLEDGE_MODE
*/
public int getAcknowledgeMode() {return acknowledgeMode;}
public String getDestinationType() { return destinationType;}
public String getMessageSelector() { return messageSelector;}
public String getDestinationJndiName(){return destinationJndiName;}
/**
* returns MessageDrivenMetaData.DURABLE_SUBSCRIPTION or
* MessageDrivenMetaData.NON_DURABLE_SUBSCRIPTION
*/
public byte getSubscriptionDurability() {return subscriptionDurability;}
public String getDefaultConfigurationName() {
return jdk13Enabled() ? ConfigurationMetaData.MESSAGE_DRIVEN_13 :
ConfigurationMetaData.MESSAGE_DRIVEN_12;
}
public void importEjbJarXml(Element element) throws DeploymentException {
super.importEjbJarXml(element);
messageSelector = getElementContent(getUniqueChild(element,
"jms-message-selector"));
// set
Element destination = getUniqueChild(element,
"message-driven-destination");
destinationType = getElementContent(getUniqueChild(destination
, "jms-destination-type"));
if (destinationType.equals("javax.jms.Topic")) {
String subscr = getElementContent(getUniqueChild(destination,
"subscription-durability"));
// Should we do sanity check??
if (subscr.equals("Durable"))
subscriptionDurability = DURABLE_SUBSCRIPTION;
else
subscriptionDurability = NON_DURABLE_SUBSCRIPTION;//Default
}
/* Skipp check of dest type, for flexibility
} else if (destinationType.equals("javax.jms.Queue")) {
//Noop
} else {
throw new DeploymentException("session type should be
'Stateful' or 'Stateless'");
}
*/
// set the transaction type
String transactionType = getElementContent(getUniqueChild(element,
"transaction-type"));
if (transactionType.equals("Bean")) {
containerManagedTx = false;
String ack = getElementContent(getUniqueChild(element,
"acknowledge-mode"));
if (ack.equals("AUTO_ACKNOWLEDGE"))
acknowledgeMode = AUTO_ACKNOWLEDGE_MODE;
else
acknowledgeMode = DUPS_OK_ACKNOWLEDGE_MODE;
// else defaults to AUTO
} else if (transactionType.equals("Container")) {
containerManagedTx = true;
/* My interpretation of the EJB and JMS spec leads
me to that CLIENT_ACK is the only possible
solution. A transaction is per session in JMS, and
it is not possible to get access to the transaction.
According to the JMS spec it is possible to
multithread handling of messages (but not session),
but there is NO transaction support for this.
I,e, we can not use the JMS transaction for
message ack: hence we must use manual ack.
But for NOT_SUPPORTED this is not true here we
should have AUTO_ACKNOWLEDGE_MODE
*/
/*
* Here we should have a way of looking up wich message class
* the MessageDriven bean implements, by doing this we might
* be able to use other MOM systems, aka XmlBlaser. TODO!
* The MessageDrivenContainer needs this too!!
*/
if(getMethodTransactionType("onMessage", new Class[] {}, true)
== MetaData.TX_REQUIRED)
acknowledgeMode = CLIENT_ACKNOWLEDGE_MODE;
} else {
throw new DeploymentException("transaction type should be 'Bean'
or 'Container'");
}
}
public void importJbossXml(Element element) throws DeploymentException {
super.importJbossXml(element);
// set the jndi name, (optional)
destinationJndiName = getElementContent(getUniqueChild(element,
"destination-jndi-name"));
}
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
// Private -------------------------------------------------------
// Inner classes -------------------------------------------------
}