Пространственный спящий режим 5 на Wildfly 10

Я использую Wildfly 10 и разрабатываю приложение с использованием Spatial Hibernate 5 с базой данных PostGIS. Я получаю следующую ошибку во время выполнения.

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

Может ли кто-нибудь предложить несколько хороших руководств по использованию Spatial Hibernate с Wildfly 10?


person Dipuraj    schedule 19.02.2016    source источник
comment
То же самое. Где вы можете решить это еще?   -  person Toastor    schedule 18.03.2016
comment
Вы нашли способ обойти это, я действительно не хочу этого делать, как предложил @Toastor   -  person Juan Diego    schedule 18.05.2016
comment
Проверьте этот ответ, чтобы найти решение: stackoverflow.com/a/46222613/1126380, в основном вам нужно развернуть все необходимые libs в вашей wildfly перед запуском вашего приложения.   -  person Arturo Volpe    schedule 15.09.2017


Ответы (2)


У меня была такая же проблема, и я только что исправил ее. В основном это проблема зависимости. Проблема в том, что вы загружаете файлы jar postgresql и/или postgis в свои модули wildfly и в свои развертывания WEB-INF/lib. Я подключаюсь к своей базе данных с помощью обычного DS на моем standalone.xml

<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, возможно, это решило его проблемы, но у меня это не сработало. Хотя он дал мне несколько подсказок.

Таким образом, большая часть документации в Интернете устарела, и по спящему пространству 5 не так много. Я добавил postgis-jdbc в свой maven в свой модуль postgresql.xml внутри моей wildfly, но, как я читал, ЭТО НЕ ТРЕБУЕТСЯ в Hibernate Spatial 5. .ИКС. Wildfly 10 использует 5.0.7 по умолчанию, я использовал hibernate 5.1.0.Final, поэтому я не устанавливал область действия любого компонента гибернации в моем pom.xml как «предоставленный». Но все также продолжало терпеть неудачу. Поэтому я проследил свои библиотеки.

mvn dependency:tree

Вы должны проверить наличие вызываемых библиотек postgresql или любых библиотек postgis. Я обнаружил, что Hibernate Spatial 5.1 имеет некоторые зависимости от postgresql, поэтому я исключил их из Hibernate Spatial.

        <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 dependency:tree для отслеживания ваших библиотек.

person Juan Diego    schedule 19.05.2016

После нескольких дней борьбы я нашел это решение:

Не подключайтесь к своей базе данных через источник данных, определенный на вашем 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
<?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>
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>

Because the early 5.0.x versions of hibernate apparently had no proper integration of hibernate-spatial and to avoid classpath problems, I added the file jboss-deployment-structure.xml to my 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, в вашем развертывании, поэтому вы можете вместо этого добавить зависимость для самой последней версии гибернации (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/

person Toastor    schedule 23.03.2016
comment
А с помощью jta-data-source? - person icaro56; 25.04.2016
comment
Нет, источник данных не требуется. Но вот забавный момент: если вы делаете создание источника данных, приведенный выше пример будет работать без предоставления учетных данных базы данных в файле persistence.xml. Будут использоваться учетные данные wf ds. Я не знаю, почему... видимо, происходят какие-то странные вещи. Честно говоря, я прекратил расследование, как только это сработало, и переключился на другие вещи, поэтому я не могу предложить вам никаких дополнительных объяснений... - person Toastor; 26.04.2016
comment
@Toastor, я только что попробовал ваш пример проекта. Я могу вставить значения геометрии, но не могу их вернуть. Я создал задачу в вашем примере проекта github. Надеюсь, вы можете мне помочь. Вот мой исходный пост: stackoverflow.com/questions/46164275/ - person Maverick_Java; 13.09.2017