EJB世界的新手…… EJB客户端中的空指针exception
我正在学习EJB,我正在尝试执行EJB In Action书中给出的Helloworld示例。
我的app服务器是JBoss,我在正确的目录中为bean类和接口创建了Jar文件(我可以在JMX控制台中看到EJB)。
现在我使用EJB注释创建了一个简单的客户端,但是我得到了一个NullPointerException。
这是我的客户端代码。
客户代码:
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注释创建了一个简单的客户端,但是我得到了一个NullPointerException。
您的客户端代码看起来像应用程序客户端,并且此类客户端应该部署在应用程序服务器上,然后在应用程序客户端容器 (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应该都可以工作。