FileDocCategorySizeDatePackage
CallbackMethodException.javaAPI DocGlassfish v2 API5787Fri May 04 22:33:34 BST 2007com.sun.enterprise.tools.verifier.tests.ejb.ejb30

CallbackMethodException

public class CallbackMethodException extends com.sun.enterprise.tools.verifier.tests.ejb.EjbTest
Lifecycle callback interceptor methods must not throw application exceptions. Any exception other than derived from java.lang.RuntimeException or java.rmi.RemoteException is an application exception.
author
Vikas Awasthi

Fields Summary
Constructors Summary
Methods Summary
public com.sun.enterprise.tools.verifier.Resultcheck(com.sun.enterprise.deployment.EjbDescriptor descriptor)

        Result result = getInitializedResult();
        ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
        ClassLoader cl = getVerifierContext().getClassLoader();

        Set<LifecycleCallbackDescriptor> callbackDescs = 
                                        new HashSet<LifecycleCallbackDescriptor>();
        
        for (EjbInterceptor interceptor : descriptor.getInterceptorClasses()) {
            callbackDescs.addAll(interceptor.getPostConstructDescriptors());
            callbackDescs.addAll(interceptor.getPreDestroyDescriptors());
            callbackDescs.addAll(interceptor.getCallbackDescriptors(
                        LifecycleCallbackDescriptor.CallbackType.PRE_PASSIVATE));
            callbackDescs.addAll(interceptor.getCallbackDescriptors(
                        LifecycleCallbackDescriptor.CallbackType.POST_ACTIVATE));
        }

        if(descriptor.hasPostConstructMethod())
            callbackDescs.addAll(descriptor.getPostConstructDescriptors());
        if(descriptor.hasPreDestroyMethod())
            callbackDescs.addAll(descriptor.getPreDestroyDescriptors());
        
        // session descriptor has two extra interceptor methods.
        if(descriptor instanceof EjbSessionDescriptor) {
            EjbSessionDescriptor ejbSessionDescriptor = ((EjbSessionDescriptor)descriptor);
            if(ejbSessionDescriptor.hasPostActivateMethod())
                callbackDescs.addAll(ejbSessionDescriptor.getPostActivateDescriptors());
            if(ejbSessionDescriptor.hasPrePassivateMethod())
                callbackDescs.addAll(ejbSessionDescriptor.getPrePassivateDescriptors());
        }

        for (LifecycleCallbackDescriptor callbackDesc : callbackDescs) {
            try {
                Method method = callbackDesc.getLifecycleCallbackMethodObject(cl);
                Class[] excepClasses = method.getExceptionTypes();
                for (Class exception : excepClasses) {
                    if(!(RuntimeException.class.isAssignableFrom(exception) ||
                            java.rmi.RemoteException.class.isAssignableFrom(exception))) {
                        addErrorDetails(result, compName);
                        result.failed(smh.getLocalString
                                        (getClass().getName() + ".failed",
                                        "Method [ {0} ] throws an application exception.",
                                        new Object[] {method}));
                    }
                }
            } catch (Exception e) {}// will be caught in other tests
        }
        
        if(result.getStatus()!=Result.FAILED) {
            addGoodDetails(result, compName);
            result.passed(smh.getLocalString
                            (getClass().getName() + ".passed",
                            "Valid Callback methods."));
        }
        
        return result;