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.reflect.Field ; 27 import java.util.*; 28 import com.sun.enterprise.deployment.*; 29 import com.sun.enterprise.tools.verifier.*; 30 import com.sun.enterprise.tools.verifier.tests.ejb.RmiIIOPUtils; 31 import com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck; 32 import java.lang.ClassLoader ; 33 import com.sun.enterprise.tools.verifier.tests.*; 34 35 44 public class CmpFields extends EjbTest implements EjbCheck { 45 46 47 59 public Result check(EjbDescriptor descriptor) { 60 61 Result result = getInitializedResult(); 62 ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor(); 63 64 if (descriptor instanceof EjbEntityDescriptor) { 65 String persistentType = 66 ((EjbEntityDescriptor)descriptor).getPersistenceType(); 67 if (EjbEntityDescriptor.CONTAINER_PERSISTENCE.equals(persistentType)) { 68 69 if (EjbCMPEntityDescriptor.CMP_1_1 != ((EjbCMPEntityDescriptor) descriptor).getCMPVersion()) { 71 result.addNaDetails(smh.getLocalString 72 ("tests.componentNameConstructor", 73 "For [ {0} ]", 74 new Object [] {compName.toString()})); 75 result.notApplicable(smh.getLocalString 76 ("com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.notApplicable3", 77 "Test do not apply to this cmp-version of container managed persistence EJBs")); 78 return result; 79 } 80 81 Context context = getVerifierContext(); 82 ClassLoader jcl = context.getClassLoader(); 83 Set persistentFields = 87 ((EjbCMPEntityDescriptor)descriptor).getPersistenceDescriptor().getCMPFields(); 88 Iterator iterator = persistentFields.iterator(); 89 90 Descriptor persistentField; 91 Field field; 92 boolean oneFailed = false; 93 while (iterator.hasNext()) { 94 persistentField = (Descriptor)iterator.next(); 95 boolean foundField = false; 96 try { 97 Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader()); 98 do { 100 try { 101 Field f = c.getDeclaredField(persistentField.getName()); 102 foundField = true; 103 Class persistentFieldClassType = f.getType(); 104 105 if(descriptor.getHomeClassName() != null && !"".equals(descriptor.getHomeClassName()) && 106 descriptor.getRemoteClassName() != null && !"".equals(descriptor.getRemoteClassName())) { 107 if (RmiIIOPUtils.isPersistentFieldTypeValid(persistentFieldClassType,descriptor.getHomeClassName(),descriptor.getRemoteClassName())) { 108 result.addGoodDetails(smh.getLocalString 109 ("tests.componentNameConstructor", 110 "For [ {0} ]", 111 new Object [] {compName.toString()})); 112 result.addGoodDetails(smh.getLocalString 113 (getClass().getName() + ".passed", 114 "Valid type assigned to container managed field [ {0} ] found in bean [ {1} ]", 115 new Object [] {((Descriptor)persistentField).getName(),c.getName()})); 116 } else { 117 oneFailed = true; 118 result.addErrorDetails(smh.getLocalString 119 ("tests.componentNameConstructor", 120 "For [ {0} ]", 121 new Object [] {compName.toString()})); 122 result.addErrorDetails(smh.getLocalString 123 (getClass().getName() + ".failed", 124 "Error: Invalid type assigned to container managed field [ {0} ] found in bean [ {1} ]", 125 new Object [] {((Descriptor)persistentField).getName(),c.getName()})); 126 } 127 } 128 129 if(descriptor.getLocalHomeClassName() != null && !"".equals(descriptor.getLocalHomeClassName()) && descriptor.getLocalClassName() != null && !"".equals(descriptor.getLocalClassName())) { 130 if (RmiIIOPUtils.isPersistentFieldTypeValid(persistentFieldClassType,descriptor.getLocalHomeClassName(),descriptor.getLocalClassName())) { 131 result.addGoodDetails(smh.getLocalString 132 ("tests.componentNameConstructor", 133 "For [ {0} ]", 134 new Object [] {compName.toString()})); 135 result.addGoodDetails(smh.getLocalString 136 (getClass().getName() + ".passed", 137 "Valid type assigned to container managed field [ {0} ] found in bean [ {1} ]", 138 new Object [] {((Descriptor)persistentField).getName(),c.getName()})); 139 } else { 140 oneFailed = true; 141 result.addErrorDetails(smh.getLocalString 142 ("tests.componentNameConstructor", 143 "For [ {0} ]", 144 new Object [] {compName.toString()})); 145 result.addErrorDetails(smh.getLocalString 146 (getClass().getName() + ".failed", 147 "Error: Invalid type assigned to container managed field [ {0} ] found in bean [ {1} ]", 148 new Object [] {((Descriptor)persistentField).getName(),c.getName()})); 149 } 150 } 151 152 } catch (NoSuchFieldException e) { 153 foundField = false; 154 } 155 } while (((c = c.getSuperclass()) != null) && (!foundField)); 156 if (!foundField) { 157 if (!oneFailed) { 158 oneFailed = true; 159 } 160 result.addErrorDetails(smh.getLocalString 161 ("tests.componentNameConstructor", 162 "For [ {0} ]", 163 new Object [] {compName.toString()})); 164 result.addErrorDetails(smh.getLocalString 165 (getClass().getName() + ".failedException1", 166 "Error: field [ {0} ] not found in class [ {1} ]", 167 new Object [] {((Descriptor)persistentField).getName(),descriptor.getEjbClassName()})); 168 } 169 } catch (ClassNotFoundException e) { 170 Verifier.debug(e); 171 result.addErrorDetails(smh.getLocalString 172 ("tests.componentNameConstructor", 173 "For [ {0} ]", 174 new Object [] {compName.toString()})); 175 result.failed(smh.getLocalString 176 (getClass().getName() + ".failedException", 177 "Error: [ {0} ] class not found.", 178 new Object [] {descriptor.getEjbClassName()})); 179 } 180 } 181 if (oneFailed) { 182 result.setStatus(Result.FAILED); 183 } else { 184 result.setStatus(Result.PASSED); 185 } 186 } else { result.addNaDetails(smh.getLocalString 188 ("tests.componentNameConstructor", 189 "For [ {0} ]", 190 new Object [] {compName.toString()})); 191 result.notApplicable(smh.getLocalString 192 (getClass().getName() + ".notApplicable1", 193 "Expected persistence type [ {0} ], but [ {1} ] bean has persistence type [ {2} ]", 194 new Object [] {EjbEntityDescriptor.CONTAINER_PERSISTENCE,descriptor.getName(),persistentType})); 195 } 196 return result; 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 |