Search in sources :

Example 36 with LifecycleCallbackDescriptor

use of com.sun.enterprise.deployment.LifecycleCallbackDescriptor in project Payara by payara.

the class BeanCallbackInterceptor method getAroundTimeoutChain.

public InterceptorManager.InterceptorChain getAroundTimeoutChain(MethodDescriptor mDesc, Method beanMethod) {
    ArrayList<AroundInvokeInterceptor> interceptors = new ArrayList<AroundInvokeInterceptor>();
    for (InterceptorDescriptor interceptor : frameworkInterceptors) {
        Set<LifecycleCallbackDescriptor> aroundTimeoutDescs = interceptor.getAroundTimeoutDescriptors();
        if (aroundTimeoutDescs.isEmpty()) {
            continue;
        }
        List<LifecycleCallbackDescriptor> orderedAIInterceptors = null;
        Class interceptorClass = interceptor.getInterceptorClass();
        ClassLoader classLoaderToUse = (interceptorClass != null) ? interceptorClass.getClassLoader() : loader;
        try {
            orderedAIInterceptors = interceptor.getOrderedAroundTimeoutDescriptors(classLoaderToUse);
        } catch (Exception e) {
            throw new IllegalStateException("No AroundTimeoutIntercetpors found " + " on class " + interceptor.getInterceptorClassName(), e);
        }
        addAroundInvokeInterceptors(interceptors, interceptor, orderedAIInterceptors, interceptor.getInterceptorClassName(), classLoaderToUse);
    }
    List<EjbInterceptor> list = (ejbDesc != null) ? ejbDesc.getAroundTimeoutInterceptors(mDesc) : new LinkedList<EjbInterceptor>();
    for (EjbInterceptor interceptor : list) {
        String className = interceptor.getInterceptorClassName();
        Set<LifecycleCallbackDescriptor> aroundTimeoutDescs = interceptor.getAroundTimeoutDescriptors();
        if (aroundTimeoutDescs.isEmpty()) {
            continue;
        }
        List<LifecycleCallbackDescriptor> orderedATInterceptors;
        try {
            orderedATInterceptors = interceptor.getOrderedAroundTimeoutDescriptors(loader);
        } catch (Exception e) {
            throw new IllegalStateException("No AroundTimeoutIntercetpors found " + " on class " + className, e);
        }
        addAroundInvokeInterceptors(interceptors, interceptor, orderedATInterceptors, className, loader);
    }
    AroundInvokeInterceptor[] inter = interceptors.toArray(new AroundInvokeInterceptor[interceptors.size()]);
    return new AroundInvokeChainImpl(inter);
}
Also used : ArrayList(java.util.ArrayList) EjbInterceptor(com.sun.enterprise.deployment.EjbInterceptor) EJBException(javax.ejb.EJBException) InterceptorDescriptor(com.sun.enterprise.deployment.InterceptorDescriptor) LifecycleCallbackDescriptor(com.sun.enterprise.deployment.LifecycleCallbackDescriptor)

Example 37 with LifecycleCallbackDescriptor

use of com.sun.enterprise.deployment.LifecycleCallbackDescriptor in project Payara by payara.

the class BeanMethodCalculatorImpl method getTransactionalMethodsFor.

/**
 * @return a collection of MethodDescriptor for all the methods of my
 * ejb which are elligible to have a particular transaction setting.
 */
