Search in sources :

Example 1 with ComponentDispatcherInterceptor

use of org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor in project wildfly by wildfly.

the class SessionBeanObjectViewConfigurator method configure.

@Override
public void configure(final DeploymentPhaseContext context, final ComponentConfiguration componentConfiguration, final ViewDescription description, final ViewConfiguration configuration) throws DeploymentUnitProcessingException {
    // note that we don't have to handle all methods on the EJBObject, as some are handled client side
    final DeploymentReflectionIndex index = context.getDeploymentUnit().getAttachment(Attachments.REFLECTION_INDEX);
    for (final Method method : configuration.getProxyFactory().getCachedMethods()) {
        if (method.getName().equals("getPrimaryKey") && method.getParameterCount() == 0) {
            configuration.addClientInterceptor(method, ViewDescription.CLIENT_DISPATCHER_INTERCEPTOR_FACTORY, InterceptorOrder.Client.CLIENT_DISPATCHER);
            configuration.addViewInterceptor(method, PRIMARY_KEY_INTERCEPTOR, InterceptorOrder.View.COMPONENT_DISPATCHER);
        } else if (method.getName().equals("remove") && method.getParameterCount() == 0) {
            handleRemoveMethod(componentConfiguration, configuration, index, method);
        } else if (method.getName().equals("getEJBLocalHome") && method.getParameterCount() == 0) {
            configuration.addClientInterceptor(method, ViewDescription.CLIENT_DISPATCHER_INTERCEPTOR_FACTORY, InterceptorOrder.Client.CLIENT_DISPATCHER);
            final GetHomeInterceptorFactory factory = new GetHomeInterceptorFactory();
            configuration.addViewInterceptor(method, factory, InterceptorOrder.View.COMPONENT_DISPATCHER);
            final SessionBeanComponentDescription componentDescription = (SessionBeanComponentDescription) componentConfiguration.getComponentDescription();
            componentConfiguration.getStartDependencies().add(new DependencyConfigurator<ComponentStartService>() {

                @Override
                public void configureDependency(final ServiceBuilder<?> serviceBuilder, final ComponentStartService service) throws DeploymentUnitProcessingException {
                    EjbHomeViewDescription ejbLocalHomeView = componentDescription.getEjbLocalHomeView();
                    if (ejbLocalHomeView == null) {
                        throw EjbLogger.ROOT_LOGGER.beanLocalHomeInterfaceIsNull(componentDescription.getComponentName());
                    }
                    serviceBuilder.addDependency(ejbLocalHomeView.getServiceName(), ComponentView.class, factory.getViewToCreate());
                }
            });
        } else if (method.getName().equals("getEJBHome") && method.getParameterCount() == 0) {
            configuration.addClientInterceptor(method, ViewDescription.CLIENT_DISPATCHER_INTERCEPTOR_FACTORY, InterceptorOrder.Client.CLIENT_DISPATCHER);
            final GetHomeInterceptorFactory factory = new GetHomeInterceptorFactory();
            configuration.addViewInterceptor(method, factory, InterceptorOrder.View.COMPONENT_DISPATCHER);
            final SessionBeanComponentDescription componentDescription = (SessionBeanComponentDescription) componentConfiguration.getComponentDescription();
            componentConfiguration.getStartDependencies().add(new DependencyConfigurator<ComponentStartService>() {

                @Override
                public void configureDependency(final ServiceBuilder<?> serviceBuilder, final ComponentStartService service) throws DeploymentUnitProcessingException {
                    EjbHomeViewDescription ejbHomeView = componentDescription.getEjbHomeView();
                    if (ejbHomeView == null) {
                        throw EjbLogger.ROOT_LOGGER.beanHomeInterfaceIsNull(componentDescription.getComponentName());
                    }
                    serviceBuilder.addDependency(ejbHomeView.getServiceName(), ComponentView.class, factory.getViewToCreate());
                }
            });
        } else if (method.getName().equals("getHandle") && method.getParameterCount() == 0) {
        // ignore, handled client side
        } else if (method.getName().equals("isIdentical") && method.getParameterCount() == 1 && (method.getParameterTypes()[0].equals(EJBObject.class) || method.getParameterTypes()[0].equals(EJBLocalObject.class))) {
            handleIsIdenticalMethod(componentConfiguration, configuration, index, method);
        } else {
            final Method componentMethod = ClassReflectionIndexUtil.findMethod(index, componentConfiguration.getComponentClass(), MethodIdentifier.getIdentifierForMethod(method));
            if (componentMethod != null) {
                if (!Modifier.isPublic(componentMethod.getModifiers())) {
                    EjbLogger.ROOT_LOGGER.ejbBusinessMethodMustBePublic(componentMethod);
                }
                configuration.addViewInterceptor(method, new ImmediateInterceptorFactory(new ComponentDispatcherInterceptor(componentMethod)), InterceptorOrder.View.COMPONENT_DISPATCHER);
                configuration.addClientInterceptor(method, ViewDescription.CLIENT_DISPATCHER_INTERCEPTOR_FACTORY, InterceptorOrder.Client.CLIENT_DISPATCHER);
            } else if (method.getDeclaringClass() != Object.class && method.getDeclaringClass() != WriteReplaceInterface.class) {
                throw EjbLogger.ROOT_LOGGER.couldNotFindViewMethodOnEjb(method, description.getViewClassName(), componentConfiguration.getComponentName());
            }
        }
        EjbValidationsUtil.verifyMethodIsNotFinalNorStatic(method, index.getClass().getName());
    }
    configuration.addClientPostConstructInterceptor(Interceptors.getTerminalInterceptorFactory(), InterceptorOrder.ClientPostConstruct.TERMINAL_INTERCEPTOR);
    configuration.addClientPreDestroyInterceptor(Interceptors.getTerminalInterceptorFactory(), InterceptorOrder.ClientPreDestroy.TERMINAL_INTERCEPTOR);
}
Also used : DeploymentUnitProcessingException(org.jboss.as.server.deployment.DeploymentUnitProcessingException) GetHomeInterceptorFactory(org.jboss.as.ejb3.component.interceptors.GetHomeInterceptorFactory) EjbHomeViewDescription(org.jboss.as.ejb3.component.EjbHomeViewDescription) DependencyConfigurator(org.jboss.as.ee.component.DependencyConfigurator) Method(java.lang.reflect.Method) WriteReplaceInterface(org.jboss.as.ee.component.serialization.WriteReplaceInterface) ServiceBuilder(org.jboss.msc.service.ServiceBuilder) ComponentView(org.jboss.as.ee.component.ComponentView) ImmediateInterceptorFactory(org.jboss.invocation.ImmediateInterceptorFactory) EJBObject(javax.ejb.EJBObject) EJBLocalObject(javax.ejb.EJBLocalObject) DeploymentReflectionIndex(org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex) ComponentDispatcherInterceptor(org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor) ComponentStartService(org.jboss.as.ee.component.ComponentStartService)

Aggregations

Method (java.lang.reflect.Method)1 EJBLocalObject (javax.ejb.EJBLocalObject)1 EJBObject (javax.ejb.EJBObject)1 ComponentStartService (org.jboss.as.ee.component.ComponentStartService)1 ComponentView (org.jboss.as.ee.component.ComponentView)1 DependencyConfigurator (org.jboss.as.ee.component.DependencyConfigurator)1 ComponentDispatcherInterceptor (org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor)1 WriteReplaceInterface (org.jboss.as.ee.component.serialization.WriteReplaceInterface)1 EjbHomeViewDescription (org.jboss.as.ejb3.component.EjbHomeViewDescription)1 GetHomeInterceptorFactory (org.jboss.as.ejb3.component.interceptors.GetHomeInterceptorFactory)1 DeploymentUnitProcessingException (org.jboss.as.server.deployment.DeploymentUnitProcessingException)1 DeploymentReflectionIndex (org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex)1 ImmediateInterceptorFactory (org.jboss.invocation.ImmediateInterceptorFactory)1 ServiceBuilder (org.jboss.msc.service.ServiceBuilder)1