[jboss-jira] [JBoss JIRA] (AS7-5496) Hibernate proxy class not found in remote EJB call

Uwe Seimet (JIRA) jira-events at lists.jboss.org
Wed Sep 5 17:01:32 EDT 2012


    [ https://issues.jboss.org/browse/AS7-5496?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12716191#comment-12716191 ] 

Uwe Seimet edited comment on AS7-5496 at 9/5/12 5:01 PM:
---------------------------------------------------------

I have attached these files:

1. server.log, with the exception backtrace at the bottom.
2. test.sql: Dump of a very small MySQL database with two tables (one row each).
3. deployments.tar.gz: Exploded ear and war that demonstrate the problem.
4. sources.tar.gz: The sources, created from my Eclipse workspace.

To reproduce the exception please do this:

1. Add a JNDI entry in JBoss to use the database created by the dump (test.sql).
2. Execute the SQL script to populate to create the database for this test.
3. Unpack the archive deployments.tar.gz in the JBoss standalone/deployments folder.
4. Start jboss with ./standalone.sh.
5. Open this URL: http://localhost:8080/photo_web/index.html
6. Click on the button "Submit".
7. The result is the stack backtrace in the attached logfile.

Thank you for investigating this issue.
                
      was (Author: seimet):
    I have attached these files:

1. server.log, with the exception backtrace at the bottom.
2. test.sql: Dump of a very small MySQL database with two tables (one row each).
3. deployments.tar.gz: Exploded ear and war that demonstrates the problem.
4. sources.tar.gz: The sources, created from my Eclipse workspace.

To reproduce the exception please do this:

1. Add a JNDI entry in JBoss to use this database created by the dump (test.sql).
2. Unpack the archive deployments.tar.gz in the JBoss standalone/deployments folder.
3. Start jboss with ./standalone.sh.
4. Open this URL: http://localhost:8080/photo_web/index.html
5. Click on the button "Submit".
6. The result is the stack backtrace in the attached logfile.

Thank you for investigating this issue.
                  
> 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.2.Final (EAP), 7.1.3.Final (EAP)
>         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, 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