1 23 package com.sun.enterprise.tools.verifier.tests.ejb.entity.findermethod; 24 25 import com.sun.enterprise.tools.verifier.tests.ejb.EjbTest; 26 import com.sun.enterprise.deployment.EjbDescriptor; 27 import com.sun.enterprise.deployment.EjbEntityDescriptor; 28 import java.lang.ClassLoader ; 29 import com.sun.enterprise.tools.verifier.tests.*; 30 import java.util.*; 31 import java.lang.reflect.*; 32 import com.sun.enterprise.tools.verifier.*; 33 import com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck; 34 import com.sun.enterprise.tools.verifier.tests.ejb.EjbUtils; 35 36 48 public class HomeInterfaceFindMethodExceptionFinder extends EjbTest implements EjbCheck { 49 Result result = null; 50 ComponentNameConstructor compName = null; 51 52 68 public Result check(EjbDescriptor descriptor) { 69 70 result = getInitializedResult(); 71 compName = getVerifierContext().getComponentNameConstructor(); 72 boolean oneFailed = false; 73 if (descriptor instanceof EjbEntityDescriptor) { 74 String persistence = 75 ((EjbEntityDescriptor)descriptor).getPersistenceType(); 76 if (EjbEntityDescriptor.BEAN_PERSISTENCE.equals(persistence)) { 77 if(descriptor.getHomeClassName() != null && !"".equals(descriptor.getHomeClassName())) { 78 oneFailed = commonToBothInterfaces(descriptor.getHomeClassName(),descriptor); 79 } 80 if(oneFailed == false) { 81 if(descriptor.getLocalHomeClassName() != null && !"".equals(descriptor.getLocalHomeClassName())) { 82 oneFailed = commonToBothInterfaces(descriptor.getLocalHomeClassName(),descriptor); 83 } 84 } 85 if (oneFailed) { 86 result.setStatus(result.FAILED); 87 } else { 88 result.setStatus(result.PASSED); 89 } 90 return result; 91 92 } else { result.addNaDetails(smh.getLocalString 94 ("tests.componentNameConstructor", 95 "For [ {0} ]", 96 new Object [] {compName.toString()})); 97 result.notApplicable(smh.getLocalString 98 (getClass().getName() + ".notApplicable2", 99 "Expected [ {0} ] managed persistence, but [ {1} ] bean has [ {2} ] managed persistence.", 100 new Object [] {EjbEntityDescriptor.BEAN_PERSISTENCE,descriptor.getName(),persistence})); 101 return result; 102 } 103 104 } else { 105 result.addNaDetails(smh.getLocalString 106 ("tests.componentNameConstructor", 107 "For [ {0} ]", 108 new Object [] {compName.toString()})); 109 result.notApplicable(smh.getLocalString 110 (getClass().getName() + ".notApplicable", 111 "[ {0} ] expected {1} bean, but called with {2} bean.", 112 new Object [] {getClass(),"Entity","Session"})); 113 return result; 114 } 115 } 116 117 123 124 private boolean commonToBothInterfaces(String home, EjbDescriptor descriptor) { 125 boolean oneFailed = false; 126 try { 129 Context context = getVerifierContext(); 130 ClassLoader jcl = context.getClassLoader(); 131 Class c = Class.forName(home, false, getVerifierContext().getClassLoader()); 132 Method methods[] = c.getDeclaredMethods(); 133 Class [] methodExceptionTypes; 134 boolean throwsFinderException = false; 135 136 for (int i=0; i< methods.length; i++) { 137 throwsFinderException = false; 139 if (methods[i].getName().startsWith("find")) { 140 throwsFinderException = false; 142 methodExceptionTypes = methods[i].getExceptionTypes(); 143 144 if (EjbUtils.isValidFinderException(methodExceptionTypes)) { 146 throwsFinderException = true; 147 } 148 149 if (throwsFinderException ) { 153 result.addGoodDetails(smh.getLocalString 154 ("tests.componentNameConstructor", 155 "For [ {0} ]", 156 new Object [] {compName.toString()})); 157 result.addGoodDetails(smh.getLocalString 158 (getClass().getName() + ".debug1", 159 "For Home Interface [ {0} ] Method [ {1} ]", 160 new Object [] {c.getName(),methods[i].getName()})); 161 result.addGoodDetails(smh.getLocalString 162 (getClass().getName() + ".passed", 163 "The [ {0} ] method which must throw javax.ejb.FinderException was found.", 164 new Object [] {methods[i].getName()})); 165 } else if (!throwsFinderException) { 166 oneFailed = true; 167 result.addErrorDetails(smh.getLocalString 168 ("tests.componentNameConstructor", 169 "For [ {0} ]", 170 new Object [] {compName.toString()})); 171 result.addErrorDetails(smh.getLocalString 172 (getClass().getName() + ".debug1", 173 "For Home Interface [ {0} ] Method [ {1} ]", 174 new Object [] {c.getName(),methods[i].getName()})); 175 result.addErrorDetails(smh.getLocalString 176 (getClass().getName() + ".failed", 177 "Error: A [ {0} ] method was found, but did not throw javax.ejb.FinderException.", 178 new Object [] {methods[i].getName()})); 179 } } } return oneFailed; 183 184 } catch (ClassNotFoundException e) { 185 Verifier.debug(e); 186 result.addErrorDetails(smh.getLocalString 187 ("tests.componentNameConstructor", 188 "For [ {0} ]", 189 new Object [] {compName.toString()})); 190 result.failed(smh.getLocalString 191 (getClass().getName() + ".failedException", 192 "Error: Home interface [ {0} ] does not exist or is not loadable within bean [ {1} ]", 193 new Object [] {home, descriptor.getName()})); 194 return oneFailed; 195 } 196 197 } 198 } 199 | Popular Tags |