Author: rmannibucau Date: Mon May 6 16:06:04 2013 New Revision: 1479612 URL: http://svn.apache.org/r1479612 Log: extensions can override the injecton target
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java?rev=1479612&r1=1479611&r2=1479612&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java Mon May 6 16:06:04 2013 @@ -301,8 +301,12 @@ public class CdiEjbBean<T> extends BaseE } public InjectionTarget<T> createInjectionTarget(Bean<T> bean) { - final InjectionTarget<T> injectionTarget = new EjbInjectionTargetImpl<T>(getAnnotatedType(), createInjectionPoints(bean), getWebBeansContext()); - return getWebBeansContext().getWebBeansUtil().fireProcessInjectionTargetEvent(injectionTarget, getAnnotatedType()).getInjectionTarget(); + final EjbInjectionTargetImpl<T> injectionTarget = new EjbInjectionTargetImpl<T>(getAnnotatedType(), createInjectionPoints(bean), getWebBeansContext()); + final InjectionTarget<T> it = getWebBeansContext().getWebBeansUtil().fireProcessInjectionTargetEvent(injectionTarget, getAnnotatedType()).getInjectionTarget(); + if (!EjbInjectionTargetImpl.class.isInstance(it)) { + return new EjbInjectionTargetImpl<T>(injectionTarget, it); + } + return it; } protected Set<InjectionPoint> createInjectionPoints(Bean<T> bean) { @@ -324,24 +328,72 @@ public class CdiEjbBean<T> extends BaseE public static class EjbInjectionTargetImpl<T> extends InjectionTargetImpl<T> { private CdiEjbBean<T> bean; + private InjectionTarget<T> delegate = null; public EjbInjectionTargetImpl(AnnotatedType<T> annotatedType, Set<InjectionPoint> points, WebBeansContext webBeansContext) { super(annotatedType, points, webBeansContext, Collections.<AnnotatedMethod<?>>emptyList(), Collections.<AnnotatedMethod<?>>emptyList()); } + public EjbInjectionTargetImpl(final EjbInjectionTargetImpl<T> original, final InjectionTarget<T> delegate) { + super(original.annotatedType, original.getInjectionPoints(), original.webBeansContext, Collections.<AnnotatedMethod<?>>emptyList(), Collections.<AnnotatedMethod<?>>emptyList()); + this.delegate = delegate; + } + public void setCdiEjbBean(final CdiEjbBean<T> bean) { this.bean = bean; } @Override public T produce(final CreationalContext<T> creationalContext) { - return bean.createEjb(creationalContext); + if (delegate == null) { + return bean.createEjb(creationalContext); + } + return delegate.produce(creationalContext); } @Override public void dispose(final T instance) { - bean.destroyComponentInstance(instance); + if (delegate == null) { + bean.destroyComponentInstance(instance); + } else { + delegate.dispose(instance); + } + } + + @Override + public Set<InjectionPoint> getInjectionPoints() { + if (delegate == null) { + return super.getInjectionPoints(); + } + return delegate.getInjectionPoints(); + } + + @Override + public void inject(final T instance, final CreationalContext<T> ctx) { + if (delegate == null) { + super.inject(instance, ctx); + } else { + delegate.inject(instance, ctx); + } + } + + @Override + public void postConstruct(final T instance) { + if (delegate == null) { + super.postConstruct(instance); + } else { + delegate.postConstruct(instance); + } + } + + @Override + public void preDestroy(final T instance) { + if (delegate == null) { + super.preDestroy(instance); + } else { + delegate.preDestroy(instance); + } } public T createNewPojo(final CreationalContext<T> creationalContext) {