2016-02-19 6 views
3

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

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

Может кто-нибудь предложить хорошие учебники как о том, как использовать пространственный спящий режим с Wildfly 10?

+0

То же самое здесь. Где вы можете это решить? – Toastor

+0

Вы нашли способ обойти это, я действительно не хочу этого делать @Toastor предложил –

+0

Проверьте этот ответ, чтобы найти решение: https://stackoverflow.com/a/46222613/1126380, в основном вам нужно развернуть все требуемые библиотеки в вашем wildfly перед запуском приложения. –

ответ

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-пространственной и избежать проблем пути к классам, я добавил файл JBoss-развертывания -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 при условии, спящий режим, который будет использоваться развертывания, так что вы можете вместо этого добавить зависимость для самой последней версии гибернации (5.1.0 от это письмо). Затем вам нужно будет добавить зависимости для hibernate, hibernate-spaces и postgresql-jdbc.

Также обратите внимание, что hibernate 5 больше не требует аннотации @Type.

мне удалось получить мой проект работы с настройками выше, и один из моих сущностей отличая следующий атрибут/столбец:

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

Я надеюсь, что это помогает, удачи!

Edit: Используя этот подход, вы должны добавить драйвер PostGreSQL JDBC, как зависимость от вашего проекта.

Edit:

Я подготовил рабочий образец проекта, демонстрирующего использование WF10/hibernate5/PostGIS - проверить его на GitHub:

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

+0

И используя jta-data-source? – icaro56

+0

Нет, источник данных не требуется. Но вот забавный бит: если вы _do_ создаете источник данных, приведенный выше пример будет работать без предоставления учетных данных базы данных в вашем файле persistence.xml. Будут использоваться учетные данные wf ds. Я не знаю, почему ... некоторые странные вещи происходят, по-видимому. Честно говоря, я прекратил расследование, когда это сработало, и обратился к другим вещам, поэтому я не могу предложить вам никаких дальнейших объяснений ... – Toastor

+0

@Toastor, я просто попробовал ваш образец проекта. Я могу вставлять значения геометрии, но не могу их вернуть. Я создал проблему в вашем примере проекта github. Надеюсь, ты поможешь мне. Вот мой оригинальный пост: https://stackoverflow.com/questions/46164275/received-object-of-type-org-postgresql-util-pgobject#comment79370882_46164275 –

2

У меня была такая же проблема, и Я только что исправил это. Это в основном проблема зависимости. Проблема в том, что вы загружаете банки 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 для своего модуля module.xml моего postgresql внутри моей дикой природы, но так как я читал ЭТО НЕ НЕОБХОДИМО в Hibernate Spatial 5.X. Wildfly 10 по умолчанию использует 5.0.7, я использовал hibernate 5.1.0.Финал, поэтому я не задал объем любого спящего компонента на моем pom.xml как «предоставленный». Но все тоже не сработало. Поэтому я проследил свои библиотеки.

mvn dependency:tree 

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

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

Смежные вопросы