2010-05-27 6 views
6

के साथ काम करते समय मानक वर्कफ़्लो मैं वर्तमान में जेपीए के साथ काम करने के आसपास अपने सिर को लपेटने की कोशिश कर रहा हूं। मैं मदद नहीं कर सकता लेकिन ऐसा महसूस करता हूं कि मुझे कुछ याद आ रहा है या गलत तरीके से कर रहा है। यह अभी तक मजबूर लगता है।जेपीए

मुझे लगता है कि मुझे अब तक पता है कि उनके समर्थन के लिए जेपीए और टूल्स के साथ काम करने के कुछ तरीके हैं।

  • आप एनोटेशन का उपयोग करके जावा में सब कुछ कर सकते हैं, और जेपीए (जो भी कार्यान्वयन आप उपयोग करने का निर्णय लेते हैं) को अपनी स्कीमा बनाएं और परिवर्तन किए जाने पर इसे अपडेट करें।
  • आप अपने डेटाबेस को रिवर्स इंजीनियर करने और आपके लिए इकाई कक्षाएं उत्पन्न करने के लिए एक टूल का उपयोग कर सकते हैं। जब स्कीमा अपडेट किया जाता है तो आपको इन कक्षाओं को पुन: उत्पन्न करना होगा, या मैन्युअल रूप से उन्हें अपडेट करना होगा।

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

उत्तर

1

एनोटेटेड इकाइयों से डीबी स्कीमा उत्पन्न करने के लिए यह हमेशा एक अच्छा तरीका नहीं है । हालांकि सिद्धांत में यह बहुत अच्छा लगता है - अभ्यास में अक्सर उत्पन्न स्कीमा इष्टतम नहीं है और डीबीए को संतुष्ट और अनुभवी नहीं करेगा।

दृष्टिकोण है कि मैं में मेरे कार्यप्रवाह संस्थाओं और डाटाबेस स्कीमा अलग से, बनाने के लिए, जबकि अभी भी स्कीमा बनाने के लिए एक बहुत बुद्धिमान उपकरण का उपयोग है का पालन करें - Liquibase की तरह कुछ भी, कि, डेटाबेस नास्तिक है का समर्थन करता है संशोधन, पुनरावर्तन, आदि ... या कस्टम बेक्ड माइग्रेशन टूल जो आसानी से अत्यधिक अनुकूलित डीबी विशिष्ट एसक्यूएल स्क्रिप्ट चलाता है।

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

हालांकि, मैं परीक्षण डेटाबेस के लिए इकाइयों से स्कीमा उत्पन्न करने के लिए उपयोगी हो सकता हूं जिसके खिलाफ इकाई और एकीकरण परीक्षण चलाए जा रहे हैं। मान लें कि आप का उपयोग कर रहे हैं PostgreSQL उत्पादन है, आप कुछ एम्बेडेड इन-मेमोरी डेटाबेस चलाने वाले यूनिट परीक्षणों के लिए चीजों को गति देने का निर्णय ले सकते हैं, जैसे परीक्षण शुरू होने से पहले इकाइयों से बनाए जाते हैं और स्वचालित रूप से गायब हो जाते हैं (क्योंकि यह स्मृति में था) परीक्षण निष्पादन खत्म होने के बाद। यह एक बहुत ही आम प्रथा है।

+0

लिक्विबेस के लिंक के लिए धन्यवाद। और जब यह आदर्श प्रतीत नहीं होता है, यह समझ में आता है और मैंने जो कुछ सोचा वह बहुत अधिक सत्यापित करता है। हम ओरेकल का उपयोग कर रहे हैं, और अभी हमारे पास एक देव मशीनों पर ओरेकल एक्सई है जिसे हम अपने परीक्षण चलाने के लिए उपयोग कर रहे हैं। मुझे एच 2 में देखना होगा और देखें कि क्या यह संभावना है। –

1

सामान्य जवाब यह निर्भर करता है के रूप में ...

आदर्श दृष्टिकोण (आदर्श दुनिया में) शायद अपनी 1st विकल्प होगा: जेपीए एनोटेशन और आगे इंजीनियर डेटाबेस कलाकृतियों उपयोगिता उपकरण का उपयोग कर का उपयोग करते हुए सब कुछ को बनाए रखने के (जैसे का उपयोग Hibernate Maven plugin) ।

