FileDocCategorySizeDatePackage
CmpFieldsTransient.javaAPI DocGlassfish v2 API8502Fri May 04 22:33:38 BST 2007com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp

CmpFieldsTransient

public class CmpFieldsTransient extends com.sun.enterprise.tools.verifier.tests.ejb.EjbTest implements com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck
The Bean Provider is responsible for using the cmp-field elements of the deployment descriptor to declare the instance's fields that the Container must load and store at the defined times. The fields must not be defined in the entity bean class as transient.

Fields Summary
Constructors Summary
Methods Summary
public Resultcheck(EjbDescriptor descriptor)
The Bean Provider is responsible for using the cmp-field elements of the deployment descriptor to declare the instance's fields that the Container must load and store at the defined times. The fields must not be defined in the entity bean class as transient.

param
descriptor the Enterprise Java Bean deployment descriptor
return
Result the results for this assertion


	Result result = getInitializedResult();
	ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();

	if (descriptor instanceof EjbEntityDescriptor) {
	    String persistence =
		((EjbEntityDescriptor)descriptor).getPersistenceType();
	    if (EjbEntityDescriptor.CONTAINER_PERSISTENCE.equals(persistence)) {
                
                // this test apply only to 1.x cmp beans. in cmp 2.x, fields are virtual fields only
                if (EjbCMPEntityDescriptor.CMP_1_1 != ((EjbCMPEntityDescriptor) descriptor).getCMPVersion()) {
		    result.addNaDetails(smh.getLocalString
				       ("tests.componentNameConstructor",
					"For [ {0} ]",
					new Object[] {compName.toString()}));
	            result.notApplicable(smh.getLocalString
				 ("com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.notApplicable3",
				  "Test do not apply to this cmp-version of container managed persistence EJBs"));
        	    return result;                    
                }                   
		boolean oneFailed = false;
		boolean badField = false;
		for (Iterator itr =
			 ((EjbCMPEntityDescriptor)descriptor).getPersistenceDescriptor().getCMPFields().iterator();
		     itr.hasNext();) {
 
		    FieldDescriptor nextPersistentField = (FieldDescriptor)itr.next();
		    badField = false;
		    boolean foundField = false;

		    // fields must not be defined in the entity bean class as transient.
		    Class c1 = null;
		    try {
			Class c = Class.forName(((EjbEntityDescriptor)descriptor).getEjbClassName(), false, getVerifierContext().getClassLoader());
			// start do while loop here....
			do {
			    try {
                                c1 = c;
				Field f = c.getDeclaredField(nextPersistentField.getName());

				foundField = true;
				int modifiers = f.getModifiers();
				if (!Modifier.isTransient(modifiers)) {
				    continue;
				} else {
				    if (!oneFailed) {
					oneFailed = true;
				    }
				    badField = true;
				}
        
				if (badField) {
				    result.addErrorDetails(smh.getLocalString
							   ("tests.componentNameConstructor",
							    "For [ {0} ]",
							    new Object[] {compName.toString()}));
				    result.failed(smh.getLocalString
						  (getClass().getName() + ".failed",
						   "Error: Field [ {0} ] defined within entity bean class [ {1} ] is defined as transient.  Container managed field must not be defined in the entity bean class as transient.",
						   new Object[] {nextPersistentField.getName(),c.getName()}));
				}
			    } catch (NoSuchFieldException e) {
				foundField = false;
			    }  
			} while (((c = c.getSuperclass()) != null) && (!foundField));
			if (!foundField) {
			    if (!oneFailed) {
				oneFailed = true;
			    }
			    result.addErrorDetails(smh.getLocalString
						   ("tests.componentNameConstructor",
						    "For [ {0} ]",
						    new Object[] {compName.toString()}));
			    result.failed(smh.getLocalString
					  (getClass().getName() + ".failedException1",
					   "Error: [ {0} ] field not found within class [ {1} ]",
					   new Object[] {nextPersistentField.getName(),((EjbEntityDescriptor)descriptor).getEjbClassName()}));
			}

		    } catch (ClassNotFoundException e) {
			Verifier.debug(e);
			if (!oneFailed) {
			    oneFailed = true;
			}
			result.addErrorDetails(smh.getLocalString
					       ("tests.componentNameConstructor",
						"For [ {0} ]",
						new Object[] {compName.toString()}));
			result.failed(smh.getLocalString
				      (getClass().getName() + ".failedException",
				       "Error: [ {0} ] class not found.",
				       new Object[] {((EjbEntityDescriptor)descriptor).getEjbClassName()}));
		    }  
		    if (!oneFailed) {
			result.addGoodDetails(smh.getLocalString
				       ("tests.componentNameConstructor",
					"For [ {0} ]",
					new Object[] {compName.toString()}));
			result.passed(smh.getLocalString
				      (getClass().getName() + ".passed",
				       "This entity bean class [ {0} ] has defined [ {1} ] container managed field as non-transient field.",
				       new Object[] {c1.getName(),nextPersistentField.getName()}));
		    }
		}
                if (oneFailed) {
                    result.setStatus(Result.FAILED);
                } else {
                    result.setStatus(Result.PASSED);
                }
		return result;
 
	    } else { // if (BEAN_PERSISTENCE.equals(persistence)) {
		result.addNaDetails(smh.getLocalString
				    ("tests.componentNameConstructor",
				     "For [ {0} ]",
				     new Object[] {compName.toString()}));
		result.notApplicable(smh.getLocalString
				     (getClass().getName() + ".notApplicable1",
				      "Expected [ {0} ] managed persistence, but [ {1} ] bean has [ {2} ] managed persistence.",
				      new Object[] {EjbEntityDescriptor.CONTAINER_PERSISTENCE,descriptor.getName(),persistence}));
		return result;
	    }
	} else {
	    result.addNaDetails(smh.getLocalString
				       ("tests.componentNameConstructor",
					"For [ {0} ]",
					new Object[] {compName.toString()}));
	    result.notApplicable(smh.getLocalString
				 (getClass().getName() + ".notApplicable",
				  "{0} expected {1} bean, but called with {2}.",
				  new Object[] {getClass(),"Entity","Session"}));
	    return result;
	}