FileDocCategorySizeDatePackage
EjbCreateMethodArgs.javaAPI DocGlassfish v2 API9097Fri May 04 22:33:46 BST 2007com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbcreatemethod

EjbCreateMethodArgs

public class EjbCreateMethodArgs extends com.sun.enterprise.tools.verifier.tests.ejb.EjbTest implements com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck
Entity Bean's ejbCreate(...) methods arguments test. Each entity Bean class may define zero or more ejbCreate(...) methods. The number and signatures of a entity Bean's create methods are specific to each EJB class. The method signatures must follow these rules: The method name must be ejbCreate. The methods arguments must be legal types for RMI-IIOP.

Fields Summary
Constructors Summary
Methods Summary
public Resultcheck(EjbDescriptor descriptor)
Entity Bean's ejbCreate(...) methods arguments test. Each entity Bean class may define zero or more ejbCreate(...) methods. The number and signatures of a entity Bean's create methods are specific to each EJB class. The method signatures must follow these rules: The method name must be ejbCreate. The methods arguments must be legal types for RMI-IIOP.

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) {
	    boolean oneFailed = false;
	    int foundAtLeastOne = 0;
	    boolean remote_exists = false;
	    try {
		Context context = getVerifierContext();
		ClassLoader jcl = context.getClassLoader();
		Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());

		//bug fix for 4699227 
                if (descriptor.getRemoteClassName() == null ||
                        descriptor.getRemoteClassName().equals("")) {
                       result.addNaDetails(smh.getLocalString
                        ("tests.componentNameConstructor", "For [ {0} ]",
                         new Object[] {compName.toString()}));
                       result.notApplicable(smh.getLocalString
                       ("com.sun.enterprise.tools.verifier.tests.ejb.localinterfaceonly.notapp",
                        "Not Applicable because, EJB [ {0} ] has Local Interfaces only.",
                                          new Object[] {descriptor.getEjbClassName()}));

                       return result;
                }

		if (descriptor.getRemoteClassName() != null &&
		    !descriptor.getRemoteClassName().equals(""))
		    remote_exists = true;

		Class [] ejbCreateMethodParameterTypes;
		boolean ejbCreateFound = false;
		boolean isLegalRMIIIOP = false;
                // start do while loop here....
                do {
		    Method [] methods = c.getDeclaredMethods();
		    for (int i = 0; i < methods.length; i++) {
			// reset flags from last time thru loop
			ejbCreateFound = false;
			isLegalRMIIIOP = false;

			// The method name must be ejbCreate. 
			if (methods[i].getName().startsWith("ejbCreate")) {
			    foundAtLeastOne++;
			    ejbCreateFound = true;
			   
			    if (remote_exists == true) {
				// The methods arguments types must be legal types for RMI-IIOP.
				ejbCreateMethodParameterTypes = methods[i].getParameterTypes();
				if (RmiIIOPUtils.isValidRmiIIOPParameters(ejbCreateMethodParameterTypes)) {
				    // these method parameters are valid, continue
				    isLegalRMIIIOP = true;
				}
			    } else isLegalRMIIIOP = true; //if the ejb has only a local interface
			                                  //we donot need to check for legal rmi-iiop parameters
			    // now display the appropriate results for this particular ejbCreate
			    // method

			    if (ejbCreateFound && !isLegalRMIIIOP) {
				oneFailed = true;
				result.addErrorDetails(smh.getLocalString
						       ("tests.componentNameConstructor",
							"For [ {0} ]",
							new Object[] {compName.toString()}));
				result.addErrorDetails(smh.getLocalString
						       (getClass().getName() + ".debug1",
							"For EJB Class [ {0} ] method [ {1} ]",
							new Object[] {descriptor.getEjbClassName(),methods[i].getName()}));
				result.addErrorDetails(smh.getLocalString
						       (getClass().getName() + ".failed",
							"Error: An [ {0} ] method was found, but [ {1} ] method has illegal parameter values.   [ {2} ] methods arguments types must be legal types for RMI-IIOP.",
							new Object[] {methods[i].getName(),methods[i].getName(),methods[i].getName()}));
				break;
			    } 
			}
		    }
		    if (oneFailed == true)
			break;
                } while (((c = c.getSuperclass()) != null) && (foundAtLeastOne == 0));
		
		if (foundAtLeastOne == 0) {
		    result.addNaDetails(smh.getLocalString
					("tests.componentNameConstructor",
					 "For [ {0} ]",
					 new Object[] {compName.toString()}));
		    result.notApplicable(smh.getLocalString
					 (getClass().getName() + ".notApplicable1",
					  "[ {0} ] does not declare any ejbCreate(...) methods.",
					  new Object[] {descriptor.getEjbClassName()}));
		}
	
		if (oneFailed == false && foundAtLeastOne > 0) {
		    result.addGoodDetails(smh.getLocalString
					  ("tests.componentNameConstructor",
					   "For [ {0} ]",
					   new Object[] {compName.toString()}));
		    result.addGoodDetails(smh.getLocalString
					  (getClass().getName() + ".debug1",
					   "For EJB Class [ {0} ]",
					   new Object[] {descriptor.getEjbClassName()}));
		    result.addGoodDetails(smh.getLocalString
					  (getClass().getName() + ".passed",
					   "[ {0} ] properly declares ejbCreate<method> method with arguments that are legal types for RMI-IIOP.",
					   new Object[] {descriptor.getEjbClassName()}));
		}
	    } catch (ClassNotFoundException e) {
		Verifier.debug(e);
		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[] {descriptor.getEjbClassName()}));
		oneFailed = true;
	    }  

	    if (oneFailed) {
		result.setStatus(result.FAILED);
	    } else if (foundAtLeastOne == 0) {
		result.setStatus(result.NOT_APPLICABLE);
	    } else {
		result.setStatus(result.PASSED);
	    }

	    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} bean.",
				  new Object[] {getClass(),"Entity","Session"}));
	    return result;
	}