Frage

Ich habe einen Verknüpfungsfehler, wenn ich JBOSS AS 6.1 mit a starte HikariDataSource.Wie kann man das lösen?

Ich verwende 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 (im Paket mit JBOSS).Ich habe persistence.xml entfernt und meine DataSource programmgesteuert mit konfiguriert LocalContainerEntityManagerFactoryBean Ansatz von: http://www.baeldung.com/2011/12/13/the-persistence-layer-with-spring-3-1-and-jpa/

Mein DS habe ich einfach konfiguriert:

   @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;
   }

Und das Ende von Stacktrace ist:

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
War es hilfreich?

Lösung 2

Unter JBOSS AS 6.1 bestand die Lösung für dieses Problem für mich darin, HikariCP-1.3.5.jar \server\app\lib einzufügen und es in pom.xml als festzulegen provided.Als ich die Anwendung auf WildFly 8 migrierte, funktionierte Hikari als compile.

Andere Tipps

Ich würde zwei Dinge vorschlagen.Zunächst schlage ich vor, HikariCP auf die neueste Version, 1.3.5, zu aktualisieren.

Zweitens scheint der Fehler mit dem Klassenladeprogramm zusammenzuhängen, die Ausnahme java.lang.ExceptionInInitializerError Gibt an, dass die statische Klasseninitialisierung für HikariConfig wird irgendwie zweimal ausgeführt.Dies sollte nur möglich sein, wenn zwei Klassenlader auf dasselbe HikariCP-JAR verweisen.Stellen Sie sicher, dass sich das HikariCP-JAR nicht im globalen Bibliotheksverzeichnis für JBoss, sondern im Containerbibliotheksverzeichnis der Anwendung befindet.Wenn mehrere Anwendungscontainer vorhanden sind, sollte sich das HikariCP-Glas in jedem einzelnen Container befinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top