<!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;">
    Overriding server libs in an EJB inside an EAR - 5.1.0.GA
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/rodrigo.uchoa">Rodrigo Uchoa</a> in <i>JBoss Microcontainer</i> - <a href="https://community.jboss.org/message/737773#737773">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Hi everyone!</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>This is something I've been struggling for quite some time. That is, how to change the classloader behavior in an EAR deploy. I've read a lot of posts and docs around the internet, but nothing seems to be exactly my case.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>It all started with the need to update Hibernate libs in JBoss 5.1.0.GA (from the bundled 3.2.4 to 3.3.1). Using the jboss-classloading.xml file it worked fine when we use a standalone .WAR deploy with the hibernate libs inside "WEB-INF/lib" directory. When we switched to an .EAR deploy, it stopped working. Our .EAR structure looks like this:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>EAR</p><p>|</p><p>|---- lib //all libs, including hibernate's, are here</p><p>|</p><p>|---- META-INF</p><p>|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |---- jboss-classloading.xml </p><p>|</p><p>|---- EJB_Module //persistence-unit defined here, along with EJB business classes</p><p>|</p><p>|---- WAR_Module</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |---- WEB-INF</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |---- jboss-classloading.xml</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The EAR jboss-classloading.xml:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code jive-xml"><span class="jive-xml-tag">&lt;classloading xmlns="urn:jboss:classloading:1.0"
&#160;&#160;&#160; domain="app.ear"
&#160;&#160;&#160; export-all="NON_EMPTY"
&#160;&#160;&#160; import-all="true"
&#160;&#160;&#160; parent-first="false"&gt;</span>
<span class="jive-xml-tag">&lt;/classloading&gt;</span>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The WAR's jboss-classloading.xml:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code jive-xml"><span class="jive-xml-tag">&lt;classloading xmlns="urn:jboss:classloading:1.0"
&#160;&#160;&#160; domain="app.war"
&#160;&#160;&#160; parent-domain="app.ear"
&#160;&#160;&#160; export-all="NON_EMPTY"
&#160;&#160;&#160; import-all="true"&gt;</span>
<span class="jive-xml-tag">&lt;/classloading&gt;</span>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Now to the problem... Let's suppose I have two different .EAR projects with the exact same structure described above. When I deploy both of them to the same JBoss AS instance, one of them always have classloading issues with the hibernate libs when server is starting up. More specifically, we get "ClassCastException" with a hibernate interceptor we have:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">Caused by: javax.persistence.PersistenceException: [PersistenceUnit: sinpi-pu] Interceptor class does not implement Interceptor interface: br.gov.dpf.sinpi.core.util.HistoricoInterceptor
&#160;&#160;&#160; at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:811)
&#160;&#160;&#160; at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:191)
&#160;&#160;&#160; at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:253)
&#160;&#160;&#160; at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:125)
&#160;&#160;&#160; at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
&#160;&#160;&#160; at org.jboss.seam.persistence.EntityManagerFactory.createEntityManagerFactory(EntityManagerFactory.java:85)
&#160;&#160;&#160; at org.jboss.seam.persistence.EntityManagerFactory.startup(EntityManagerFactory.java:50)
&#160;&#160;&#160; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&#160;&#160;&#160; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
&#160;&#160;&#160; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
&#160;&#160;&#160; at java.lang.reflect.Method.invoke(Method.java:592)
&#160;&#160;&#160; at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
&#160;&#160;&#160; at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144)
&#160;&#160;&#160; at org.jboss.seam.Component.callComponentMethod(Component.java:2283)
&#160;&#160;&#160; at org.jboss.seam.Component.callCreateMethod(Component.java:2198)
&#160;&#160;&#160; at org.jboss.seam.Component.newInstance(Component.java:2158)
&#160;&#160;&#160; ... 75 more
Caused by: java.lang.ClassCastException: br.gov.dpf.sinpi.core.util.HistoricoInterceptor
&#160;&#160;&#160; at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:793)
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>My assumption is that different "org.hibernate.Interceptor" classes loaded by different classloaders are causing this mess. This problem only occurs when we deploy two EAR's at the same time. I even tried to change the "ear-deployer-jboss-beans.xml" isolated configuration, but it didn't work. What I need is that both EAR's use the newer hibernate libs bundled inside each "ear/lib" directory.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Any ideas would be appreciated.</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/737773#737773">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Microcontainer at <a href="https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2114">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


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

</div>

</body>
</html>