2014-04-11 3 views
2

У меня есть ошибка связи при запуске JBOSS AS 6.1 с HikariDataSource. Как это решить?HikariCP - ошибка связи с использованием 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 и confgiure мой DataSource с использованием программно LocalContainerEntityManagerFactoryBean подход от: http://www.baeldung.com/2011/12/13/the-persistence-layer-with-spring-3-1-and-jpa/

My 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 

ответ

0

На JBOSS AS 6.1 решение этой проблемы состояло в том, что я помещал HikariCP-1.3.5.jar \ server \ app \ lib, а в pom.xml - provided. Когда я перенесла приложение в WildFly 8, Hikari работает как compile.

0

Я хотел бы предложить две вещи. Во-первых, я предлагаю обновить HikariCP до последней версии, 1.3.5.

Во-вторых, ошибка связана с загрузкой класса, исключение java.lang.ExceptionInInitializerError указывает, что инициализация статического класса для HikariConfig выполняется как-то дважды. Это должно быть возможно только в том случае, если есть два загрузчика классов, ссылающихся на одну и ту же банку HikariCP. Убедитесь, что банкомат HikariCP не находится в каталоге глобальной библиотеки для JBoss, но вместо этого находится в каталоге библиотеки контейнеров приложения. Если есть несколько контейнеров для приложений, банку HikariCP следует располагать в каждом из них отдельно.

+0

Обновлено до 1.3.5 и проверено, что HikariCP-1.3.5.jar был только в .war в \ WEB-INF \ lib, но это не исправило ошибку. Когда я устанавливаю Hikari на «предоставленный» и помещаю его в \ server \ app \ lib, он работает. –

+0

Я получаю ту же ошибку, используя версию 2.0.1 с Tomcat 7.0.23. –

+0

Является ли банкомат HikariCP в двух местах вашего развертывания? Например, папка Tomcat lib, а также папка webapp? Скорее всего. – brettw

Смежные вопросы