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
00058 if (jSes.getSessionTimeout() != null) {
00059 String tstr = jSes.getSessionTimeout();
00060 Integer tval = new Integer(tstr);
00061 sessionTimeout = tval.intValue();
00062 }
00063
00064 if (jSes.getMinPoolSize() != null) {
00065 String tstr = jSes.getMinPoolSize();
00066 Integer tval = new Integer(tstr);
00067 poolMin = tval.intValue();
00068 }
00069
00070
00071 if (jSes.getMaxCacheSize() != null) {
00072 String tstr = jSes.getMaxCacheSize();
00073 Integer tval = new Integer(tstr);
00074 cacheMax = tval.intValue();
00075 }
00076
00077
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
00096
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
00102
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
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
00164
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