<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="https://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Obtaining an EJB proxy from a CDI Interceptor
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/paul.robinson">Paul Robinson</a> in <i>EJB3</i> - <a href="https://community.jboss.org/message/795148#795148">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Hello,</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I have a CDI interceptor that when placed on an EJB method (of a SLSB) enlists the EJB in a protocol for which it will later receive callbacks that enable it to participate in the protocol. </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Here's a simplified version of the code:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code jive-java">@ServiceRequest
@Interceptor
<font color="navy"><b>public</b></font> <font color="navy"><b>class</b></font> ServiceRequestInterceptor <font color="navy">{</font>
&#160;
&#160;&#160;&#160; @AroundInvoke
&#160;&#160;&#160; <font color="navy"><b>public</b></font> Object intercept(InvocationContext ic) <font color="navy"><b>throws</b></font> Throwable <font color="navy">{</font>
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160; Object targetInstance = ic.getTarget();
&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="darkgreen">//register targetInstance in the protcol</font>
&#160;&#160;&#160; <font color="navy">}</font>
<font color="navy">}</font>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Reflection is then used to make invocations on 'targetInstance' as the protocol progresses. The problem is that 'targetInstance' is the actual java instance, so invocations bypass the whole EJB stack. I imagine causes problems for instance management as I'm accessing the bean without the EJB container knowing. But, the more immediate problem I'm seeing is that this approach prevents EJB features like CMT from working. </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I think the solution to my problem is to somehow lookup the right EJB proxy in the interceptor. However, I'm unsure how to do this as I won't know the details such as the appName or moduleName. The interceptor does have access to the .class of the bean implementation, if this helps?</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Any ideas would be much appreciated.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Paul.</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="https://community.jboss.org/message/795148#795148">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in EJB3 at <a href="https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2029">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>