FileDocCategorySizeDatePackage
EjbBeanType.javaAPI DocGlassfish v2 API7416Fri May 04 22:33:32 BST 2007com.sun.enterprise.tools.verifier.tests.ejb

EjbBeanType

public class EjbBeanType extends EjbTest implements EjbCheck
Bean type test. The bean provider must use the appropriate session or entity element to declare the bean type.

Fields Summary
Constructors Summary
Methods Summary
public com.sun.enterprise.tools.verifier.Resultcheck(com.sun.enterprise.deployment.EjbDescriptor descriptor)
Bean Type Test. The bean provider must use the appropriate session or entity element to declare the bean type.

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 EjbSessionDescriptor) ||
                (descriptor instanceof EjbEntityDescriptor)) {

            try {
                Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
                boolean validBean = false;
                // walk up the class tree (bug #4243606)
                do {
                    Class[] interfaces = c.getInterfaces();
                    for (int i = 0; i < interfaces.length; i++) {
                        logger.log(Level.FINE, getClass().getName() + ".debug1",
                                new Object[] {interfaces[i].getName()});

                        if (interfaces[i].getName().equals("javax.ejb.EntityBean") &&
                                (descriptor instanceof EjbEntityDescriptor)) {
                            validBean = true;
                            result.addGoodDetails(smh.getLocalString
                                    ("tests.componentNameConstructor",
                                            "For [ {0} ]",
                                            new Object[] {compName.toString()}));
                            result.passed(smh.getLocalString
                                    (getClass().getName() + ".passed",
                                            "[ {0} ] properly implements the {1}Bean interface.",
                                            new Object[] {descriptor.getEjbClassName(),"Entity"}));
                            break;
                        } else if (interfaces[i].getName().equals("javax.ejb.SessionBean") &&
                                descriptor instanceof EjbSessionDescriptor) {
                            validBean = true;
                            result.addGoodDetails(smh.getLocalString
                                    ("tests.componentNameConstructor",
                                            "For [ {0} ]",
                                            new Object[] {compName.toString()}));
                            result.passed(smh.getLocalString
                                    (getClass().getName() + ".passed",
                                            "[ {0} ] properly implements the {1}Bean interface.",
                                            new Object[] {descriptor.getEjbClassName(),"Session"}));
                            break;
                        }
                    }
                } while ((((c=c.getSuperclass()) != null) && (!validBean)));


                if (!validBean){
                    result.addErrorDetails(smh.getLocalString
                            ("tests.componentNameConstructor",
                                    "For [ {0} ]",
                                    new Object[] {compName.toString()}));
                    result.failed(smh.getLocalString
                            (getClass().getName() + ".failed",
                                    "Error: [ {0} ] is not a valid bean. The bean provider must use the appropriate {1} or {2} element to declare the bean type.",
                                    new Object[] {descriptor.getEjbClassName(),"session","entity"}));
                }
            } 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()}));
            }
            return result;

        } else {
            result.addNaDetails(smh.getLocalString
                    ("tests.componentNameConstructor",
                            "For [ {0} ]",
                            new Object[] {compName.toString()}));
            result.notApplicable(smh.getLocalString
                    (getClass().getName() + ".notApplicable",
                            "[ {0} ] not called with a Session or Entity Bean.",
                            new Object[] {getClass()}));
            return result;
        }