我确定这是初学者错误......
所以我有一个Java EE 6应用程序,包含实体,外观(实现持久层)和带有远程接口的无状态会话Bean(EJB3)(通过外墙提供对实体的访问)。
这很好用。通过SLSB,我可以检索和操纵实体。
现在,我正在尝试从Web应用程序(部署在相同的Glassfish上,从作为单独jar导入的Java EE应用程序的实体+接口定义)部署。我有一个Servlet,它接收注入的SLSB实例。我得到它来检索一个实体,并发生以下情况(我可以在日志中看到它):
出了什么问题?这应该有用,对吧?
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();
}
}
...
}
如果您想查看其他代码,请告诉我,我会更新帖子。
答案 0 :(得分:0)
......哦,小伙子,这有点令人尴尬......
事实证明,我一直忽略了一个关于使用Vector
作为与@xxToMany
保持FetchType.LAZY
关系的字段类型的一个小小警告:
元素[field someField]内 实体类[类Campaign]使用 集合类型[类 java.util.Vector]当JPA 规范只支持 java.util.Collection,java.util.Set, java.util.List或java.util.Map。 渴望支持这种类型 装载;使用延迟加载 集合类型需要额外的 配置和IndirectContainer 扩展的实现[class java.util.Vector]或设置 映射使用基本间接和 类型为ValueholderInterface。
两种可能的解决方案可以解决我的行为:
FetchType.EAGER
(然后我可以留在Vector
)List
(如规范所说......)