1 23 package com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindbyprimarykey; 24 25 import com.sun.enterprise.tools.verifier.tests.ejb.EjbTest; 26 import java.lang.reflect.*; 27 import java.util.*; 28 import com.sun.enterprise.deployment.EjbEntityDescriptor; 29 import com.sun.enterprise.deployment.EjbDescriptor; 30 import com.sun.enterprise.deployment.MethodDescriptor; 31 import com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck; 32 import com.sun.enterprise.tools.verifier.*; 33 import java.lang.ClassLoader ; 34 import com.sun.enterprise.tools.verifier.tests.*; 35 36 44 public class EjbFindByPrimaryKeyReturn extends EjbTest implements EjbCheck { 45 46 47 58 public Result check(EjbDescriptor descriptor) { 59 60 Result result = getInitializedResult(); 61 ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor(); 62 63 if (descriptor instanceof EjbEntityDescriptor) { 64 String persistentType = 65 ((EjbEntityDescriptor)descriptor).getPersistenceType(); 66 if (EjbEntityDescriptor.BEAN_PERSISTENCE.equals(persistentType)) { 67 boolean ejbFindByPrimaryKeyMethodFound = false; 68 boolean oneFailed = false; 69 boolean oneWarning = false; 70 boolean returnValueValid = false; 71 try { 72 Context context = getVerifierContext(); 74 ClassLoader jcl = context.getClassLoader(); 75 Class EJBClass = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader()); 76 do { 78 Method [] ejbFinderMethods = EJBClass.getDeclaredMethods(); 79 String primaryKeyType = ((EjbEntityDescriptor)descriptor).getPrimaryKeyClassName(); 80 81 for (int j = 0; j < ejbFinderMethods.length; ++j) { 82 Class returnByPrimaryKeyValue = ejbFinderMethods[j].getReturnType(); 83 84 if (ejbFinderMethods[j].getName().equals("ejbFindByPrimaryKey")) { 85 ejbFindByPrimaryKeyMethodFound = true; 90 if (returnByPrimaryKeyValue.getName().equals(primaryKeyType)) { 91 returnValueValid = true; 92 } 93 94 if (ejbFindByPrimaryKeyMethodFound && returnValueValid) { 95 result.addGoodDetails(smh.getLocalString 96 ("tests.componentNameConstructor", 97 "For [ {0} ]", 98 new Object [] {compName.toString()})); 99 result.addGoodDetails(smh.getLocalString 100 (getClass().getName() + ".debug1", 101 "For EJB Class [ {0} ] Finder Method [ {1} ]", 102 new Object [] {EJBClass.getName(),ejbFinderMethods[j].getName()})); 103 result.addGoodDetails(smh.getLocalString 104 (getClass().getName() + ".passed", 105 "An [ {0} ] method with valid return type was found.", 106 new Object [] {ejbFinderMethods[j].getName()})); 107 } else if (ejbFindByPrimaryKeyMethodFound && (!returnValueValid)) { 108 126 oneFailed = true; 127 result.addErrorDetails(smh.getLocalString 128 ("tests.componentNameConstructor", 129 "For [ {0} ]", 130 new Object [] {compName.toString()})); 131 result.addErrorDetails(smh.getLocalString 132 (getClass().getName() + ".debug1", 133 "For EJB Class [ {0} ] Finder Method [ {1} ]", 134 new Object [] {EJBClass.getName(),ejbFinderMethods[j].getName()})); 135 result.addErrorDetails(smh.getLocalString 136 (getClass().getName() + ".failed", 137 "Error: An [ {0} ] method was found, but [ {1} ] return type must be the enterprise Bean's primary key type.", 138 new Object [] {ejbFinderMethods[j].getName(),ejbFinderMethods[j].getName()})); 139 } 141 break; 143 } 144 } 145 } while (((EJBClass = EJBClass.getSuperclass()) != null) && (!ejbFindByPrimaryKeyMethodFound)); 146 147 if (!ejbFindByPrimaryKeyMethodFound) { 148 oneFailed = true; 149 result.addErrorDetails(smh.getLocalString 150 ("tests.componentNameConstructor", 151 "For [ {0} ]", 152 new Object [] {compName.toString()})); 153 result.addErrorDetails(smh.getLocalString 154 (getClass().getName() + ".debug3", 155 "For EJB Class [ {0} ]", 156 new Object [] {descriptor.getEjbClassName()})); 157 result.addErrorDetails(smh.getLocalString 158 (getClass().getName() + ".failed1", 159 "Error: No ejbFindByPrimaryKey method was found in bean class.")); 160 } 161 162 } catch (ClassNotFoundException e) { 163 Verifier.debug(e); 164 result.addErrorDetails(smh.getLocalString 165 ("tests.componentNameConstructor", 166 "For [ {0} ]", 167 new Object [] {compName.toString()})); 168 result.failed(smh.getLocalString 169 (getClass().getName() + ".failedException", 170 "Error: EJB Class [ {0} ] does not exist or is not loadable.", 171 new Object [] {descriptor.getEjbClassName()})); 172 oneFailed = true; 173 } 174 175 if (oneFailed) { 176 result.setStatus(result.FAILED); 177 } else { 178 if (oneWarning) { 179 result.setStatus(result.WARNING); 180 } else { 181 result.setStatus(result.PASSED); 182 } 183 } 184 } else { result.addNaDetails(smh.getLocalString 186 ("tests.componentNameConstructor", 187 "For [ {0} ]", 188 new Object [] {compName.toString()})); 189 result.notApplicable(smh.getLocalString 190 (getClass().getName() + ".notApplicable2", 191 "Expected persistence type [ {0} ], but bean [ {1} ] has persistence type [ {2} ]", 192 new Object [] {EjbEntityDescriptor.BEAN_PERSISTENCE,descriptor.getName(),persistentType})); 193 } 194 195 return result; 196 197 } else { 198 result.addNaDetails(smh.getLocalString 199 ("tests.componentNameConstructor", 200 "For [ {0} ]", 201 new Object [] {compName.toString()})); 202 result.notApplicable(smh.getLocalString 203 (getClass().getName() + ".notApplicable", 204 "[ {0} ] expected {1} bean, but called with {2} bean.", 205 new Object [] {getClass(),"Entity","Session"})); 206 return result; 207 } 208 } 209 } 210 | Popular Tags |