Skip to content

Conversation

@scottmarlow
Copy link
Member

See >
https://hibernate.zulipchat.com/#narrow/channel/132094-hibernate-orm-dev/topic/Seeing.20EE.20TCK.20ClassCastException.20with.20ORM.206.2E6.2E13.2EFinal/near/523129580 discussion thread.

With this change I can see that we are using the EAR/lib copy of generated classes instead of getting a CNFE and generating the needed classes in the subdeployment classloader.

Some output from a local Jakarta EE 10 Platform TCK test:

export wildflytckroot=$PWD
export testFolder=jpa/core/annotations/access/property
export testName=propertyTypeTest1_from_pmservlet
export singlecpu=yes
bash tck10.sh 2>&1 | tee propertytests14.log

Output from the ^ WildFly server.log:

grep "xxx ByteBuddyState.load" logs/server.log
2025-06-09 13:45:24,174 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 165) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes$HibernateInstantiator" from a subdeployment is actually loading the generated class in the ear lib.
2025-06-09 13:45:24,175 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 161) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes$HibernateInstantiator" from a subdeployment is actually loading the generated class in the ear lib.
2025-06-09 13:45:24,180 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 166) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes$HibernateInstantiator" from a subdeployment is actually loading the generated class in the ear lib.
2025-06-09 13:45:24,180 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 39) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes$HibernateInstantiator" from a subdeployment is actually loading the generated class in the ear lib.
2025-06-09 13:45:24,184 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 167) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes$HibernateInstantiator" from a subdeployment is actually loading the generated class in the ear lib.
2025-06-09 13:45:24,185 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 163) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes$HibernateInstantiator" from a subdeployment is actually loading the generated class in the ear lib.
2025-06-09 13:45:24,268 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 167) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes2$HibernateInstantiator" from a subdeployment is actually loading the generated class in the ear lib.
2025-06-09 13:45:24,268 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 167) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes2$HibernateAccessOptimizeratimeDataatsData" from a subdeployment is actually loading the generated class in the ear lib.
2025-06-09 13:45:24,268 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 163) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes2$HibernateInstantiator" from a subdeployment is actually loading the generated class in the ear lib.
2025-06-09 13:45:24,268 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 163) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes2$HibernateAccessOptimizeratimeDataatsData" from a subdeployment is actually loading the generated class in the ear lib.
2025-06-09 13:45:24,269 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 166) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes2$HibernateInstantiator" from a subdeployment is actually loading the generated class in the ear lib.
2025-06-09 13:45:24,269 INFO [org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState] (ServerService Thread Pool -- 166) xxx ByteBuddyState.load detected problem where loading generated class "com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes2$HibernateAccessOptimizeratimeDataatsData" from a subdeployment is actually loading the generated class in the ear lib.

Randomly I got a different error but I have seen many ClassCastException in local runs:

