[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-3504) Hibernate 3.3.1GA issue when using CGLIB
Dan Haywood (JIRA)
noreply at atlassian.com
Tue Nov 4 19:39:04 EST 2008
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-3504?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=31597#action_31597 ]
Dan Haywood commented on HHH-3504:
----------------------------------
I've also hit this problem, and I'm getting an "argument type mismatch" exception raised. Here's the stacktrace (and I have a theory to follow):
Thread [main] (Suspended)
IllegalArgumentException(RuntimeException).<init>(String) line: 43
IllegalArgumentException.<init>(String) line: 36
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
Enhancer.setCallbacksHelper(Class, Callback[], String) line: 616
Enhancer.setThreadCallbacks(Class, Callback[]) line: 609
Enhancer.registerCallbacks(Class, Callback[]) line: 578
CGLIBLazyInitializer.getProxyInstance(Class, CGLIBLazyInitializer) line: 129
CGLIBLazyInitializer.getProxy(Class, String, Class, Class[], Method, Method, AbstractComponentType, Serializable, SessionImplementor) line: 116
CGLIBProxyFactory.getProxy(Serializable, SessionImplementor) line: 72
PojoEntityTuplizer(AbstractEntityTuplizer).createProxy(Serializable, SessionImplementor) line: 402
SingleTableEntityPersister(AbstractEntityPersister).createProxy(Serializable, SessionImplementor) line: 3483
DefaultLoadEventListener.createProxyIfNecessary(LoadEvent, EntityPersister, EntityKey, LoadEventListener$LoadType, PersistenceContext) line: 298
DefaultLoadEventListener.proxyOrLoad(LoadEvent, EntityPersister, EntityKey, LoadEventListener$LoadType) line: 219
DefaultLoadEventListener.onLoad(LoadEvent, LoadEventListener$LoadType) line: 126
SessionImpl.fireLoad(LoadEvent, LoadEventListener$LoadType) line: 905
SessionImpl.internalLoad(String, Serializable, boolean, boolean) line: 873
ManyToOneType(EntityType).resolveIdentifier(Serializable, SessionImplementor) line: 590
ManyToOneType(EntityType).resolve(Object, SessionImplementor, Object) line: 412
TwoPhaseLoad.initializeEntity(Object, boolean, SessionImplementor, PreLoadEvent, PostLoadEvent) line: 139
CascadeEntityLoader(Loader).initializeEntitiesAndCollections(List, Object, SessionImplementor, boolean) line: 877
CascadeEntityLoader(Loader).doQuery(SessionImplementor, QueryParameters, boolean) line: 752
CascadeEntityLoader(Loader).doQueryAndInitializeNonLazyCollections(SessionImplementor, QueryParameters, boolean) line: 259
CascadeEntityLoader(Loader).loadEntity(SessionImplementor, Object, Type, Object, String, Serializable, EntityPersister) line: 1881
CascadeEntityLoader(AbstractEntityLoader).load(SessionImplementor, Object, Object, Serializable) line: 71
CascadeEntityLoader(AbstractEntityLoader).load(Serializable, Object, SessionImplementor) line: 65
SingleTableEntityPersister(AbstractEntityPersister).load(Serializable, Object, LockMode, SessionImplementor) line: 3072
DefaultRefreshEventListener.onRefresh(RefreshEvent, Map) line: 145
DefaultRefreshEventListener.onRefresh(RefreshEvent) line: 62
SessionImpl.fireRefresh(RefreshEvent) line: 929
SessionImpl.refresh(Object) line: 913
....
My suspicion is that the repackaging of cglib is incomplete, with the dynamically created method that is being invoked (called "CGLIB$SET_THREAD_CALLBACKS") declared with the wrong signature. I reverse engineered Enhancer and saw the following:
private static final Type CALLBACK_ARRAY = Type.getType("[Lnet/sf/cglib/proxy/Callback;");
private static final Signature CSTRUCT_NULL = TypeUtils.parseConstructor("");
private static final Signature SET_THREAD_CALLBACKS = new Signature("CGLIB$SET_THREAD_CALLBACKS", Type.VOID_TYPE, new Type[] { CALLBACK_ARRAY });
Note the CALLBACK_ARRAY which I think is incorrect: it should be "[Lorg/hibernate/repackage/cglib/proxy/Callback;". This is used to declare the signature as you can see.
> Hibernate 3.3.1GA issue when using CGLIB
> ----------------------------------------
>
> Key: HHH-3504
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3504
> Project: Hibernate Core
> Issue Type: Bug
> Affects Versions: 3.3.1
> Environment: Database : hsqldb/Sybase
> Reporter: Montagnon Cyril
>
> When forcing hibernate to use CGLIB (by the way javassist is still slower than CGLib), I get the following exception (at the end of the post)
> It seems that the repackaging of the CGLIB project (hibernate-cglib-repack) doesn't behave as expected :
> Shouldn't it look up for the org.hibernate.repackage.cglib.proxy.Callback class instead of the net.sf.cglib.proxy.Callback class.
> java.lang.NoClassDefFoundError: net.sf.cglib.proxy.Callback
> at org.hibernate.repackage.cglib.proxy.Enhancer.class$(Enhancer.java:68)
> at org.hibernate.repackage.cglib.proxy.Enhancer.getCallbacksSetter(Enhancer.java:627)
> at org.hibernate.repackage.cglib.proxy.Enhancer.setCallbacksHelper(Enhancer.java:615)
> at org.hibernate.repackage.cglib.proxy.Enhancer.setThreadCallbacks(Enhancer.java:609)
> at org.hibernate.repackage.cglib.proxy.Enhancer.registerCallbacks(Enhancer.java:578)
> at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyInstance(CGLIBLazyInitializer.java:133)
> at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxy(CGLIBLazyInitializer.java:116)
> at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.getProxy(CGLIBProxyFactory.java:72)
> at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:402)
> at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3483)
> at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:298)
> at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:219)
> at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
> at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
> at org.hibernate.impl.SessionImpl.load(SessionImpl.java:822)
> at org.hibernate.impl.SessionImpl.load(SessionImpl.java:815)
> at org.springframework.orm.hibernate3.HibernateTemplate$3.doInHibernate(HibernateTemplate.java:566)
> at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
> at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
> at org.springframework.orm.hibernate3.HibernateTemplate.load(HibernateTemplate.java:560)
> at org.springframework.orm.hibernate3.HibernateTemplate.load(HibernateTemplate.java:554)
> at north.stardust2.core.test.unit.dao.listed.IndexCompositionDaoTest.findIndexCompositionByListedIndexAt(IndexCompositionDaoTest.java:36)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
> at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
> at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
> at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
> at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
> at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
> at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
> at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
> at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
> at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
> at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
> at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
> at org.junit.internal.runners.CompositeRunner.runChildren(CompositeRunner.java:33)
> at org.junit.runners.Suite.access$000(Suite.java:26)
> at org.junit.runners.Suite$1.run(Suite.java:93)
> at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
> at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
> at org.junit.runners.Suite.run(Suite.java:91)
> at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
> at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list