EJB世界的新手…… EJB客户端中的空指针exception

我正在学习EJB,我正在尝试执行EJB In Action书中给出的Helloworld示例。

我的app服务器是JBoss,我在正确的目录中为bean类和接口创建了Jar文件(我可以在JMX控制台中看到EJB)。

现在我使用EJB注释创建了一个简单的客户端,但是我得到了一个N​​ullPointerException。

这是我的客户端代码。

客户代码:

package com.client; import javax.ejb.EJB; import com.EJB.*; public class HelloWorldClient { @EJB private static HelloWorldInterface HelloBean; public static void main(String[] args) { HelloBean.SayHelloWorldInEJB(); } } 

Bean类

 package com.EJB; import javax.ejb.Stateless; @Stateless public class HelloWorldBean implements HelloWorldInterface { public void SayHelloWorldInEJB() { // TODO Auto-generated method stub System.out.println("Hello world from the world of EJB"); } } 

接口

 package com.EJB; import javax.ejb.Local;; @Local public interface HelloWorldInterface { public void SayHelloWorldInEJB(); } 

注意:我尝试将接口指定为Remote,但仍然无法正常工作。

到目前为止我做的步骤是为了达到这一点。 1)创建文件EJB文件2)制作build.xml并部署EJB。

我错过了任何配置文件???

现在我使用EJB注释创建了一个简单的客户端,但是我得到了一个N​​ullPointerException。

您的客户端代码看起来像应用程序客户端,并且此类客户端应该部署在应用程序服务器上,然后在应用程序客户端容器 (ACC)中执行,以便可以进行注入。 启动ACC需要特定于应用程序服务器的命令。

以下wiki解释了JBoss中ACC的使用(如何打包,部署和启动ACC): 如何在JBoss-5中使用应用程序客户端 。

如果您不想使用Application Client Container而只是通过java命令运行应用程序客户机类,则无法执行注入,您必须执行JNDI查找。

在这两种情况下,您都必须为bean提供并使用远程业务接口。

资源

  • 如何在JBoss-5中使用应用程序客户端
  • 在GlassFish Server上创建和运行应用程序客户端

相关问题

  • 应用程序客户端

您必须进行两项更改:

用JNDI查找替换@EJBdependency injection。 EJB 3中的POJO不支持dependency injection(尽管不了解EJB 3.1)

然后,接口必须是远程接口。 原因是,这里的客户端是一个独立的java程序 – 它将在不同于Web应用程序JVM的JVM中运行。

如果客户端是同一服务器中的servlet,则通过@EJB进行dependency injection并将接口作为@Local应该都可以工作。