use of org.jowidgets.service.api.IServiceId 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;
}
use of org.jowidgets.service.api.IServiceId in project jo-client-platform by jo-source.
the class ServicePostProcessor method postProcessAfterInitialization.
@Override
public Object postProcessAfterInitialization(final Object bean, final String beanName) {
try {
final CapService serviceAnnotation = beanFactory.findAnnotationOnBean(beanName, CapService.class);
if (serviceAnnotation != null) {
final Class<?> serviceType;
if (serviceAnnotation.type() != void.class) {
serviceType = serviceAnnotation.type();
} else {
if (bean.getClass().getInterfaces().length == 0) {
throw new RuntimeException(beanName + " must implement at least one interface or type must be set on @CapService annotation");
}
serviceType = bean.getClass().getInterfaces()[0];
}
String id = serviceAnnotation.id();
if (id.isEmpty()) {
id = serviceType.getName();
}
final IServiceId<Object> serviceId = new ServiceId<Object>(id, serviceType);
SpringServiceProvider.getInstance().addService(serviceId, beanProxyFactory.createProxy(beanName, serviceType));
}
} catch (final NoSuchBeanDefinitionException e) {
}
return bean;
}
use of org.jowidgets.service.api.IServiceId in project jo-client-platform by jo-source.
the class JpaReaderAnnotationPostProcessor method postProcessAfterInitialization.
@Override
public Object postProcessAfterInitialization(final Object bean, final String beanName) {
try {
final ReaderBean beanAnnotation = beanFactory.findAnnotationOnBean(beanName, ReaderBean.class);
if (beanAnnotation != null) {
final Class<? extends IBean> beanType = beanAnnotation.type();
final List<String> propertyNames = new BeanTypeUtil(beanType).getPropertyNames();
final Set<Method> methods = getReaderMethods(bean);
for (final Method method : methods) {
final IPredicateCreator<Object> predicateCreator = createPredicateCreator(beanFactory, beanName, method);
final ICriteriaQueryCreatorBuilder<Object> queryCreatorBuilder = JpaQueryToolkit.criteriaQueryCreatorBuilder(beanType).setCaseSensitve(!beanAnnotation.caseInsensitive());
// TODO: MvR -> Check genericity...
if (ParentLinkHelper.hasParent(beanType)) {
queryCreatorBuilder.setParentPropertyName(beanAnnotation.parentPropertyName());
}
if (predicateCreator != null) {
queryCreatorBuilder.addPredicateCreator(predicateCreator);
}
for (final Map.Entry<String, ? extends ICustomFilterPredicateCreator<?>> entry : customFilterPredicateCreators.entrySet()) {
final String filterName = entry.getKey();
@SuppressWarnings("unchecked") final ICustomFilterPredicateCreator<Object> customFilterPredicateCreator = (ICustomFilterPredicateCreator<Object>) entry.getValue();
queryCreatorBuilder.addCustomFilterPredicateCreator(filterName, customFilterPredicateCreator);
}
final IQueryCreator<Object> queryCreator = queryCreatorBuilder.build();
final IReaderService<Object> readerService = JpaServiceToolkit.serviceFactory().readerService(beanType, queryCreator, propertyNames);
final Reader executorAnnotation = method.getAnnotation(Reader.class);
final IServiceId<IReaderService<Void>> serviceId = new ServiceId<IReaderService<Void>>(executorAnnotation.value(), IReaderService.class);
SpringServiceProvider.getInstance().addService(serviceId, readerService);
}
}
} catch (final NoSuchBeanDefinitionException e) {
}
return bean;
}
use of org.jowidgets.service.api.IServiceId in project jo-client-platform by jo-source.
the class RemotingServiceProviderFactory method create.
/**
* Creates the service provider for the remote services defined by the broker id
*
* @param brokerId The broker id to get the remote services for
* @param timeout The timeout after giving up, e.g. if server is not available
* @param cancelCallback A cancel callback that can be used to cancel the creation
*
* @return The ServiceProvider
*
* @throws RemotingTimeoutException if the timeout elapsed before initialization
*/
public static IServiceProvider create(final Object brokerId, final long timeout, final ICancelCallback cancelCallback) {
final ServiceProviderBuilder builder = new ServiceProviderBuilder();
final IInvocationServiceClient invocationServiceClient = InvocationServiceClientToolkit.getClient(brokerId);
final IMethodInvocationService<Set<? extends IServiceId<?>>, Void, Void, Void, Void> methodService;
methodService = invocationServiceClient.getMethodService(CapInvocationMethodNames.SERVICE_LOCATOR_METHOD_NAME);
final SyncInvocationCallback<Set<? extends IServiceId<?>>> invocationCallback;
invocationCallback = new SyncInvocationCallback<Set<? extends IServiceId<?>>>(getExecutionCallback(cancelCallback), timeout);
methodService.invoke(invocationCallback, null, null, null);
addServices(builder, brokerId, invocationCallback.getResultSynchronious());
return builder.build();
}
Aggregations