2017-01-30 5 views
1

У меня есть драйвер jdbc postgres, настроенный как модуль в Wildfly 10. Что я пытаюсь сделать, это использовать этот драйвер в качестве зависимости в приложении, которое будет развернуто на сервере, - поэтому в приложении я отмечаю эта зависимость, как предусмотрено (в файле pom.xml), но кажется, что она не работает.Проблема с Wildfly Postgres JDBC

Текущая конфигурация:

Wildfly Postgres модуль добавлен в wildfly-10.1.0.Final\modules\org\postgresql\main, где есть: postgresql-9.4-1206-jdbc4.jar и module.xml с следующим содержанием:

<module xmlns="urn:jboss:module:1.1" name="org.postgresql"> 
    <resources> 
    <resource-root path="postgresql-9.4-1206-jdbc4.jar"/> 
    </resources> 
    <dependencies> 
    <module name="javax.api"/> 
    <module name="javax.transaction.api"/> 
    </dependencies> 
</module> 

Модуль используется для определения источника данных. К этому моменту все работает хорошо - с помощью таблиц спящего режима счастливо отображаются сущности. За исключением одной вещи:

Я начал карту Postgres-jsonb колонн с использованием javax.persistence.AttributeConverter и происходит следующее:

Сценарий 1

Когда я использую postgresql-9.4-1206-jdbc4.jar как provided (в pom.xml - развернутое приложение) , я получаю следующее сообщение об ошибке пытается преобразовать все:

Caused by: java.lang.ClassNotFoundException: org.postgresql.util.PGobject from [Module "deployment.priject-1.0.1.ear.project.data-1.0.1-SNAPSHOT.jar:main" from Service Module Loader] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351) 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93) 
    ... 269 more 

Сценарий 2

Когда я использую postgresql-9.4-1206-jdbc4.jar с областью по умолчанию, есть следующие ошибки:

Caused by: java.lang.ClassCastException: org.postgresql.util.PGobject cannot be cast to org.postgresql.util.PGobject 
    at com.project.entity.util.converters.JSONBTypeConverter.convertToEntityAttribute(JSONBTypeConverter.java:33) 
    at com.project.entity.util.converters.JSONBTypeConverter.convertToEntityAttribute(JSONBTypeConverter.java:1) 
    at org.hibernate.type.descriptor.converter.AttributeConverterSqlTypeDescriptorAdapter$2.doConversion(AttributeConverterSqlTypeDescriptorAdapter.java:140) 
    ... 266 more 

Что означает: загрузчик классов загрузить одну и ту же Jar два раза, и не может бросить этот объект сам по себе.

Вопрос: Почему provided Объем зависимости не работает для добавления вручную (для wildfly) postgres driver? (Я думаю, это было бы решением для меня)

+0

не могли бы вы вставить свой «pom.xml», отредактировав свой ответ? Я застрял точно так же, как и вы, но второе предложение по выбранному ответу не решило мою проблему. Боюсь, я немного изменил то, что вы сделали. Заранее спасибо – GabrielRado

ответ

1

Чтобы добавить зависимость модуля к развертыванию, необходимо использовать jboss-deployment-structure.xml.

<jboss-deployment-structure> 
    <deployment> 
     <dependencies> 
      <module name="org.postgresql" /> 
     </dependencies> 
    </deployment> 
    <sub-deployment name="project.data-1.0.1-SNAPSHOT.jar"> 
     <dependencies> 
      <module name="org.postgresql" /> 
     </dependencies> 
    </sub-deployment> 
</jboss-deployment-structure> 

Обратите внимание, что зависимость модуля от EAR не обязательна. Это зависит от того, как настроен ваш EAR.

Другим вариантом было бы добавить Dependencies manifest entry. Поскольку вы используете Maven, вы можете просто использовать maven-jar-plugin (так как он выглядит JAR внутри EAR), чтобы создать запись.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifestEntries> 
       <Dependencies>org.postgresql</Dependencies> 
      </manifestEntries> 
     </archive> 
    </configuration> 
</plugin> 
+0

Спасибо за ваш ответ. Второй вариант работал для меня, но вместо jar-plugin мне пришлось поместить эту запись манифеста в мой плагин для ушей, а также добавить «export» в depenedency: org.postgresql export AndreyB

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