2

私の参照によると、 @Local セッション Bean は、Bean がデプロイされている同じ JVM (同じ JVM で実行されているクライアントとサーバー) でアクセスできます。

シンプルな統計のないローカル セッション Bean を実装し、GlassFish サーバーにデプロイしました (JBoss サーバーでも試しました)。

セッション Bean をルックアップするスタンドアロン クライアントですが、このローカル セッションにはアクセスできません。アクセス可能な@Remoteで同じことを試しました。

この時点で、サーバーとクライアントの両方が同じ/単一の JVM (自分のマシン上) で実行されます。

スタンドアロン クライアント アプリからローカル セッション Bean にアクセスすることは可能ですか? アクセスする特定の方法はありますか?

私のコードは次のとおりです。

Statless Local Session Bean

@Stateless
public class TicketBookingImpl implements TicketBookingLocal {    
   public String doBooking(String name) {
      return "Ticket Booked for " + name;
   }
}

ルックアップ コード

public static void main(String[] args) {
    try {
        Properties props = new Properties();
        props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
        props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
        props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");    
        props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
        props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
        final Context context = new InitialContext(props);
        System.out.println("Doing lookup");
        TicketBooking ticketBooking = (TicketBooking) context.lookup("java:global/ejb-work-1/TicketBookingImpl");
4

1 に答える 1

1

残念ながら、同じデプロイメント ユニット (通常は ear) でのみローカル インターフェイスを使用できます。

次の 2 つの場合に、リモート インターフェイスを使用する必要があります。

  • クライアントが同じデプロイメント ユニットにありません
  • クラスタ環境で

ローカル/リモート インターフェイスの使用法に関する詳細な推奨事項については、このリンクを確認してください: Local vs. Remote Interfaces in EJB (EJB3)

于 2013-03-24T20:18:15.800 に答える