2015-05-26 3 views
5

Я установил Hibernate на Glassfish 4.1, но у меня проблемы с настойчивостью. Я умею читать данные, но не может писать BD (изменения не совершаются).Hibernate with Glassfish 4.1

Мой текущий persistent.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://java.sun.com/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="myPU" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>jdbc/myDataSource</jta-data-source> 
    <properties> 
     <property name="transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup"/> 
     <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory"/> 
     <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

Мой пул соединений конфигурации на Glassfish является:

<jdbc-connection-pool datasource-classname="com.microsoft.sqlserver.jdbc.SQLServerDataSource" steady-pool-size="2" name="myPool" res-type="javax.sql.DataSource"> 
    <property name="TrustServerCertificate" value="false"></property> 
    <property name="User" value="sa"></property> 
    <property name="LastUpdateCount" value="true"></property> 
    <property name="ResponseBuffering" value="adaptive"></property> 
    <property name="URL" value="jdbc:sqlserver://server\bd"></property> 
    <property name="XopenStates" value="false"></property> 
    <property name="PacketSize" value="8000"></property> 
    <property name="Password" value="mypass"></property> 
    <property name="ApplicationName" value="Microsoft JDBC Driver for SQL Server"></property> 
    <property name="DatabaseName" value="MyDB"></property> 
    <property name="Encrypt" value="false"></property> 
    <property name="LockTimeout" value="-1"></property> 
    <property name="SendStringParametersAsUnicode" value="true"></property> 
    <property name="MultiSubnetFailover" value="false"></property> 
    <property name="ApplicationIntent" value="readwrite"></property> 
    <property name="LoginTimeout" value="15"></property> 
    <property name="WorkstationID" value="My-MacBook-Pro.local"></property> 
    <property name="ServerName" value="xpto"></property> 
    <property name="PortNumber" value="1433"></property> 
    <property name="SelectMethod" value="direct"></property> 
    <property name="SendTimeAsDatetime" value="true"></property> 
</jdbc-connection-pool> 

Datasource конфигурации:

<jdbc-resource pool-name="myPool" jndi-name="jdbc/myDataSource"></jdbc-resource> 

Мой EJB выглядит следующим образом :

@PersistenceContext 
private EntityManager em; 

public void updateUser(User u) { 
     em.merge(u); 
} 

Любая идея, как я могу это исправить?

Спасибо!

+0

Эй, как вы управляете своими транзакциями? Это похоже на то, что у него нет активной транзакции, или они не совершаются. Вы пытались использовать JtaTransactionFactory вместо CMTTransactionFactory? Можете ли вы опубликовать образец своего EJB, где вы сохраняете какие-либо данные? –

+0

Привет Андре, я пытался с JtaTransactionFactory, и в этом случае приложение зависает (похоже, оно ждет транзакции). Мои EJB используют транзакции контейнерного менеджера, и все хорошо работает на Wildfly 8.1. –

+0

Можете ли вы предоставить конфигурацию источника jta-данных на стеклянной рыбке? –

ответ

1

Не могли бы вы, пожалуйста, попробуйте следующую конфигурацию:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 

    <persistence-unit name="YOUR_PERSISTANCE_NAME" transaction-type="RESOURCE_LOCAL"> 
     <provider>YOUR_PROVIDER</provider> 

     <!-- ENTITIES --> 
     <class>com.company.project....EntityA</class> 
     <class>com.company.project....EntityB</class> 
     <class>com.company.project....EntityC</class> 

     <properties> 
      <property name="javax.persistence.jdbc.url" value="YOUR_URL_TO_DB" /> 
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> 
      <property name="javax.persistence.jdbc.user" value="USER" /> 
      <property name="javax.persistence.jdbc.password" value="PASS" /> 
      <property name="eclipselink.logging.level" value="INFO" /> 
      <property name="eclipselink.target-database" value="PostgreSQL" /> 
     </properties> 
    </persistence-unit> 
+0

Этот ответ был бы лучше, если бы вы немного объяснили, что вы предлагаете, и почему вы думаете, что это поможет. – Lii

+0

Привет, Ману, я использую hibernate, MSSQLServer и JTA! Ваше настойчивое предложение очень общее. благодаря –

1

В моем случае, я управлял Hibernate 5 с Tomcat и перестать работать, когда я изменил GlassFish 4,1

Причина была старейшей JBoss -logging.jar по адресу: «YOUR_GLASSFISH_FOLDER/glassfish/modules»

Почему? Спящий режим 5 имеет зависимость от новейшей версии jboss-logging, а стеклянная фишка использует самую старую версию, даже если вы объявляете внутри своего POM-файла новейшую версию. На самом деле я использую:

org.jboss.logging jboss-logging 3.3.0.Final 

Тогда я скачал и заменить старый .jar внутри модулей путь и вернуться к работе, я провел 2 дня, пытаясь решить, что и я надеюсь, что это помогает некоторым будущие проблемы = D

Я использовал эту ссылку, чтобы помочь мне: https://medium.com/@mertcal/using-hibernate-5-on-payara-cc242212a5d6#.npq2hdprz