Question

J'ai une erreur de liaison lorsque je démarre JBOSS AS 6.1 avec un HikariDataSource.Comment résoudre cela ?

J'utilise hikariCP 1.3.3 :

  <dependency>
     <groupId>com.zaxxer</groupId>
     <artifactId>HikariCP</artifactId>
     <version>1.3.3</version>
  </dependency>

Spring 3.2, JBOSS AS 6.1, Hibernate 3.6.6 (fourni avec JBOSS).J'ai supprimé persistence.xml et configuré mon DataSource par programme en utilisant LocalContainerEntityManagerFactoryBean approche à partir de : http://www.baeldung.com/2011/12/13/the-persistence-layer-with-spring-3-1-and-jpa/

Ma DS que j'ai configurée simplement :

   @Bean
   public DataSource dataSource() {
      HikariDataSource ds = new HikariDataSource(); //here i get the linkageError
      ds.setMaximumPoolSize(15);
      ds.setDataSourceClassName("com.microsoft.sqlserver.jdbc.SQLServerDataSource");
      ds.addDataSourceProperty("serverName", "localhost");
      ds.addDataSourceProperty("databaseName", "dbtest");
      ds.addDataSourceProperty("user", "dbtest");
      ds.addDataSourceProperty("password", "dbtest");
      ds.setPoolName("springHikariCp");
      return ds;
   }

Et la fin de stacktrace est :

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource com.company.test.PersistenceJPAConfig.dataSource()] threw exception; nested exception is java.lang.ExceptionInInitializerError
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:181) [:3.2.0.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:570) [:3.2.0.RELEASE]
    ... 135 more
Caused by: java.lang.ExceptionInInitializerError
    at com.zaxxer.hikari.HikariConfig.<clinit>(HikariConfig.java:77) [:]
    at com.company.test.PersistenceJPAConfig.dataSource(PersistenceJPAConfig.java:115) [:]
    at com.company.test.PersistenceJPAConfig$$EnhancerByCGLIB$$2cad8762.CGLIB$dataSource$3(<generated>) [:]
    at com.company.test.PersistenceJPAConfig$$EnhancerByCGLIB$$2cad8762$$FastClassByCGLIB$$7a8bcfa3.invoke(<generated>) [:]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) [:3.2.0.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:285) [:3.2.0.RELEASE]
    at com.company.test.PersistenceJPAConfig$$EnhancerByCGLIB$$2cad8762.dataSource(<generated>) [:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.7.0_11]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [:1.7.0_11]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [:1.7.0_11]
    at java.lang.reflect.Method.invoke(Method.java:601) [:1.7.0_11]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:160) [:3.2.0.RELEASE]
    ... 136 more
Caused by: java.lang.RuntimeException: javassist.CannotCompileException: by java.lang.LinkageError: loader (instance of  org/jboss/classloader/spi/base/BaseClassLoader): attempted  duplicate class definition for name: "com/zaxxer/hikari/proxy/ProxyFactory"
    at com.zaxxer.hikari.proxy.JavassistProxyFactory.<clinit>(JavassistProxyFactory.java:58) [:]
    ... 148 more
Caused by: javassist.CannotCompileException: by java.lang.LinkageError: loader (instance of  org/jboss/classloader/spi/base/BaseClassLoader): attempted  duplicate class definition for name: "com/zaxxer/hikari/proxy/ProxyFactory"
    at javassist.ClassPool.toClass(ClassPool.java:1099) [:6.1.0.Final]
    at javassist.CtClass.toClass(CtClass.java:1265) [:6.1.0.Final]
    at com.zaxxer.hikari.proxy.JavassistProxyFactory.modifyProxyFactory(JavassistProxyFactory.java:131) [:]
    at com.zaxxer.hikari.proxy.JavassistProxyFactory.<clinit>(JavassistProxyFactory.java:54) [:]
    ... 148 more
Caused by: java.lang.LinkageError: loader (instance of  org/jboss/classloader/spi/base/BaseClassLoader): attempted  duplicate class definition for name: "com/zaxxer/hikari/proxy/ProxyFactory"
    at java.lang.ClassLoader.defineClass1(Native Method) [:1.7.0_11]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791) [:1.7.0_11]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:634) [:1.7.0_11]
    at sun.reflect.GeneratedMethodAccessor131.invoke(Unknown Source) [:1.7.0_11]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [:1.7.0_11]
    at java.lang.reflect.Method.invoke(Method.java:601) [:1.7.0_11]
    at javassist.ClassPool.toClass2(ClassPool.java:1112) [:6.1.0.Final]
    at javassist.ClassPool.toClass(ClassPool.java:1093) [:6.1.0.Final]
    ... 151 more
Était-ce utile?

La solution 2

Sur JBOSS AS 6.1, la solution à ce problème consistait pour moi à mettre HikariCP-1.3.5.jar \server\app\lib et dans pom.xml à le définir comme provided.Lorsque j'ai migré l'application vers WildFly 8, Hikari fonctionne comme compile.

Autres conseils

Je suggérerais deux choses.Tout d'abord, je suggère de mettre à niveau HikariCP vers la dernière version, 1.3.5.

Deuxièmement, l'erreur semble être liée au chargeur de classe, l'exception java.lang.ExceptionInInitializerError indique que l'initialisation de la classe statique pour HikariConfig est exécuté deux fois d'une manière ou d'une autre.Cela ne devrait être possible que s'il existe deux chargeurs de classe faisant référence au même fichier jar HikariCP.Assurez-vous que le fichier jar HikariCP ne se trouve pas dans le répertoire de la bibliothèque globale de JBoss, mais plutôt dans le répertoire de la bibliothèque du conteneur de l'application.S'il existe plusieurs conteneurs d'application, le pot HikariCP doit être placé individuellement dans chacun d'eux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top