Search in sources :

Example 1 with Executor

use of org.jowidgets.cap.service.api.annotation.Executor in project jo-client-platform by jo-source.

the class ExecutorAnnotationPostProcessor method postProcessAfterInitialization.

@SuppressWarnings("unchecked")
@Override
public Object postProcessAfterInitialization(final Object bean, final String beanName) {
    try {
        final ExecutorBean beanAnnotation = beanFactory.findAnnotationOnBean(beanName, ExecutorBean.class);
        if (beanAnnotation != null) {
            final IBeanAccess<? extends IBean> beanAccess = beanAccessProvider.getBeanAccess(beanAnnotation.value());
            final List<String> propertyNames = new BeanTypeUtil(beanAccess.getBeanType()).getPropertyNames();
            final Set<Method> methods = getExecutorMethods(bean);
            for (final Method method : methods) {
                final Object proxy = createExecutorProxy(beanFactory, beanName, method);
                final IExecutorServiceBuilder<IBean, Object> builder = CapServiceToolkit.executorServiceBuilder(beanAccess);
                if (proxy instanceof IBeanExecutor) {
                    builder.setExecutor((IBeanExecutor<IBean, Object>) proxy);
                } else {
                    builder.setExecutor((IBeanListExecutor<IBean, Object>) proxy);
                }
                builder.setBeanDtoFactory(propertyNames);
                final Executor executorAnnotation = method.getAnnotation(Executor.class);
                builder.setAllowDeletedBeans(executorAnnotation.allowDeletedBeans());
                builder.setAllowStaleBeans(executorAnnotation.allowStaleBeans());
                if (executorAnnotation.checker() != DefaultExecutableChecker.class) {
                    try {
                        builder.setExecutableChecker(executorAnnotation.checker().newInstance());
                    } catch (final InstantiationException e) {
                        throw new RuntimeException(e);
                    } catch (final IllegalAccessException e) {
                        throw new RuntimeException(e);
                    }
                }
                IExecutorService<Object> executorService = builder.build();
                if (transactionManager != null) {
                    executorService = new TransactionProxyFactory(transactionManager).createProxy(executorService, "execute");
                }
                final IServiceId<IExecutorService<Object>> serviceId = new ServiceId<IExecutorService<Object>>(executorAnnotation.id(), IExecutorService.class);
                if (isLocal()) {
                    final DefaultCapServiceToolkit defaultCapServiceToolkit = new DefaultCapServiceToolkit();
                    final IServicesDecoratorProvider asyncDecoratorProvider = defaultCapServiceToolkit.serviceDecoratorProvider().asyncDecoratorProvider();
                    final IDecorator<IExecutorService<Object>> decorator = asyncDecoratorProvider.getDecorator(serviceId);
                    executorService = decorator.decorate(executorService);
                }
                SpringServiceProvider.getInstance().addService(serviceId, executorService);
            }
        }
    } catch (final NoSuchBeanDefinitionException e) {
    }
    return bean;
}
Also used : Method(java.lang.reflect.Method) IExecutorService(org.jowidgets.cap.common.api.service.IExecutorService) IServiceId(org.jowidgets.service.api.IServiceId) ServiceId(org.jowidgets.service.tools.ServiceId) DefaultCapServiceToolkit(org.jowidgets.cap.service.impl.DefaultCapServiceToolkit) ExecutorBean(org.jowidgets.cap.service.api.annotation.ExecutorBean) IBeanExecutor(org.jowidgets.cap.service.api.executor.IBeanExecutor) IBeanListExecutor(org.jowidgets.cap.service.api.executor.IBeanListExecutor) IBeanExecutor(org.jowidgets.cap.service.api.executor.IBeanExecutor) Executor(org.jowidgets.cap.service.api.annotation.Executor) IServicesDecoratorProvider(org.jowidgets.service.api.IServicesDecoratorProvider) NoSuchBeanDefinitionException(org.springframework.beans.factory.NoSuchBeanDefinitionException) IBean(org.jowidgets.cap.common.api.bean.IBean)

Aggregations

Method (java.lang.reflect.Method)1 IBean (org.jowidgets.cap.common.api.bean.IBean)1 IExecutorService (org.jowidgets.cap.common.api.service.IExecutorService)1 Executor (org.jowidgets.cap.service.api.annotation.Executor)1 ExecutorBean (org.jowidgets.cap.service.api.annotation.ExecutorBean)1 IBeanExecutor (org.jowidgets.cap.service.api.executor.IBeanExecutor)1 IBeanListExecutor (org.jowidgets.cap.service.api.executor.IBeanListExecutor)1 DefaultCapServiceToolkit (org.jowidgets.cap.service.impl.DefaultCapServiceToolkit)1 IServiceId (org.jowidgets.service.api.IServiceId)1 IServicesDecoratorProvider (org.jowidgets.service.api.IServicesDecoratorProvider)1 ServiceId (org.jowidgets.service.tools.ServiceId)1 NoSuchBeanDefinitionException (org.springframework.beans.factory.NoSuchBeanDefinitionException)1