2011-10-25 15 views
7

में वसंत संदर्भ लोड करें निम्न स्थिति है:ईजेबी आधारित आवेदन

मेरे पास एक व्यापार परत है, यह एक ईजेबी परियोजना है। वास्तव में, केवल एक ईजेबी बनाया गया है। यह ईजेबी अन्य कक्षाओं में सेवा कक्षाओं का पर्दाफाश करने के लिए ज़िम्मेदार है, जो ईजेबी को बुलाती है। मैं इस परत में वसंत (डी सुविधा का उपयोग करने के लिए) शुरू करना चाहता हूँ।

मेरी चिंता यह है कि इस व्यापार परत में वसंत संदर्भ लोड करने का सबसे अच्छा तरीका क्या है, ताकि जब भी ईजेबी को बुलाया जाता है, वसंत संदर्भ बार-बार लोड नहीं होता है?

(एक वेब परियोजना में, वहाँ एक फायदा नहीं बल्कि contextLoaderListener में वसंत संदर्भ कॉन्फ़िगर करने के लिए है, और यह लोड हो जाता है एक बार केवल जब आवेदन शुरू कर दिया जाता है)

मैं एक ही परत क्योंकि में वसंत सहित के बारे में सोचा है :

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

कृपया मुझे ईजेबी परियोजना में वसंत संदर्भ लोड करने के लिए सबसे अच्छा तरीका सुझाने में मदद करें। मैं यह भी जानना चाहता हूं कि अगर कोई विकल्प है तो मैं ऐप सर्वर में लोड कर सकता हूं (मैं वेब क्षेत्र ऐप सर्वर का उपयोग कर रहा हूं)।

धन्यवाद और सादर,

Jitendriya डैश

+0

क्या ईजेबी 3.1 का अपना डिस्पेंसेंसी इंजेक्शन ढांचा नहीं है, और सीडीआई बेहतर एकीकृत किया जाएगा, मुझे केवल हल्के वजन की आवश्यकता है? – Ralph

उत्तर

0

EJB एक सिंगलटन (@Singleton) के रूप में किया गया अंकन। और वसंत संदर्भ को इस बीन में एक चर में संग्रहीत करना, इसे एक बार बनाया जाने के बाद, ताकि आप एक ही संदर्भ को बार-बार वापस कर सकें।

2

वसंत को आपके आवेदन के हिस्से के रूप में सामान्य तरीके से कॉन्फ़िगर किया जाना चाहिए जिसे आपने हमेशा सेट अप किया है। फिर आपको ईजेबी परत से वसंत बीन्स तक पहुंचने की आवश्यकता है।

@Component 
public class SpringApplicationContext implements ApplicationContextAware { 
    private static ApplicationContext CONTEXT; 
    public void setApplicationContext(ApplicationContext context) throws BeansException { 
     CONTEXT = context; 
    } 
    public static Object getBean(String beanName) { 
     return CONTEXT.getBean(beanName); 
    } 
} 

फिर, विरासत app से प्रश्न में सेम कॉल करने के लिए: के रूप में इस का उपयोग (from this post अनुकूलित) के लिए, एक वसंत सेम बनाने

SomeService someService = (SomeService)SpringApplicationContext.getBean("someServiceImpl"); 

स्प्रिंग संदर्भ एक बार आरंभ नहीं हो जाता है, और अपने ईजेबी परत इच्छा पर पहुंच सकता है।

2

ईजेबी 3 के लिए, वसंत EJB3 Injection Interceptor का उपयोग करने की सिफारिश करता है। असल में आप ContextSingletonBeanFactoryLocator का उपयोग करके अपने स्प्रिंग संदर्भ को निर्दिष्ट करते हैं, जिसमें आपके स्प्रिंग संदर्भ को आपके क्लासपाथ में एक beanContextRef.xml में बनाना शामिल है। शायद आपके ईएआर के हिस्से के रूप में। SpringBeanAutowiringInterceptor आपके बीजे को आपके ईजेबी में इंजेक्ट करता है।

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