【问题标题】:Stateless session bean called out of context missing EntityManager脱离上下文调用的无状态会话 bean 缺少 EntityManager
【发布时间】:2012-11-06 20:46:40
【问题描述】:

我是 Java EE 的新手,所以我的问题可能非常基础。我已经使用无状态会话 bean(简化)构建了以下 REST Web 服务:

@Path("/list/")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Stateless
public class ListResource {

    @PersistenceContext(unitName = "unitName")
    private EntityManager em;

    @GET
    @Path("/")
    public List<Compound> getCompounds() {

    List<Compound> list = tq.getResultList();

    if (list.isEmpty()) {
        throw new WebApplicationException(Response.status(404).entity("There are no compounds in database.").build());
    }

    return list;
    }
}

它就像魅力一样。它可以通过 URL 访问并返回 JSON。问题是我有另一部分用纯 Java 编写的程序需要使用这个 Session bean 作为某种模型来获取所有 Compound。

问题是当我在某个地方初始化这个 Session bean 时,它在持久性上下文之外,因此不知道 EntityManager 来访问数据库。我相信。

我不知道该怎么办。我可以在代码的远处初始化类 ListResource 并让 EntityManager 的依赖注入工作吗?或者以某种方式获取持久性上下文,然后初始化此会话 bean?

我希望这是有道理的。我来形容它的复杂问题。

【问题讨论】:

    标签: java jakarta-ee persistence entitymanager stateless-session-bean


    【解决方案1】:

    如果您有一个 Web 服务和一个独立应用程序调用同一个 bean,我建议您将功能移动到一个单独的无状态 bean 中,并为其创建远程和本地接口。这样您就可以将本地 bean 注入您的 Web 服务 bean,并使用 jndi 调用远程 bean。

    更多关于访问 Java EE bean here

    或者,您的客户端 Java 代码可以调用 Web 服务来获取所有数据。有关连接到 RESTful 服务的方法,请参阅 this question

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      相关资源
      最近更新 更多