[
https://issues.apache.org/jira/browse/OWB-542?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13004012#comment-13004012
]
Joe Bergmark commented on OWB-542:
----------------------------------
I'm working on a unit test for this, but I believe it is still occurring.
The problem only appears to occur when a dependent scoped bean from a producer
is injected into another dependent scoped bean. In that case it gets added
twice as Bill pointed out. Once while processing getInjectableReference, and
then again in that special code block check for
WebBeansUnit.isDependentent(injectedBean) in AbstractInjectable. That second
check appears redundant.
> Disposer is called twice on Dependent beans when injected into a managed
> object that is called from a JSP
> ---------------------------------------------------------------------------------------------------------
>
> Key: OWB-542
> URL: https://issues.apache.org/jira/browse/OWB-542
> Project: OpenWebBeans
> Issue Type: Bug
> Components: Lifecycle
> Affects Versions: 1.0.0
> Environment: standalone Windows environment.
> Reporter: Bill Wigger
> Assignee: Gurkan Erdogdu
> Fix For: 1.1.0
>
> Original Estimate: 2h
> Remaining Estimate: 2h
>
> The Disposer for the "DepDate" dependent bean below will be called twice,
> when it should only be called once.
> Using a simple JSP with the following EL expression:
> <c:out value="${dateFromProducer.date}"/>
> where dateFromProducer.date resolves to this method in the DateFromProducer
> class:
> @Named
> public class DateFromProducer {
> @Inject @Named("DepDate") String currentDate;
> public String getDate() { return currentDate; }
> ...
>
> And the Dependent bean is this:
> public class TimeDependentProducer {
> @Produces @Dependent @Named("DepDate") String returnDate() {
> System.out.println("DepDate Producer called");
> GregorianCalendar c = new GregorianCalendar();
> return c.getTime().toString();
> }
>
> void disposeReturnDate(@Disposes @Named("DepDate") String s) {
> System.out.println("DepDate Dipsoser called");
> }
> Fix is to remove the following code from the method "inject(InjectionPoint
> injectionPoint)"
> in org.apache.webbeans.inject.AbstractInjectable
> // add this dependent into bean dependent list
> if (!WebBeansUtil.isStaticInjection(injectionPoint) &&
> WebBeansUtil.isDependent(injectedBean))
> {
> if(instanceUnderInjection.get() != null)
> {
>
> ((CreationalContextImpl<?>)this.injectionOwnerCreationalContext).addDependent(instanceUnderInjection.get(),injectedBean,
> injected);
> }
> }
> that code creates a second entry in the list. The first entry is created
> because the code right above it:
> //Gets injectable reference for injected bean
> injected =
> injectionOwnerBean.getWebBeansContext().getBeanManagerImpl().getInjectableReference(injectionPoint,
> this.injectionOwnerCreationalContext);
> will call "addDependent(....); also.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira