1 23 package com.sun.enterprise.tools.verifier.tests.ejb.session; 24 25 import java.util.Enumeration ; 26 27 import com.sun.enterprise.deployment.ContainerTransaction; 28 import com.sun.enterprise.deployment.EjbDescriptor; 29 import com.sun.enterprise.deployment.EjbSessionDescriptor; 30 import com.sun.enterprise.deployment.MethodDescriptor; 31 import com.sun.enterprise.tools.verifier.Context; 32 import com.sun.enterprise.tools.verifier.Result; 33 import com.sun.enterprise.tools.verifier.Verifier; 34 import com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor; 35 import com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck; 36 import com.sun.enterprise.tools.verifier.tests.ejb.EjbTest; 37 38 48 public class TransactionDemarcationSessionSynchronizationInterface extends EjbTest implements EjbCheck { 49 50 51 65 public Result check(EjbDescriptor descriptor) { 66 67 Result result = getInitializedResult(); 68 ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor(); 69 boolean oneFound = false; 70 71 if (descriptor instanceof EjbSessionDescriptor) { 72 try { 73 Context context = getVerifierContext(); 74 ClassLoader jcl = context.getClassLoader(); 75 Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader()); 76 do { 78 Class [] interfaces = c.getInterfaces(); 79 80 for (int i = 0; i < interfaces.length; i++) { 81 if (interfaces[i].getName().equals("javax.ejb.SessionSynchronization")) { 82 oneFound = true; 83 break; 84 } 85 } 86 } while ((c=c.getSuperclass()) != null); 87 88 } catch (ClassNotFoundException e) { 89 Verifier.debug(e); 90 addErrorDetails(result, compName); 91 result.failed(smh.getLocalString 92 (getClass().getName() + ".failedException1", 93 "Error: [ {0} ] class not found.", 94 new Object [] {descriptor.getEjbClassName()})); 95 return result; 96 } 97 98 if (oneFound) { 103 String transactionAttribute = ""; 104 ContainerTransaction containerTransaction = null; 105 boolean oneFailed = false; 106 if (!descriptor.getMethodContainerTransactions().isEmpty()) { 107 for (Enumeration ee = descriptor.getMethodContainerTransactions().keys(); ee.hasMoreElements();) { 108 MethodDescriptor methodDescriptor = (MethodDescriptor) ee.nextElement(); 109 containerTransaction = 110 (ContainerTransaction) descriptor.getMethodContainerTransactions().get(methodDescriptor); 111 112 if (!(containerTransaction != null && properAttribDefined(containerTransaction))) { 113 transactionAttribute = 114 containerTransaction.getTransactionAttribute(); 115 addErrorDetails(result, compName); 116 result.failed(smh.getLocalString 117 (getClass().getName() + ".failed", 118 "Error: TransactionAttribute [ {0} ] for method [ {1} ] is not valid.", 119 new Object [] {transactionAttribute, methodDescriptor.getName()})); 120 121 } 122 } 123 } 124 } 125 } 126 127 if(result.getStatus()!=Result.FAILED) { 128 addGoodDetails(result, compName); 129 result.passed(smh.getLocalString 130 (getClass().getName() + ".passed", 131 "TransactionAttributes are defined properly for the bean")); 132 } 133 return result; 134 } 135 136 private boolean properAttribDefined(ContainerTransaction containerTransaction) { 137 String transactionAttribute = containerTransaction.getTransactionAttribute(); 138 return (ContainerTransaction.REQUIRED.equals(transactionAttribute) 139 || ContainerTransaction.REQUIRES_NEW.equals(transactionAttribute) 140 || ContainerTransaction.MANDATORY.equals(transactionAttribute)); 141 142 } 143 } 144 | Popular Tags |