यह आपके डेटाबेस कलाकृतियों के लिए समर्थन के स्तर पर निर्भर करता है - सब कुछ या तो एनोटेशन के लिए संबंधित या उपयुक्त नहीं है। यही कारण है कि मेरी परियोजनाएं आम तौर पर सिंक में रखने के लिए दोनों के लिए समानांतर रखरखाव का उपयोग करती हैं और इकाई परीक्षणों का उपयोग करती हैं।

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

अन्य विचार यह है कि जेपीए में वास्तव में डेटाबेस विकास कितना किया जाता है। क्या संग्रहित प्रक्रियाएं या अन्य गैर-जेपीए अनुप्रयोग भी हैं जो समान बैक-एंड का उपयोग करते हैं, या शायद आप अन्य टीम के डेटाबेस के साथ एकीकृत कर सकते हैं ...

+0

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

+0

पहला मार्ग बहुत मुश्किल होगा, मुझे दो में से एक मिश्रण होना चाहिए क्योंकि मानक में कुछ चीजें करना संभव नहीं है, केवल जेपीए जैसे गैर-अद्वितीय इंडेक्स –

1

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

क्या होने की आवश्यकता है जेपीए में माइग्रेट करने की एक परियोजना है। इसके कुछ फायदे हैं:

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

स्कीमा के लिए के रूप में उत्पन्न होते हैं और इस तरह किया जा रहा है, वहाँ वास्तव में कर रहे चार workflows कि हो सकता है:

  1. डिजाइन के लिए, एक वस्तु संबंधपरक (बजाय एक इकाई-संबंधपरक) आरेख के बीच एक अनुबंध के रूप में कार्य करता है आवेदन टीम और डेटाबेस टीम। अंतिम परिणाम यह है कि जेपीए ऑब्जेक्ट्स भौतिक डेटा संरचना में चलेंगे जो डीबीए सेट करता है।
  2. जावा अनुप्रयोग विकास के लिए, बस प्रत्येक डेवलपर का अपना डेटाबेस रखें और उन्हें जितना चाहें उतना उड़ा दें। जेपीए कोड आपके लिए स्कीमा जेनरेट करेगा।
  3. डेटाबेस विकास के लिए, उत्पन्न स्कीमा और कक्षा आरेख डीबीए द्वारा समीक्षा पर पारित किए जाते हैं ताकि यह देखने के लिए कि प्रदर्शन में सुधार किया जा सकता है। विशेष रूप से वे ऐसे सूचकांक निर्दिष्ट करने के लिए हैं जो जेपीए मानक में उपलब्ध नहीं हैं क्योंकि यह क्रॉस डेटाबेस नहीं है। वे टेबल रिक्त स्थान और विकास के लिए सभी एक्सेस कंट्रोल और स्कीमा सेट अप करने के लिए भी हैं, लेकिन कम से कम संरचना की गलती उनसे दूर की जा सकती है और आवेदन टीम पर जा सकती है जो एप्लिकेशन टीम को अनुकूलित करने के लिए अधिक लचीलापन देता है परिवर्तन करने के लिए। आम तौर पर क्या होता है डीबीए में कुछ जेनरेट किए गए एसक्यूएल शामिल होते हैं और उसके बाद अतिरिक्त कॉलम और अन्य जोड़ने के लिए परिवर्तन होते हैं जो एप्लिकेशन के बाहर अन्य उद्देश्यों के लिए उपयोग किए जाते हैं (जेपीए संरचना को केवल एप्लिकेशन द्वारा जरूरी चीज की आवश्यकता होती है, इसकी आवश्यकता नहीं होती है डेटाबेस में एक-से-एक 100% मैप करने के लिए)
  4. माइग्रेशन के लिए, डीबीए को दो स्कीमा के बीच एक अंतर विश्लेषण करने की आवश्यकता है। Dbsolo (मुफ्त नहीं) नामक एक प्रोग्राम है जो इसे अधिकांश डेटाबेस के साथ कर सकता है। हालांकि, अगर जेपीए में चीजें की जाती हैं, तो संरचनाएं सरल होती हैं क्योंकि सिद्धांत में अब डेटाबेस पर कोई व्यावसायिक तर्क नहीं है जिससे उन्नयन के कारण डेटा माइग्रेशन की जटिलता कम हो जाती है।

इसका नेट यह नहीं है कि आप केवल इतना कह सकते हैं कि आप पूरी डिलीवरी टीम को शामिल किए बिना जेपीए का उपयोग कर रहे हैं जिसमें डीबीए को आवेदन के लिए डेटा की संरचना के नियंत्रण और स्वामित्व को छोड़ने के लिए तैयार करना होगा टीम, लेकिन अभी भी डिजाइन और समीक्षा का हिस्सा बनें।