我敢肯定,这是一个初学者的错误空对象......servlet接收来自远程EJB3会话Bean
所以我有一个实体,外墙(实现持久层)和无状态会话Bean在Java EE 6的应用(EJB3)和远程接口(通过外观提供对实体的访问)。
这工作正常。通过SLSB,我可以检索和操作实体。我试图从一个Web应用程序(部署在同一个Glassfish中,实体+从独立jar导入的Java EE应用程序的接口定义)执行此操作。我有一个Servlet,它接收一个SLSB注入的实例。我得到它的检索实体,并执行以下操作(我可以看到它在日志中):
- 远程SLSB被实例化,称为其方法
- SLSB实例门面,调用“得到”方法
- 门面从数据库中检索实体的情况下,返回它
- 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 2010-04-21 13:08:04
@josek:'c'存在,不为null。 'c.getSomeString()'返回null。当SLSB检索'5L'活动时,'someString'被正确填充。 – Hank 2010-04-21 14:04:01
我可能是错的,但认为glassfish需要打包在同一个webapp中的远程接口。 – JoseK 2010-04-21 17:01:49