gwt - 远程调用ejb

标签 gwt tomcat jboss ejb gwt-rpc

是否可以从使用 RPC 编写的 GWT 客户端模块访问 EJB 远程接口(interface)方法? gwt 应用程序位于带有 Tomcat 的服务器上,EJB 部署在 Jboss 服务器中。如果可能的话,我在哪里可以找到示例代码?

最佳答案

您提供的教程看起来不错,虽然它适用于命令行应用程序,但相同的概念应该适用于部署在 Tomcat 上的应用程序。您发现了哪些问题?

这里有一个更简单的示例:假设您在 JBoss 上部署了一个带有此简单接口(interface)的 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 将接口(interface)的 JNDI 指定为 Bean 类(实现)的名称,后缀为“/remote”或“/local”,具体取决于具体情况接口(interface)的类型。这是针对直接部署在 jar 文件中的 EJB,如果将 EJB 放置在 EAR 中,它会添加ear 文件的名称作为前缀(例如,您将 EJB-jar 放在名为 myapp.ear 的耳朵中,您的名称是应该查找的是:“myapp/ExampleBean/remote”)。当然,您可能已经更改了 EJB 中的 JNDI 名称(使用注释或使用其部署描述符),在这种情况下,您必须使用这些名称。

C.另一方面,您还需要在类路径中拥有本教程中列出的 JBoss 客户端库(您可以将它们放在 war 的 wEB-INF/lib 文件夹中)。

D.最后,您还需要类路径中的远程接口(interface)。

希望对您有帮助!

关于gwt - 远程调用ejb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13380465/

相关文章:

java - 如何将 Class[] 和 Object[] 传递给 gwt 服务?

java - 如何从客户端简单地将对象添加到 hibernate 中的集合

适用于移动设备的 GWT 方法

java - Tomcat 中的 Http Session 生命周期

tomcat - 为 Grails 应用程序设置家庭网络服务器

java - JavaEE:在请求/事务结束时执行任务

java - 从客户端下载生成的pdf

java.security.InvalidKeyException : Wrong algorithm: AES or Rijndael required Error

authentication - 使用简单的 Java 代码获取当前用户 Liferay

java - JBOSS react 慢