/** * Will re-inject any managed beans in the target. Will not call any other life-cycle methods * * @param ctx * @param managedBean */ @SuppressWarnings("unchecked") static void reinitialize(Context ctx, Contextual<Object> contextual) { try { ManagedBean<Object> managedBean = ManagedBean.class.cast(contextual); LOGGER.debug("Re-Initializing bean '{}' in context '{}'", managedBean, ctx); Object get = ctx.get(managedBean); if (get != null) { LOGGER.debug("Bean injection points are reinitialized '{}'", managedBean); CreationalContextImpl<Object> creationalContext = managedBean.getWebBeansContext().getCreationalContextFactory().getCreationalContext(managedBean); managedBean.getProducer().inject(get, creationalContext); } } catch (Exception e) { LOGGER.error("Error reinitializing bean '{}' in context '{}'", e, contextual, ctx); } } }
@Override public void preDestroy() { if (!normalScoped) { creationalContext.release(); } } });
/** * {@inheritDoc} */ @Override public void release() { removeAllDependents(); }
public T create(CreationalContext<T> creationalContext) { if (!(creationalContext instanceof CreationalContextImpl)) { creationalContext = webBeansContext.getCreationalContextFactory().wrappedCreationalContext(creationalContext, this); } CreationalContextImpl<T> creationalContextImpl = (CreationalContextImpl<T>)creationalContext; Bean<T> oldBean = creationalContextImpl.putBean(this); Contextual<T> oldContextual = creationalContextImpl.putContextual(this); // otherwise BeanMetaData is broken try { return super.create(creationalContext); } finally { creationalContextImpl.putBean(oldBean); creationalContextImpl.putContextual(oldContextual); } }
public boolean containsDependent(Contextual<?> contextual, Object instance) { if (dependentObjects == null) { return false; } synchronized (this) { for (DependentCreationalContext<?> dependentCreationalContext: dependentObjects) { if (dependentCreationalContext.getContextual().equals(contextual) && dependentCreationalContext.getInstance() == instance) { return true; } } return false; } }
protected WebBeansContext getWebBeansContext() { return creationalContext.getWebBeansContext(); }
@Override protected Contextual<T> produce(Map<Interceptor<?>, ?> interceptors, CreationalContextImpl<Contextual<T>> creationalContext) { CreationalContextImpl<T> contextImpl = (CreationalContextImpl<T>)creationalContext; return contextImpl.getBean(); } }
public CreationalContextImpl<T> wrappedCreationalContext(CreationalContext<T> creationalContext, Contextual<T> contextual) { return new WrappedCreationalContext<>(contextual, creationalContext, webBeansContext); }
/** * Returns a new creational context for given contextual. * * @param contextual contextual instance * @return new creational context for given contextual */ public CreationalContextImpl<T> getCreationalContext(Contextual<T> contextual) { return new CreationalContextImpl<>(contextual, webBeansContext); }
@Override protected Contextual<T> produce(Map<Interceptor<?>, ?> interceptors, CreationalContextImpl<Contextual<T>> creationalContext) { if (!(creationalContext instanceof CreationalContextImpl)) { // TODO What to do here? throw new IllegalStateException("MetadataProducer does work only with CreationalContextImpl"); } CreationalContextImpl<T> contextImpl = (CreationalContextImpl<T>)creationalContext; return contextImpl.getContextual(); } }
@Override public EventMetadata produce(CreationalContext<EventMetadata> creationalContext) { if (!(creationalContext instanceof CreationalContextImpl)) { // TODO What to do here? throw new IllegalStateException("EventMetadataProducer does work only with CreationalContextImpl"); } CreationalContextImpl<EventMetadata> contextImpl = (CreationalContextImpl<EventMetadata>)creationalContext; return contextImpl.getEventMetadata(); }
@Override public void push(T instance) { super.push(instance); wrapped.push(instance); }
private void cleanUp() { if (cc != null) { cc.release(); cc = null; } } }
/** * {@inheritDoc} */ @Override public <T> CreationalContextImpl<T> createCreationalContext(Contextual<T> contextual) { if (contextual instanceof SerializableBean) { contextual = ((SerializableBean)contextual).getBean(); } return webBeansContext.getCreationalContextFactory().getCreationalContext(contextual); }
private boolean isAnotherApp(final CreationalContext<T> context) { return CreationalContextImpl.class.isInstance(context) && CreationalContextImpl.class.cast(context).getWebBeansContext() != wbc; }
protected Contextual<?> getBean() { return creationalContext.getBean(); }
private void cleanUp() { if (cc != null) { cc.release(); cc = null; } } }
@Override public void preDestroy() { if (!normalScoped) { creationalContext.release(); } } });
public void release() { if (creationalContexts != null) { for (CreationalContextImpl<?> creationalContext : creationalContexts.values()) { creationalContext.release(); } } }
@Override public void release() { super.release(); wrapped.release(); }