2011-02-17 18 views
5

से पहले ज्ञात नहीं है मेरे पास जावा 6, स्प्रिंग 2.5.6 और हाइबरनेट 3.2.7 पर चल रहा एक वेब एप्लिकेशन है। अब कई डेटाबेस से कुछ डेटा लाने की आवश्यकता है, जिनके नाम रनटाइम से पहले ज्ञात नहीं हैं। इस लक्ष्य को हासिल करने का सबसे अच्छा तरीका क्या है?डेटाबेस का उपयोग करने के लिए हाइबरनेट को कॉन्फ़िगर करना, जिसका नाम रनटाइम

मैंने देखा है उदा। लेख में http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/ पर, लेकिन यह केवल एक परिस्थिति में लागू प्रतीत होता है, जहां सभी डेटाबेस कॉन्फ़िगरेशन पहले से ज्ञात हैं।

उत्तर

2

प्रत्येक डेटाबेस के लिए डेटाबेस संरचना समान है (हालांकि उनके नाम पहले से ज्ञात नहीं हैं), मैंने पैरामीटर के रूप में क्वेरी में डेटाबेस नाम जोड़कर इसे केवल इसे लागू करने का निर्णय लिया। यह कई सत्र कारखानों का उपयोग करने से संसाधन और प्रबंधन समस्याओं से बचाता है।

यहां से अधिक जानकारी: http://web.archive.org/web/20071011173719/http://hibernate.org/429.html

2

आप जावा कोड में विन्यास कर सकते हैं, तो आप क्रम में यह कर सकते हैं:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/session-configuration.html#configuration-programmatic

+0

ऐसा लगता है जैसे मैं विन्यास वस्तु के लिए एक डेटा स्रोत सेट कर सकते हैं, लेकिन यह अभी भी आवश्यक है कि सभी संभव डेटा स्रोतों (आवेदन शुरू होने से पहले परिभाषित कर रहे हैं या हो सकता है नहीं है, जो करने के लिए वापस हो जाता है मूल प्रश्न)। – simon

+0

जब भी आप और कितनी चाहें कॉन्फ़िगरेशन बना सकते हैं। लेकिन जब आप उन्हें उपयोग करने की आवश्यकता हो तो आपको उनमें से एक को चुनने में भी सक्षम होना चाहिए। –

2

आप एक वर्ग है कि org.hibernate.connection.ConnectionProvider लागू करता है बना सकते हैं। फिर अपने हाइबरनेट विन्यास फाइल में इस तरह उस वर्ग जोड़ें:

<property name="hibernate.connection.provider_class">my.class.that.implements.ConnectionProvider</property> 

आप शायद भी प्रत्येक डेटाबेस के लिए एक अलग sessionFactory चाहते हैं। क्या आप रनटाइम पर डेटाबेस कनेक्शन के बारे में अपने ऐप को कैसे पता लगा सकते हैं, इस बारे में कोई और जानकारी प्रदान कर सकते हैं?

+0

यह एक गुणवत्ता केंद्र साइट व्यवस्थापक डेटाबेस से कनेक्ट करने के बारे में है। प्रत्येक गुणवत्ता केंद्र प्रोजेक्ट का अपना डेटाबेस होता है, जिसका नाम मैंने तालिका से पढ़ा है। प्रत्येक डेटाबेस के लिए स्कीमा ज्ञात है, केवल डेटाबेस नाम QC stie admin डेटाबेस से जानकारी प्राप्त करने तक ज्ञात नहीं है। – simon

+0

आप प्रत्येक कनेक्शन के लिए एक अद्वितीय सत्र कारखाना चाहते हैं। आप इसे एप्लिकेशन स्टार्टअप या आवश्यकतानुसार कर सकते हैं। ऐसा करने के लिए आप प्रोग्रामिक कॉन्फ़िगरेशन और कॉन्फ़िगरेशन आधारित कॉन्फ़िगरेशन के संयोजन का उपयोग कर सकते हैं। उदाहरण के लिए एक कॉन्फ़िगरेशन फ़ाइल बनाएं जिसमें डीबी कनेक्शन को छोड़कर आवश्यक सब कुछ हो। फिर यह करें: config.configure ("hibernate.cfg.xml")। SetProperty ("dbstuff", "dbvalue") – Heathen

+0

@simon एक और विकल्प स्वयं कनेक्शन बनाना होगा। फिर एक सत्र फैक्ट्री का उपयोग करना: sessionFactory.open सत्र (कनेक्शन); Javadocs एक कनेक्शन का उपयोग करने की सलाह देते हैं इसके बजाय प्रदाता का उपयोग करें क्योंकि इस विधि का उपयोग कर दूसरे स्तर के कैश को अक्षम कर दिया जाएगा। – Heathen

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