FileDocCategorySizeDatePackage
HomeMethodModifiers.javaAPI DocGlassfish v2 API6043Fri May 04 22:33:52 BST 2007com.sun.enterprise.tools.verifier.tests.ejb.homeintf

HomeMethodModifiers

public abstract class HomeMethodModifiers extends HomeMethodTest
Home methods must be public and not static
author
Jerome Dochez
version

Fields Summary
Constructors Summary
Methods Summary
private java.lang.StringgetClassName(com.sun.enterprise.deployment.EjbDescriptor descriptor)

	return getHomeInterfaceName(descriptor);
    
protected voidrunIndividualHomeMethodTest(java.lang.reflect.Method method, com.sun.enterprise.deployment.EjbDescriptor descriptor, com.sun.enterprise.tools.verifier.Result result)

run an individual home method test

param
method the home method to test
param
descriptor the deployment descriptor for the entity bean
param
result the result object

        
        Method m;
	ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();

	try {	  
	    // retrieve the remote interface methods
	    ClassLoader jcl = getVerifierContext().getClassLoader();
	    Class ejbClass = Class.forName(descriptor.getEjbClassName(), false, jcl);
                                    
            // Bug: 4952890. first character of this name should be converted to UpperCase. 
            String methodName = method.getName().replaceFirst(method.getName().substring(0,1),
                                                              method.getName().substring(0,1).toUpperCase());
            String expectedMethodName = "ejbHome" + methodName;
            do {
                // retrieve the EJB Class Methods
                m = getMethod(ejbClass, expectedMethodName, method.getParameterTypes());   
	    } while (((ejbClass = ejbClass.getSuperclass()) != null) && (m==null));

            if (m != null) {
                int modifiers = m.getModifiers();
                if (Modifier.isPublic(modifiers) && !Modifier.isStatic(modifiers)) {
                    addGoodDetails(result, compName);
                    result.addGoodDetails(smh.getLocalString
                        (getClass().getName() + ".passed",
                        "For method [ {1} ] in Home Interface [ {0} ], ejbHome method is public and not static",
                        new Object[] {method.getDeclaringClass().getName(), method.getName()})); 
		    result.setStatus(Result.PASSED);               
                    //return true;
                } else {
                    addErrorDetails(result, compName);
                    result.addErrorDetails(smh.getLocalString
                        (getClass().getName() + ".notApplicable",
                        "Error : For method [ {1} ] defined in Home Interface [ {0} ], the ejbHome method is either static or not public",
                        new Object[] {method.getDeclaringClass().getName(), method.getName()}));
		    result.setStatus(Result.FAILED);               
		    // return false;
                }                    
            } else {
                addErrorDetails(result, compName);
                result.addErrorDetails(smh.getLocalString
                    (getClass().getName() + ".failed",  
                    "Error : For method [ {1} ] defined in Home Interface [ {0} ], no ejbHome name matching method was found" ,
                    new Object[] {method.getDeclaringClass().getName(), method.getName()}));
		    result.setStatus(Result.FAILED);               
                //return true;
	    }
	} catch (ClassNotFoundException e) {
	    Verifier.debug(e);
        addErrorDetails(result, compName);
	    result.failed(smh.getLocalString(
					     getClass().getName() + ".failedException",
					     "Error: Home interface [ {0} ] does not exist or is not loadable within bean [ {1} ]",
					     new Object[] {getClassName(descriptor),descriptor.getName()}));
	    //return false;
	    result.setStatus(Result.FAILED);
	}