打电话给ejb遥控器

时间:2012-11-14 14:13:24

标签: gwt tomcat jboss ejb gwt-rpc

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

1 个答案:

答案 0 :(得分: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();
      }
  }
}

要记住的事情:

一个。正如在教程中所说的,不是硬编码源代码中的上下文属性,而是可以在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(实现)的名称,其中包含sufix“/ remote”或“/ local”,具体取决于那种界面。这是针对EJB直接部署在jar文件中的,如果将EJB放在EAR中,它会将ear文件的名称添加为前缀(例如,你的EJB-jar在一个叫做myapp.ear的耳朵里面就是你的名字了应该查找:“myapp / ExampleBean / remote”)。当然,您可能已经更改了EJB中的JNDI名称(使用anotations或使用其部署描述符),在这种情况下,您将不得不使用这些名称。

℃。另一方面,您还需要在类路径中包含JBoss客户端库(也在教程中列出)(您可以将它们放在战争的wEB-INF / lib文件夹中)。

d。最后,您还需要在类路径中使用远程接口。

我希望它有所帮助!