Ich habe Hibernate auf Glassfish 4.1 eingerichtet, aber ich habe Probleme mit der Persistenz. Ich bin in der Lage, Daten zu lesen, aber kann nicht in BD schreiben (Änderungen scheinen nicht zu begehen).Hibernate mit Glassfish 4.1
Mein aktueller persistent.xml sieht wie folgt aus:
<?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>
My Connection Pool Config auf Glassfish ist:
<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>
Datenquelle config:
<jdbc-resource pool-name="myPool" jndi-name="jdbc/myDataSource"></jdbc-resource>
Meine EJB wie folgt aussieht :
@PersistenceContext
private EntityManager em;
public void updateUser(User u) {
em.merge(u);
}
Irgendeine Idee, wie ich das beheben kann?
Danke!
Hey, wie Sie Ihre Transaktionen verwalten? Es sieht so aus, als hätte es keine aktive Transaktion, oder sie werden nicht festgeschrieben. Haben Sie mit JtaTransactionFactory anstelle von CMTTransactionFactory versucht? Können Sie ein Beispiel Ihres EJB veröffentlichen, in dem Sie Daten beibehalten? –
Hallo André, ich habe versucht mit JtaTransactionFactory und in diesem Fall hängt die App (es scheint, dass es auf eine Transaktion wartet). Meine EJBs verwenden Container-Manager-Transaktionen und alles funktioniert gut auf Wildfly 8.1. –
Können Sie Ihre jta-Datenquellenkonfiguration auf Glassfish bereitstellen? –