2025-06-09 13:45:25,497 ERROR [org.hibernate.property.access.spi.SetterMethodImpl] (default task-1) HHH000123: IllegalArgumentException in class: com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes, setter method of property: id
2025-06-09 13:45:25,497 ERROR [org.hibernate.property.access.spi.SetterMethodImpl] (default task-1) HHH000091: Expected type: java.lang.Integer, actual value: java.lang.Integer
2025-06-09 13:45:25,502 INFO  [org.hibernate.event.internal.DefaultLoadEventListener] (default task-1) HHH000327: Error performing load command: IllegalArgumentException occurred while calling setter for property [com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes.id (expected type = java.lang.Integer)]; target = [DataTypes[id: null, Character: null, Short: null, Integer: null, Long: null, Double: null, Float: null, CharacterArrayData: null, ByteArrayData: null, shouldNotPersist: null]], property value = [1]
        at [email protected]//org.hibernate.property.access.spi.SetterMethodImpl.set(SetterMethodImpl.java:107)
        at [email protected]//org.hibernate.metamodel.mapping.internal.BasicEntityIdentifierMappingImpl.setIdentifier(BasicEntityIdentifierMappingImpl.java:163)
        at [email protected]//org.hibernate.persister.entity.AbstractEntityPersister.setIdentifier(AbstractEntityPersister.java:4744)
        at [email protected]//org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:4758)
        at [email protected]//org.hibernate.internal.SessionImpl.instantiate(SessionImpl.java:1489)
        at [email protected]//org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.instantiateEntity(EntityInitializerImpl.java:1250)
        at [email protected]//org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.resolveEntityInstance(EntityInitializerImpl.java:1243)
        at [email protected]//org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.resolveEntityInstance2(EntityInitializerImpl.java:1201)
        at [email protected]//org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.resolveEntityInstance1(EntityInitializerImpl.java:1117)
        at [email protected]//org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.resolveInstance(EntityInitializerImpl.java:1032)
        at [email protected]//org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.resolveKey(EntityInitializerImpl.java:587)
        at [email protected]//org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.resolveKey(EntityInitializerImpl.java:457)
        at [email protected]//org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.resolveKey(EntityInitializerImpl.java:97)
        at [email protected]//org.hibernate.sql.results.internal.StandardRowReader.coordinateInitializers(StandardRowReader.java:235)
        at [email protected]//org.hibernate.sql.results.internal.StandardRowReader.readRow(StandardRowReader.java:141)
        at [email protected]//org.hibernate.sql.results.spi.ListResultsConsumer.readUniqueAssert(ListResultsConsumer.java:262)
        at [email protected]//org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:198)
        at [email protected]//org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:35)
        at [email protected]//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:224)
        at [email protected]//org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:102)
        at [email protected]//org.hibernate.sql.exec.spi.JdbcSelectExecutor.executeQuery(JdbcSelectExecutor.java:91)
        at [email protected]//org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:165)
        at [email protected]//org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:145)
        at [email protected]//org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:117)
        at [email protected]//org.hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.load(SingleIdEntityLoaderStandardImpl.java:74)
        at [email protected]//org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:3895)
        at [email protected]//org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3884)
        at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:604)
        at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.loadFromCacheOrDatasource(DefaultLoadEventListener.java:590)
        at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:560)
        at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:544)
        at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:206)
        at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.loadWithRegularProxy(DefaultLoadEventListener.java:289)
        at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:241)
        at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:110)
        at [email protected]//org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:69)
        at [email protected]//org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:138)
        at [email protected]//org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1229)
        at [email protected]//org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1217)
        at [email protected]//org.hibernate.loader.internal.IdentifierLoadAccessImpl.load(IdentifierLoadAccessImpl.java:210)
        at [email protected]//org.hibernate.loader.internal.IdentifierLoadAccessImpl.doLoad(IdentifierLoadAccessImpl.java:161)
        at [email protected]//org.hibernate.loader.internal.IdentifierLoadAccessImpl.lambda$load$1(IdentifierLoadAccessImpl.java:150)
        at [email protected]//org.hibernate.loader.internal.IdentifierLoadAccessImpl.perform(IdentifierLoadAccessImpl.java:113)
        at [email protected]//org.hibernate.loader.internal.IdentifierLoadAccessImpl.load(IdentifierLoadAccessImpl.java:150)
        at [email protected]//org.hibernate.internal.SessionImpl.find(SessionImpl.java:2459)
        at [email protected]//org.hibernate.internal.SessionImpl.find(SessionImpl.java:2425)
        at [email protected]//org.jboss.as.jpa.container.AbstractEntityManager.find(AbstractEntityManager.java:199)
        at deployment.jpa_core_annotations_access_property_vehicles.ear.jpa_core_annotations_access_property_pmservlet_vehicle_web.war//com.sun.ts.tests.jpa.core.annotations.access.property.Client.propertyTypeTest1(Client.java:95)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

@hibernate-github-bot
Copy link

Thanks for your pull request!

This pull request does not follow the contribution rules. Could you have a look?

❌ All commit messages should start with a JIRA issue key matching pattern HHH-\d+
    ↳ Offending commits: [7cc3adb]
❌ The pull request description must contain the license agreement text.
    ↳ The description of this pull request must contain the following license agreement text:

