2017-01-30 85 views
1

我將postgres jdbc驅動程序配置爲Wildfly 10中的模塊。我所要做的是將該驅動程序用作將在服務器上部署的應用程序中的依賴項 - 因此,在應用程序中,我標記這個依賴性(在pom.xml文件中),但它似乎不工作。Wildfly Postgres JDBC模塊問題

當前配置:

Wildfly postgres的模塊在wildfly-10.1.0.Final\modules\org\postgresql\main加入其中存在:postgresql-9.4-1206-jdbc4.jarmodule.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> 

模塊用於定義數據源。到此爲止,一切工作都很順利--Hibernate幫助表可以愉快地映射到實體。除了一兩件事:

我開始地圖使用javax.persistence.AttributeConverter Postgres的-jsonb列,發生以下情況:

方案1

當我使用postgresql-9.4-1206-jdbc4.jarprovided(在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 

這意味着:類加載器加載相同的罐子兩次,這個對象不能投給自己。

問題:爲什麼provided依賴範圍不適用於手動添加(wildfly)postgres驅動程序? (我想這將是我的解決方案)

+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(因爲它看起來像是EAR中的JAR)來創建條目。

<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,我不得不將這個清單條目放到我的ear-plugin中,並且還將'export'添加到依賴項: org.postgresql export AndreyB