2015-05-26 5 views
5

मैंने ग्लासफ़िश 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); 
} 

कोई विचार है कि मैं इसे कैसे ठीक कर सकता हूं?

धन्यवाद!

+0

अरे, आप अपने लेनदेन का प्रबंधन कैसे कर रहे हैं? ऐसा लगता है कि इसमें सक्रिय लेनदेन नहीं है, या वे प्रतिबद्ध नहीं हैं। क्या आपने CMTTransactionFactory के बजाय JtaTransactionFactory के साथ प्रयास किया है? क्या आप अपने ईजेबी का नमूना पोस्ट कर सकते हैं जहां आप कोई डेटा जारी रखते हैं? –

+0

हाय एंड्रे, मैंने JtaTransactionFactory के साथ प्रयास किया और उस स्थिति में ऐप लटकता है (ऐसा लगता है कि यह एक लेनदेन की प्रतीक्षा कर रहा है)। मेरे ईजेबी कंटेनर मैनेजर लेनदेन का उपयोग कर रहे हैं और सबकुछ वाइल्डफ्लाई 8.1 पर अच्छा काम करता है। –

+0

क्या आप ग्लासफ़िश पर अपना जेटीए-डेटा-स्रोत कॉन्फ़िगरेशन प्रदान कर सकते हैं? –

उत्तर

1

आप निम्नलिखित विन्यास प्रयास कर सकते हैं:

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

यह उत्तर बेहतर होगा यदि आपने जो कुछ सुझाव दिया है उसे समझाया और क्यों आपको लगता है कि इससे मदद मिलेगी। – Lii

+0

हाय मनु, मैं हाइबरनेट, एमएसएसएलएल सर्वर और जेटीए का उपयोग कर रहा हूं! आपका दृढ़ता सुझाव बहुत सामान्य है। धन्यवाद –

1

मेरे मामले में, मैं बिल्ला के साथ हाइबरनेट 5 चल रहा था और काम करना बंद कर जब मैं ग्लासफिश 4.1

कारण सबसे पुराने jboss बदला गया था -logging.jar पर: "YOUR_GLASSFISH_FOLDER/ग्लासफ़िश/मॉड्यूल"

क्यों? हाइबरनेट 5 में जब्स-लॉगिंग के नवीनतम संस्करण के साथ निर्भरता है, और ग्लासफ़िश सबसे पुराना संस्करण का उपयोग करता है भले ही आप अपनी पीओएम फ़ाइल के अंदर नवीनतम संस्करण घोषित करते हैं। असल में मैं उपयोग कर रहा हूँ:

org.jboss.logging jboss-logging 3.3.0.Final 

तब मैं डाउनलोड और

की जगह पुराने .jar अंदर पथ मॉड्यूल और वापस काम पर, मैं 2 दिन बिताए कि हल करने की कोशिश और मुझे आशा है कि यह कुछ भविष्य के मुद्दों = मदद करता है डी

मैंने इस लिंक का उपयोग मेरी मदद करने के लिए किया: https://medium.com/@mertcal/using-hibernate-5-on-payara-cc242212a5d6#.npq2hdprz

संबंधित मुद्दे