Spatial Hibernate 5 On Wildfly 10

时间:2016-02-19 11:17:57

标签: hibernate wildfly postgis spatial hibernate-spatial

我正在使用Wildfly 10并使用Spatial Hibernate 5和PostGIS数据库开发应用程序。我在运行时收到以下错误。

java.lang.IllegalStateException: Received object of type org.postgresql.util.PGobject

有人可以建议一些关于如何在Wildfly 10中使用Spatial Hibernate的好教程吗?

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,我刚修好了。它基本上是一个依赖问题。问题是您在野生动物模块和部署WEB-INF / lib上加载postgresql和/或postgis jar。 我使用standalone.xml上的常规DS连接到我的数据库

<datasource jndi-name="java:jboss/datasources/mygisDS" pool-name="mygisDS" use-java-context="true">
                    <connection-url>jdbc:postgresql://localhost:5432/keycloak</connection-url>
                    <driver>org.postgresql</driver>
                    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                    <pool>
                        <min-pool-size>10</min-pool-size>
                        <max-pool-size>100</max-pool-size>
                        <prefill>true</prefill>
                        <use-strict-min>false</use-strict-min>
                        <flush-strategy>FailingConnectionOnly</flush-strategy>
                    </pool>
                    <security>
                        <user-name>user</user-name>
                        <password>XXXXXX</password>
                    </security>
                </datasource>

我的司机

<driver name="org.postgresql" module="org.postgresql">
                        <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
                    </driver>

我试过@Toastor说,它可能已经解决了他的问题,但它并没有与我合作。虽然他给了我一些线索。

所以大多数关于互联网的文档已经过时了,而且hibernate空间没有太多空间5.我将postgis-jdbc添加到我的maven到我的wildfly里面的postgresql的module.xml,但当我正在阅读这篇文章时在Hibernate Spatial 5.X中不是必需的。 Wildfly 10默认使用5.0.7,我使用的是hibernate 5.1.0.Final,所以我没有在我的pom.xml上设置任何hibernate组件的范围为&#34;提供&#34;。 但是一切都失败了。所以我追踪了我的图书馆。

mvn dependency:tree

您必须检查所调用的任何postgresql库或任何postgis库。我发现Hibernate Spatial 5.1有一些postgresql依赖,所以我将它们从hibernate空间中排除。

        <exclusion>
            <artifactId>postgresql</artifactId>
            <groupId>org.postgresql</groupId>
        </exclusion>

我这样做了,我发现了PGobject的一个问题,它说了类似未找到的类。所以我把它添加到了jboss-deployment-structure.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.postgresql" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>

这就完成了工作。如果你有类似的问题,请使用maven依赖:树来跟踪你的库。

答案 1 :(得分:1)

经过几天的努力,我找到了这个解决方案:

不要通过wildfly上定义的数据源连接到数据库。而是在你的persistence.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="org.hibernate.events.jpa" transaction-type="JTA">
   <properties>
       <property name="hibernate.dialect" value="org.hibernate.spatial.dialect.postgis.PostgisDialect"/>
       <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
       <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/yourdatabase"/>
       <property name="hibernate.connection.username" value="username"/>
       <property name="hibernate.connection.password" value="password"/>
       <property name="hibernate.connection.pool_size" value="5"/>

       <property name="hibernate.show_sql" value="false"/>
       <property name="hibernate.format_sql" value="true"/>

       <property name="hibernate.max_fetch_depth" value="5"/>

       <property name="hibernate.hbm2ddl.auto" value="update"/>
   </properties>
</persistence-unit>

因为早期的5.0.x版本的hibernate显然没有正确集成hibernate-spatial并避免类路径问题,所以我将文件jboss-deployment-structure.xml添加到了我的META-INF:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
         <exclusions>
            <module name="org.hibernate" />
            <module name="org.postgresql" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

这将阻止您的部署使用wildfly提供的hibernate,以便您可以为最新的hibernate版本添加依赖项(撰写本文时为5.1.0)。然后,您需要为hibernate,hibernate-spatial和postgresql-jdbc添加依赖项。

另请注意,hibernate 5不再需要@Type注释。

我设法让我的项目使用上面的设置和我的一个具有以下属性/列的实体:

@Column(columnDefinition = "geometry(Point,4326)")
private Point position;

我希望它有所帮助,祝你好运!

修改 使用此方法,您需要将postgresql jdbc驱动程序添加为项目的依赖项。

修改

我准备了一个展示wf10 / hibernate5 / postgis使用的工作示例项目 - 请在github上查看:

https://github.com/Pulvertoastmann/wf10postgis/