Ustawiłem Hibernate na Glassfish 4.1, ale mam problemy z utrzymaniem. Jestem w stanie odczytać dane, ale nie można zapisać na BD (zmiany wydają się nie być zatwierdzane).Hibernate with Glassfish 4.1
Mój obecny persistent.xml wygląda następująco:
<?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>
Moje połączenie basen config na GlassFish jest:
<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 config:
<jdbc-resource pool-name="myPool" jndi-name="jdbc/myDataSource"></jdbc-resource>
Moje EJB wygląda następująco :
@PersistenceContext
private EntityManager em;
public void updateUser(User u) {
em.merge(u);
}
Każdy pomysł, jak to naprawić?
Dzięki!
Hej, w jaki sposób zarządzasz swoimi transakcjami? Wygląda na to, że nie ma aktywnej transakcji lub nie są one zatwierdzane. Czy próbowałeś z JtaTransactionFactory zamiast CMTTransactionFactory? Czy możesz opublikować próbkę swojego EJB, w którym utrwalasz jakiekolwiek dane? –
Cześć André, próbowałem z JtaTransactionFactory iw takim przypadku aplikacja się zawiesza (wygląda na to, że czeka na transakcję). Moje EJB używają transakcji menedżera kontenerów i wszystko działa dobrze na Wildfly 8.1. –
Czy możesz podać konfigurację źródła danych jta na glassfish? –