Java 上下文外调用的无状态会话bean缺少EntityManager

Java 上下文外调用的无状态会话bean缺少EntityManager,java,jakarta-ee,persistence,entitymanager,stateless-session-bean,Java,Jakarta Ee,Persistence,Entitymanager,Stateless Session Bean,我是JavaEE新手,所以我的问题可能非常基本。我使用无状态会话bean(simplyfied)构建了以下REST web服务: @Path(“/list/”) @产生({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) @使用({MediaType.APPLICATION\uxml,MediaType.APPLICATION\ujson}) @无国籍 公共类列表资源{ @PersistenceContext(unitName=“uni

我是JavaEE新手,所以我的问题可能非常基本。我使用无状态会话bean(simplyfied)构建了以下REST web服务:

@Path(“/list/”)
@产生({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
@使用({MediaType.APPLICATION\uxml,MediaType.APPLICATION\ujson})
@无国籍
公共类列表资源{
@PersistenceContext(unitName=“unitName”)
私人实体管理者;
@得到
@路径(“/”)
公共列表getcomponents(){
List=tq.getResultList();
if(list.isEmpty()){
抛出新的WebApplicationException(Response.status(404.entity)(“数据库中没有复合项”).build();
}
退货清单;
}
}
它很有魅力。它可以通过URL访问并返回JSON。问题是,我有另一部分程序是用纯Java编写的,它需要使用这个会话bean作为某种模型来获取所有化合物

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

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


我希望这是有道理的。这对我来说是一个复杂的问题。

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

更多关于访问JavaEEbean的信息

或者,您的客户机java代码可以调用web服务来获取所有数据。请参阅关于连接到RESTful服务的方法

@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;
    }
}