private static void doReloadBeanInBeanContexts(BeanManagerImpl beanManager, ManagedBean<?> managedBean) { try { Map<Class<? extends Annotation>, List<Context>> contexts = getContextMap(beanManager); List<Context> ctxList = contexts.get(managedBean.getScope()); if (ctxList != null) { for(Context context: ctxList) { doReloadBeanInContext(beanManager, managedBean, context); } } else { LOGGER.debug("No active contexts for bean '{}' in scope '{}'", managedBean.getBeanClass().getName(), managedBean.getScope()); } } catch (Exception e) { if (e.getClass().getSimpleName().equals("ContextNotActiveException")) { LOGGER.warning("No active contexts for bean '{}'", e, managedBean.getBeanClass().getName()); } else { LOGGER.warning("Context for '{}' failed to reload", e, managedBean.getBeanClass().getName()); } } }
/** * Will re-inject any managed beans in the target. Will not call any other life-cycle methods * * @param ctx * @param managedBean */ public static void reinitialize(Context ctx, Contextual<Object> contextual) { try { ManagedBean<Object> managedBean = ManagedBean.class.cast(contextual); LOGGER.debug("Re-Initializing........ {},: {}", managedBean, ctx); Object get = ctx.get(managedBean); if (get != null) { LOGGER.debug("Bean injection points are reinitialized '{}'", managedBean); managedBean.getProducer().inject(get, managedBean.getBeanManager().createCreationalContext(managedBean)); } } catch (Exception e) { LOGGER.error("Error reinitializing bean {},: {}", e, contextual, ctx); } } }
@SuppressWarnings({ "rawtypes", "unchecked" }) private static void doDefineNewManagedBean(BeanManagerImpl beanManager, String bdaId, Class<?> beanClass) { try { ClassTransformer classTransformer = getClassTransformer(); SlimAnnotatedType<?> annotatedType = classTransformer.getBackedAnnotatedType(beanClass, bdaId); boolean managedBeanOrDecorator = Beans.isTypeManagedBeanOrDecoratorOrInterceptor(annotatedType); if (managedBeanOrDecorator) { EnhancedAnnotatedType eat = EnhancedAnnotatedTypeImpl.of(annotatedType, classTransformer); BeanAttributes attributes = BeanAttributesFactory.forBean(eat, beanManager); ManagedBean<?> bean = ManagedBean.of(attributes, eat, beanManager); ReflectionHelper.set(beanManager, beanManager.getClass(), "beanSet", Collections.synchronizedSet(new HashSet<Bean<?>>())); beanManager.addBean(bean); beanManager.getBeanResolver().clear(); bean.initializeAfterBeanDiscovery(); LOGGER.debug("Bean defined '{}'", beanClass.getName()); } else { // TODO : define session bean LOGGER.warning("Bean NOT? defined '{}', session bean?", beanClass.getName()); } } catch (Exception e) { LOGGER.debug("Bean definition failed.", e); } }
/** * Creates an instance of the bean * * @return The instance */ @Override public T create(CreationalContext<T> creationalContext) { T instance = getProducer().produce(creationalContext); getProducer().inject(instance, creationalContext); if (!hasPostConstructCallback || beanManager.isContextActive(RequestScoped.class)) { getProducer().postConstruct(instance); } else { /* * CDI-219 * The request scope is active during @PostConstruct callback of any bean. */ RequestContext context = getUnboundRequestContext(); try { context.activate(); beanManager.fireRequestContextInitialized(getId()); getProducer().postConstruct(instance); } finally { beanManager.fireRequestContextBeforeDestroyed(getId()); context.invalidate(); context.deactivate(); beanManager.fireRequestContextDestroyed(getId()); } } return instance; }
/** * Destroys an instance of the bean * * @param instance The instance */ @Override public void destroy(T instance, CreationalContext<T> creationalContext) { super.destroy(instance, creationalContext); try { getProducer().preDestroy(instance); // WELD-1010 hack? if (creationalContext instanceof CreationalContextImpl) { ((CreationalContextImpl<T>) creationalContext).release(this, instance); } else { creationalContext.release(); } } catch (Exception e) { BeanLogger.LOG.errorDestroying(instance, this); BeanLogger.LOG.catchingDebug(e); } }
/** * Validates the type */ @Override protected void checkType() { if (!isDependent() && getEnhancedAnnotated().isParameterizedType()) { throw BeanLogger.LOG.managedBeanWithParameterizedBeanClassMustBeDependent(type); } boolean passivating = beanManager.isPassivatingScope(getScope()); if (passivating && !isPassivationCapableBean()) { if (!getEnhancedAnnotated().isSerializable()) { throw BeanLogger.LOG.passivatingBeanNeedsSerializableImpl(this); } else if (hasDecorators() && !allDecoratorsArePassivationCapable()) { throw BeanLogger.LOG.passivatingBeanHasNonPassivationCapableDecorator(this, getFirstNonPassivationCapableDecorator()); } else if (hasInterceptors() && !allInterceptorsArePassivationCapable()) { throw BeanLogger.LOG.passivatingBeanHasNonPassivationCapableInterceptor(this, getFirstNonPassivationCapableInterceptor()); } } }
if (contextual instanceof ManagedBean<?> && !isInterceptorOrDecorator(contextual)) { ManagedBean<?> managedBean = (ManagedBean<?>) contextual; if (managedBean.getProducer() instanceof BasicInjectionTarget<?>) { BasicInjectionTarget<?> injectionTarget = (BasicInjectionTarget<?>) managedBean.getProducer(); if (!injectionTarget.getLifecycleCallbackInvoker().hasPreDestroyMethods() && !injectionTarget.hasInterceptors()) {
@Override public void initializeAfterBeanDiscovery() { if (this.passivationCapableBean && hasDecorators() && !allDecoratorsArePassivationCapable()) { this.passivationCapableBean = false; } if (this.passivationCapableBean && hasInterceptors() && !allInterceptorsArePassivationCapable()) { this.passivationCapableBean = false; } super.initializeAfterBeanDiscovery(); }
private InterceptorClassMetadata<?> getFirstNonPassivationCapableInterceptor() { for (InterceptorClassMetadata<?> interceptorMetadata : getBeanManager().getInterceptorModelRegistry().get(getAnnotated()).getAllInterceptors()) { if (!Reflections.isSerializable(interceptorMetadata.getJavaClass())) { return interceptorMetadata; } } return null; }
@Override public String toString() { return "Managed Bean [" + getBeanClass().toString() + "] with qualifiers [" + Formats.formatAnnotations(getQualifiers()) + "]"; }
/** * Creates a simple, annotation defined Web Bean * * @param <T> The type * @param clazz The class * @param beanManager the current manager * @return A Web Bean */ public static <T> ManagedBean<T> of(BeanAttributes<T> attributes, EnhancedAnnotatedType<T> clazz, BeanManagerImpl beanManager) { return new ManagedBean<T>(attributes, clazz, createId(attributes, clazz), beanManager); }
protected <T> ManagedBean<T> createManagedBean(EnhancedAnnotatedType<T> weldClass) { BeanAttributes<T> attributes = BeanAttributesFactory.forBean(weldClass, getManager()); ManagedBean<T> bean = ManagedBean.of(attributes, weldClass, manager); getEnvironment().addManagedBean(bean); return bean; }
@Override public void initializeAfterBeanDiscovery() { super.initializeAfterBeanDiscovery(); checkInterceptorBindings(); }
/** * Creates an instance of the bean * * @return The instance */ @Override public T create(CreationalContext<T> creationalContext) { T instance = getProducer().produce(creationalContext); getProducer().inject(instance, creationalContext); if (!hasPostConstructCallback || beanManager.isContextActive(RequestScoped.class)) { getProducer().postConstruct(instance); } else { /* * CDI-219 * The request scope is active during @PostConstruct callback of any bean. */ RequestContext context = getUnboundRequestContext(); try { context.activate(); beanManager.fireRequestContextInitialized(getId()); getProducer().postConstruct(instance); } finally { beanManager.fireRequestContextBeforeDestroyed(getId()); context.invalidate(); context.deactivate(); beanManager.fireRequestContextDestroyed(getId()); } } return instance; }
/** * Destroys an instance of the bean * * @param instance The instance */ @Override public void destroy(T instance, CreationalContext<T> creationalContext) { super.destroy(instance, creationalContext); try { getProducer().preDestroy(instance); // WELD-1010 hack? if (creationalContext instanceof CreationalContextImpl) { ((CreationalContextImpl<T>) creationalContext).release(this, instance); } else { creationalContext.release(); } } catch (Exception e) { BeanLogger.LOG.errorDestroying(instance, this); BeanLogger.LOG.catchingDebug(e); } }
/** * Validates the type */ @Override protected void checkType() { if (!isDependent() && getEnhancedAnnotated().isParameterizedType()) { throw BeanLogger.LOG.managedBeanWithParameterizedBeanClassMustBeDependent(type); } boolean passivating = beanManager.isPassivatingScope(getScope()); if (passivating && !isPassivationCapableBean()) { if (!getEnhancedAnnotated().isSerializable()) { throw BeanLogger.LOG.passivatingBeanNeedsSerializableImpl(this); } else if (hasDecorators() && !allDecoratorsArePassivationCapable()) { throw BeanLogger.LOG.passivatingBeanHasNonPassivationCapableDecorator(this, getFirstNonPassivationCapableDecorator()); } else if (hasInterceptors() && !allInterceptorsArePassivationCapable()) { throw BeanLogger.LOG.passivatingBeanHasNonPassivationCapableInterceptor(this, getFirstNonPassivationCapableInterceptor()); } } }
if (contextual instanceof ManagedBean<?> && !isInterceptorOrDecorator(contextual)) { ManagedBean<?> managedBean = (ManagedBean<?>) contextual; if (managedBean.getProducer() instanceof BasicInjectionTarget<?>) { BasicInjectionTarget<?> injectionTarget = (BasicInjectionTarget<?>) managedBean.getProducer(); if (!injectionTarget.getLifecycleCallbackInvoker().hasPreDestroyMethods() && !injectionTarget.hasInterceptors()) {
@Override public void initializeAfterBeanDiscovery() { if (this.passivationCapableBean && hasDecorators() && !allDecoratorsArePassivationCapable()) { this.passivationCapableBean = false; } if (this.passivationCapableBean && hasInterceptors() && !allInterceptorsArePassivationCapable()) { this.passivationCapableBean = false; } super.initializeAfterBeanDiscovery(); }
private InterceptorClassMetadata<?> getFirstNonPassivationCapableInterceptor() { for (InterceptorClassMetadata<?> interceptorMetadata : getBeanManager().getInterceptorModelRegistry().get(getAnnotated()).getAllInterceptors()) { if (!Reflections.isSerializable(interceptorMetadata.getJavaClass())) { return interceptorMetadata; } } return null; }
@Override public String toString() { return "Managed Bean [" + getBeanClass().toString() + "] with qualifiers [" + Formats.formatAnnotations(getQualifiers()) + "]"; }