【问题标题】:Servlet receives empty object from Remote EJB3 Session BeanServlet 从远程 EJB3 会话 Bean 接收空对象
【发布时间】: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


【解决方案1】:

...哦,男孩,这有点尴尬...

事实证明,我一直忽略一个关于使用Vector 作为与FetchType.LAZY 保持@xxToMany 关系的字段类型的小警告:

元素 [field someField] 内 实体类 [class Campaign] 使用 集合类型[类 java.util.Vector]当JPA 规范只支持 java.util.Collection,java.util.Set, java.util.List 或 java.util.Map。 急切支持此类型 加载;使用延迟加载 集合类型需要额外的 配置和 IndirectContainer 扩展[类 java.util.Vector] 或设置 映射以使用基本间接和 类型为 ValueholderInterface。

两种可能的解决方案可以解决我的行为:

  • 使用FetchType.EAGER(然后我可以继续使用Vector
  • 使用List(如规范所说...)

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 2013-09-07
    相关资源
    最近更新 更多