[
https://issues.apache.org/jira/browse/OWB-771?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13577118#comment-13577118
]
Eric Covener commented on OWB-771:
----------------------------------
I don't think this assignment accomplishes much, the InvocationContextImpl will
not be alive very much longer anyway. Unit tests and TCK don't mind -- any
concerns with removing both assignments?
> InvocationContextImpl cleans target field if occurs an exception
> -----------------------------------------------------------------
>
> Key: OWB-771
> URL: https://issues.apache.org/jira/browse/OWB-771
> Project: OpenWebBeans
> Issue Type: Bug
> Components: Core, Interceptor and Decorators
> Affects Versions: 1.1.0, 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.5, 1.1.6, 1.1.7
> Reporter: Thiago Soares
> Priority: Trivial
>
> I've done some tests using ApacheOpenWebBeans 1.1.x as the CDI implementation.
> I am using a Framework (frameworkdemoiselle.gov.br) that offers an
> interceptor that handles exceptions thrown by the target bean.
> A summary of this interceptor is written bellow:
> =========================
> @AroundInvoke
> public Object manage(final InvocationContext ic) throws Exception {
> Object result = null;
> try {
> result = ic.proceed();
> } catch (Exception cause) {
> // Handle Exception here
> target = ic.getTarget();
> ...
> }
> return result;
> }
> =========================
> The "Handle Exception" logic uses the target bean. The problem is that
> the "ic.getTarget()" method returns null and i get a
> NullPointerException.
> I've done the same test using WELD and ic.getTarget() does not returns null.
> Analyzing the source code of the class
> "org.apache.webbeans.intercept.InvocationContextImpl" I see that it
> destroys the target instance when it catches an exception.
> =========================
> public Object proceed() throws Exception
> {
> try
> {
> if (type.equals(InterceptionType.AROUND_INVOKE))
> {
> return proceedAroundInvokes(interceptorDatas);
> }
> else if (type.equals(InterceptionType.AROUND_TIMEOUT))
> {
> return proceedAroundTimeouts(interceptorDatas);
> }
> return proceedCommonAnnots(interceptorDatas, type);
> }
> catch (InvocationTargetException ite)
> {
> target = null; // destroy target instance <<=================
> // Try to provide the original exception to the interceptor stack,
> // not the InvocationTargetException from Method.invoke
> Throwable t = ite.getCause();
> if (t instanceof Exception)
> {
> throw (Exception) t;
> }
> throw ite;
> }
> catch (Exception e)
> {
> target = null; // destroy target instance <<=================
> throw e;
> }
> }
> =========================
> My question is: Why we need to destroy the target instance when occurs
> an Exception? Doing it so, the interceptor cannot get the target after
> invoking proceed() method.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira