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

EjbCreateMatchesCreate

public class EjbCreateMatchesCreate extends com.sun.enterprise.tools.verifier.tests.ejb.EjbTest implements com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck
Entity beans home interface create method match bean class test. The following are the requirements for the Entity Bean's home interface signature: A Entity Bean's home interface defines one or more create(...) methods. Each create method must be named ``create'', and it must match one of the ejbCreate methods defined in the enterprise Bean class. The matching ejbCreate method must have the same number and types of arguments.

Fields Summary
Result
result
ComponentNameConstructor
compName
boolean
foundAtLeastOneCreate
Constructors Summary
Methods Summary
public Resultcheck(EjbDescriptor descriptor)
Entity beans home interface create method match bean class test. The following are the requirements for the Entity Bean's home interface signature: A Entity Bean's home interface defines one or more create(...) methods. Each create method must be named ``create'', and it must match one of the ejbCreate methods defined in the enterprise Bean class. The matching ejbCreate method must have the same number and types of arguments.

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


                                                                                                          
        

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

	if (descriptor instanceof EjbEntityDescriptor) {
	    boolean oneFailed = false;
	    // RULE: entity home interface are only allowed to have create 
	    //       methods which match ejbCreate, 
	    oneFailed = commonToBothInterfaces(descriptor.getHomeClassName(),descriptor.getLocalHomeClassName(),descriptor);
	    if (oneFailed) {
		result.setStatus(result.FAILED);
	    } else {
                if(foundAtLeastOneCreate == false)
                {
                    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(),"Session","Entity"}));
	    return result;
	} 
    
private booleancommonToBothInterfaces(java.lang.String remote, java.lang.String local, EjbDescriptor descriptor)
This method is responsible for the logic of the test. It is called for both local and remote interfaces.

param
descriptor the Enterprise Java Bean deployment descriptor
param
home for the Home interface of the Ejb.
return
boolean the results for this assertion i.e if a test has failed or not

	boolean oneFailed = false;
	try {
	    Context context = getVerifierContext();
	    ClassLoader jcl = context.getClassLoader();
	    Class [] methodParameterTypes;
	    Class [] businessMethodParameterTypes;
	    boolean signaturesMatch = false;
	
	    boolean found = false;
	    Vector<Method> createMethodSuffix = new Vector<Method>();
	    
	    if (local != null) {
		Class localhome = Class.forName(local, false, getVerifierContext().getClassLoader());
		Method [] localhomeMethods = localhome.getDeclaredMethods();
		for (int i = 0; i < localhomeMethods.length; i++) {
		    // The method name must start with create. 
		    if (localhomeMethods[i].getName().startsWith("create")) {
			createMethodSuffix.addElement( (Method)localhomeMethods[i]);
			foundAtLeastOneCreate  = true;
			
		    }
		}
	    }
	    if (remote != null) {
		Class home = Class.forName(remote, false, getVerifierContext().getClassLoader());
		Method [] homeMethods = home.getDeclaredMethods();
		for (int i = 0; i < homeMethods.length; i++) {
		    // The method name must start with create. 
		    if (homeMethods[i].getName().startsWith("create")) {
			createMethodSuffix.addElement( (Method)homeMethods[i]);
			foundAtLeastOneCreate  = true;
			
		    }
		}
	    }
	    if (foundAtLeastOneCreate == false) {
                result.addNaDetails(smh.getLocalString
                                       ("tests.componentNameConstructor",
                                        "For [ {0} ]",
                                        new Object[] {compName.toString()}));
                result.notApplicable(smh.getLocalString
                                     (getClass().getName() + ".notApplicable1",
                                      "[ {0} ]`s home/localhome does not declare any create<Method> methods.",
                                      new Object[] {descriptor.getEjbClassName()}));
                return false;
	    }
	    
	    Class EJBClass = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
	    // start do while loop here....
	    do {
		Method [] methods = EJBClass.getMethods();
		// find matching "ejbCreate" in bean class
		for (int k = 0; k < createMethodSuffix.size(); k++) {
		    for (int j = 0; j < methods.length; j++) {
		        found = false;
			if (methods[j].getName().startsWith("ejbCreate")) {
			    found = true;
			    String matchSuffix = methods[j].getName().substring(9);
			    signaturesMatch = false;
			    if (matchSuffix.equals(((Method)(createMethodSuffix.elementAt(k))).getName().substring(6))) {
			        methodParameterTypes = ((Method)(createMethodSuffix.elementAt(k))).getParameterTypes();
				businessMethodParameterTypes = methods[j].getParameterTypes();
				if (Arrays.equals(methodParameterTypes,businessMethodParameterTypes)) {
				    signaturesMatch = true;
				    // now display the appropriate results for this particular ejbCreate
				    // method
				    result.addGoodDetails(smh.getLocalString
				       ("tests.componentNameConstructor",
					"For [ {0} ]",
					new Object[] {compName.toString()}));
				    result.addGoodDetails(smh.getLocalString
							  (getClass().getName() + ".debug1",
							   "For Home Interface Method [ {0} ]",
							   new Object[] {((Method)(createMethodSuffix.elementAt(k))).getName()}));
				    result.addGoodDetails(smh.getLocalString
							  (getClass().getName() + ".passed",
							   "The corresponding ejbCreate method with matching parameters was found."));
				    break;
				}
			    }
			}
		    }
		    if (signaturesMatch == false) {
		        oneFailed = true;
			result.addErrorDetails(smh.getLocalString
					       ("tests.componentNameConstructor",
						"For [ {0} ]",
						new Object[] {compName.toString()}));
			result.addErrorDetails(smh.getLocalString
					       (getClass().getName() + ".debug3",
						"For Home Interface",
						new Object[] {}));
			result.addErrorDetails(smh.getLocalString
					       (getClass().getName() + ".failed",
						"Error: No corresponding ejbCreate<Method> method with matching parameters was found." ));
			break;
			
		    }
		}
		if (oneFailed == true)
		    break;		
	    } while (((EJBClass = EJBClass.getSuperclass()) != null) && (!signaturesMatch));
	    if (found == false && foundAtLeastOneCreate == true){
		result.addErrorDetails(smh.getLocalString
				       ("tests.componentNameConstructor",
					"For [ {0} ]",
					new Object[] {compName.toString()}));
		result.failed(smh.getLocalString
			      (getClass().getName() + ".failedException1",
			       "Error: ejbCreate<Method> method corresponding to the create<Method> method does not exist!",
			       new Object[] {}));
		
	    }
	    if (found == false && foundAtLeastOneCreate == false){
	     	result.addErrorDetails(smh.getLocalString
				       ("tests.componentNameConstructor",
					"For [ {0} ]",
					new Object[] {compName.toString()}));
		result.failed(smh.getLocalString
				     (getClass().getName() + ".failedException2",
				      "Error: no create<Method> method exists!",
			       new Object[] {}));
	    }
	    return oneFailed;  
	} 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: Home (Local/Remote) interface or  bean class [ {0} ] does not exist or is not loadable within bean [ {1} ]",
			   new Object[] {descriptor.getEjbClassName(),descriptor.getName()}));
	    oneFailed = true;
	    return oneFailed;
	}