rxue / dictionary

Practice in Java EE
1 stars 0 forks source link

sub-task of #46: needs to reconsider and reassign the hibernate version #47

Closed rxue closed 1 year ago

rxue commented 1 year ago

As per the last error in issue#46

org.glassfish.deployment.common.DeploymentException: CDI deployment failure:Error instantiating :org.hibernate.validator.cdi.ValidationExtension
           at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:215)
           at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:107)
           at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:304)
           at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:472)
           at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:195)
           at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:467)
           at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:516)
           at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:512)
           at java.security.AccessController.doPrivileged(Native Method)
           at javax.security.auth.Subject.doAs(Subject.java:360)
           at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:511)
           at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:542)
           at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:534)
           at java.security.AccessController.doPrivileged(Native Method)
           at javax.security.auth.Subject.doAs(Subject.java:360)
           at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:533)
           at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1441)
           at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:86)
           at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1823)
           at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1699)
           at com.sun.enterprise.admin.cli.embeddable.DeployerImpl.deploy(DeployerImpl.java:109)
           at com.sun.enterprise.admin.cli.embeddable.DeployerImpl.deploy(DeployerImpl.java:85)
           at org.jboss.arquillian.container.glassfish.embedded_3_1.GlassFishContainer.deploy(GlassFishContainer.java:193)
           at org.jboss.arquillian.container.impl.client.container.ContainerDeployController$3.call(ContainerDeployController.java:161)
           at org.jboss.arquillian.container.impl.client.container.ContainerDeployController$3.call(ContainerDeployController.java:128)
           at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.executeOperation(ContainerDeployController.java:271)
           at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.deploy(ContainerDeployController.java:127)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498)
           at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
           at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
           at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
           at org.jboss.arquillian.container.impl.client.container.DeploymentExceptionHandler.verifyExpectedExceptionDuringDeploy(DeploymentExceptionHandler.java:50)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498)
           at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
           at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
           at org.jboss.arquillian.container.impl.client.ContainerDeploymentContextHandler.createDeploymentContext(ContainerDeploymentContextHandler.java:78)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498)
           at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
           at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
           at org.jboss.arquillian.container.impl.client.ContainerDeploymentContextHandler.createContainerContext(ContainerDeploymentContextHandler.java:57)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498)
           at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
           at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
           at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
           at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)
           at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67)
           at org.jboss.arquillian.container.impl.client.container.ContainerDeployController$1.perform(ContainerDeployController.java:95)
           at org.jboss.arquillian.container.impl.client.container.ContainerDeployController$1.perform(ContainerDeployController.java:80)
           at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.forEachDeployment(ContainerDeployController.java:263)
           at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.forEachManagedDeployment(ContainerDeployController.java:239)
           at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.deployManaged(ContainerDeployController.java:79)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498)
           at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
           at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
           at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
           at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
           at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)
           at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67)
           at org.jboss.arquillian.container.test.impl.client.ContainerEventController.execute(ContainerEventController.java:101)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498)
           at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
           at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
           at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
           at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:84)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498)
           at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
           at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
           at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:65)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498)
           at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
           at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
           at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
           at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)
           at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.beforeClass(EventTestRunnerAdaptor.java:80)
           at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:182)
           at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:314)
           at org.jboss.arquillian.junit.Arquillian.access$100(Arquillian.java:46)
           at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:199)
           at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
           at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:147)
           at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
           at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
           at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498)
           at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
           at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
           at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
           at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
           at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: java.util.ServiceConfigurationError: Error instantiating :org.hibernate.validator.cdi.ValidationExtension
           at org.jboss.weld.util.ServiceLoader.createInstance(ServiceLoader.java:315)
           at org.jboss.weld.util.ServiceLoader.prepareInstance(ServiceLoader.java:247)
           at org.jboss.weld.util.ServiceLoader.loadService(ServiceLoader.java:215)
           at org.jboss.weld.util.ServiceLoader.loadServiceFile(ServiceLoader.java:185)
           at org.jboss.weld.util.ServiceLoader.reload(ServiceLoader.java:165)
           at org.jboss.weld.util.ServiceLoader.iterator(ServiceLoader.java:289)
           at org.glassfish.weld.DeploymentImpl.getExtensions(DeploymentImpl.java:442)
           at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:199)
           ... 115 more
Caused by: java.lang.NoSuchMethodError: org.hibernate.validator.internal.util.logging.LoggerFactory.make(Ljava/lang/invoke/MethodHandles$Lookup;)Lorg/hibernate/validator/internal/util/logging/Log;
           at org.hibernate.validator.cdi.ValidationExtension.<clinit>(ValidationExtension.java:79)
           at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
           at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
           at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
           at org.jboss.weld.util.ServiceLoader.createInstance(ServiceLoader.java:313)
           ... 122 more

I tried to comment out the hibernate-validator dependency from the pom.xml > dependencies section, and then add this same dependency to profile arq-glassfish-embedded with version 6.0.22.Final, which corresponds to the source code of Wildfly, then this error was resolved.

However, according to my understanding, the logic of Maven is that the priority of the dependency inside dependencies element is in any case always higher than that of the same dependeny inside the profile 's dependencies element. This means that whenever the dependency, e.g. the hibernate-vaidator is assigned in the dependencies element, the same dependency hibernate-validator with another version added inside profiler > dependency is void.

=> It is compulsory to use the hibernate-validator depdency in the dependencies element, and the version of hibernate-validator should be as it it, i.e. the provided. This can be retrieved by means of mvn dependency:tree and it is version 5.1.3.Final

=> TODO : revert the current committed code a few step back and keep using the provided version, 5.1.3.Final of hibernate-validator. This also means that the corresponding hibernate-core probably should be with an older version. NOTE! the version in the Wildfly source code is not relevant to this issue since I am using the embedded Glassfish in integration test

rxue commented 1 year ago

Hibernate version to use: 4.3.11.Final Reference for an NPE: https://stackoverflow.com/questions/7181673/createentitymanager-throws-java-lang-nullpointerexception-at-org-hibernate-engin

rxue commented 1 year ago

Still encountered error with cause when running mvn clean -Parq-glassfish-embedded test

Caused by: org.hibernate.engine.jndi.JndiException: Unable to lookup JNDI name [java:jboss/TransactionManager]
    at org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:117)
    at org.hibernate.engine.transaction.jta.platform.internal.JBossAppServerJtaPlatform.locateTransactionManager(JBossAppServerJtaPlatform.java:55)
    ... 129 more
rxue commented 1 year ago

Analysis: the property hibernate.transaction.jta.platform was assigned with wrong value

reference: https://stackoverflow.com/questions/29134343/using-a-jta-persistence-context-without-setting-hibernate-transaction-jta-platfo

rxue commented 1 year ago

Conclusion

The Hibernate 4 didn't fully implement the JPA 2.1, e.g. those javax.persistence.xxx properties such as javax.persistence.schema-generation.database.action are not supported by Hibernate 4. Moreover, Hibernate is not used as the default JPA implementation Glassfish server, so configuration on using the Hiberation in Glassfish is not out-of-the-box and difficult

=>

strategically it is not a wise choice to use JPA with Hibernate implementation in Glassfish server. Wildfly instead might be a better choice since it support Hibernate out-of-the-box