Details
Description
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()
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)
}
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.