public Collection getTransactionalMethodsFor(com.sun.enterprise.deployment.EjbDescriptor desc, ClassLoader loader) throws ClassNotFoundException, NoSuchMethodException {
    EjbDescriptor ejbDescriptor = (EjbDescriptor) desc;
    // only set if desc is a stateful session bean.  NOTE that
    // !statefulSessionBean does not imply stateless session bean
    boolean statefulSessionBean = false;
    Vector methods = new Vector();
    if (ejbDescriptor instanceof EjbSessionDescriptor) {
        statefulSessionBean = ((EjbSessionDescriptor) ejbDescriptor).isStateful();
        boolean singletonSessionBean = ((EjbSessionDescriptor) ejbDescriptor).isSingleton();
        // Session Beans
        if (ejbDescriptor.isRemoteInterfacesSupported()) {
            Collection disallowedMethods = extractDisallowedMethodsFor(javax.ejb.EJBObject.class, sessionBeanMethodsDisallowed);
            Collection potentials = getTransactionMethodsFor(loader, ejbDescriptor.getRemoteClassName(), disallowedMethods);
            transformAndAdd(potentials, MethodDescriptor.EJB_REMOTE, methods);
        }
        if (ejbDescriptor.isRemoteBusinessInterfacesSupported()) {
            for (String intfName : ejbDescriptor.getRemoteBusinessClassNames()) {
                Class businessIntf = loader.loadClass(intfName);
                Method[] busIntfMethods = businessIntf.getMethods();
                for (Method next : busIntfMethods) {
                    methods.add(new MethodDescriptor(next, MethodDescriptor.EJB_REMOTE));
                }
            }
        }
        if (ejbDescriptor.isLocalInterfacesSupported()) {
            Collection disallowedMethods = extractDisallowedMethodsFor(javax.ejb.EJBLocalObject.class, sessionLocalBeanMethodsDisallowed);
            Collection potentials = getTransactionMethodsFor(loader, ejbDescriptor.getLocalClassName(), disallowedMethods);
            transformAndAdd(potentials, MethodDescriptor.EJB_LOCAL, methods);
        }
        if (ejbDescriptor.isLocalBusinessInterfacesSupported()) {
            for (String intfName : ejbDescriptor.getLocalBusinessClassNames()) {
                Class businessIntf = loader.loadClass(intfName);
                Method[] busIntfMethods = businessIntf.getMethods();
                for (Method next : busIntfMethods) {
                    methods.add(new MethodDescriptor(next, MethodDescriptor.EJB_LOCAL));
                }
            }
        }
        if (ejbDescriptor.isLocalBean()) {
            String intfName = ejbDescriptor.getEjbClassName();
            Class businessIntf = loader.loadClass(intfName);
            Method[] busIntfMethods = businessIntf.getMethods();
            for (Method next : busIntfMethods) {
                methods.add(new MethodDescriptor(next, MethodDescriptor.EJB_LOCAL));
            }
        }
        if (ejbDescriptor.hasWebServiceEndpointInterface()) {
            Class webServiceClass = loader.loadClass(ejbDescriptor.getWebServiceEndpointInterfaceName());
            Method[] webMethods = webServiceClass.getMethods();
            for (int i = 0; i < webMethods.length; i++) {
                methods.add(new MethodDescriptor(webMethods[i], MethodDescriptor.EJB_WEB_SERVICE));
            }
        }
        // SFSB and Singleton can have lifecycle callbacks transactional
        if (statefulSessionBean || singletonSessionBean) {
            Set<LifecycleCallbackDescriptor> lcds = ejbDescriptor.getLifecycleCallbackDescriptors();
            for (LifecycleCallbackDescriptor lcd : lcds) {
                try {
                    Method m = lcd.getLifecycleCallbackMethodObject(loader);
                    MethodDescriptor md = new MethodDescriptor(m, MethodDescriptor.LIFECYCLE_CALLBACK);
                    methods.add(md);
                } catch (Exception e) {
                    if (_logger.isLoggable(Level.FINE)) {
                        _logger.log(Level.FINE, "Lifecycle callback processing error", e);
                    }
                }
            }
        }
    } else {
        // entity beans local interfaces
        String homeIntf = ejbDescriptor.getHomeClassName();
        if (homeIntf != null) {
            Class home = loader.loadClass(homeIntf);
            Collection potentials = getTransactionMethodsFor(javax.ejb.EJBHome.class, home);
            transformAndAdd(potentials, MethodDescriptor.EJB_HOME, methods);
            String remoteIntf = ejbDescriptor.getRemoteClassName();
            Class remote = loader.loadClass(remoteIntf);
            potentials = getTransactionMethodsFor(javax.ejb.EJBObject.class, remote);
            transformAndAdd(potentials, MethodDescriptor.EJB_REMOTE, methods);
        }
        // enity beans remote interfaces
        String localHomeIntf = ejbDescriptor.getLocalHomeClassName();
        if (localHomeIntf != null) {
            Class home = loader.loadClass(localHomeIntf);
            Collection potentials = getTransactionMethodsFor(javax.ejb.EJBLocalHome.class, home);
            transformAndAdd(potentials, MethodDescriptor.EJB_LOCALHOME, methods);
            String remoteIntf = ejbDescriptor.getLocalClassName();
            Class remote = loader.loadClass(remoteIntf);
            potentials = getTransactionMethodsFor(javax.ejb.EJBLocalObject.class, remote);
            transformAndAdd(potentials, MethodDescriptor.EJB_LOCAL, methods);
        }
    }
    if (!statefulSessionBean) {
        if (ejbDescriptor.isTimedObject()) {
            if (ejbDescriptor.getEjbTimeoutMethod() != null) {
                methods.add(ejbDescriptor.getEjbTimeoutMethod());
            }
            for (ScheduledTimerDescriptor schd : ejbDescriptor.getScheduledTimerDescriptors()) {
                methods.add(schd.getTimeoutMethod());
            }
        }
    }
    return methods;
}
Also used : ScheduledTimerDescriptor(org.glassfish.ejb.deployment.descriptor.ScheduledTimerDescriptor) Method(java.lang.reflect.Method) MethodDescriptor(com.sun.enterprise.deployment.MethodDescriptor) EjbDescriptor(org.glassfish.ejb.deployment.descriptor.EjbDescriptor) LifecycleCallbackDescriptor(com.sun.enterprise.deployment.LifecycleCallbackDescriptor) Collection(java.util.Collection) Vector(java.util.Vector) EjbSessionDescriptor(org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor)

