2012-01-29 13 views
7

अभी तक, मैं लगभग हमेशा इंटरफ़ेस ईजेबी के साथ काम करता हूं और @ लोकल एनोटेशन की आवश्यकता के बारे में थोड़ा सा समझता हूं।ईजेबी 3.1। क्या @ लोकल एनोटेशन की आवश्यकता है?

public interface MyBeanIntf { void doStuff(); } 

@Stateless 
public class MyBean implements MyBeanIntf { public void doStuff(){ } } 

MyBeanIntf@Local के रूप में चिह्नित किया जाना चाहिए: इस उदाहरण पर विचार? मैं, कि से कोई लाभ नहीं दिख रहा है क्योंकि यहां तक ​​कि जब मैं @Local के रूप में उस पर टिप्पणी नहीं करते हैं, मैं अभी भी डि उपयोग कर सकते हैं ठीक से यूआई नियंत्रक को इसकी सुई देने:

@Named 
@SessionScoped 
public class TestController implements Serializable { 

    // injection works perfectly, even when MyBeanIntf is not marked as @Local 
    @Inject 
    private MyBeanIntf myBean; 

    // or even like this: 
    // @EJB 
    // private MyBeanIntf myBean; 

} 

की यह अधिक जटिल बना डालते हैं:

public interface MyBeanIntf { void doStuff(); } 
public class MySuperBean implements MyBeanIntf { public void doStuff() { } } 

@Stateless 
public class MyBean extends MySuperBean { } 

MyBean अब एक वैध Local EJB सेम माना जाता है? मुझे कुछ संदेह हैं क्योंकि यह अप्रत्यक्ष रूप से इंटरफेस लागू करता है।

उत्तर

8

यदि आपका ईजेबी कुछ इंटरफ़ेस लागू करता है लेकिन आप निर्दिष्ट नहीं करते हैं (न तो ईजेबी और न ही इंटरफ़ेस पर) जो इंटरफ़ेस है (@Remote, @Local) यह माना जाता है कि यह एक @ लॉकल है।

इसलिए आपके कोड:

public interface MyBeanIntf { void doStuff(); } 

@Stateless 
public class MyBean implements MyBeanIntf { public void doStuff(){ } } 

शब्दार्थ निम्न के समान होता है:

@Local 
public interface MyBeanIntf { void doStuff(); } 

@Stateless 
public class MyBean implements MyBeanIntf { public void doStuff(){ } } 

यह आपके प्रश्न के दूसरे भाग की बात आती है, मुझे लगता है कि खंड 4.9.2.1 सत्र बीन ईजेबी 3.1 एफआर स्पेक से सुपरक्लास आपके लिए दिलचस्प होगा।

@Stateless 
public class A implements Foo { ... } 

@Stateless 
public class B extends A implements Bar { ... } 

फू और बार मान लिया जाये कि स्थानीय व्यापार इंटरफेस हैं: मेरी समझ से (इसलिए यह सही नहीं हो सकता है), यह है कि अपने सेम निम्नलिखित अंश की वजह से एक वैध स्थानीय इंटरफ़ेस उजागर के रूप में नहीं माना जाना चाहिए लगता है और संबंधित तैनाती वर्णनकर्ता नहीं है, सत्र बीन ए स्थानीय स्थानीय व्यापार इंटरफ़ेस फू और सत्र बीन बी स्थानीय व्यापार का खुलासा करता है इंटरफ़ेस बार, लेकिन Foo नहीं।

सत्र बीन बी को उस इंटरफ़ेस के लागू होने के लिए के अपने दृश्य में फू को स्पष्ट रूप से शामिल करने की आवश्यकता होगी।

अद्यतन:

कल्पना से एक और अंश एक अतिरिक्त के रूप में:

एक सत्र सेम वर्ग सुपर-क्लास कि खुद को सत्र सेम वर्ग हैं करने के लिए अनुमति दी है। हालांकि, इस मामले के लिए एनोटेशन या तैनाती डिस्क्रिप्टर के प्रसंस्करण पर लागू होने वाले कोई विशेष नियम नहीं हैं। किसी विशेष सत्र बीन क्लास को संसाधित करने के प्रयोजनों के लिए, सभी सुपरक्लास प्रोसेसिंग पर निर्भर करता है चाहे सुपरक्लास स्वयं सत्र बीन कक्षाएं हों या नहीं।

+0

उत्तर के लिए धन्यवाद। विनिर्देश के लिंक के लिए, मुझे अभी भी कुछ संदेह हैं। यह सुपरक्लास को स्पष्ट रूप से चर्चा करता है, जो स्वयं सत्र बीन्स हैं। लेकिन क्या होगा यदि वे 'स्टेटलेस' या 'स्टेटफुल' एनोटेशन के बिना सिर्फ अमूर्त वर्ग हैं? – jFrenetic

+0

निश्चित रूप से, मुझे इसके बारे में 100% में यकीन नहीं है, लेकिन संपादित पोस्ट पर एक नज़र डालें - शायद यह मदद करेगा। –

+1

जोर के लिए धन्यवाद। मैंने खुद को उस भाग में पढ़ा, लेकिन किसी भी तरह से इसे याद किया। – jFrenetic

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