문제

JBOSS AS 6.1을 시작할 때 연결 오류가 발생합니다. HikariDataSource.이 문제를 해결하는 방법은 무엇입니까?

저는 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(JBOSS와 함께 번들로 제공).persistence.xml을 제거하고 다음을 사용하여 프로그래밍 방식으로 DataSource를 구성했습니다. LocalContainerEntityManagerFactoryBean 다음에서 접근: http://www.baeldung.com/2011/12/13/the-persistence-layer-with-spring-3-1-and-jpa/

내 DS는 간단하게 구성했습니다.

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

그리고 stacktrace의 끝은 다음과 같습니다.

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
도움이 되었습니까?

해결책 2

JBoss에서 6.1이 문제의 해결책은 HIKARICP-1.3.5.jar \ server \ app \ lib와 pom.xml에 넣는 것이 었습니다. provided로 설정했습니다.응용 프로그램을 Wildfly로 마이그레이션했을 때 8 Hikari는 compile로 작동합니다.

다른 팁

저는 두 가지를 제안하고 싶습니다.먼저 HikariCP를 최신 버전인 1.3.5로 업그레이드하는 것이 좋습니다.

둘째, 오류는 클래스로더와 관련된 것으로 보입니다. 예외는 다음과 같습니다. java.lang.ExceptionInInitializerError 에 대한 정적 클래스 초기화를 나타냅니다. HikariConfig 어떻게 든 두 번 실행되고 있습니다.이는 동일한 HikariCP jar를 참조하는 두 개의 클래스 로더가 있는 경우에만 가능합니다.HikariCP jar가 JBoss의 전역 라이브러리 디렉터리에 있지 않고 대신 애플리케이션의 컨테이너 라이브러리 디렉터리에 있는지 확인하세요.여러 개의 애플리케이션 컨테이너가 있는 경우 HikariCP jar는 각 컨테이너에 개별적으로 위치해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top