2011-10-18 23 views
15

मैंने ग्लासफ़िश के माध्यम से एक दूरस्थ MySQL सर्वर से सफलतापूर्वक कनेक्शन बनाया है, हालांकि प्रत्येक बार जब मैं कोड या एक्सएचटीएमएल फाइलों में बदलाव करता हूं, तो मुझे ग्लासफ़िश के व्यवस्थापक पैनल को खोलने और कनेक्शन पूल को फ्लश करने की आवश्यकता होती है, अन्यथा मुझे निम्न मिलता है जब मैं पेज को रीफ्रेश करता हूं तो त्रुटि। क्या किसी ने इसका अनुभव किया है? यदि आवश्यक हो तो मैं कोड या अन्य जानकारी पोस्ट कर सकता हूं।हर बार जब मैं पुन: नियोजित करता हूं तो मुझे कनेक्शन पूल को फ्लश करने की आवश्यकता क्यों होती है?

HTTP स्थिति 500 ​​-

प्रकार अपवाद रिपोर्ट

संदेश

DescriptionThe सर्वर में आंतरिक त्रुटि का सामना करना पड़ा() कि यह इस अनुरोध को पूरा करने से रोक।

अपवाद

javax.servlet.ServletException: वेल्ड-000,049 [विधि] @PostConstruct सार्वजनिक com.myapp.QuestionController.initialize() पर [email protected]

आह्वान करने में असमर्थ

मूल कारण

org.jboss.weld.exceptions.WeldException: वेल्ड-000,049 असमर्थ आह्वान करने के लिए [विधि] @PostConstruct सार्वजनिक com.myapp.interfaces.QuestionController.initialize() पर [email protected]

मूल कारण

java.lang.reflect.InvocationTargetException

मूल कारण

javax.ejb.EJBException

मूल कारण

