2010-09-13 14 views
6

जाहिर है एक इकाई सेम बदबू आ रही है में राज्यविहीन EJB सेम का उपयोग कर, लेकिन कृपया एक परिदृश्य पर विचार इस प्रकार है और मुझे बताओ कि यदि आप एक बेहतर समाधान के बारे में पता:एक इकाई बीन में राज्यविहीन EJB सेम का उपयोग

  1. मैं एक InvoiceTemplate है क्षेत्र NextInvoiceDate
  2. जनरेट कर रहा है NextInvoiceDate साथ इकाई बीन एक जटिल प्रक्रिया है और InvoiceTemplate वर्ग
  3. NextInvoiceDate हर बार InvoiceTemplate अद्यतन किया जाना चाहिए डाटाबेस के लिए भंडारित किया जाता है के बाहर प्रदर्शन किया जाना चाहिए

अभी के लिए मैं InvoiceTemplate इकाई सेम में @PrePersist@PreUpdate Methon में NextInvoiceDate की पीढ़ी के बारे में तर्क दिया है। तर्क अधिक से अधिक जटिल हो रहा है और मैं इसे InvoiceTemplate इकाई बीन के बाहर ले जाना चाहता हूं। मुझे लगता है कि NextInvoiceDate की गणना करने के लिए एक सेवा होनी चाहिए। लेकिन फिर InvoiceTemplate के अंदर से इस सेवा को आमंत्रित करने का अधिकार है?

+0

क्या यह एक इकाई-बीन (ईजेबी 2.0) या जेपीए इकाई है? – Bozho

+0

@ बोझो, यह एक जेपीए इकाई है – mgamer

उत्तर

3

यह ऐसी गंध नहीं है - यह डोमेन संचालित डिजाइन की ओर दुबला है।

मैं स्वचालित रूप से ऐसा करने के लिए किसी भी तरह से के बारे में पता नहीं है, लेकिन आप कर सकते हैं:

    सत्र सेम में
  • जहाँ आप अपने Invoicetemplate संभाल, सहायक सेम तर्क अगले तिथि की गणना नहीं है इंजेक्षन
  • इकाई पर एक सेटर के साथ एक निजी क्षेत्र बनाते हैं, और इससे पहले कि आप यह entity.setNextDateHelper(..)

फोन उपयोग करते समय भी है कि क्या AspectJ जांच कर सकते हैं कुछ EJB विकल्प प्रदान नहीं करता है, ताकि आप टी इंजेक्षन कर सकते हैं शुरू जब भी किसी दिए गए प्रकार की एक इकाई (InvoiceTemplate) बनाई जाती है तो वह ईजेबी बनाता है। AspectJ वसंत सेम के साथ ऐसा काम करता है, मुझे नहीं पता कि ईजेबी के लिए ऐसे विकल्प हैं या नहीं।

+0

अच्छी तरह से कहा। केवल पहली वाक्य के लिए +1। –

0

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

+0

परीक्षण इस तरह से नुकसान पहुंचाएगा। – mgamer

+1

ठीक है, क्या होगा यदि यह _Does_ को डीबी इंटरैक्शन और ऑब्जेक्ट सहयोग की आवश्यकता है? – musiKk

+1

यदि ऐसा होता है, तो आप शायद एक सेवा या ईजेबी पर वापस आ गए हैं, ताकि आप लेनदेन में भाग ले सकें या संदर्भ साझा कर सकें। जो आपको समय के मुद्दों, समन्वय और निर्भरताओं पर वापस लाता है। – TMN

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