[
https://issues.jboss.org/browse/AS7-5496?page=com.atlassian.jira.plugin.s...
]
Scott Marlow commented on AS7-5496:
-----------------------------------
Its more than just forwarding the issue.
I asked the Hibernate team on IRC, if they are aware of any issues with Hibernate proxies
not being deserializable on a different classloader and they aren't aware of it.
When I have time, I will try to build your test case again. The first change that I would
like to make to your test case, is to not require MySQL (its quicker for me to test with
H2). The test case should just create the entities that are needed and return them from
the remote method call. With that change, I might be able to find time sooner to look at
this (no promises when though).
Running AS in a debugger and trying to see why the HibernateProxy.writeReplace() is not
doing the expected thing, would be the first thing to check (IMO). Whether that will help
or not, I'm not sure.
Since you reported this against EAP (not sure if that was a mistake or not), I also added
links for getting more timely support for that (EAP issues should be reported directly for
quicker resolution).
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