1 23 package com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbpostcreatemethod; 24 25 import com.sun.enterprise.tools.verifier.tests.ejb.EjbTest; 26 import java.lang.ClassLoader ; 27 import com.sun.enterprise.tools.verifier.tests.*; 28 import javax.ejb.EntityBean ; 29 import java.lang.reflect.*; 30 import com.sun.enterprise.deployment.*; 31 import java.util.*; 32 import com.sun.enterprise.tools.verifier.*; 33 import com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck; 34 35 46 public class EjbPostCreateMethodFinal extends EjbTest implements EjbCheck { 47 48 49 63 public Result check(EjbDescriptor descriptor) { 64 65 Result result = getInitializedResult(); 66 ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor(); 67 68 if (descriptor instanceof EjbEntityDescriptor) { 69 boolean oneFailed = false; 70 int foundAtLeastOne = 0; 71 try { 72 Context context = getVerifierContext(); 73 ClassLoader jcl = context.getClassLoader(); 74 Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader()); 75 76 boolean ejbPostCreateFound = false; 77 boolean isFinal = false; 78 do { 80 Method [] methods = c.getDeclaredMethods(); 81 for (int i = 0; i < methods.length; i++) { 82 ejbPostCreateFound = false; 84 isFinal = false; 85 86 if (methods[i].getName().startsWith("ejbPostCreate")) { 88 foundAtLeastOne++; 89 ejbPostCreateFound = true; 90 91 int modifiers = methods[i].getModifiers(); 93 if (Modifier.isFinal(modifiers)){ 94 isFinal = true; 95 } 96 97 if (ejbPostCreateFound && (!isFinal)) { 100 result.addGoodDetails(smh.getLocalString 101 ("tests.componentNameConstructor", 102 "For [ {0} ]", 103 new Object [] {compName.toString()})); 104 result.addGoodDetails(smh.getLocalString 105 (getClass().getName() + ".debug1", 106 "For EJB Class [ {0} ] method [ {1} ]", 107 new Object [] {descriptor.getEjbClassName(),methods[i].getName()})); 108 result.addGoodDetails(smh.getLocalString 109 (getClass().getName() + ".passed", 110 "[ {0} ] declares non-final [ {1} ] method.", 111 new Object [] {descriptor.getEjbClassName(),methods[i].getName()})); 112 } else if (ejbPostCreateFound && isFinal) { 113 oneFailed = true; 114 result.addErrorDetails(smh.getLocalString 115 ("tests.componentNameConstructor", 116 "For [ {0} ]", 117 new Object [] {compName.toString()})); 118 result.addErrorDetails(smh.getLocalString 119 (getClass().getName() + ".debug1", 120 "For EJB Class [ {0} ] ejbPostCreate(...) Method [ {1} ]", 121 new Object [] {descriptor.getEjbClassName(),methods[i].getName()})); 122 result.addErrorDetails(smh.getLocalString 123 (getClass().getName() + ".failed", 124 "Error: A final [ {0} ] method was found, but [ {1} ] cannot be declared as final.", 125 new Object [] {methods[i].getName(),methods[i].getName()})); 126 } 127 } 128 } 129 } while (((c = c.getSuperclass()) != null) && (foundAtLeastOne == 0)); 130 131 if (foundAtLeastOne == 0) { 132 result.addNaDetails(smh.getLocalString 133 ("tests.componentNameConstructor", 134 "For [ {0} ]", 135 new Object [] {compName.toString()})); 136 result.notApplicable(smh.getLocalString 137 (getClass().getName() + ".notApplicable1", 138 "[ {0} ] does not declare any ejbPostCreate(...) methods.", 139 new Object [] {descriptor.getEjbClassName()})); 140 } 141 } catch (ClassNotFoundException e) { 142 Verifier.debug(e); 143 result.addErrorDetails(smh.getLocalString 144 ("tests.componentNameConstructor", 145 "For [ {0} ]", 146 new Object [] {compName.toString()})); 147 result.failed(smh.getLocalString 148 (getClass().getName() + ".failedException", 149 "Error: [ {0} ] class not found.", 150 new Object [] {descriptor.getEjbClassName()})); 151 oneFailed = true; 152 } 153 154 if (oneFailed) { 155 result.setStatus(result.FAILED); 156 } else if (foundAtLeastOne == 0) { 157 result.setStatus(result.NOT_APPLICABLE); 158 } else { 159 result.setStatus(result.PASSED); 160 } 161 162 return result; 163 164 } else { 165 result.addNaDetails(smh.getLocalString 166 ("tests.componentNameConstructor", 167 "For [ {0} ]", 168 new Object [] {compName.toString()})); 169 result.notApplicable(smh.getLocalString 170 (getClass().getName() + ".notApplicable", 171 "[ {0} ] expected {1} bean, but called with {2} bean.", 172 new Object [] {getClass(),"Entity","Session"})); 173 return result; 174 } 175 } 176 } 177 | Popular Tags |