2012-11-22 14 views
7

में चल रहे अन्य अनुप्रयोगों के लिए स्थानीय ईजेबी का खुलासा करना मेरे पास एक मौजूदा प्रोजेक्ट है जिसे मुझे अलग-अलग कॉन्फ़िगर करने की आवश्यकता है। यह बिना किसी बड़े कोड परिवर्तन के होने की आवश्यकता है। मैं वास्तव में उम्मीद कर रहा हूं कि मैं इसे विन्यास के साथ ही कर सकता हूं। मैंने इस मुद्दे पर जो कुछ भी पा सकता हूं उसे पढ़ने में पिछले 2 से 3 दिन बिताए हैं। मैं ग्लासफ़िश क्लासलोडर्स को समझता हूं, और मेरे लिए क्या उपलब्ध है। ग्लासफ़िश 2.1 ईजेबी 3.0 उसी डोमेन/जेवीएम

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

मैंने दस्तावेज पढ़ा है जो कहता है कि यह संभव नहीं है। फिर मैंने यहां StackOverflow पर पोस्ट देखी हैं, और अन्य वेब पर यह कह रही है कि यह संभव है। लेकिन, मुझे वास्तविक समाधान नहीं मिल रहा है।

जांच के साथ, मुझे एहसास हुआ है कि अगर मैं ग्लासफ़िश जेएनडीआई ब्राउज़र का उपयोग करता हूं, तो @Local EJB खुद को jndi (लॉग के अनुसार कम से कम) पंजीकृत नहीं करता है, मैं इसे भी दिखाई नहीं देता। तो यह मुझे समझ में आता है, या तो यह संभव नहीं है, या ईजेबी परियोजना की तैनाती गलती है, और किसी भी तरह मुझे इसे बेनकाब करने की जरूरत है।

@Remote एक संभावना है, यदि यह संदर्भ द्वारा हो सकता है, और कोई प्रदर्शन ओवरहेड नहीं है। लेकिन @Local EJB पहुंच की अनुमति देने वाली पसंदीदा विधि वास्तव में अंतिम आवश्यकता है।

क्या किसी को पता है कि @Local EJB को किसी अन्य एप्लिकेशन में बेनकाब करने के लिए मुझे क्या करना होगा? या यह स्पष्ट रूप से संभव नहीं है?

मैं Glassfish 2.1 का उपयोग कर रहा EJB के साथ 3.0

Glassfish 2.1 EJB 3.1 संभाल कर सकते हैं अगर मैं यह करने के लिए ले जाने के लिए अगर यह इस क्षमता प्रदान की तैयार होगा, लेकिन मुझे शक है यह इतना आसान है।

कृपया सहायता करें। धन्यवाद।

मैं एक बक्षीस जोड़ रहा हूं। बक्षीस को पूरा करने के लिए, उसी डोमेन में 2 कान अनुप्रयोगों को चलाने की आवश्यकता होगी, जहां एयर में एक @ लोकाल ईजेबी होता है जिसका प्रयोग बीयर में भी किया जाता है।

+0

अतिरिक्त जानकारी: http://docs.oracle.com/cd/E18930_01/html/821-2418/beadh.html#beadl। यह ग्लासफ़िश 3.1 के लिए है लेकिन दस्तावेज 2.1 में एक ही चीज़ बताता है। मैं इसे काम करने के लिए नहीं मिल सकता है। – guyumu

+1

हो सकता है आप ऐसा करने के लिए आपकी प्रेरणा की व्याख्या करनी चाहिए, लेकिन जैसा कि आप पहले से ही उल्लेख किया है, वहाँ अन्य धागे यहाँ एक ही समस्या से निपटने कर रहे हैं, मैं सिर्फ jtahlborn जवाब से सहमत हैं: http://stackoverflow.com/questions/5681197/access -एक-स्थानीय सत्र बीन-से-एक और कान, (और ऐसा करने के लिए कोशिश नहीं) –

उत्तर

4

लिंक @ पीटर ने आपको लगभग अपनी समस्या हल की है। (link)

@ जेवियर की समस्या को हल करने के लिए एक चाल जो करने की आवश्यकता है, उसी संस्करण में दोनों कानों के लिए सामान्य .jar प्रदान करना है (उसी वर्ग लोडर द्वारा लोड किया गया)। यदि आप ऐसा करते हैं, तो क्लास कास्ट अपवाद फेंक दिया नहीं जाएगा और आप स्थानीय इंटरफेस के साथ ईजेबी का उपयोग करने में सक्षम होंगे।

ऐसा करने के लिए आपको सामान्य .jar को ग्लासफ़िश/डोमेन/डोमेन 1/lib फ़ोल्डर (विकल्प डोमेन 1 के साथ डोमेन नाम) में रखना होगा। इस तरह यह जार ग्लासफ़िश के साझा वर्ग लोडर द्वारा लोड किया जाएगा। ClientBean से

package com.example; 

JarShared 
- @Local class Server 

EarServer 
- EjbServer 
    - @Stateless class ServerBean implements Server 

EarClient 
- EjbClient 
    - @Stateless @LocalBean class ClientBean 

लुक:

मैं निम्नलिखित संरचना के साथ ग्रहण और Glassfish 3 के साथ एक त्वरित परीक्षण किया जाता

InitialContext ic = new InitialContext(); 
Server server = (Server) ic. 
    lookup("java:global/EarServer/EjbServer/ServerBean!com.example.Server"); 

मैं ClassCastException नहीं मिला और मैं ServerBean से नमूना विधि कह सकते हैं।

महत्वपूर्ण नोट:

  • दोनों EarServer और EarClient lib फ़ोल्डर में JarShared शामिल नहीं होना चाहिए, वे एक किन डोमेन lib फ़ोल्डर
  • इसे करने के लिए JarShared जोड़ने के बाद Glassfish पुनः आरंभ करने की याद में है पुनः उपयोग करना चाहिए।
  • बनाने के लिए दोनों EJB परियोजनाओं आप उनके निर्माण रास्तों को JarShared जोड़ना होगा संकलन है, लेकिन अधिक

आप सवाल है, तो कुछ भी नहीं है, एक टिप्पणी पोस्ट।

+0

हाय आप अपनी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। मुझे लगता है कि वे आपके द्वारा यहां उल्लेख की जाने वाली महत्वपूर्ण चीज़ डोमेन/lib फ़ोल्डर है। मुझे पहले लगता है, मैं डोमेन/lib/applibs फ़ोल्डर का उपयोग करने का प्रयास कर रहा था, लेकिन देख सकता हूं कि यह एक समस्या होगी। मैं आज इस समाधान का प्रयास करूंगा, और रिपोर्ट/वोट वापस :-) धन्यवाद! :) – guyumu

+0

मैं कुछ परीक्षण किया था, और अपनी पोस्ट फिर से पढ़ें :) मैं देख रहा हूँ कि आप का इस्तेमाल किया glassfish 3.1 :) मुझे लगता है कि मैं एक प्रवृत्ति उठा रहा हूँ कि यहाँ glassfish 3 इस के लिए समर्थन जोड़ा है, और मैं एक जंगली हंस का पीछा करने पर हूँ उन JNDI नाम के बारे में नियम GF2 के लिए विशिष्ट (GF3 भी उपयोग करता है - http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#SessionBeanGlobalJNDINameAssignment: glassfish 2.1 पर:/दुर्भाग्य से मैं ग्लासफिश 3. – guyumu

+0

चेक इसे बदल नहीं सकते उन्हें संगतता कारणों के लिए, मुझे लगता है) – MeTTeO

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