【发布时间】:2010-04-20 14:12:06
【问题描述】:
我确定这是一个初学者错误...
所以我有一个 Java EE 6 应用程序,其中包含实体、外观(实现持久层)和具有远程接口(通过外观提供对实体的访问)的无状态会话 Bean (EJB3)。
这工作正常。通过 SLSB,我可以检索和操作实体。
现在,我正在尝试从 Web 应用程序(部署在同一个 Glassfish 上,从作为单独 jar 导入的 Java EE 应用程序中的实体+接口定义)执行此操作。我有一个 Servlet,它接收注入的 SLSB 实例。我让它检索一个实体,然后发生以下情况(我可以在日志中看到它):
- 远程 SLSB 被实例化,其方法被调用
- SLSB 实例化外观,调用“get”方法
- facade 从 DB 中检索实体实例,返回它
- SLSB 将实体的实例返回给调用者
- (到这里为止一切都很好)
- 调用 servlet 接收到 .. 实体的空实例!!
出了什么问题?这应该可行,对吧?
MyServlet:
public class MyServlet extends HttpServlet {
@EJB
private CampaignControllerRemote campaignController; // remote SLSB
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
try {
Campaign c = campaignController.getCampaign(5L); // id of an existing campaign
out.println("Got "+ c.getSomeString()); // is null !!
} finally {
out.close();
}
}
...
}
如果您想查看其他代码,请告诉我,我会更新帖子。
【问题讨论】:
-
c是空对象还是getsomestring返回空?在调用返回到 servlet 之前,日志是否显示 SLSB 中完全填充了“5L”活动?
-
@josek:
c存在,不为空。c.getSomeString()返回空值。当 SLSB 检索到“5L”活动时,someString已正确填充。 -
我可能错了,但认为 glassfish 需要将远程接口打包在同一个 webapp 中。
标签: servlets ejb-3.0 java-ee-6 stateless-session-bean