【问题标题】:Remote EJB Client Eclipse远程 EJB 客户端 Eclipse
【发布时间】:2013-09-01 22:03:30
【问题描述】:

我一直在尝试学习 Java EE,但我始终无法运行 EJB 示例。 Oracle 的指南使用 netbeans,但我必须学习如何在 Eclipse 中进行操作。书籍也没有任何帮助或 youtube 视频。

我可以毫无问题地运行 servlet、jsp、jsf,但我总是遇到 EJB 问题。我错过了什么?

我认为问题在于 Eclipse 中的配置。 我在 Eclipse 中的项目结构如下:

HelloWorld.java 文件的代码:

package helloworld.ejb;
import javax.ejb.Remote;

@Remote
public interface HelloWorld {
    public String outputHelloWorld();
}

HelloWorldBean.java 文件的代码

package helloworld.ejb;
import javax.ejb.Stateless;

@Stateless
public class HelloWorldBean implements HelloWorld {
    public String outputHelloWorld() {
    return "Hello World!";
    }
}

HelloWorldClient.java 的代码

package helloworldprojectclient;

import javax.ejb.EJB;
import helloworld.ejb.HelloWorld;

public class HelloWorldClient {
@EJB
private static HelloWorld helloWorld;
public static void main (String[] args) {
    System.out.println(helloWorld.outputHelloWorld());
    }
}

我使用 Glassfish 4.0 作为服务器。 HelloWorldProject 是一个“EJB 项目”,而“helloworldprojectclient”是一个常规 Java 项目,我已将 javaee.jar(来自 glassfish 目录)添加到构建路径中。

当我尝试运行 HelloWorldClient.java 时出现以下异常:

Exception in thread "main" java.lang.NullPointerException at helloworldprojectclient.HelloWorldClient.main(HelloWorldClient.java:10) 这是以下行: System.out.println(helloWorld.outputHelloWorld());

有什么问题?我提到我是 EJB 的初学者。谢谢!

【问题讨论】:

    标签: eclipse jakarta-ee glassfish ejb client


    【解决方案1】:

    以防万一您仍然对此感兴趣:

    第一个版本不起作用,因为您试图在一个不受Container 管理的类中注入一个ejb 引用。执行 main 方法时,@EJB 注解被忽略,因此永远不会初始化 'HelloWorld' 类成员。

    为了在不修改的情况下执行此代码,您需要执行Application Client Container 中的类,该类将注入 ejb 引用。

    您的第二个版本运行,因为您不是委托给 Container,而是通过 JNDI 服务获取 ejb 引用。这是容器注入不可用时的建议方式。

    【讨论】:

      【解决方案2】:

      我已经成功了。我不知道这是否正确,但在“helloworldprojectclient”中,如果您设置构建路径的“项目”选项卡并添加 HelloWorldProject,然后在“库”选项卡上添加 appserv-rt.jar 和 javaee.jar(均来自 glassfish lib 文件夹) 那么客户端应该是这样的:

      package helloworldprojectclient;
      import javax.naming.InitialContext;
      import helloworld.ejb.HelloWorld;
      
      public class HelloWorldClient {
      
      public static void main(String[] args) {
          try {
              InitialContext ic = new InitialContext();
              HelloWorld thing = (HelloWorld) ic.lookup("helloworld.ejb.HelloWorld");
              System.out.println("It seems it runs: " + thing.outputHelloWorld());
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2015-04-26
        • 1970-01-01
        • 2011-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        • 2013-04-30
        • 1970-01-01
        相关资源
        最近更新 更多