Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

HibernateProxyHandler relies on Javassist which has been removed in Hibernate 5.6 #464

Closed
longwa opened this issue Jan 2, 2022 · 3 comments · Fixed by #624
Closed

HibernateProxyHandler relies on Javassist which has been removed in Hibernate 5.6 #464

longwa opened this issue Jan 2, 2022 · 3 comments · Fixed by #624

Comments

@longwa
Copy link

longwa commented Jan 2, 2022

Hibernate 5.6 has removed usage of javassist but the gorm-hibernate5 library still seems to depend on it for the HibernateProxyHandler.

This is causing us some compilation issues as we were using the HibernateProxyHandler directly:

java.lang.RuntimeException: java.lang.NoClassDefFoundError: javassist.util.proxy.MethodHandler
        at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:976)
        at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671)
        at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635)
        at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:610)
        at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:265)
        at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:64)
        at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:97)
        at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:76)
        at org.gradle.api.internal.tasks.compile.daemon.AbstractDaemonCompiler$CompilerWorkAction.execute(AbstractDaemonCompiler.java:135)
        at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
        at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:49)
        at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:43)
        at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:97)
        at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:43)
        at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49)
        at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30)
        at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:85)
        at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:55)
        at org.gradle.process.internal.worker.request.WorkerAction$1.call(WorkerAction.java:138)
        at org.gradle.process.internal.worker.child.WorkerLogEventListener.withWorkerLoggingProtocol(WorkerLogEventListener.java:41)
        at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:135)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
        at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
        at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
        at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.NoClassDefFoundError: javassist.util.proxy.MethodHandler

It seems like version 7.2 and later which require Hibernate 5.6 should be using the ByteBuddy stuff instead of Javassist.

@longwa longwa changed the title HibernateProxyHandler extends JavassistProxyFactory which has been removed in Hibernate 5.6 HibernateProxyHandler relies on Javassist which has been removed in Hibernate 5.6 Jan 2, 2022
@basejump
Copy link
Contributor

basejump commented Jan 11, 2022

This is preventing us from upgrading too. #175
Even when using the javaassist with older version is not longer allows us to get the ID in a lazy manner.
@longwa I dug into it a couple months ago and didn't come up with any simple work arounds yet. I will see about getting a project that shows the core problem thats not wrapped up in our gorm-tools

@puneetbehl
Copy link
Contributor

Could you please verify if manually adding Javassist dependency resolves the problem?

@basejump
Copy link
Contributor

FYI, we have not found a solution for the bytebuddy hydration. with anything past hibernate 5.5.9 and Gorm its impossible to have proxies working. What we have found that works is to force the hibernate to version"org.hibernate:hibernate-core:5.5.9.Final"
Works with 7.3+ versions of gorm so far. can see examples and run tests here. https://github.com/yakworks/gorm-tools
@puneetbehl we peck away at it once in a while but have not found an easy solution yet. its definitely a meta class issue that hydrating it. Seems like there is code to handle it in the org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState but its not being picked up.

basejump added a commit to yakworks/gorm-hibernate5 that referenced this issue Sep 24, 2022
… Javassist collions. uses Hibernate helpers.

Mark SimpleHibernateProxyHandler as deprecated.
Add tests to show the proxy problems with groovy
resolves grails#464
resolves grails#175
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants