【发布时间】:2015-08-03 08:07:35
【问题描述】:
我有一个由 ejb.jar 和 Web 应用程序 (war) 组成的 ear 应用程序。 ejb.jar 包含我所有的 EJB(bean 和接口),我的战争包含 REST Web 服务。我想从 war 模块访问 EJB,这可能吗?注入 EJB 不起作用,我得到空指针异常。
我知道这已经被问过很多次了,但我似乎无法让它工作......
我正在使用 Glassfish v2.1.1(我知道我应该升级,但现在很难......)
下面是返回 nullPointerException 的代码片段: (我知道我不应该通过 GET 验证用户,但这只是我试图检查是否可以访问 ejb 的示例代码)
@Path("/user")
public class UserWS
{
@EJB
SB_usrRemote sb_usrRemote;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String checkLoginAttempt(String username, String password)
{
return sb_usrRemote.checkLoginAttempt(username, password).toString();
}
}
我没有提到该代码仅在我将 ejb.jar 包含在 ear 应用程序的 lib 文件夹中时才有效,war 模块可以“看到”它。有没有其他方法可以访问 EJB 类? 我也在使用 Intellij,该应用程序是一个 java EE 应用程序,其中包含一个 web 模块(用于战争)。
编辑
我无法避免 glassfish 从 v2 升级到 v4。这是我做出的最好的决定,因为我所有的问题都消失了。我的代码中的所有 ejb 注入都非常有效!
感谢两位的建议!我接受了休的回答,因为 JNDI 可能会起作用,但从长远来看,升级 glassfish 似乎是一个更合适的解决方案。
编辑 2
我终于设法使用此代码进行了正确的 ejb 注入:
@Path("/user")
public class UserWS
{
@EJB (lookup = "java:global/<ear-name>/<ejb-jar-name>/SB_usrRemote")
SB_usrRemote sb_usrRemote;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String checkLoginAttempt(String username, String password)
{
return sb_usrRemote.checkLoginAttempt(username, password).toString();
}
}
我在部署 ear 文件时在 glassfish 日志中找到了正确的查找路径。
【问题讨论】:
标签: java rest glassfish ejb ear