2011-11-03 16 views
7

में ईजेबी विधि के एसिंक इनवोकेशन के परिणामस्वरूप मैं यह समझने के लिए संघर्ष कर रहा हूं कि मेरे ईजेबी में एक @ एसिंक्रोनस विधि वास्तव में असीमित रूप से क्यों नहीं आ रही है। मैं एक जेएसएफ 2 प्रोजेक्ट में सीडीआई (बीन्स.एक्सएमएल के साथ) का उपयोग कर जेबॉस एएस 7 पर चल रहा हूं। मेवेन द्वारा उत्पादित सरल .war पैकेजिंग।@ एसिंक्रोनस के परिणामस्वरूप जेबीएसएसएएस 7

ईजेबी जेएसएफ 2 प्रबंधित बीन्स के साथ एक .war में पैक किया गया है जो इसके साथ बातचीत करता है। यह एक साधारण @ स्टेटलेस ईजेबी है। इसका उपयोग इंजेक्शन करके (इंजेक्ट के माध्यम से) एक जेएसएफ 2 प्रबंधित बीन में किया जाता है जो इसकी @ एसिंक्रोनस विधि का आह्वान करता है।

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

@Asynchronous केवल @Remote सेम के लिए समर्थित है? यदि हां, तो क्या यह .war पैकेजिंग के भीतर काम कर सकता है या क्या मुझे यह एक सुविधा प्राप्त करने के लिए ईएआरबी जार को ईएआर में पैकेज करना है? उदाहरण के लिये

सरलीकृत कोड, एक .war में एक ही पैकेज में प्रत्येक वर्ग के साथ:

public interface SomeEJB { 
    public Future<Void> doSomething(); 
} 

@Stateless 
@Local(SomeEJB.class) 
public class SomeEJBImpl implements SomeEJB { 

    @Asynchronous 
    @Override 
    public Future<Void> doSomething() { 
    // Spend a while doing work 
    // then: 
    return new AsyncResult<Void>(null); 
    } 

} 

@Named 
@RequestScoped 
public class JSFBean { 

    @Inject private transient SomeEJB someEJB; 
    private Future<Void> progress; 

    // Called from JSF2, starts work and re-displays page 
    public String startWorkAction() { 
    // This call SHOULD return a Future immediately. Instead it blocks 
    // until doWork() completes. 
    progress = someEJB.doWork(); 
    } 

    public Boolean isDone() { 
    return progress != null && progress.isDone(); 
    } 

} 
+0

यह दिखने लग रहा है कि @ एसिंक्रोनस जेबॉस एएस 7 (7.0.2 के रूप में) में लागू नहीं किया गया है - फिर भी, जावा ईई 6 कार्यान्वयन अभी भी छोटी हैं और कल्पना के रिलीज के बाद अधूरे साल हैं। आह। चेतावनी जारी करना अच्छा होगा या कुछ भी सशक्त रूप से असफल नहीं होगा। –

+0

आप AS 7.0.2 में स्टैंडअलोन-पूर्वावलोकन कॉन्फ़िगरेशन के साथ कुछ ऑफ-बाय-डिफ़ॉल्ट EJB3.1 सुविधाओं को सक्षम कर सकते हैं। इस प्रकार से जुड़ें: "bin/standalone.sh --server-config = standalone-preview.xml" –

उत्तर

9

JBoss 7.0.2 के रूप में डिफ़ॉल्ट रूप से @Asynchronous समर्थन नहीं करता। आपको इसे चालू करना होगा। यदि यह चालू नहीं है तो कोई चेतावनी या त्रुटि संदेश नहीं है, एसिंक्रोनस विधियों को सिंक्रनाइज़ तरीके से निष्पादित किया जाता है।

हाँ, यह उपयोगकर्ता के अनुकूल है।

इस माना जाता है कि समाप्त हो गया और जारी किया * उत्पाद में इन सुविधाओं को सक्षम करने के लिए, आप "स्टैंडअलोन-preview.xml" के साथ 7.0.2 के रूप में JBoss चलाना चाहिए, जैसे:

bin/standalone.sh --server-config=standalone-preview.xml 

या के रूप में 7.1 (बीटा में) या बाद में:

bin/standalone.sh --server-config=standalone-full.xml 

... जो अतुल्यकालिक तरीकों लागू किया जा करने के लिए हो जाता है ... अतुल्यकालिक रूप से।

  • (बेशक के रूप में 7 जावा ईई 6 पूर्ण प्रोफ़ाइल अनुपालन का दावा नहीं है, लेकिन एक चेतावनी अच्छा होगा! या ज्ञात मुद्दे/छेद! कुछ भी लेकिन चुप अप्रलेखित विफलता पर कुछ प्रलेखन ...)

अद्यतन: गार्सिया-जे जे द्वारा बताया गया है, को दूर करने lite=truestandalone.xml से भी async EJBs काम करना आरंभ कर देगा।

+0

ध्यान दें कि AS 7.1 "standalone-preview.xml" में अब "स्टैंडअलोन-पूर्ण.एक्सएमएल" –

+0

बिना एसिंक ईजेबी को कैसे सक्षम करें स्टैंडअलोन-पूर्वावलोकन का उपयोग कर? धन्यवाद। –

+0

@ garcia-jj इसे अब जेबॉस एएस 7 के नए संस्करणों में स्टैंडअलोन-पूर्ण.एक्सएमएल कहा जाता है, लेकिन बिंदु एक जैसा है: यदि आप एसिंक्रोनस ईजेबी का उपयोग करना चाहते हैं तो आपको सर्वर को एसिंक्रोनस ईजेबी का समर्थन करना होगा। यदि आपको यह पसंद नहीं है, तो जेबॉस से शिकायत करें, क्योंकि ऐसा लगता है कि आपके पास अभी एकमात्र विकल्प है। –

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