Example 38 with LifecycleCallbackDescriptor

use of com.sun.enterprise.deployment.LifecycleCallbackDescriptor in project Payara by payara.

the class LifecycleCallbackNode method getDescriptor.

@Override
public LifecycleCallbackDescriptor getDescriptor() {
    if (descriptor == null) {
        descriptor = new LifecycleCallbackDescriptor();
        Descriptor parentDesc = (Descriptor) getParentNode().getDescriptor();
        if (parentDesc instanceof EjbDescriptor) {
            EjbDescriptor ejbDesc = (EjbDescriptor) parentDesc;
            descriptor.setDefaultLifecycleCallbackClass(ejbDesc.getEjbClassName());
        } else if (parentDesc instanceof EjbInterceptor) {
            EjbInterceptor ejbInterceptor = (EjbInterceptor) parentDesc;
            descriptor.setDefaultLifecycleCallbackClass(ejbInterceptor.getInterceptorClassName());
        }
    // we set the default lifecycle callback class for appclient
    // later in validate since the appclient Main class is not
    // available at this point
    }
    return descriptor;
}
Also used : LifecycleCallbackDescriptor(com.sun.enterprise.deployment.LifecycleCallbackDescriptor) LifecycleCallbackDescriptor(com.sun.enterprise.deployment.LifecycleCallbackDescriptor) Descriptor(org.glassfish.deployment.common.Descriptor) EjbDescriptor(com.sun.enterprise.deployment.EjbDescriptor) EjbInterceptor(com.sun.enterprise.deployment.EjbInterceptor) EjbDescriptor(com.sun.enterprise.deployment.EjbDescriptor)

Aggregations

LifecycleCallbackDescriptor (com.sun.enterprise.deployment.LifecycleCallbackDescriptor)38 Method (java.lang.reflect.Method)15 EjbInterceptor (com.sun.enterprise.deployment.EjbInterceptor)9 ArrayList (java.util.ArrayList)4 EJBException (javax.ejb.EJBException)4 InterceptorDescriptor (com.sun.enterprise.deployment.InterceptorDescriptor)3 MethodDescriptor (com.sun.enterprise.deployment.MethodDescriptor)3 EjbSessionDescriptor (org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor)3 EjbDescriptor (com.sun.enterprise.deployment.EjbDescriptor)2 ResourceContainerContext (com.sun.enterprise.deployment.annotation.context.ResourceContainerContext)2 Result (com.sun.enterprise.tools.verifier.Result)2 ComponentNameConstructor (com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor)2 HashSet (java.util.HashSet)2 Descriptor (org.glassfish.deployment.common.Descriptor)2 EjbDescriptor (org.glassfish.ejb.deployment.descriptor.EjbDescriptor)2 EjbContext (com.sun.enterprise.deployment.annotation.context.EjbContext)1 EjbInterceptorContext (com.sun.enterprise.deployment.annotation.context.EjbInterceptorContext)1 Collection (java.util.Collection)1 LinkedList (java.util.LinkedList)1 Set (java.util.Set)1