2013-05-28 10 views
5

मैं ओरेकल 11 जी, हाइबरनेट 3 और जेएसएफ 2 का उपयोग कर रहा हूं। मैंने अपना आवेदन 7 पर तैनात किया। हर चीज अच्छी तरह से चल रही है लेकिन जब मैं लॉगिन करने का प्रयास करता हूं 5-6 घंटे यह है मुझे मुझे पता करने में असमर्थ कैसे इस त्रुटि को अग्रिम में मदद me.Thanks solve.Please करने के लिए त्रुटिjava.sql.SQLException: Io अपवाद: सहकर्मी द्वारा कनेक्शन रीसेट: सॉकेट लिखने की त्रुटि

ERROR org.hibernate.util.JDBCExceptionReporter - Io exception: Connection reset by peer: socket write error 
[5/28/13 11:31:25:048 IST] 00000024 SystemErr  R org.hibernate.exception.GenericJDBCException: could not execute query 
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
    at org.hibernate.loader.Loader.doList(Loader.java:2231) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125) 
    at org.hibernate.loader.Loader.list(Loader.java:2120) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361) 
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) 
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148) 
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) 

देता है।

अब मैंने कोड द्वारा इस समस्या को हल किया है, लेकिन मुझे नहीं पता कि यह उचित तरीका है या नहीं। क्या आप मुझे सुझाव देंगे, मुझे इस समाधान के साथ जारी रखना चाहिए।

