我是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作为获取所有化合物的某种模型。
问题是当我在某个地方初始化这个Session bean时,它不在持久化上下文中,因此不知道EntityManager来访问数据库。我相信。
我不知道该怎么做。我可以在远程代码部分初始化类ListResource并使EntityManager的依赖注入工作吗?或者以某种方式获得持久化上下文然后初始化这个会话bean?
我希望这是有道理的。我要描述的问题很复杂。
答案 0 :(得分:0)
(我还不能写评论,所以我稍后会更新这个答案)
请描述你的意思“我有用普通Java编写的程序的另一部分”。这是一个独立的Java程序,它有一个主要的方法吗?
依赖注入将适用于“托管类”,如Servlet,JSF ManagedBean或CDI bean。
您仍然可以远程调用此会话Bean。您的环境是什么(Java EE版本,应用服务器)?
答案 1 :(得分:0)
如果您有一个Web服务和一个调用同一个bean的独立应用程序,我建议您在单独的无状态bean中移动该功能,并为其创建远程和本地接口。这样,您可以将本地bean注入到您的Web服务bean中,并使用jndi调用远程bean。
有关访问Java EE bean here的更多信息。
或者,您的客户端Java代码可以调用Web服务来获取所有数据。有关连接RESTful服务的方法,请参阅this question。