一个项目中的依赖注入

时间:2015-12-06 13:41:23

标签: java netbeans ejb ejb-3.0

我必须创建带有接口(IGraphRemote),sessionbean(Graph)和客户端类(AppClient)的项目

我尝试使用一个方法注册(int hwork,String album)准备简单的项目 - 将我的作业编号,专辑作为我的专辑的编号,但它不起作用并返回错误:java.lang.NullPointerException,所以没有建立联系。我该如何解决这个问题?

我的档案: IGraphRemote

public interface IGraphRemote {
    public boolean register(int hwork, String album);

}

图形

@Remote
public class Graph implements IGraphRemote{
   public boolean register(int hwork, String album) {      
       return (hwork == 6
                && album.equals("119962"));
    }  
}

和AppClient

public class AppClient {

    @EJB
    private static IGraphRemote gremote;

    public static void main(String[] args) {

        AppClient ap = new AppClient();             
        System.out.println(ap.gremote.register(6, "119962"));
    }
}

这是我的项目 project structure

错误:

Exception in thread "main" java.lang.NullPointerException
    at AppClient.main(AppClient.java:22)
Java Result: 1

2 个答案:

答案 0 :(得分:1)

从您的代码和堆栈跟踪中可以明显看出,您尝试使用Web应用程序中的main方法运行标准j2se应用程序,那么除非有一些注入,否则您希望如何进行依赖注入其他代码创建ejb实例并将其注入ejb引用中。 EJB是一个J2EE组件,它不能在标准的Java应用程序中创建,您需要一个带有命名服务的ejb容器来管理EJB生命周期。您可以通过连接命名服务并查找bean来创建标准的j2se客户端,但您的EJB必须首先部署在ejb容器中,例如TomEE,Glassfish,websphere等。

答案 1 :(得分:0)

首先,您的EJB bean不能是静态的,在这里描述: Injecting a static EJB, nonsense?

其次,如果要注入EJB bean,则应用程序必须在EJB容器中运行,如Glassfish或JBoss。如果您像简单的Java SE应用程序一样运行您的应用程序,那么除非您自己初始化,否则IGraphRemote gremote始终为null