Gwt 远程调用ejb

Gwt 远程调用ejb,gwt,tomcat,jboss,ejb,gwt-rpc,Gwt,Tomcat,Jboss,Ejb,Gwt Rpc,是否可以使用RPC从GWT客户机模块写入访问EJB远程接口方法?gwt应用程序位于使用Tomcat的服务器上,EJB部署在Jboss服务器上。如果可能的话,我可以在哪里找到示例代码?您提供的教程看起来不错,尽管它是针对命令行应用程序的,但同样的概念也适用于部署在Tomcat上的应用程序。你发现它有什么问题 这里有一个更简单的示例:假设您在JBoss上部署了一个具有以下简单接口的EJB: package ejb.example; import javax.ejb.Remote; @Remote p

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

您提供的教程看起来不错,尽管它是针对命令行应用程序的,但同样的概念也适用于部署在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();
此解决方案更受欢迎且更优雅(它允许您在不重新编译客户端的情况下更改值)

注意context.lookup(“ExampleBean/remote”)语句:默认情况下,JBoss使用sufix“/remote”或“/local”将接口的JNDI指定为类Bean(实现)的名称,具体取决于接口的类型。这是针对直接部署在jar文件中的EJB,如果EJB放在EAR中,它会添加EAR文件的名称作为前缀(例如,您的EJB jar放在一个名为myapp.EAR的EAR中,您应该查找的名称是:“myapp/ExampleBean/remote”)。当然,您可能已经更改了EJB中的JNDI名称(使用anotations或使用其部署描述符),在这种情况下,您必须使用这些名称

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

最后,在类路径中还需要远程接口


我希望有帮助

(几乎)只要有时间和金钱,任何事情都是可能的-你尝试过什么?我尝试过用注释调用ejb,也尝试过使用这个链接,谢谢你的帮助。现在我有了这个错误:javax.naming.NameNotFoundException:Name[ejb:/…ejb//…HelloWorldBean!…helloworld.helloworld]未绑定在此上下文中。找不到[ejb:]。为什么?可能您向查找函数传递了错误的JNDI名称。检查EJB是否已使用您在JBoss中使用的名称注册。在部署EJB时,您可以在JBoss日志中看到JNDI名称。我不太清楚JNDI属性放在哪里我成功地完成了我发布的prevoius链接示例我现在想在gwt应用程序中复制它…这取决于您使用的客户端类型,如果客户端是war文件,则必须将jndi.properties文件放在WEB-INF/classes或WEB-INF/lib目录中;这两个目录都包含在war类路径中。