Tôi đã cài đặt Hibernate trên Glassfish 4.1 nhưng tôi gặp vấn đề với sự kiên trì. Tôi có thể đọc dữ liệu, nhưng không thể ghi vào BD (các thay đổi dường như không được cam kết).Hibernate với Glassfish 4.1
persistent.xml hiện tại của tôi trông như thế này:
<?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>
tôi kết nối hồ bơi cấu hình trên Glassfish là:
<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>
EJB của tôi trông như thế này :
@PersistenceContext
private EntityManager em;
public void updateUser(User u) {
em.merge(u);
}
Bất kỳ ý tưởng nào tôi có thể khắc phục điều đó?
Cảm ơn!
Xin chào, bạn đang quản lý giao dịch của mình bằng cách nào? Điều này có vẻ như nó không có giao dịch đang hoạt động hoặc chúng không được cam kết. Bạn đã thử với JtaTransactionFactory thay vì CMTTransactionFactory chưa? Bạn có thể gửi một mẫu EJB của bạn mà bạn vẫn tồn tại bất kỳ dữ liệu nào không? –
Xin chào André, tôi đã thử với JtaTransactionFactory và trong trường hợp đó ứng dụng bị treo (có vẻ như nó đang chờ giao dịch). EJB của tôi đang sử dụng giao dịch quản lý vùng chứa và mọi thứ hoạt động tốt trên Wildfly 8.1. –
Bạn có thể cung cấp cấu hình jta-data-source của mình trên thủy tinh không? –