----------------------
By submitting this pull request, I confirm that my contribution is made under the terms of the [Apache 2.0 license](https://www.apache.org/licenses/LICENSE-2.0.txt)
and can be relicensed under the terms of the [LGPL v2.1 license](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) in the future at the maintainers' discretion.
For more information on licensing, please check [here](https://github.com/hibernate/hibernate-orm/blob/main/CONTRIBUTING.md#legal).

----------------------

› This message was automatically generated.

@scottmarlow
Copy link
Member Author

scottmarlow commented Jun 9, 2025

https://gist.github.com/scottmarlow/29ee2bae76d3ed419e1d278619af63d9 has the callstack that is relevant to this pull request (as determine by the following test.log output:

javatest.batch] 06-09-2025 14:48:57:  SVR-ERROR: java.lang.ClassCastException: class com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes2 cannot be cast to class com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes2 (com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes2 is in unnamed module of loader 'deployment.jpa_core_annotations_access_property_vehicles.ear.jpa_core_annotations_access_property_pmservlet_vehicle_web.war' @e8c0e07; com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes2 is in unnamed module of loader 'deployment.jpa_core_annotations_access_property_vehicles.ear' @121ce850)
[javatest.batch]        at deployment.jpa_core_annotations_access_property_vehicles.ear//com.sun.ts.tests.jpa.core.annotations.access.property.DataTypes2$HibernateAccessOptimizeratimeDataatsData.getPropertyValues(Unknown Source)
[javatest.batch]        at [email protected]//org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValuesToInsert(AbstractEntityPersister.java:4846)
[javatest.batch]        at [email protected]//org.hibernate.event.internal.AbstractSaveEventListener.cloneAndSubstituteValues(AbstractSaveEventListener.java:355)
[javatest.batch]        at [email protected]//org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:309)
[javatest.batch]        at [email protected]//org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:224)
[javatest.batch]        at [email protected]//org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:136)
[javatest.batch]        at [email protected]//org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:177)
[javatest.batch]        at [email protected]//org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:95)
[javatest.batch]        at [email protected]//org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
[javatest.batch]        at [email protected]//org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55)
[javatest.batch]        at [email protected]//org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127)
[javatest.batch]        at [email protected]//org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:761)
[javatest.batch]        at [email protected]//org.hibernate.internal.SessionImpl.persist(SessionImpl.java:745)
[javatest.batch]        at [email protected]//org.jboss.as.jpa.container.AbstractEntityManager.persist(AbstractEntityManager.java:566)
[javatest.batch]        at deployment.jpa_core_annotations_access_property_vehicles.ear.jpa_core_annotations_access_property_pmservlet_vehicle_web.war//com.sun.ts.tests.jpa.core.annotations.access.property.Client.createTestData(Client.java:875)
[javatest.batch]        at deployment.jpa_core_annotations_access_property_vehicles.ear.jpa_core_annotations_access_property_pmservlet_vehicle_web.war//com.sun.ts.tests.jpa.core.annotations.access.property.Client.setup(Client.java:51)
[javatest.batch]        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[javatest.batch]        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[javatest.batch]        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[javatest.batch]        at java.base/java.lang.reflect.Method.invoke(Method.java:569)
[javatest.batch]        at deployment.jpa_core_annotations_access_property_vehicles.ear.jpa_core_annotations_access_property_pmservlet_vehicle_web.war//com.sun.ts.lib.harness.EETest.run(EETest.java:569)
[javatest.batch]        at deployment.jpa_core_annotations_access_property_vehicles.ear.jpa_core_annotations_access_property_pmservlet_vehicle_web.war//com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:115)
[javatest.batch]        at deployment.jpa_core_annotations_access_property_vehicles.ear.jpa_core_annotations_access_property_pmservlet_vehicle_web.war//com.sun.ts.tests.common.vehicle.pmservlet.PMServletVehicle.runTest(PMServletVehicle.java:109)
[javatest.batch]        at deployment.jpa_core_annotations_access_property_vehicles.ear.jpa_core_annotations_access_property_pmservlet_vehicle_web.war//com.sun.ts.tests.common.vehicle.servlet.ServletVehicle.doGet(ServletVehicle.java:95)
[javatest.batch]        at deployment.jpa_core_annotations_access_property_vehicles.ear.jpa_core_annotations_access_property_pmservlet_vehicle_web.war//com.sun.ts.tests.common.vehicle.servlet.ServletVehicle.doPost(ServletVehicle.java:115)

@mbellade
Copy link
Member

Superseded by #10305

@mbellade mbellade closed this Jun 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants