FileDocCategorySizeDatePackage
StatelessCreateOnlyOne.javaAPI DocGlassfish v2 API6340Fri May 04 22:34:08 BST 2007com.sun.enterprise.tools.verifier.tests.ejb.session.stateless

StatelessCreateOnlyOne

public class StatelessCreateOnlyOne extends com.sun.enterprise.tools.verifier.tests.ejb.EjbTest implements com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck
Stateless session beans home interface create method test. The home interface of a stateless session Bean must have a create method. The home interface must not have any other create methods.

Fields Summary
com.sun.enterprise.tools.verifier.Result
result
com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor
compName
Constructors Summary
Methods Summary
public com.sun.enterprise.tools.verifier.Resultcheck(com.sun.enterprise.deployment.EjbDescriptor descriptor)
Stateless session beans home interface create method test. The home interface of a stateless session Bean must have a create method. The home interface must not have any other create methods.

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


                                                               
        

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

        if (descriptor instanceof EjbSessionDescriptor) {
            String stateType = ((EjbSessionDescriptor)descriptor).getSessionType();
            if (EjbSessionDescriptor.STATELESS.equals(stateType)) {
                // RULE: Stateless session are only allowed to have create
                //       methods with no arguments, and returns the session Bean's
                //       remote interface. The home interface must not have any
                //       other create methods.
                if(descriptor.getHomeClassName() != null && !"".equals(descriptor.getHomeClassName()))
                    commonToBothInterfaces(descriptor.getHomeClassName(),(EjbSessionDescriptor)descriptor);
                if(descriptor.getLocalHomeClassName() != null && !"".equals(descriptor.getLocalHomeClassName()))
                    commonToBothInterfaces(descriptor.getLocalHomeClassName(),(EjbSessionDescriptor)descriptor);
            }
        }
        if (result.getStatus() != Result.FAILED) {
            addGoodDetails(result, compName);
            result.passed(smh.getLocalString
                    (getClass().getName() + ".passed",
                            "The bean's Home Interface has exactly one create Method defined"));
        }
        return result;
    
private voidcommonToBothInterfaces(java.lang.String home, com.sun.enterprise.deployment.EjbSessionDescriptor 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.

        try {
            int count = 0;
            Class c = Class.forName(home, false, getVerifierContext().getClassLoader());
            for(Method methods : c.getDeclaredMethods()) {
                if (methods.getName().equals("create"))
                    count++;
            }
            if(count!=1) {
                addErrorDetails(result, compName);
                result.failed(smh.getLocalString
                        (getClass().getName() + ".failed",
                                "Error: [ {0} ] Create methods exists within bean [ {1} ]. " +
                        "The home interface must have only one create method for stateless session bean.",
                                new Object[] {new Integer(count),home}));
            }
        } 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: Class [ {0} ] not found within bean [ {1} ]",
                            new Object[] {home, descriptor.getName()}));
        }