1 23 package com.sun.enterprise.tools.verifier.tests.ejb.session; 24 25 import java.lang.reflect.Field ; 26 import java.lang.reflect.Modifier ; 27 28 import com.sun.enterprise.deployment.EjbDescriptor; 29 import com.sun.enterprise.deployment.EjbSessionDescriptor; 30 import com.sun.enterprise.tools.verifier.Result; 31 import com.sun.enterprise.tools.verifier.Verifier; 32 import com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor; 33 import com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck; 34 import com.sun.enterprise.tools.verifier.tests.ejb.EjbTest; 35 36 46 public class TransientFieldsSerialization extends EjbTest implements EjbCheck { 47 48 49 50 64 public Result check(EjbDescriptor descriptor) { 65 66 Result result = getInitializedResult(); 67 ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor(); 68 boolean isEjb30 = descriptor.getEjbBundleDescriptor() 69 .getSpecVersion().equalsIgnoreCase("3.0"); 70 71 if (descriptor instanceof EjbSessionDescriptor) { 72 try { 73 Class c = Class.forName(((EjbSessionDescriptor)descriptor).getEjbClassName(), false, 74 getVerifierContext().getClassLoader()); 75 Field [] fields = c.getDeclaredFields(); 80 for (int i = 0; i < fields.length; i++) { 81 int modifiers = fields[i].getModifiers(); 82 if (!Modifier.isTransient(modifiers)) { 83 continue; 84 } else { 85 Class fc = fields[i].getType(); 86 if ((fc.getName().equals("javax.ejb.SessionContext")) || 90 (fc.getName().equals("javax.transaction.UserTransaction")) || 91 (fc.getName().equals(descriptor.getRemoteClassName())) || 92 (fc.getName().equals(descriptor.getHomeClassName()))|| 93 (fc.getName().equals(descriptor.getLocalClassName())) || 94 (fc.getName().equals(descriptor.getLocalHomeClassName())) || 95 (isEjb30 && fc.getName().equals("javax.ejb.EntityManager")) || 96 (isEjb30 && fc.getName().equals("javax.ejb.EntityManagerFactory"))) { 97 98 result.failed(smh.getLocalString 99 ("tests.componentNameConstructor", 100 "For [ {0} ]", 101 new Object [] {compName.toString()})); 102 result.addErrorDetails(smh.getLocalString 103 (getClass().getName() + ".failed", 104 "Error: Field [ {0} ] defined within" + 105 " session bean class [ {1} ] is defined as transient. " + 106 "Session bean fields should not store in a " + 107 "transient field a reference to any of the following objects: " + 108 "SessionContext object; environment JNDI naming context and any " + 109 "its subcontexts; home and remote interfaces;" + 110 " and the UserTransaction interface.", 111 new Object [] {fields[i].getName(), 112 ((EjbSessionDescriptor)descriptor).getEjbClassName()})); 113 } 114 } 115 } 116 117 } catch (ClassNotFoundException e) { 118 Verifier.debug(e); 119 result.addErrorDetails(smh.getLocalString 120 ("tests.componentNameConstructor", 121 "For [ {0} ]", 122 new Object [] {compName.toString()})); 123 result.failed(smh.getLocalString 124 (getClass().getName() + ".failedException", 125 "Error: [ {0} ] class not found.", 126 new Object [] {((EjbSessionDescriptor)descriptor).getEjbClassName()})); 127 } 128 } 129 if(result.getStatus()!=Result.FAILED) { 130 addGoodDetails(result, compName); 131 result.passed(smh.getLocalString 132 (getClass().getName() + ".passed", 133 "This session bean class has not stored in a " + 134 "transient field a reference to any of the following objects: " + 135 "SessionContext object; environment JNDI naming context and" + 136 " any its subcontexts; home and remote interfaces; and the " + 137 "UserTransaction interface.")); 138 } 139 return result; 140 } 141 } 142 143 144 | Popular Tags |