2016-06-23 5 views
5

मुझे हाल ही में एक मध्यम आकार के विरासत कोड बेस (3.x से 5.2 तक) में हाइबरनेट निर्भरता (दूसरों के बीच) के संस्करण को टक्कर देने की अनुमति दी गई थी। कोड स्वयं आंशिक रूप से 10 साल से अधिक है लेकिन अभी भी दैनिक उपयोग में है।विरासत हाइबरनेट अनुप्रयोगों के लिए इच्छित अपग्रेड पथ क्या है?

तो संस्करण को बढ़ाने और पोर्टिंग को बढ़ाने के बाद भी अब तक एपीआई कॉलों को अपने रक्तस्राव किनारे के समकक्षों से हटा दिया गया है या यहां तक ​​कि गायब इलाकों को भी छोड़ दिया गया है (स्कीमाएक्सपोर्ट कैसे करना है यह जानने का एक विशेष अनुभव था) मुझे अभी भी यह नहीं दिख रहा है एक पूर्ण प्रवासन के रूप में।

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

निम्नलिखित बातों को कुछ हद तक अभी भी खुले हैं:

  • जेपीए एनोटेशन को .hbm.xml मैपिंग जानकारी विस्थापित करने के लिए कोई स्पष्ट या स्वचालित तरीका नहीं है। मुझे पता है कि मैन्युअल माइग्रेशन बहुत त्रुटि प्रवण होगा और सभी अवधारणाओं में स्पष्ट या स्पष्ट काउंटर पार्ट्स नहीं हैं।

  • अब हमें पुराने मानदंड एपीआई के उपयोग के बारे में बहुत सी बहिष्करण चेतावनियां (org.hibernate.orm.deprecation) मिलती हैं लेकिन कोई स्पष्ट अपग्रेड पथ भी नहीं है। कोई भी एप्लिकेशन के पूरे डीबी एक्सेस कोड को पूरी तरह से अलग और अधिक वर्बोज़ एपीआई पर फिर से लिख नहीं सकता है जो निश्चित रूप से कुछ किनारे के मामलों में अलग-अलग व्यवहार करेगा।

  • हम org.hibernate.transform.ResultTransformer के कई मूल प्रश्नों और उदाहरणों का उपयोग करने लगते हैं, फिर भी org.hibernate.query.Query#setResultTransformer() इस पर काम करने के तरीके के बारे में कोई संकेत नहीं दिया गया है।

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

+0

आपकी अधिकांश चिंताओं को एकीकरण परीक्षण के अस्तित्व से ढंक दिया जाता है। यह देखते हुए कि आप विरासत प्रणाली पर काम करते हैं, मैं इसे लेता हूं कि आपके पास नहीं है। यह आपकी मुख्य समस्या होगी, तथ्य यह नहीं कि हाइबरनेट समय के साथ विकसित हुआ। मैंने एक समान अपग्रेड किया लेकिन सर्वर को अपग्रेड किया (जेबॉस 5.1 से वाइल्डफ्लाई 9) और जेएसएफ (1.2 + जेबॉस सीम जेएसएफ 2.2 + प्राइमफेस तक) - यह एक परेशान अनुभव था जिसमें 6 महीने का कोड रीडिज़ाइन हुआ था। यह विरासत प्रणाली के साथ ही है - और क्यों कई अपग्रेड नहीं करना चुनते हैं। – Gimby

+0

आपके आवेदन में कौन से पैटर्न और तकनीक उपयोग कर रहे हैं? मेरा मतलब है कि आप सेवा परत के लिए एमवीसी का उपयोग करते हैं, क्या आप स्प्रिंग, ईजेबी या कुछ पसंद करते हैं। –

+0

क्या मेरा सुझाव है कि आप 5.1 तक अपग्रेड करें और अभी तक 5.2 नहीं? 5.2 हाइबरनेट 6 की ओर "सड़क को फ़र्श" करने के बारे में बहुत कुछ है, और कुछ चीजों को छोड़कर जो हम जानते हैं उन्हें हटा दिया जाएगा, लेकिन वास्तव में सब कुछ स्पष्ट नहीं है। इसके अलावा कुछ बदलाव थोड़ा दूर गए, और हम 5.2.1 में थोड़ा सा बहाल कर रहे हैं, यानी https://hibernate.atlassian.net/browse/HHH-10877 – Sanne

उत्तर

1

मैं समझता हूं कि आपका क्या मतलब है। असल में, मैं हाल ही में 3.x से 4.x और 5.x तक माइग्रेशन के संबंध में हमारे मंच पर सभी प्रकार के प्रश्न देख रहा हूं।

  1. मुझे लगता है कि हमारे पास प्रत्येक माइग्रेशन के लिए एक प्रारंभिक पृष्ठ के रूप में माइग्रेशन लैंडिंग पृष्ठ होना चाहिए। इस तरह, उपयोगकर्ताओं को एक ही पृष्ठ पर जाना होगा और उन्हें जो भी चाहिए उसे ढूंढना होगा।
  2. हमारे पास स्वचालित एचबीएम-टू-एनोटेशन टूल नहीं है। हालांकि, एक विकल्प है। आप एचबीएम -> डेटाबेस कर सकते हैं, और फिर अपने डेटाबेस स्कीमा से एनोटेशन उत्पन्न करने के लिए रिवर्स इंजीनियर टूल का उपयोग कर सकते हैं।
  3. विरासत मानदंड को बहिष्कृत किया गया है क्योंकि हम अब दो मानदंड एपीआई बनाए रखने का जोखिम नहीं उठा सकते हैं। इसके अलावा, जेपीए मानदंड अधिक उन्नत है (इसमें सुरक्षित प्रश्न और मेटामोडेल टाइप हैं)। दुर्भाग्य से, विरासत से मानदंड API तक कोई स्वचालित माइग्रेशन नहीं है। लेकिन फिर भी, यदि आपके पास सैकड़ों ऐसी विधि कॉल हैं, तो आप आसानी से उन्हें स्वचालित रूप से माइग्रेट कर सकते हैं (regex/perl/vi) या मैन्युअल रूप से। यह करने के लिए इतना कुछ नहीं ले रहा है।
  4. ResultTransformer को एक नए तंत्र के साथ प्रतिस्थापित किया जा रहा है जो बेहतर लैम्बडा का लाभ उठा सकता है। इस कारण से, नए इंटरफेस या इंटरफेस को कार्यात्मक इंटरफेस होना होगा।
+0

मेरे संग्रह का उत्तर देने के लिए समय निकालने के लिए धन्यवाद विशिष्ट प्रश्न :) – aeisele

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