javax.persistence.PersistenceException: अपवाद [ग्रहण लिंक -4002] (ग्रहण पर्सिस्टेंस सेवाएं - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException आंतरिक अपवाद: java.sql.SQLException: कनेक्शन आवंटित करने में त्रुटि। कारण: java.lang.RuntimeException: गॉट अपवाद दौरान XAResource.start: त्रुटि कोड: 0

मूल कारण

अपवाद [EclipseLink-4002] (ग्रहण हठ सेवाएं - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException आंतरिक अपवाद: java.sql.SQLException: कनेक्शन आवंटित करने में त्रुटि। कारण: java.lang.RuntimeException: XAResource.start दौरान गॉट अपवाद: त्रुटि कोड: 0

मूल कारण

java.sql.SQLException: एक कनेक्शन का आवंटन करने में त्रुटि। कारण: java.lang.RuntimeException: XAResource के दौरान अपवाद मिला।शुरू: एक कनेक्शन के आवंटन में त्रुटि:

मूल कारण

javax.resource.spi.ResourceAllocationException। कारण: XAResource.start दौरान गॉट अपवाद: java.lang.RuntimeException

मूल कारण

com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: गॉट अपवाद के दौरान XAResource.start:

मूल कारण

com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: गॉट XAResource.start दौरान अपवाद:

012,

मूल कारण

java.lang.RuntimeException: XAResource.start दौरान गॉट अपवाद:

मूल कारण

javax.transaction.xa.XAException: com.sun.appserv.connectors.internal। api.PoolingException: javax.resource.spi.LocalTransactionException: संचार लिंक विफलता

पिछले पैकेट सफलतापूर्वक सर्वर से प्राप्त 435,409 milliseco था पहले सर्वर पर सफलतापूर्वक भेजा गया अंतिम पैकेट 7 मिलीसेकंड पहले था।

Image of config

हठ एक्सएमएल

<?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="SertifikatPU" transaction-type="JTA"> 
     <jta-data-source>jdbc/sertifikatdb</jta-data-source> 
    </persistence-unit> 
</persistence> 

"अतिरिक्त गुण" Glassfish कनेक्शन पूल सेटिंग्स में मैं सिर्फ कॉन्फ़िगर किया है में: ServerName, यूआरएल, उपयोगकर्ता और पासवर्ड।


मैं इस समस्या

enter image description here

मैं अपने ही दोहरी तालिका, ओरेकल से मिलता-जुलता बनाया समाधान कर लिया है।

CREATE TABLE dual 
(
    x VARCHAR(1) 
); 

INSERT INTO dual(x) VALUES('y'); 
+0

गैर लेन-देन संबंधी कनेक्शन, लेन-देन अलगाव :, अलगाव स्तर: -> ये लेन-देन के अंतर्गत वर्गीकृत कर रहे हैं, उनमें से किसी को? – LuckyLuke

+0

आप कनेक्शन कैसे प्राप्त कर रहे हैं? इससे यह अपवाद हो सकता है। कनेक्शन पूल कॉन्फ़िगरेशन भी क्या है। – r0ast3d

+0

क्या कहीं कहीं होने वाले कनेक्शन का संदर्भ है? क्या आप अधिक जानकारी जोड़ सकते हैं ... रिमोट सर्वर पर भी, ग्राहकों और कनेक्शन की संख्या के लिए कॉन्फ़िगरेशन क्या है? – r0ast3d

उत्तर

20

आपका मूल कारण, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failurethis Glassfish bug से संबंधित है, जो यह बताती है कि आप अपने अवैध कनेक्शन ताज़ा करना पड़ सकता (तल पर टिप्पणी टैब में)।

द्वारा बग टिप्पणी जगदीश आपके कनेक्शन सत्यापन प्रकार की जांच करने के लिए कहती है। यदि यह "autocommit" (डिफ़ॉल्ट) पर सेट है, तो जेडीबीसी ड्राइवर पूर्व कनेक्शन सत्यापन डेटा को कैश कर सकते हैं, और भविष्य में कनेक्शन सत्यापन के दौरान कोई वास्तविक डेटाबेस इंटरैक्शन नहीं होगा।

समस्या को हल करने के लिए, connection-validation-method="table" और validation-table-name="any_table_you_know_exists" सेट करें (any_table_you_know_exists को किसी भी मौजूदा तालिका के नाम से बदलें)। ऐसा करने से कनेक्शन कैश के बजाय डेटाबेस से बात करने के लिए मजबूर करता है; अगर कनेक्शन अमान्य है, तो इसे हटा दिया जाएगा और फिर से बनाया जाएगा। आपको is-connection-validation-required="true" निर्दिष्ट करने की आवश्यकता हो सकती है।

लेख अतिरिक्त विन्यास के साथ मदद करने के लिए:

  1. This article भी विस्तार से समस्या बताते हैं।
  2. Jagadish's Oracle Blog Article इस विषय पर अधिक जानकारी है।
  3. Article विस्तार से ग्लासफ़िश जेडीबीसी कनेक्शन सत्यापन समझाते हुए। जगदीश के ब्लॉग से

पाठ:

AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required=true 
domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required = true 

AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method=table 
domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method = table 

bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name=sys.systables 
domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name = sys.systables 

ध्यान दें कि नमूना कोड, sys.systables को संदर्भित करता है जो एक एमएस एसक्यूएल तालिका कि अस्तित्व के लिए गारंटी है है। ओरेकल के लिए, गारंटीकृत तालिका dual देखें। MySQL के लिए, सत्यापन उद्देश्यों के लिए पूरी तरह से 1-कॉलम तालिका बनाएं; इसे सुरक्षित रखें और डेटा की एक पंक्ति डालने से तालिका को पूर्व-पॉप्युलेट करें।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। मैं इसके लिए नया हूं इसलिए इसे कॉन्फ़िगर करने के लिए मुझे थोड़ी सी मदद की आवश्यकता हो सकती है। मैं लोकलहोस्ट गया: 4848 -> जेडीबीसी कनेक्शन पूल -> मेरा कनेक्शन चुना -> फिर उन्नत टैब। मुझे कनेक्शन-सत्यापन-विधि मिली जिसके बारे में आप बात कर रहे थे और कनेक्शन-सत्यापन-आवश्यक भी चुना। लेकिन मुझे सत्यापन-तालिका-नाम नहीं दिख रहा है। – LuckyLuke

+0

इसके अलावा, [यह आलेख] देखें (http://blogs.oracle.com/JagadishPrasath/entry/connection_validation_in_glassfish_jdbc) ASAP। जाहिर है, 'यह उसी जगदीश द्वारा भी लिखा गया है जिसका मैंने पहले उल्लेख किया था (उसका ब्लॉग!) और असफलता पर रीफ्रेश करने के लिए' असफल-सभी-कनेक्शन 'का उपयोग करने का सुझाव देता है। [यहां] (http://alexandru-ersenie.com/2011/03/01/glassfish-jdbc-connection-validation-explained/) एक दूसरा लेख है जो विस्तार से ग्लासफ़िश जेडीबीसी कनेक्शन सत्यापन बताता है। दोनों उत्कृष्ट पढ़ रहे हैं! – JoshDM

+0

आपके 'domain.xml' में आपका कनेक्शन पूल xml कोड कैसा दिखता है? मेरा मानना ​​है कि वह जगह है जहां आपने सुझाए गए गुण निर्धारित किए हैं। – JoshDM

1

क्या आप इस ड्राइवर का उपयोग कर रहे हैं?

com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 

मुझे लगता है कि आपके पास अनुलग्न चित्र से एक अलग ड्राइवर का उपयोग कर रहे हैं ...

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

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