2011-07-25 4 views
4

私は以下のような2種類のインタフェースにさらさEJB Beanを持っている:ローカルインタフェースは、私のWebアプリケーションのためのものであり、リモートインタフェースはので、私のアプリケーションクライアントは、以下のように見える私のアプリのクライアントのためにEJBが@Remoteインタフェースを公開していても、リモートインタフェースではなくEJB Beanを注入すると、リモート呼び出しまたはローカル呼び出しがトリガされますか?

@Stateless 
public class CoreMainEJB implements CoreMainEJBRemote, CoreMainEJBLocal { 
    //... 
} 

です。この場合、リモートメソッド呼び出しが発生します

public class Main { 
    @EJB 
    private static CoreMainEJBRemote coreEJBRemote; 

    public static void main(String[] args) { 
     coreEJBRemote.process(args[0]);  
    } 
} 

私のWebアプリケーションから、私は以下のように呼び出します。ローカルメソッド呼び出しは、だからここにこの場合

@ManagedBean 
@RequestScoped 
public class DisplayInbound { 
    @EJB 
    private CoreMainEJBLocal coreMainEJBLocal; 

    public void processPackages() { 
     coreMainEJBLocal.process(...); 
    } 
} 

で起こっているEJBだけ@Remoteインターフェースを公開した場合、私の質問、ですが、あなたのWebアプリで、あなたの代わりにそのリモートインターフェースの直接EJB Beanを注入し、意志これはリモート呼び出しまたはローカル呼び出しをトリガーしますか?たとえば

@Stateless 
public class CoreMainEJB implements CoreMainEJBRemote{ 
    //... 
} 

やウェブアプリでは、私はこの

@EJB 
private CoreMainEJB coreMainEJB; 

public void processPackages() { 
    coreMainEJB.process(...); //Is this local or remote invocation here? 
} 

答えて

5

最後の例は、単に機能しません。 CoreMainEJBは既にリモートインターフェイスを実装しているので、コンテナはではなく、はNo-Interfaceビューを作成します。これはまさに@LocalBeanが意図される場合です。

」の質問に答えるには、ここにローカルまたはリモートの呼び出しがありますか? ':それはどちらでもありません。コンテナは展開段階で何も注入せずにバーフアウトする可能性があります。

あなたのようにあなたのBeanを定義する場合:

@Stateless 
@LocalBean 
public class CoreMainEJB implements CoreMainEJBRemote{ 
    //... 
} 

その後、地元のセマンティクスがここに適用されます。

@EJB 
private CoreMainEJB coreMainEJB; 

public void processPackages() { 
    coreMainEJB.process(...); // Local semantics 
} 

を(上記のコードの断片を想定しCoreMainEJBがで定義されている場所と同じアプリケーションでありますコース)

+1

申し訳ありません私は別のプロジェクトに忙しかったので少し遅刻しました。ありがとう、ありがとうございます。 –

4

を行う無インタフェースの呼び出しは、ローカルの呼び出しです。

+0

hehe ..これは私が聞きたいものです。 Thanks –

+0

@Harry Pham - あなたは歓迎です:) –

+1

これは、実際には、EJB 3.1に '@ LocalBean'アノテーションを追加した理由です。 – TC1

関連する問題