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 47 public class EjbPostCreateMethodArgs extends EjbTest implements EjbCheck { 48 49 50 65 public Result check(EjbDescriptor descriptor) { 66 67 Result result = getInitializedResult(); 68 ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor(); 69 70 if (descriptor instanceof EjbEntityDescriptor) { 71 boolean oneFailed = false; 72 int foundAtLeastOne = 0; 73 try { 74 Context context = getVerifierContext(); 75 ClassLoader jcl = context.getClassLoader(); 76 Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader()); 77 78 Class [] ejbPostCreateMethodParameterTypes; 79 Class [] ejbCreateMethodParameterTypes; 80 boolean signaturesMatch = false; 81 boolean ejbCreateExists = false; 82 83 Method [] methods = c.getDeclaredMethods(); 84 Vector<Method> createMethodSuffix = new Vector<Method>(); 85 for (int i = 0; i < methods.length; i++) { 86 if (methods[i].getName().startsWith("ejbCreate")) { 88 createMethodSuffix.addElement((Method)methods[i]); 89 ejbCreateExists = true; 90 } 91 } 92 93 do { 95 for (int i = 0; i < methods.length; i++) { 96 signaturesMatch = false; 98 99 if (methods[i].getName().startsWith("ejbPostCreate")) { 101 foundAtLeastOne++; 102 103 String matchSuffix = methods[i].getName().substring(13); 104 for (int k = 0; k < createMethodSuffix.size(); k++) { 105 if (matchSuffix.equals(((Method)createMethodSuffix.elementAt(k)).getName().substring(9))) { 106 ejbCreateMethodParameterTypes = ((Method)createMethodSuffix.elementAt(k)).getParameterTypes(); 107 ejbPostCreateMethodParameterTypes = methods[i].getParameterTypes(); 108 if (Arrays.equals(ejbCreateMethodParameterTypes,ejbPostCreateMethodParameterTypes)) { 109 signaturesMatch = true; 110 break; 111 } 112 } 113 } 114 if (signaturesMatch) { 115 result.addGoodDetails(smh.getLocalString 116 ("tests.componentNameConstructor", 117 "For [ {0} ]", 118 new Object [] {compName.toString()})); 119 result.addGoodDetails(smh.getLocalString 120 (getClass().getName() + ".debug1", 121 "For EJB Class [ {0} ] method [ {1} ]", 122 new Object [] {descriptor.getEjbClassName(),methods[i].getName()})); 123 result.addGoodDetails(smh.getLocalString 124 (getClass().getName() + ".passed", 125 "[ {0} ] declares [ {1} ] method with parameters that match corresponding [ {2} ] method.", 126 new Object [] {descriptor.getEjbClassName(),methods[i].getName(), "ejbCreate<method>"})); 127 } else if (!signaturesMatch) { 128 oneFailed = true; 129 result.addErrorDetails(smh.getLocalString 130 ("tests.componentNameConstructor", 131 "For [ {0} ]", 132 new Object [] {compName.toString()})); 133 result.addErrorDetails(smh.getLocalString 134 (getClass().getName() + ".debug1", 135 "For EJB Class [ {0} ] method [ {1} ]", 136 new Object [] {descriptor.getEjbClassName(),methods[i].getName()})); 137 result.addErrorDetails(smh.getLocalString 138 (getClass().getName() + ".failed", 139 "Error: An [ {0} ] method was found, but [ {1} ] method parameters did not match any corresponding [ {2} ] method parameters.", 140 new Object [] {methods[i].getName(),methods[i].getName(),"ejbCreate<method>"})); 141 break; 142 } 143 } 144 } 145 if (oneFailed == true) 146 break; 147 } while (((c = c.getSuperclass()) != null) && (foundAtLeastOne == 0)); 148 149 if (ejbCreateExists == false) { 150 result.addNaDetails(smh.getLocalString 151 ("tests.componentNameConstructor", 152 "For [ {0} ]", 153 new Object [] {compName.toString()})); 154 result.notApplicable(smh.getLocalString 155 (getClass().getName() + ".notApplicable1", 156 "[ {0} ] does not declare any ejbPostCreate(...) methods.", 157 new Object [] {descriptor.getEjbClassName()})); 158 } 159 if (foundAtLeastOne == 0 && ejbCreateExists == true){ 160 oneFailed=true; 161 result.addErrorDetails(smh.getLocalString 162 ("tests.componentNameConstructor", 163 "For [ {0} ]", 164 new Object [] {compName.toString()})); 165 result.failed(smh.getLocalString 166 (getClass().getName() + ".failedException1", 167 "Error: ejbPostCreate<Method> method corresponding to the ejbCreate<Method> method does not exist!", 168 new Object [] {})); 169 170 } 171 } catch (ClassNotFoundException e) { 172 Verifier.debug(e); 173 result.addErrorDetails(smh.getLocalString 174 ("tests.componentNameConstructor", 175 "For [ {0} ]", 176 new Object [] {compName.toString()})); 177 result.failed(smh.getLocalString 178 (getClass().getName() + ".failedException", 179 "Error: [ {0} ] class not found.", 180 new Object [] {descriptor.getEjbClassName()})); 181 oneFailed = true; 182 } 183 184 if (oneFailed) { 185 result.setStatus(result.FAILED); 186 } else if (foundAtLeastOne == 0) { 187 result.setStatus(result.NOT_APPLICABLE); 188 } else { 189 result.setStatus(result.PASSED); 190 } 191 192 return result; 193 194 } else { 195 result.addNaDetails(smh.getLocalString 196 ("tests.componentNameConstructor", 197 "For [ {0} ]", 198 new Object [] {compName.toString()})); 199 result.notApplicable(smh.getLocalString 200 (getClass().getName() + ".notApplicable", 201 "[ {0} ] expected {1} bean, but called with {2} bean.", 202 new Object [] {getClass(),"Entity","Session"})); 203 return result; 204 } 205 } 206 } 207 | Popular Tags |