[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jboss-user
Subject:    [jboss-user] [EJB3] - Obtaining an EJB proxy from a CDI Interceptor
From:       Paul Robinson <do-not-reply () jboss ! com>
Date:       2013-01-30 14:27:37
Message-ID: 2-795148-3-11488-1359556047632.jivesbs.jivemailuser () https://community ! jboss ! org
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Paul Robinson [https://community.jboss.org/people/paul.robinson] created the \
discussion

"Obtaining an EJB proxy from a CDI Interceptor"

To view the discussion, visit: https://community.jboss.org/message/795148#795148

--------------------------------------------------------------
Hello,

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. 

Here's a simplified version of the code:


@ServiceRequest
@Interceptor
public class ServiceRequestInterceptor {
  
       @AroundInvoke
       public Object intercept(InvocationContext ic) throws Throwable {
  
               Object targetInstance = ic.getTarget();
               //register targetInstance in the protcol
       }
}


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. 

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?

Any ideas would be much appreciated.

Paul.
--------------------------------------------------------------

Reply to this message by going to Community
[https://community.jboss.org/message/795148#795148]

Start a new discussion in EJB3 at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2029]



[Attachment #5 (text/html)]

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



_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic