मैंने ग्लासफ़िश 4.1 पर हाइबरनेट सेट किया है लेकिन मुझे दृढ़ता से समस्याएं आ रही हैं। मैं डेटा पढ़ने में सक्षम हूं, लेकिन बीडी पर लिख नहीं सकता है (परिवर्तनों को कम नहीं किया जा सकता है)।ग्लासफ़िश के साथ हाइबरनेट 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 पर मेरे कनेक्शन पूल config है:
<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>
डेटा स्रोत config:
<jdbc-resource pool-name="myPool" jndi-name="jdbc/myDataSource"></jdbc-resource>
मेरे EJB इस तरह दिखता है :
@PersistenceContext
private EntityManager em;
public void updateUser(User u) {
em.merge(u);
}
कोई विचार है कि मैं इसे कैसे ठीक कर सकता हूं?
धन्यवाद!
अरे, आप अपने लेनदेन का प्रबंधन कैसे कर रहे हैं? ऐसा लगता है कि इसमें सक्रिय लेनदेन नहीं है, या वे प्रतिबद्ध नहीं हैं। क्या आपने CMTTransactionFactory के बजाय JtaTransactionFactory के साथ प्रयास किया है? क्या आप अपने ईजेबी का नमूना पोस्ट कर सकते हैं जहां आप कोई डेटा जारी रखते हैं? –
हाय एंड्रे, मैंने JtaTransactionFactory के साथ प्रयास किया और उस स्थिति में ऐप लटकता है (ऐसा लगता है कि यह एक लेनदेन की प्रतीक्षा कर रहा है)। मेरे ईजेबी कंटेनर मैनेजर लेनदेन का उपयोग कर रहे हैं और सबकुछ वाइल्डफ्लाई 8.1 पर अच्छा काम करता है। –
क्या आप ग्लासफ़िश पर अपना जेटीए-डेटा-स्रोत कॉन्फ़िगरेशन प्रदान कर सकते हैं? –