2012-04-24 24 views
8

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

सब कुछ ठीक काम करता है, लेकिन मुझे लगता है कि मैं वास्तव में बहुत अधिक बॉयलरप्लेट कोड लिख रहा हूं। चूंकि मुझे इन जावा ढांचे में ज्यादा अनुभव नहीं है, इसलिए मैं सोच रहा हूं कि कोई मुझे स्थिति में सुधार करने के बारे में संकेत दे सकता है।

  1. Creting हाइबरनेट सत्र अनुरोध

खैर प्रति, जहाँ तक मैं समझ गया मैं अनुरोध के अनुसार एक हाइबरनेट सत्र बनाने के लिए और अंत में मैं इसे बंद करने के लिए किया है। तो वर्तमान में मेरे सेवा तरीकों के सभी इस तरह दिखेगा:

Session session = HibernateUtil.getInstance().getSessionFactory().openSession(); 
... 
... 
... 
session.close(); 

वहाँ आदेश किसी भी तरह स्वचालित रूप से ऐसा करने के लिए इन दो पंक्तियों को हटाने के लिए कोई तरीका है? वर्तमान में मेरी सेवा एक रेस्टीसी सिंगलटन के रूप में पंजीकृत है। एक रेस्टेसी रिसोर्स में बदल जाएगा और कन्स्ट्रक्टर में सत्र बनाने से समस्या हल हो जाएगी? मुझे लगता है कि यह सत्र बनाने की समस्या को हल करेगा। लेकिन इसे बंद करने के लिए कहां?

सी ++ में यह आसानी से एक स्कोप्ड ऑब्जेक्ट बना सकता है जो अंत में सत्र बंद कर देता है। लेकिन जावा में?

  1. जब भी ऐसा कोई आरईएसटी अनुरोध किया जाता है तो मुझे एक वैध सत्र (उपयोगकर्ता को पहले लॉगिन करना होगा) की जांच करनी होगी। क्या ServletFilter ऐसा करने का सही तरीका है?

सामान्य: क्या कोई अन्य पैटर्न या ढांचे का उपयोग करने पर विचार करना चाहिए? मेरा मतलब है कि मैं इसे यथासंभव सरल रखना चाहता हूं और विशेष रूप से मेरे पास इतना अनुभव नहीं है कि मैं स्प्रिंग या जो भी हेवीवेट फ्रेमवर्क का उपयोग करना समाप्त नहीं करना चाहता हूं। ऐसा लगता है कि मुझे पाइथन और डीजेगो की सादगी के लिए उपयोग किया जाता है लेकिन इस छोटी परियोजना के लिए मुझे जावा का उपयोग करना होगा।

अभी तक धन्यवाद!

उत्तर

3

हाइबरनेट के मौजूदा सत्र के प्रबंधन के लिए सिफारिश की दृष्टिकोण इस wiki page के बारे में विस्तृत है। विशेष रूप से, मुझे लगता है कि आप पिछले पैराग्राफ पढ़ने की जरूरत है: This is all very difficult, can't this be done easier?

अंत में, आप हठ परत बताने के लिए है कि "मैं कुछ करने के लिए के बारे में हूँ" (आमतौर पर भी सत्र यह करने के लिए हो जाता है जो की क्या ज़रूरत है के साथ) और "मैं इसे कर रहा हूँ"। आप इसे annotations, या JTA transactions के साथ कर सकते हैं, लेकिन उस जानकारी को अभी भी सूचित किया जाना है!

0

आपको ऐसा फ़िल्टर लिखने का प्रयास करना चाहिए जो ऐसा करता है। यदि आपको एक उदाहरण की आवश्यकता है तो स्प्रिंग के ओपनसेशन इनव्यूफिल्टर शुरू करने के लिए एक अच्छी जगह है।

1

अपने डेटा एक्सेस ऑब्जेक्ट में सत्र फ़ैक्टरी को इंजेक्ट करें और हाइबरनेट सत्र ऑब्जेक्ट तक पहुंचने के लिए sessionFactory.getCurrentSession() का उपयोग करें। आप इस लागू करने के लिए उपलब्ध फैक्टरी वर्गों में से किसी का उपयोग कर सकते ..

फिर अपने कोड इस तरह दिखना चाहिए ..

sessionFactory.getCurrentSession().save(newInstance); 
+6

ठीक है, लेकिन मैं सत्र कहां बंद करूं? – duselbaer

+1

स्ट्रूट 2 के मामले में, आप सत्र ऑब्जेक्ट को प्रारंभ और बंद करने के लिए इंटरसेप्टर का उपयोग कर सकते हैं। –