1 23 package com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp; 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 java.lang.reflect.*; 29 import com.sun.enterprise.deployment.*; 30 import com.sun.enterprise.tools.verifier.*; 31 import java.util.*; 32 import com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck; 33 import com.sun.enterprise.tools.verifier.tests.ejb.EjbUtils; 34 import com.sun.enterprise.tools.verifier.tests.ejb.RmiIIOPUtils; 35 36 42 public class CmpFieldsJavaTypesAssigned extends EjbTest implements EjbCheck { 43 44 45 55 public Result check(EjbDescriptor descriptor) { 56 57 Result result = getInitializedResult(); 58 ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor(); 59 60 if (descriptor instanceof EjbEntityDescriptor) { 61 String persistence = 62 ((EjbEntityDescriptor)descriptor).getPersistenceType(); 63 if (EjbEntityDescriptor.CONTAINER_PERSISTENCE.equals(persistence)) { 64 65 if (EjbCMPEntityDescriptor.CMP_1_1 != ((EjbCMPEntityDescriptor) descriptor).getCMPVersion()) { 67 result.addNaDetails(smh.getLocalString 68 ("tests.componentNameConstructor", 69 "For [ {0} ]", 70 new Object [] {compName.toString()})); 71 result.notApplicable(smh.getLocalString 72 ("com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.notApplicable3", 73 "Test do not apply to this cmp-version of container managed persistence EJBs")); 74 return result; 75 } 76 77 boolean oneFailed = false; 78 boolean badField = false; 79 80 Iterator itr = ((EjbCMPEntityDescriptor)descriptor).getPersistenceDescriptor().getCMPFields().iterator(); 81 while (itr.hasNext()) { 82 83 FieldDescriptor nextPersistentField = (FieldDescriptor)itr.next(); 84 badField = false; 85 boolean foundField = false; 86 87 Class c1 = null; 92 try { 93 Class c = Class.forName(((EjbEntityDescriptor)descriptor).getEjbClassName(), false, getVerifierContext().getClassLoader()); 94 do { 96 try { 97 c1 = c; 98 Field f = c.getDeclaredField(nextPersistentField.getName()); 99 foundField = true; 100 Class fc = f.getType(); 101 if ((RmiIIOPUtils.isValidRmiIDLPrimitiveType(fc)) || 102 (descriptor.getRemoteClassName().equals(fc.getName())) || 103 (descriptor.getHomeClassName().equals(fc.getName())) || 104 (EjbUtils.isValidSerializableType(fc))|| 105 (descriptor.getLocalClassName().equals(fc.getName())) || 106 (descriptor.getLocalHomeClassName().equals(fc.getName()))) { 107 continue; 108 } else { 109 if (!oneFailed) { 110 oneFailed = true; 111 } 112 badField = true; 113 } 114 115 if (badField) { 116 result.addErrorDetails(smh.getLocalString 117 ("tests.componentNameConstructor", 118 "For [ {0} ]", 119 new Object [] {compName.toString()})); 120 result.failed(smh.getLocalString 121 (getClass().getName() + ".failed", 122 "Error: Field [ {0} ] defined within entity bean class [ {1} ] was assigned an invalid type. Container managed field must be assigned in the entity bean class with Java types restricted to the following: Java primitive types, Java serializable types, and references of enterprise beans' remote or home interfaces.", 123 new Object [] {nextPersistentField.getName(),((EjbEntityDescriptor)descriptor).getEjbClassName()})); 124 } 125 } catch (NoSuchFieldException e) { 126 foundField = false; 127 } 128 } while (((c = c.getSuperclass()) != null) && (!foundField)); 129 130 if (!foundField) { 131 if (!oneFailed) { 132 oneFailed = true; 133 } 134 result.addErrorDetails(smh.getLocalString 135 ("tests.componentNameConstructor", 136 "For [ {0} ]", 137 new Object [] {compName.toString()})); 138 result.failed(smh.getLocalString 139 (getClass().getName() + ".failedException1", 140 "Error: [ {0} ] field not found within class [ {1} ]", 141 new Object [] {nextPersistentField.getName(),((EjbEntityDescriptor)descriptor).getEjbClassName()})); 142 } 143 } catch (ClassNotFoundException e) { 144 Verifier.debug(e); 145 result.addErrorDetails(smh.getLocalString 146 ("tests.componentNameConstructor", 147 "For [ {0} ]", 148 new Object [] {compName.toString()})); 149 result.failed(smh.getLocalString 150 (getClass().getName() + ".failedException", 151 "Error: [ {0} ] class not found.", 152 new Object [] {((EjbEntityDescriptor)descriptor).getEjbClassName()})); 153 } 154 155 if (!oneFailed) { 156 result.addGoodDetails(smh.getLocalString 157 ("tests.componentNameConstructor", 158 "For [ {0} ]", 159 new Object [] {compName.toString()})); 160 result.passed(smh.getLocalString 161 (getClass().getName() + ".passed", 162 "This entity bean class [ {0} ] has assigned [ {1} ] container managed field with valid Java type.", 163 new Object [] {c1.getName(),nextPersistentField.getName()})); 164 } 165 } 166 if (oneFailed) { 167 result.setStatus(Result.FAILED); 168 } else { 169 result.setStatus(Result.PASSED); 170 } 171 return result; 172 173 } else { result.addNaDetails(smh.getLocalString 175 ("tests.componentNameConstructor", 176 "For [ {0} ]", 177 new Object [] {compName.toString()})); 178 result.notApplicable(smh.getLocalString 179 (getClass().getName() + ".notApplicable1", 180 "Expected [ {0} ] managed persistence, but [ {1} ] bean has [ {2} ] managed persistence.", 181 new Object [] {EjbEntityDescriptor.CONTAINER_PERSISTENCE,descriptor.getName(),persistence})); 182 return result; 183 } 184 } else { 185 result.addNaDetails(smh.getLocalString 186 ("tests.componentNameConstructor", 187 "For [ {0} ]", 188 new Object [] {compName.toString()})); 189 result.notApplicable(smh.getLocalString 190 (getClass().getName() + ".notApplicable", 191 "{0} expected {1} bean, but called with {2}.", 192 new Object [] {getClass(),"Entity","Session"})); 193 return result; 194 } 195 196 197 198 } 199 } 200 | Popular Tags |