2017-01-30 83 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