2015-05-26 19 views
5

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!

+0

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? –

+0

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. –

+0

Können Sie Ihre jta-Datenquellenkonfiguration auf Glassfish bereitstellen? –

Antwort

1

Könnten Sie bitte die folgende Konfiguration versuchen:

<?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

Diese Antwort wäre besser, wenn Sie ein wenig erklären, was Sie vorschlagen und warum Sie denken, dass das hilft. – Lii

+0

Hallo Manu, ich benutze Hibernate, MSSQLServer und JTA! Ihr Persistenzvorschlag ist sehr allgemein gehalten. Vielen Dank –

1

In meinem Fall wurde ich in den Ruhezustand 5 mit Kater läuft und aufhören zu arbeiten, wenn ich 4.1

Der Grund der älteste Jboss war glassfish geändert -logging.jar unter: "YOUR_GLASSFISH_FOLDER/glassfish/modules"

Warum? Der Hibernate 5 hat eine Abhängigkeit mit der neuesten Version von jboss-logging und der Glassfish verwendet die älteste Version, auch wenn Sie in Ihrer POM-Datei die neueste Version deklarieren. Eigentlich mit Ich bin:

org.jboss.logging jboss-logging 3.3.0.Final 

Dann habe ich heruntergeladen und ersetzen die alten .jar innerhalb Bahnmodule und wieder an die Arbeit, verbrachte ich 2 Tage versucht zu lösen, und ich hoffe, dass es einige zukünftige Ausgaben hilft = D

Ich habe diesen Link verwendet, um mir zu helfen: https://medium.com/@mertcal/using-hibernate-5-on-payara-cc242212a5d6#.npq2hdprz

Verwandte Themen