RPCで書くGWTクライアントモジュールからEJBリモートインターフェースメソッドにアクセスすることは可能ですか? gwt アプリケーションは Tomcat を使用するサーバー上にあり、EJB は Jboss サーバーにデプロイされます。可能であれば、サンプルコードはどこにありますか?
1 に答える
あなたが提供したチュートリアルは問題ないように見えます。これはコマンド ライン アプリ用ですが、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. 最後に、クラスパスにリモート インターフェースも必要です。
それが役立つことを願っています!