1 23 package com.sun.enterprise.tools.verifier.tests.ejb.homeintf; 24 25 import com.sun.enterprise.tools.verifier.Result; 26 import com.sun.enterprise.tools.verifier.Verifier; 27 28 import java.lang.ClassLoader ; 29 import java.lang.reflect.Method ; 30 import java.util.Vector ; 31 import java.util.Iterator ; 32 33 import com.sun.enterprise.tools.verifier.tests.ejb.EjbTest; 34 import com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor; 35 import com.sun.enterprise.deployment.EjbDescriptor; 36 import com.sun.enterprise.deployment.EjbSessionDescriptor; 37 import com.sun.enterprise.deployment.EjbEntityDescriptor; 38 39 45 abstract public class HomeMethodTest extends EjbTest { 46 47 49 abstract protected String getHomeInterfaceName(EjbDescriptor descriptor); 50 abstract protected String getSuperInterface(); 51 52 59 60 abstract protected void runIndividualHomeMethodTest( Method m,EjbDescriptor descriptor, Result result); 61 62 68 public Result check(EjbDescriptor descriptor) { 69 70 Result result = getInitializedResult(); 71 ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor(); 72 73 if(getHomeInterfaceName(descriptor) == null || "".equals(getHomeInterfaceName(descriptor))){ 74 addNaDetails(result, compName); 75 result.notApplicable(smh.getLocalString 76 ("com.sun.enterprise.tools.verifier.tests.ejb.localinterfaceonly.notapp", 77 "Not Applicable because, EJB [ {0} ] has Local Interfaces only.", 78 new Object [] {descriptor.getEjbClassName()})); 79 80 return result; 81 } 82 83 if (!(descriptor instanceof EjbSessionDescriptor) && 84 !(descriptor instanceof EjbEntityDescriptor)) { 85 addNaDetails(result, compName); 86 result.notApplicable(smh.getLocalString 87 ("com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodTest.notApplicable1", 88 "Test apply only to session or entity beans.")); 89 return result; 90 } 91 boolean homeMethodFound = false; 92 93 try { 94 ClassLoader jcl = getVerifierContext().getClassLoader(); 96 Class homeInterfaceClass = Class.forName(getClassName(descriptor), false, jcl); 97 98 Vector <Method > v = new Vector <Method >(); 99 100 while (homeInterfaceClass != null && 101 !homeInterfaceClass.getName().equals(getSuperInterface()) && 102 !homeInterfaceClass.getName().equals("java.lang.Object")) { 103 Method [] homeInterfaceMethods = homeInterfaceClass.getDeclaredMethods(); 104 for (int i=0;i<homeInterfaceMethods.length;i++) { 105 v.add(homeInterfaceMethods[i]); 106 } 107 homeInterfaceClass = homeInterfaceClass.getSuperclass(); 108 } 109 110 111 Iterator iterator = v.iterator(); 112 while (iterator.hasNext()) { 113 Method method = (Method ) iterator.next(); 114 String methodName = method.getName(); 115 if (methodName.startsWith("create") || methodName.startsWith("find") || 116 methodName.startsWith("remove")) 117 continue; 118 119 Method m = getMethod(javax.ejb.EJBHome .class, methodName, 120 method.getParameterTypes()); 121 if (m!=null) { 122 continue; 124 } 125 126 homeMethodFound = true; 127 128 runIndividualHomeMethodTest( method,descriptor, result); 131 if (result.getStatus() == Result.FAILED) 132 break; 133 134 } 135 } catch (ClassNotFoundException e) { 136 Verifier.debug(e); 137 addErrorDetails(result, compName); 138 result.failed(smh.getLocalString 139 ("com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodTest.failedException", 140 "Error: Home interface [ {0} ] does not exist or is not loadable within bean [ {1} ]", 141 new Object [] {getClassName(descriptor),descriptor.getName()})); 142 } 143 144 if (!homeMethodFound) { 145 addNaDetails(result, compName); 146 result.notApplicable(smh.getLocalString 147 ("com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodTest.notApplicable2", 148 "Home interface [ {0} ] does not define any home methods", 149 new Object [] {getClassName(descriptor)})); 150 } return result; 154 } 155 156 private String getClassName(EjbDescriptor descriptor) { 157 return getHomeInterfaceName(descriptor); 158 } 159 } 160 | Popular Tags |