一个项目中的依赖注入

Dependency Injection in one project

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

我尝试使用一种方法 register(int hwork, String album) 来准备简单的项目 - hwork 是我的作业编号,album 是我的相册编号,但它不起作用并且 returns 出现错误: 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"));
    }
}

这是我的项目

错误:

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

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

其次,如果您想注入 EJB bean,您的应用程序必须 运行 在 EJB 容器中,例如 Glassfish 或 JBoss。如果你 运行 你的应用程序喜欢简单的 Java SE 应用程序,你的 IGraphRemote gremote 将永远是 null 除非你自己初始化它。

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