<!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="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">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;">
    JBoss 4.2.1 RemoteEJB Lookup ClassCastException
</h3>
<span style="margin-bottom: 10px;">
    reply from <a href="http://community.jboss.org/people/marcuslinke">Marcus Linke</a> in <i>EJB 3.0</i> - <a href="http://community.jboss.org/message/549052#549052">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>I've read this and found a simpler solution / workaround for this problem (without the need of patching). It's simple to integrate the appropriate code taken from EJBTHREE-1889 into the own JNDI lookup. Because of performance reasons this hack of course should be used only for JVM internal remote lookups (which is the case with isolated EAR's). This may be realized by using different JNDI lookup wrapper classes...</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>public class JBossRemoteJndiLookup&lt;T&gt; {</p><p>&#160;&#160;&#160; public T lookup(String resourceName) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Object o = new InitialContext().lookup(resourceName);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; o = refineObjectInContextClassLoader(o);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; return (T) o;<br/>&#160;&#160;&#160; }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160; /**<br/><span>&#160;&#160;&#160;&#160; * This is a workaround for </span><a class="jive-link-external-small" href="http://community.jboss.org/thread/111016" target="_blank">http://community.jboss.org/thread/111016</a><span>. It is taken from</span><br/><span>&#160;&#160;&#160;&#160; * </span><a class="jive-link-external-small" href="https://jira.jboss.org/browse/EJBTHREE-1889" target="_blank">https://jira.jboss.org/browse/EJBTHREE-1889</a><span>. See modifications of ProxyObjectFactory.java</span><br/>&#160;&#160;&#160;&#160; */<br/>&#160;&#160;&#160; private Object refineObjectInContextClassLoader(Object o) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; // EJBTHREE-1889: if the lookup has been performed locally on a remote (business)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; // interface that's defined in the current TCL, then the proxy must implement<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; // that TCL defined interface.<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; // redefine in TCL<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; ClassLoader tcl = Thread.currentThread().getContextClassLoader();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; try {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; o = redefineObjectInClassLoader(o, tcl);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; } catch (Exception e) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; throw new RuntimeException(e);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; return o;<br/>&#160;&#160;&#160; }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160; private Object redefineObjectInClassLoader(Object obj, ClassLoader target) throws ClassNotFoundException,<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IOException {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; ByteArrayOutputStream bout = new ByteArrayOutputStream();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; ObjectOutputStream out = new ObjectOutputStream(bout);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; out.writeObject(obj);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; out.flush();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; ObjectInputStream in = new ObjectInputStreamWithClassLoader(bin, target);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Object result = in.readObject();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; in.close();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; return result;<br/>&#160;&#160;&#160; }</p><p>}</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/549052#549052">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in EJB 3.0 at <a href="http://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>