public class ApplicationUtilityBean implements Serializable { 
private SessionFactory sessionFactory; 
private AnnotationConfiguration cfg; 
public String filePath; 
private String realPath = Config.PATH; 

public ApplicationUtilityBean() throws URISyntaxException { 
    getConnection(); 
} 

public void getConnection() { 
    URL r = this.getClass().getClassLoader().getResource("hibernate.cfg.xml"); 
      cfg = new AnnotationConfiguration(); 
    cfg.configure(r); 
    String pwd = cfg.getProperty("hibernate.connection.password"); 
    TripleDESEncryption tripledesenc = null; 
    try { 
     tripledesenc = new TripleDESEncryption(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    cfg.setProperty("hibernate.connection.password", 
      tripledesenc.decrypt(pwd)); 
    sessionFactory = cfg.buildSessionFactory(); 

    System.out.println("cfg: " + cfg); 
    System.out.println("sessionFactory: " + sessionFactory); 
} 

public Session getSession() { 
    System.out.println("Going to get session"); 
    Session session = null; 
    try { 
     System.out.println("cfg is: " + cfg); 
     System.out.println("sessionFactory: " + sessionFactory); 
     session = sessionFactory.openSession(); 
     if(session != null){ 
      try { 
       Transaction trxn = session.beginTransaction(); 
       Query queryResult = session.createSQLQuery("select * from dual"); 
       List<GTS_USER>listgtsuser = queryResult.list();  
           } catch (Exception e) {     
       e.printStackTrace(); 
       System.out.println("Creating new connection............"); 
       session.close(); 
       sessionFactory.close(); 
       getConnection(); 
       session = sessionFactory.openSession(); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return session; 
} 

}

और मेरी हाइबरनेट कॉन्फ़िग फ़ाइल

<hibernate-configuration> 
<session-factory> 

    <property name="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</property> 
    <property name="hibernate.cache.use_query_cache">true</property> 
    <property name="hibernate.cache.use_second_level_cache">true</property> 

    <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property> 
    <property name="hibernate.connection.url">jdbc:oracle:thin:@xxxxxxxxx:1521:HMS</property> 
    <property name="hibernate.connection.username">xxxxx</property> 
    <property name="hibernate.connection.password">xxxxxxxxxxx</property> 
    <property name="hibernate.connection.pool_size">10</property> 
    <property name="show_sql">true</property> 
    <property name="dialect">org.hibernate.dialect.OracleDialect</property> 
    <property name="hibernate.hbm2ddl.auto">update</property> 
+0

क्या आप हाइबरनेट कॉन्फ़िगरेशन फ़ाइल में डेटाबेस पैरामीटर निर्दिष्ट कर रहे हैं या आप was7 में परिभाषित डेटा स्रोत का उपयोग कर रहे हैं और JNDI का उपयोग करके देखा है? – gkamal

+0

हाइबरनेट कॉन्फ़िगरेशन में केवल – RaviPancholi

उत्तर

4

आप शायद डेटाबेस कनेक्शन टाइमआउट का सामना कर रहे हैं। प्रत्येक डेटाबेस पर एक कनेक्शन होता है जब एक कनेक्शन खुला होता है और एक निश्चित अवधि के लिए कोई गतिविधि नहीं होती है। आपको एक कनेक्शन पूल प्रबंधक की आवश्यकता है।

यदि आप c3p0 इंस्टॉल करते हैं और इसे सही तरीके से कॉन्फ़िगर करते हैं तो यह हाइबरनेट को आपके कनेक्शन को जिंदा रखने और/या इसकी आवश्यकता होने पर इसे फिर से खोलने की अनुमति देगा।

यहां माइस्क्लुएल और हाइबरनेट के लिए example है लेकिन यह वही है। आप c3p0.jar शामिल और भी अपने hibernade विन्यास फाइल में जोड़ने के लिए है:

<property name="c3p0.min_size">5</property> 
<property name="c3p0.max_size">20</property> 
<property name="c3p0.timeout">1800</property> 
<property name="c3p0.max_statements">50</property> 
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 

अपने डेटाबेस के अनुसार c3p0.timeout कॉन्फ़िगर करना सुनिश्चित करें!

+0

मैंने कोशिश की लेकिन यह काम नहीं कर रहा है। क्या कोई कोड स्तर परिवर्तन भी है? – RaviPancholi

+0

क्षमा करें, एक गलती की है, यह अब काम करना चाहिए! –

+0

अब मैंने परीक्षण किया है कि यह ठीक काम कर रहा है। मेरी मदद के लिए धन्यवाद। – RaviPancholi

0

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

यह कैसे करें यह कैसे बदलता है कि आपने डेटा स्रोत/कनेक्शन पूलिंग कैसे सेट की है। यदि आप इसके बारे में अधिक जानकारी प्रदान करते हैं तो मैं अधिक विशिष्ट निर्देश प्रदान कर सकता हूं।

+0

में डीबी पैरामीटर निर्दिष्ट करते हुए मैं केवल हाइबरनेट 3 के डिफॉल्ट कनेक्शन पूलिंग का उपयोग कर रहा हूं। मैंने hibernate.cfg.xml में proprty सेट किया है। – RaviPancholi

1

@BalusC

के अनुसार अपने आवेदन एक अपेक्षाकृत लंबे समय से चलाने के लिए और डीबी काफी अक्सर कनेक्ट करने के लिए है, तो एक कनेक्शन पूल का उपयोग कर जोड़ने के प्रदर्शन में सुधार करने पर विचार माना जाता है तो। यदि आपका एप्लिकेशन एक वेबप्लिकेशंस है, तो ऐपसर्वर के दस्तावेज़ में एक नज़र डालें, यह आमतौर पर डेटासोर्स के स्वाद में कनेक्शन पूलिंग सुविधा प्रदान करता है। यदि यह क्लाइंट एप्लिकेशन है, तो तीसरे पक्ष कनेक्शन पूलिंग पुस्तकालयों की तलाश करें, जिन्होंने अपाचे कॉमन्स डीबीसीपी (आमतौर पर इस्तेमाल किया जाने वाला, बहुत से ऐप्ससेवर में उपयोग किया जाता है), सी 3 पी 0 (हाइबरनेट से ज्ञात) और प्रॉक्सूल (यदि आप चाहते हैं) के साथ अपनी मजबूती साबित कर दी है। एक्सए कनेक्शन)।

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

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