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
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