Search in sources :

Example 1 with EjbSessionDescriptor

use of org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor in project Payara by payara.

the class TransactionTypeNullForContainerTX method check.

/**
 * Session Bean Transaction demarcation type test.
 * For bean managed session beans, it doesn't make sense to have
 * container transactions.
 *
 * @param descriptor the Enterprise Java Bean deployment descriptor
 *
 * @return <code>Result</code> the results for this assertion
 */
public Result check(EjbDescriptor descriptor) {
    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
    if (descriptor instanceof EjbSessionDescriptor) {
        String transactionType = descriptor.getTransactionType();
        if (EjbDescriptor.BEAN_TRANSACTION_TYPE.equals(transactionType)) {
            // and in the UI
            try {
                if (descriptor.getMethodContainerTransactions().size() > 0) {
                    // shouldn't have container transaction for bean managed session
                    // since container transaction is not null, it's defined, we fail
                    // test
                    result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                    result.failed(smh.getLocalString(getClass().getName() + ".failed", "Error: Session Beans [ {0} ] with [ {1} ] managed \n" + "transaction demarcation should not have container \n" + "transactions defined.", new Object[] { descriptor.getName(), transactionType }));
                } else {
                    // container transaction is null, not defined, which is correct
                    // shouldn't have container transaction for bean managed session
                    result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                    result.passed(smh.getLocalString(getClass().getName() + ".passed", "This session bean [ {0} ] is [ {1} ] managed and correctly declares no container transactions.", new Object[] { descriptor.getName(), transactionType }));
                }
                return result;
            } catch (NullPointerException e) {
                // container transaction is null, not defined, which is correct
                // shouldn't have container transaction for bean managed session
                result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                result.passed(smh.getLocalString(getClass().getName() + ".passed", "This session bean [ {0} ] is [ {1} ] managed and correctly declares no container transactions.", new Object[] { descriptor.getName(), transactionType }));
                return result;
            }
        } else {
            // not bean/container managed, but is a session/entity bean
            // (i.e it's CONTAINER_TRANSACTION_TYPE)
            result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
            result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable1", "Session bean [ {0} ], expected [ {1} ] managed, but called with [ {2} ] managed.", new Object[] { descriptor.getName(), EjbDescriptor.BEAN_TRANSACTION_TYPE, EjbDescriptor.CONTAINER_TRANSACTION_TYPE }));
            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} \n bean, but called with {2} bean.", new Object[] { getClass(), "Session", "Entity" }));
        return result;
    }
}
Also used : EjbSessionDescriptor(org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor) ComponentNameConstructor(com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor) Result(com.sun.enterprise.tools.verifier.Result)

Example 2 with EjbSessionDescriptor

use of org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor in project Payara by payara.

the class EjbCreateMethodException method check.

/**
 * Session Bean's ejbCreate(...) methods exception test.
 * Each session Bean class must define one or more ejbCreate(...) methods.
 * The number and signatures of a session Bean's create methods are specific
 * to each EJB class. The method signatures must follow these rules:
 *
 * The method name must be ejbCreate.
 *
 * Compatibility Note: EJB 1.0 allowed the ejbCreate method to throw the
 * java.rmi.RemoteException to indicate a non-application exception. This
 * practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean
 * should throw the javax.ejb.EJBException or another RuntimeException to
 * indicate non-application exceptions to the Container (see Section 12.2.2).
 * Note: Treat as a warning to user in this instance.
 *
 * @param descriptor the Enterprise Java Bean deployment descriptor
 *
 * @return <code>Result</code> the results for this assertion
 */
