[jboss-jira] [JBoss JIRA] (AS7-5496) Hibernate proxy class not found in remote EJB call
Scott Marlow (JIRA)
jira-events at lists.jboss.org
Wed Sep 26 13:44:03 EDT 2012
[ https://issues.jboss.org/browse/AS7-5496?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12722058#comment-12722058 ]
Scott Marlow commented on AS7-5496:
-----------------------------------
Moved the entity classes into the ejb jar (photo_ejb.jar), but still get a CNFE when trying to clone the client (deployment.photo_web.war:main") copy of the de.seimet.photo.entity.Location_$$_javassist_2 proxy class.
We are calling "Class.forName(name, true, destClassLoader)" with name = de.seimet.photo.entity.Location_$$_javassist_2 and destClassLoader = "deployment.photo_ear.ear.photo_ejb.jar:main"
ClassLoader deployment.photo_ear.ear.photo_ejb.jar:main does have de.seimet.photo.entity.Location_$$_javassist_0 loaded but doesn't know about de.seimet.photo.entity.Location_$$_javassist_2.
de.seimet.photo.entity.Location_$$_javassist_2 came from the client sides call to JavassistLazyInitializer.getProxy() in readResolve().
When the client side is passing the de.seimet.photo.entity.Location_$$_javassist_2 parameter to the server side (ear), we don't seem to reach readResolve() for the parameter.
> Hibernate proxy class not found in remote EJB call
> --------------------------------------------------
>
> Key: AS7-5496
> URL: https://issues.jboss.org/browse/AS7-5496
> Project: Application Server 7
> Issue Type: Bug
> Components: JPA / Hibernate
> Affects Versions: 7.1.1.Final
> Environment: Java 1.6.0_35 and Java 1.7.0_07
> Mac OS X 10.8.1, Windows XP and Gentoo Linux with Kernel 3.5.3
> Reporter: Uwe Seimet
> Assignee: Scott Marlow
> Attachments: deployments.tar.gz, server.log, sources.tar.gz, sources2.tar.gz, test.sql
>
>
> Prerequisites:
> 1. A JPA entity A with a reference to a different JPA entity B. FetchType is FetchType.LAZY, e.g.
> @Entity
> public class A {
> @ManyToOne(fetch = FetchType.LAZY)
> private B refToB;
> }
> @Entity
> public class B {
> }
> 2. A remote interface with methods passing an instance of A, .e.g.
> @Remote
> public interface ITest {
> A test1();
> void test2(A a);
> }
> 3. A process calling test1() and then test2() on the remote interface like this:
> @EJB(lookup = "...")
> private ITest iTest;
> public void ITest() {
> final A a = iTest.test1();
> iTest.test2(a); }
> }
> Error description: When calling test1() an instance of A is returned. This instance is valid and works as expected. The reference to B is a proxy (something like B_$$_javassist_2), which was expected because B was loaded lazily and was never accessed in the remote process before. When passing the instance of A back by calling test2(a) an exception of this type is raised:
> java.lang.ClassNotFoundException: B_$$_javassist_2 from [Module "deployment.x.ear.y_ejb.jar:main" from Service Module Loader]
> at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
> at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(Concurrent
> ClassLoader.java:468)
> It looks as if the proxy cannot be serialized or deserialized. The behavior is reproducible with different applications on different platforms. As soon as a Hibernate javassist proxy, which was received via a remote call, is passed back as an argument in another remote call (the remote process is the same in all calls) the exception is raised.
> The classloader settings are the standard JBoss settings.
--
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
More information about the jboss-jira
mailing list