2009-05-13 10 views
5

मुझे किसी एप्लिकेशन क्लाइंट से एक स्टेटस सत्र बीन (एसएफएसबी) तक पहुंचने में कुछ परेशानी हो रही है। मैं जेबॉस 5.0.1 का उपयोग कर रहा हूं। एप्लिकेशन क्लाइंट और ईजेबी दोनों ईएआर में पैक किए जाते हैं जो तैनात होते हैं और मेरे पास अन्य एप्लिकेशन क्लाइंट हैं जो बिना किसी समस्या के काम करते हैं। अब तक, मैंने केवल स्टेटलेस सत्र बीन्स (एसएलएसबी) का उपयोग किया है, लेकिन जहां तक ​​मैं इसे अनदेखा करता हूं, एसएलएसबी और एसएफएसबी के बीच अंतर इस बात को प्रभावित नहीं करते हैं कि उन्हें एप्लिकेशन क्लाइंट से कैसे पहुंचा जा सकता है।ईजेबी 3: किसी एप्लिकेशन क्लाइंट से एक स्टेटस सत्र बीन तक पहुंच

वर्गों/इंटरफेस की संरचना:

@Local public interface A {...} 

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

@Remote public interface B {...} 

@Stateful public class BBean implements B { 
    @EJB private A anInstanceOfA; 

    @PostConstruct private void init() { 
     this.anInstanceOfA.someMethod(); 
    } 
} 

आवेदन ग्राहक "appclient-लांचर" के माध्यम से चलाया जाता है "How to use an application client in JBoss 5" में वर्णित है। "बीबीन" की तलाश करना ठीक काम करता है जब तक कि (स्थानीय) ABNan पर कुछ विधि() को init() के निष्पादन के दौरान बुलाया जाता है। उस कॉल के दौरान, कंटेनर एक अमान्यस्टेट अपवाद ("स्थानीय कॉल: सुरक्षा संदर्भ शून्य है") (रूट कारण के रूप में) फेंकता है। जब मैं राज्यहीन बीन को एक स्टेटलेस बीन में बदलता हूं, तो सब कुछ ठीक काम करता है (बेशक, राज्य को संरक्षित नहीं किया जाता है)। दिलचस्प बात यह है कि, मैं एक वेब एप्लिकेशन (एक जेएसएफ प्रबंधित-बीन में) से ठीक उसी एसएफएसबी का उपयोग कर सकता हूं।

क्या मैं कुछ गलत कर रहा हूं? मुझे एप्लिकेशन क्लाइंट से एसएफएसबी का उपयोग कैसे करना चाहिए?

मुझे अब तक इस विशेष समस्या के बारे में कुछ भी उपयोगी नहीं मिला है। अपवाद का उल्लेख [#JBAS-4317] Security Context over the invocation में इसी संदर्भ में किया गया है, लेकिन यह मानते हुए कि इसे पूरा किया गया है और जेबॉस 5.0.0.बीटा 3 में तय किया गया है, ऐसा लगता है कि यह एक ही समस्या नहीं है।

वेब अनुप्रयोग है कि यह भी पैक किया जाता है:

उत्तर

1

हालांकि मैं अभी भी पता करने के लिए क्यों अपने मूल सेटअप यह राज्यविहीन सत्र सेम के लिए पूरी तरह से काम करता है लेकिन स्टेटफुल सत्र सेम के लिए नहीं करना चाहते हैं, यहाँ समाधान मैंने पाया है ईएआर में जेएएएस के माध्यम से इसका प्रमाणीकरण करता है। में

<application-policy name="My-SD"> 
    <authentication> 
     <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required"> 
      <module-option name="unauthenticatedIdentity">guest</module-option> 
      <module-option name="dsJndiName">java:/myDS</module-option> 
      <module-option name="principalsQuery">SELECT PASSWORD FROM LOGIN WHERE LOGIN = ? AND STATUS > 0</module-option> 
      <module-option name="rolesQuery">SELECT ROLE, 'Roles' FROM USER_ROLE WHERE LOGIN = ?</module-option> 
     </login-module> 
    </authentication> 
</application-policy> 

मैं वेब आवेदन के jboss-web.xml में इस सुरक्षा डोमेन का इस्तेमाल किया है और साथ ही: इसके लिए मैं JBoss लॉगिन-config.xml में एक सुरक्षा डोमेन है, जो इस तरह दिखता है कॉन्फ़िगर किया है ईजेबी-प्रोजेक्ट की jboss.xml, भले ही मैं वास्तव में इसे केवल वेब-ऐप में उपयोग करता हूं (ईजेबी प्रमाणीकरण के बिना सुलभ हैं)।

एसएफएसबी तक पहुंचने में समस्या को हल करने के लिए, मुझे बस ईजेबी-प्रोजेक्ट में jboss.xml से अपना सुरक्षा डोमेन निकालना पड़ा। इसके बाद जेबॉस डिफ़ॉल्ट सुरक्षा डोमेन का उपयोग करता है जो सही काम करता है और मेरा एप्लिकेशन क्लाइंट अंततः एसएफएसबी का उपयोग और उपयोग कर सकता है।

0

कारण EJB 3.0 Core Specification, खंड 12.4 में पाया जा सकता है। वहां यह कहते हैं कि

जीवन चक्र कॉलबैक इंटरसेप्टर विधियों को एक अनिर्दिष्ट लेनदेन और सुरक्षा संदर्भ में शामिल किया जाता है।

hth,
- मार्टिन

+1

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

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