SessionDesc.java

00001 
00026 package org.objectweb.jonas_ejb.deployment.api;
00027 
00028 import org.objectweb.jonas_ejb.container.TraceEjb;
00029 import org.objectweb.jonas_ejb.deployment.xml.Session;
00030 import org.objectweb.jonas_ejb.deployment.xml.AssemblyDescriptor;
00031 import org.objectweb.jonas_ejb.deployment.xml.JonasSession;
00032 import org.objectweb.jonas_lib.deployment.api.DeploymentDescException;
00033 import org.objectweb.jonas_lib.deployment.xml.JLinkedList;
00034 import org.objectweb.util.monolog.api.BasicLevel;
00035 
00042 public abstract class SessionDesc extends BeanDesc {
00043 
00044     protected int transactionType;
00045     int sessionTimeout = 0;
00046 
00051     public SessionDesc(ClassLoader classLoader, Session ses,
00052             AssemblyDescriptor asd, JonasSession jSes, JLinkedList jMDRList,
00053             String filename) throws DeploymentDescException {
00054 
00055         super(classLoader, ses, jSes, asd, jMDRList, filename);
00056 
00057         // session timeout
00058         if (jSes.getSessionTimeout() != null) {
00059             String tstr = jSes.getSessionTimeout();
00060             Integer tval = new Integer(tstr);
00061             sessionTimeout = tval.intValue();
00062         }
00063         // min-pool-size
00064         if (jSes.getMinPoolSize() != null) {
00065             String tstr = jSes.getMinPoolSize();
00066             Integer tval = new Integer(tstr);
00067             poolMin = tval.intValue();
00068         }
00069 
00070         // max-cache-size
00071         if (jSes.getMaxCacheSize() != null) {
00072             String tstr = jSes.getMaxCacheSize();
00073             Integer tval = new Integer(tstr);
00074             cacheMax = tval.intValue();
00075         }
00076 
00077         // bean or container managed transaction
00078         if (ses.getTransactionType().equals("Bean")) {
00079             transactionType = BEAN_TRANSACTION_TYPE;
00080         } else if (ses.getTransactionType().equals("Container")) {
00081             transactionType = CONTAINER_TRANSACTION_TYPE;
00082         } else {
00083             throw new DeploymentDescException(
00084                     "Invalid transaction-type content for ejb-name " + ejbName);
00085         }
00086     }
00087 
00091     protected void checkTxAttribute(MethodDesc md)
00092             throws DeploymentDescException {
00093         java.lang.reflect.Method m = md.getMethod();
00094         if (getTransactionType() == CONTAINER_TRANSACTION_TYPE) {
00095             // tx-attribute must be set for methods of remote interface
00096             // excluding the methods of the javax.ejb.EJBObject interface
00097             if ((md.getTxAttribute() == MethodDesc.TX_NOT_SET)
00098                     && javax.ejb.EJBObject.class.isAssignableFrom(m
00099                             .getDeclaringClass())
00100                     && !javax.ejb.EJBObject.class.equals(m.getDeclaringClass())) {
00101                 // trace a warning and set the tx-attribute with the default
00102                 // value
00103                 logger.log(BasicLevel.WARN,
00104                         "trans-attribute missing for method " + m.toString()
00105                                 + " in session bean " + getEjbName()
00106                                 + " (set to the default value "
00107                                 + MethodDesc.TX_STR_DEFAULT_VALUE + ")");
00108                 md.setTxAttribute(MethodDesc.TX_STR_DEFAULT_VALUE);
00109             }
00110             // tx-attribute must not be set for methods of home interface
00111             if ((md.getTxAttribute() != MethodDesc.TX_NOT_SET)
00112                     && javax.ejb.EJBHome.class.isAssignableFrom(m
00113                             .getDeclaringClass())
00114                     && ((md.getTxAttributeStatus() == MethodDesc.APPLY_TO_CLASS)
00115                             || (md.getTxAttributeStatus() == MethodDesc.APPLY_TO_CLASS_METHOD_NAME) || (md
00116                             .getTxAttributeStatus() == MethodDesc.APPLY_TO_CLASS_METHOD))) {
00117                 TraceEjb.dd.log(BasicLevel.WARN,
00118                         "trans-attribute must not be specified for home interface's method "
00119                                 + m.toString() + " in session bean "
00120                                 + getEjbName());
00121             }
00122         } else {
00123             if (md.getTxAttribute() != MethodDesc.TX_NOT_SET) {
00124                 throw new DeploymentDescException(md.getTxAttributeName()
00125                         + " is not a valid trans-attribute for method "
00126                         + m.toString() + " in session bean " + getEjbName());
00127             }
00128         }
00129     }
00130 
00137     public int getTransactionType() {
00138         return transactionType;
00139     }
00140 
00144     public boolean isBeanManagedTransaction() {
00145         return (transactionType == BEAN_TRANSACTION_TYPE);
00146     }
00147 
00151     public int getSessionTimeout() {
00152         return sessionTimeout;
00153     }
00154 
00161     public void check() throws DeploymentDescException {
00162         super.check();
00163         // for BEAN_TRANSACTION_TYPE transactions ejbClass should not implement
00164         // javax.ejb.SessionSynchronization
00165         if ((getTransactionType() == BEAN_TRANSACTION_TYPE)
00166                 && (javax.ejb.SessionSynchronization.class
00167                         .isAssignableFrom(ejbClass))) {
00168             throw new DeploymentDescException(
00169                     ejbClass.getName()
00170                             + " should NOT manage transactions and implement javax.ejb.SessionSynchronization");
00171         }
00172     }
00173 
00179     public String toString() {
00180         StringBuffer ret = new StringBuffer();
00181         ret.append(super.toString());
00182         ret.append("\ngetTransactionType()" + TRANS[getTransactionType()]);
00183         ret.append("\nsessionTimeout = " + sessionTimeout);
00184         return ret.toString();
00185     }
00186 
00187 }
00188 

Generated on Tue Feb 15 15:05:45 2005 for JOnAS by  doxygen 1.3.9.1