我必须创建带有接口(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"));
}
}
错误:
Exception in thread "main" java.lang.NullPointerException
at AppClient.main(AppClient.java:22)
Java Result: 1
答案 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
。