2

RPCで書くGWTクライアントモジュールからEJBリモートインターフェースメソッドにアクセスすることは可能ですか? gwt アプリケーションは Tomcat を使用するサーバー上にあり、EJB は Jboss サーバーにデプロイされます。可能であれば、サンプルコードはどこにありますか?

4

1 に答える 1

3

あなたが提供したチュートリアルは問題ないように見えます。これはコマンド ライン アプリ用ですが、Tomcat にデプロイされたアプリケーションでも同じ概念が機能するはずです。どのような問題が見つかりましたか?

ここでは、より単純な例を示します。JBoss にデプロイされたこの単純なインターフェースを持つ EJB があるとします。

package ejb.example;
import javax.ejb.Remote;
@Remote
public interface Example {
    public String hello (String nom);
}

EJB にリモートでアクセスするためのコードは、次のようになります。

// Simple EJB Client example
package ejbclient.example
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import ejb.example.Example;   // Need to import the remote interface of the bean
public class ClientEJB {
   public static void main(String[] args) {
      try {
         // Set the properties to JBoss access
         Properties environment = new Properties();
         environment.put(Context.INITIAL_CONTEXT_FACTORY,      
                              "org.jnp.interfaces.NamingContextFactory");
         environment.put(Context.PROVIDER_URL,"yourjboserver.com:1099" );
         InitialContext context = new InitialContext(environment);

         // Once the proper context is set, we can obtain the dynamic proxy 
         Example accessEJB = (Example)
                                     context.lookup("ExampleBean/remote");
         // And finally we're done! We can access the EJB as if it was a regular object
         String result = accessEJB.hello("Kate"));
      } catch (NamingException e) {
         e.printStackTrace();
      }
  }
}

留意事項:

A. チュートリアルで述べたように、ソース コードでコンテキスト プロパティをハードコードする代わりに、次のように jndi.properties ファイルで定義できます。

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=yourJBossServer.com:JBossJNPPort

このファイルはクラスパスに配置する必要があるため、コードでは次のように呼び出すだけです。

InitialContext context = new InitialContext();

この解決策が好まれ、より洗練されています (クライアントを再コンパイルせずに値を変更できます)。

B. context.lookup("ExampleBean/remote") ステートメントに注意してください。デフォルトでは、JBoss はインターフェースの JNDI をクラス Bean (実装) の名前として接尾辞「/remote」または「/local」を付けて割り当てます。インターフェイスの種類によって異なります。これは、jar ファイルに直接デプロイされた EJB 用です。EJB が EAR 内に配置されている場合、ear ファイルの名前がプレフィックスとして追加されます (たとえば、EJB-jar が myapp.ear という名前の ear 内にあるとします)。 「myapp/ExampleBean/remote」を参照する必要があります)。もちろん、EJB 内の JNDI 名を変更した可能性があります (アノテーションを使用するか、デプロイメント記述子を使用して)。その場合は、これらの名前を使用する必要があります。

C. 一方、チュートリアルにもリストされている JBoss クライアント ライブラリをクラスパスに含める必要があります (war の wEB-INF/lib フォルダに配置できます)。

D. 最後に、クラスパスにリモート インターフェースも必要です。

それが役立つことを願っています!

于 2012-11-14T20:05:57.393 に答える