public Result check(EjbDescriptor descriptor) {
    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
    if (descriptor instanceof EjbSessionDescriptor) {
        boolean oneFailed = false;
        int foundWarning = 0;
        try {
            VerifierTestContext context = getVerifierContext();
            ClassLoader jcl = context.getClassLoader();
            Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
            Class[] ejbCreateMethodParameterTypes;
            int foundAtLeastOne = 0;
            boolean ejbCreateFound = false;
            boolean throwsRemoteException = 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;
                    throwsRemoteException = false;
                    // The method name must be ejbCreate.
                    if (methods[i].getName().startsWith("ejbCreate")) {
                        foundAtLeastOne++;
                        ejbCreateFound = true;
                        // Compatibility Note: EJB 1.0 allowed the ejbCreate method to throw
                        // the java.rmi.RemoteException to indicate a non-application
                        // exception. This practice is deprecated in EJB 1.1---an EJB 1.1
                        // compliant enterprise bean should throw the javax.ejb.EJBException
                        // or another RuntimeException to indicate non-application
                        // exceptions to the Container (see Section 12.2.2).
                        // Note: Treat as a warning to user in this instance.
                        Class[] exceptions = methods[i].getExceptionTypes();
                        for (int z = 0; z < exceptions.length; ++z) {
                            if ((exceptions[z].getName().equals("java.rmi.RemoteException")) || (exceptions[z].getName().equals("RemoteException"))) {
                                throwsRemoteException = true;
                                break;
                            }
                        }
                        // method
                        if (ejbCreateFound && (!throwsRemoteException)) {
                            result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                            result.addGoodDetails(smh.getLocalString(getClass().getName() + ".debug1", "For EJB Class [ {0} ] method [ {1} ]", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
                            result.addGoodDetails(smh.getLocalString(getClass().getName() + ".passed", " [ {0} ] properly declares [ {1} ] method which properly does not throw java.rmi.RemoteException.", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
                        } else if (ejbCreateFound && throwsRemoteException) {
                            result.addWarningDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                            result.addWarningDetails(smh.getLocalString(getClass().getName() + ".debug1", "For EJB Class [ {0} ] method [ {1} ]", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
                            result.addWarningDetails(smh.getLocalString(getClass().getName() + ".warning", "Error: Compatibility Note:" + "\n An [ {0} ] method was found, but" + "\n EJB 1.0 allowed the ejbCreate method to throw the " + "\n java.rmi.RemoteException to indicate a non-application" + "\n exception. This practice is deprecated in EJB 1.1" + "\n ---an EJB 1.1 compliant enterprise bean should" + "\n throw the javax.ejb.EJBException or another " + "\n RuntimeException to indicate non-application exceptions" + "\n to the Container", new Object[] { methods[i].getName() }));
                            foundWarning++;
                        }
                    }
                }
            } while (((c = c.getSuperclass()) != null) && (foundAtLeastOne == 0));
            if (foundAtLeastOne == 0) {
                result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                result.failed(smh.getLocalString(getClass().getName() + ".failed", "Error: [ {0} ] does not properly declare at least one ejbCreate(...) method.  [ {1} ] is not a valid bean.", new Object[] { descriptor.getEjbClassName(), descriptor.getEjbClassName() }));
                oneFailed = true;
            }
        } 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 (foundWarning > 0) {
            result.setStatus(result.WARNING);
        } 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;
    }
}
Also used : VerifierTestContext(com.sun.enterprise.tools.verifier.VerifierTestContext) Method(java.lang.reflect.Method) Result(com.sun.enterprise.tools.verifier.Result) EjbSessionDescriptor(org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor) ComponentNameConstructor(com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor)

Example 3 with EjbSessionDescriptor

use of org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor in project Payara by payara.

the class EjbCreateMethodName method check.

/**
 * Session Bean's ejbCreate(...) methods name test.
 * Each session Bean class must define one or more ejbCreate(...) methods.
 * The number and signatures of a session Bean's create methods are specific
 * to each EJB class. The method signatures must follow these rules:
 *
 * The method name must be ejbCreate.
 *
 * @param descriptor the Enterprise Java Bean deployment descriptor
 *
 * @return <code>Result</code> the results for this assertion
 */
public Result check(EjbDescriptor descriptor) {
    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
    if (descriptor instanceof EjbSessionDescriptor) {
        boolean oneFailed = false;
        try {
            VerifierTestContext context = getVerifierContext();
            ClassLoader jcl = context.getClassLoader();
            Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
            int foundAtLeastOne = 0;
            // start do while loop here....
            do {
                Method[] methods = c.getDeclaredMethods();
                for (int i = 0; i < methods.length; i++) {
                    // The method name must be ejbCreate.
                    if (methods[i].getName().startsWith("ejbCreate")) {
                        foundAtLeastOne++;
                        // 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 EJB Class [ {0} ] method [ {1} ]", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
                        result.addGoodDetails(smh.getLocalString(getClass().getName() + ".passed", "[ {0} ] declares [ {1} ] method.", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
                    }
                }
            } while (((c = c.getSuperclass()) != null) && (foundAtLeastOne == 0));
            if (foundAtLeastOne == 0) {
                result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                result.failed(smh.getLocalString(getClass().getName() + ".failed", "Error: [ {0} ] does not properly declare at least one ejbCreate(...) method.  [ {1} ] is not a valid bean.", new Object[] { descriptor.getEjbClassName(), descriptor.getEjbClassName() }));
                oneFailed = true;
            }
        } 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 {
            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;
    }
}
Also used : VerifierTestContext(com.sun.enterprise.tools.verifier.VerifierTestContext) Method(java.lang.reflect.Method) EjbSessionDescriptor(org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor) ComponentNameConstructor(com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor) Result(com.sun.enterprise.tools.verifier.Result)

Example 4 with EjbSessionDescriptor

use of org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor in project Payara by payara.

the class EjbCreateMethodReturn method check.

/**
 * Session Bean's ejbCreate(...) methods return test.
 * Each session Bean class must define one or more ejbCreate(...) methods.
 * The number and signature of a session Bean's create methods are specific
 * to each EJB class. The method signatures must follow these rules:
 *
 * The method name must be ejbCreate.
 *
 * The return type must be void.
 *
 * @param descriptor the Enterprise Java Bean deployment descriptor
 *
 * @return <code>Result</code> the results for this assertion
 */
public Result check(EjbDescriptor descriptor) {
    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
    if (descriptor instanceof EjbSessionDescriptor) {
        boolean oneFailed = false;
        try {
            VerifierTestContext context = getVerifierContext();
            ClassLoader jcl = context.getClassLoader();
            Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
            Class[] ejbCreateMethodParameterTypes;
            int foundAtLeastOne = 0;
            boolean ejbCreateFound = false;
            boolean returnsVoid = 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;
                    returnsVoid = false;
                    // The method name must be ejbCreate.
                    if (methods[i].getName().startsWith("ejbCreate")) {
                        ejbCreateFound = true;
                        // The return type must be void.
                        Class rt = methods[i].getReturnType();
                        if (rt.getName().equals("void")) {
                            returnsVoid = true;
                            foundAtLeastOne++;
                        }
                        // method
                        if (ejbCreateFound && returnsVoid) {
                            result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                            result.addGoodDetails(smh.getLocalString(getClass().getName() + ".debug1", "For EJB Class [ {0} ] method [ {1} ]", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
                            result.addGoodDetails(smh.getLocalString(getClass().getName() + ".passed", "[ {0} ] properly declares [ {1} ] method with valid 'void' return type.", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
                        } else if (ejbCreateFound && (!returnsVoid)) {
                            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() + ".notApplicable2", "An [ {0} ] method was found, but [ {1} ] method has a non 'void' return type value.   [ {2} ] methods return types must define return 'void' type for at least one ejbCreate method.", new Object[] { methods[i].getName(), methods[i].getName(), methods[i].getName() }));
                            oneFailed = true;
                        }
                    }
                }
            } while (((c = c.getSuperclass()) != null) && (foundAtLeastOne == 0));
            if (foundAtLeastOne == 0) {
                result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                result.failed(smh.getLocalString(getClass().getName() + ".failed", "Error: [ {0} ] does not properly declare at least one ejbCreate(...) method with valid 'void' return type.  [ {1} ] is not a valid bean.", new Object[] { descriptor.getEjbClassName(), descriptor.getEjbClassName() }));
                oneFailed = true;
            }
        } 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 {
            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;
    }
}
Also used : VerifierTestContext(com.sun.enterprise.tools.verifier.VerifierTestContext) Method(java.lang.reflect.Method) Result(com.sun.enterprise.tools.verifier.Result) EjbSessionDescriptor(org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor) ComponentNameConstructor(com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor)

Example 5 with EjbSessionDescriptor

use of org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor in project Payara by payara.

the class HomeMethodTest method check.

/**
 * @param descriptor the Enterprise Java Bean deployment descriptor
 *
 * @return <code>Result</code> the results for this assertion
 */
public Result check(EjbDescriptor descriptor) {
    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
    if (getHomeInterfaceName(descriptor) == null || "".equals(getHomeInterfaceName(descriptor))) {
        addNaDetails(result, compName);
        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 instanceof EjbSessionDescriptor) && !(descriptor instanceof EjbEntityDescriptor)) {
        addNaDetails(result, compName);
        result.notApplicable(smh.getLocalString("com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodTest.notApplicable1", "Test apply only to session or entity beans."));
        return result;
    }
    boolean homeMethodFound = false;
    try {
        // retrieve the remote interface methods
        ClassLoader jcl = getVerifierContext().getClassLoader();
        Class homeInterfaceClass = Class.forName(getClassName(descriptor), false, jcl);
        Vector<Method> v = new Vector<Method>();
        while (homeInterfaceClass != null && !homeInterfaceClass.getName().equals(getSuperInterface()) && !homeInterfaceClass.getName().equals("java.lang.Object")) {
            Method[] homeInterfaceMethods = homeInterfaceClass.getDeclaredMethods();
            for (int i = 0; i < homeInterfaceMethods.length; i++) {
                v.add(homeInterfaceMethods[i]);
            }
            homeInterfaceClass = homeInterfaceClass.getSuperclass();
        }
        Iterator iterator = v.iterator();
        while (iterator.hasNext()) {
            Method method = (Method) iterator.next();
            String methodName = method.getName();
            if (methodName.startsWith("create") || methodName.startsWith("find") || methodName.startsWith("remove"))
                continue;
            Method m = getMethod(javax.ejb.EJBHome.class, methodName, method.getParameterTypes());
            if (m != null) {
                // this is an EJBHome method...
                continue;
            }
            homeMethodFound = true;
            // if (!runIndividualHomeMethodTest( method,descriptor, result))
            // oneFailed = true;
            runIndividualHomeMethodTest(method, descriptor, result);
            if (result.getStatus() == Result.FAILED)
                break;
        }
    } catch (ClassNotFoundException e) {
        Verifier.debug(e);
        addErrorDetails(result, compName);
        result.failed(smh.getLocalString("com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodTest.failedException", "Error: Home interface [ {0} ] does not exist or is not loadable within bean [ {1} ]", new Object[] { getClassName(descriptor), descriptor.getName() }));
    }
    if (!homeMethodFound) {
        addNaDetails(result, compName);
        result.notApplicable(smh.getLocalString("com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodTest.notApplicable2", "Home interface [ {0} ] does not define any home methods", new Object[] { getClassName(descriptor) }));
    }
    // }
    return result;
}
Also used : Method(java.lang.reflect.Method) Result(com.sun.enterprise.tools.verifier.Result) EjbEntityDescriptor(org.glassfish.ejb.deployment.descriptor.EjbEntityDescriptor) Iterator(java.util.Iterator) EjbSessionDescriptor(org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor) Vector(java.util.Vector) ComponentNameConstructor(com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor)

Aggregations

EjbSessionDescriptor (org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor)78 Result (com.sun.enterprise.tools.verifier.Result)28 ComponentNameConstructor (com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor)28 Method (java.lang.reflect.Method)25 MethodDescriptor (com.sun.enterprise.deployment.MethodDescriptor)23 EjbEntityDescriptor (org.glassfish.ejb.deployment.descriptor.EjbEntityDescriptor)18 VerifierTestContext (com.sun.enterprise.tools.verifier.VerifierTestContext)11 EjbContext (com.sun.enterprise.deployment.annotation.context.EjbContext)10 EjbDescriptor (org.glassfish.ejb.deployment.descriptor.EjbDescriptor)7 Iterator (java.util.Iterator)6 ContainerTransaction (org.glassfish.ejb.deployment.descriptor.ContainerTransaction)6 Set (java.util.Set)5 EJBException (javax.ejb.EJBException)4 Container (com.sun.ejb.Container)3 EjbInterceptor (com.sun.enterprise.deployment.EjbInterceptor)3 LifecycleCallbackDescriptor (com.sun.enterprise.deployment.LifecycleCallbackDescriptor)3 AnnotatedElement (java.lang.reflect.AnnotatedElement)3 ArrayList (java.util.ArrayList)3 Enumeration (java.util.Enumeration)3 NoSuchEJBException (javax.ejb.NoSuchEJBException)3