2017-01-30 3 views
1

Ich habe postgres jdbc Treiber als Modul in Wildfly konfiguriert 10. Was ich versuche zu tun, ist es, diesen Treiber als Abhängigkeit in der Anwendung zu verwenden, die auf dem Server bereitgestellt wird - so in der Anwendung markiere ich Diese Abhängigkeit wie angegeben (in der Datei pom.xml), scheint aber nicht zu funktionieren.Wildfly Postgres JDBC Modul Ausgabe

Aktuelle Konfiguration:

Wildfly postgres Modul wird bei wildfly-10.1.0.Final\modules\org\postgresql\main hinzugefügt, wo es: postgresql-9.4-1206-jdbc4.jar und module.xml mit folgendem Inhalt:

<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> 

Modul verwendet wird, Datenquelle zu definieren. Bis zu diesem Punkt funktioniert alles gut - mit Hilfe von Hibernate-Hilfetabellen werden erfreulicherweise Entitäten zugeordnet. Mit Ausnahme eines:

begann ich Postgres-jsonb Spalten mit der Verwendung von javax.persistence.AttributeConverter und nach geschieht zur Karte:

Szenario 1

Wenn ich postgresql-9.4-1206-jdbc4.jar als provided (in pom.xml - implementierte Anwendung) , bekomme ich folgende Fehler versuchen, etwas zu konvertieren:

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 

Szenario 2

Als ich postgresql-9.4-1206-jdbc4.jar mit Standardbereich verwenden, wird es Fehler folgende:

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 

Das heißt: Class-Loader das gleiche Glas zweimal laden und dieses Objekt sich nicht werfen kann.

Frage: Warum provided Bereich der Abhängigkeit funktioniert nicht für manuell hinzugefügt (zu wildfly) Postgres-Treiber? (Ich denke, das wäre die Lösung für mich)

+0

Könnten Sie bitte Ihre 'pom.xml' einfügen und Ihre Antwort bearbeiten? Ich stecke genauso fest wie du, aber der zweite Vorschlag zur ausgewählten Antwort hat mein Problem nicht gelöst. Ich fürchte, ich habe etwas anders gemacht als das, was du getan hast. Vielen Dank im Voraus – GabrielRado

Antwort

1

Sie müssen eine jboss-deployment-structure.xml verwenden, um die Modulabhängigkeit zu Ihrer Bereitstellung hinzuzufügen.

<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> 

Beachten Sie, dass die Modulabhängigkeit von der EAR möglicherweise nicht erforderlich ist. Es hängt nur davon ab, wie Ihre EAR eingerichtet ist.

Eine andere Option wäre, eine Dependencies manifest entry hinzuzufügen. Da Sie Maven verwenden, können Sie einfach den maven-jar-plugin (da es scheint, dass dies ein JAR in einer EAR ist) verwenden, um den Eintrag zu erstellen.

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

Vielen Dank für Ihre Antwort. Die zweite Option funktionierte für mich, aber anstelle von jar-plugin musste ich diesen Manifest-Eintrag in mein Ohr-Plugin einfügen und auch 'export' in die Abhängigkeit einfügen: org.postgresql export AndreyB

Verwandte Themen