use of org.jboss.weld.interceptor.spi.model.InterceptionModel in project core by weld.
the class ManagedBean method initHasPostConstructCallback.
private boolean initHasPostConstructCallback(InjectionTarget<T> producer) {
if (producer instanceof BasicInjectionTarget<?>) {
BasicInjectionTarget<?> weldProducer = (BasicInjectionTarget<?>) producer;
final InterceptionModel interceptors = getInterceptors();
if (interceptors == null || interceptors.getInterceptors(InterceptionType.POST_CONSTRUCT, null).isEmpty()) {
if (!weldProducer.getLifecycleCallbackInvoker().hasPostConstructCallback()) {
return false;
}
}
}
// otherwise we assume there is a post construct callback, just to be safe
return true;
}
use of org.jboss.weld.interceptor.spi.model.InterceptionModel in project core by weld.
the class EjbSupportImpl method registerCdiInterceptorsForMessageDrivenBeans.
public void registerCdiInterceptorsForMessageDrivenBeans(BeanDeployerEnvironment environment, BeanManagerImpl manager) {
for (InternalEjbDescriptor<?> descriptor : getEjbDescriptors()) {
if (descriptor.isMessageDriven()) {
EnhancedAnnotatedType<?> type = manager.getServices().getRequired(ClassTransformer.class).getEnhancedAnnotatedType(descriptor.getBeanClass(), manager.getId());
if (!manager.getInterceptorModelRegistry().containsKey(type.slim())) {
InterceptionModelInitializer.of(manager, type, null).init();
}
InterceptionModel model = manager.getInterceptorModelRegistry().get(type.slim());
if (model != null) {
ejbServices.registerInterceptors(descriptor.delegate(), new InterceptorBindingsAdapter(model));
}
}
}
}
use of org.jboss.weld.interceptor.spi.model.InterceptionModel in project core by weld.
the class EjbSupportImpl method createMessageDrivenInjectionTarget.
@Override
public <T> BasicInjectionTarget<T> createMessageDrivenInjectionTarget(EnhancedAnnotatedType<T> type, EjbDescriptor<T> d, BeanManagerImpl manager) {
InternalEjbDescriptor<T> descriptor = InternalEjbDescriptor.of(d);
EnhancedAnnotatedType<T> implementationClass = SessionBeans.getEjbImplementationClass(descriptor, manager, type);
Instantiator<T> instantiator = null;
if (type.equals(implementationClass)) {
instantiator = new DefaultInstantiator<T>(type, null, manager);
} else {
// Session bean subclassed by the EJB container
instantiator = SubclassedComponentInstantiator.forSubclassedEjb(type, implementationClass, null, manager);
}
InterceptionModel interceptionModel = manager.getInterceptorModelRegistry().get(type.slim());
if (interceptionModel != null) {
if (interceptionModel.hasExternalNonConstructorInterceptors()) {
instantiator = SubclassedComponentInstantiator.forInterceptedDecoratedBean(implementationClass, null, (AbstractInstantiator<T>) instantiator, manager);
instantiator = new InterceptorApplyingInstantiator<>(instantiator, interceptionModel, type.slim());
}
if (interceptionModel.hasExternalConstructorInterceptors()) {
instantiator = new ConstructorInterceptionInstantiator<>(instantiator, interceptionModel, type.slim());
}
}
return BasicInjectionTarget.createDefault(type, null, manager, instantiator);
}
use of org.jboss.weld.interceptor.spi.model.InterceptionModel in project core by weld.
the class SubclassedComponentDescriptorTest method testInterceptionModelForConstructor.
@Test
public void testInterceptionModelForConstructor() {
BasicInjectionTarget<?> it = (BasicInjectionTarget<?>) manager.createInjectionTarget(manager.getEjbDescriptor(Foo.class.getSimpleName()));
InterceptionModel model = manager.getInterceptorModelRegistry().get(it.getAnnotated());
assertNotNull(model);
assertTrue(model.hasExternalConstructorInterceptors());
}
use of org.jboss.weld.interceptor.spi.model.InterceptionModel in project core by weld.
the class Validator method validateInterceptors.
private void validateInterceptors(BeanManagerImpl beanManager, AbstractClassBean<?> classBean) {
InterceptionModel interceptionModel = beanManager.getInterceptorModelRegistry().get(classBean.getAnnotated());
if (interceptionModel != null) {
Set<? extends InterceptorClassMetadata<?>> interceptors = interceptionModel.getAllInterceptors();
if (interceptors.size() > 0) {
boolean passivationCapabilityCheckRequired = beanManager.isPassivatingScope(classBean.getScope());
for (InterceptorClassMetadata<?> interceptorMetadata : interceptors) {
// in the case of CDI interceptors we only need to additionally validate passivation capability (if required)
if (interceptorMetadata.getInterceptorFactory() instanceof CdiInterceptorFactory<?> && passivationCapabilityCheckRequired) {
CdiInterceptorFactory<?> cdiInterceptorFactory = (CdiInterceptorFactory<?>) interceptorMetadata.getInterceptorFactory();
Interceptor<?> interceptor = cdiInterceptorFactory.getInterceptor();
boolean isSerializable = (interceptor instanceof InterceptorImpl) ? ((InterceptorImpl<?>) interceptor).isSerializable() : Beans.isPassivationCapableDependency(interceptor);
if (!isSerializable) {
throw ValidatorLogger.LOG.passivatingBeanWithNonserializableInterceptor(classBean, interceptor);
}
if (interceptor instanceof InterceptorImpl) {
beanManager = ((InterceptorImpl<?>) interceptor).getBeanManager();
}
for (InjectionPoint injectionPoint : interceptor.getInjectionPoints()) {
Bean<?> resolvedBean = beanManager.resolve(beanManager.getBeans(injectionPoint));
validateInterceptorDecoratorInjectionPointPassivationCapable(injectionPoint, resolvedBean, beanManager, classBean);
}
}
if (interceptorMetadata.getInterceptorFactory() instanceof PlainInterceptorFactory<?>) {
PlainInterceptorFactory<?> factory = (PlainInterceptorFactory<?>) interceptorMetadata.getInterceptorFactory();
Class<?> interceptorClass = interceptorMetadata.getJavaClass();
if (passivationCapabilityCheckRequired && !Reflections.isSerializable(interceptorClass)) {
throw ValidatorLogger.LOG.passivatingBeanWithNonserializableInterceptor(this, interceptorClass.getName());
}
// if we can't get to the interceptor's BeanManager, we will use the bean's BM instead
InjectionTarget<?> injectionTarget = factory.getInjectionTarget();
if (injectionTarget instanceof BasicInjectionTarget<?>) {
beanManager = ((BasicInjectionTarget<?>) injectionTarget).getBeanManager();
}
for (InjectionPoint injectionPoint : factory.getInjectionTarget().getInjectionPoints()) {
validateInjectionPoint(injectionPoint, beanManager);
if (passivationCapabilityCheckRequired) {
Bean<?> resolvedBean = beanManager.resolve(beanManager.getBeans(injectionPoint));
validateInterceptorDecoratorInjectionPointPassivationCapable(injectionPoint, resolvedBean, beanManager, classBean);
}
}
}
}
}
}
}
Aggregations