我正在寻找基于 JAX-RS / Jersey 2 和 EJB 3.1 Lite 注入(或以其他方式最好的初始化)JDOPersistenceManager
和/或PersistenceManagerFactory
RESTful Web 应用程序资源的最干净的方法,最好不要添加太多额外的依赖项。该项目使用 DataNucleus 并使用 Maven 3 构建。
这是我发现的一些指针。也许您已经尝试过其中的一些并发现哪种方法最有效:
- 写一个
Provider<PersistenceManager>
- 编写一个 Servlet
Filter
- http://www.datanucleus.org/products/datanucleus/jdo/pmf.html
- http://blog.yanivkessler.com/2010/06/lightweight-jdo-persistence-filter.html
- 如何使用 JDO 持久化管理器?
- 谷歌吉斯
当前的解决方案基于 JPA,并且注入照常工作。以下代码已被简化,不幸的是我无法发布原始代码。
在main/java/project/ws/rs/TestResource.java
:
@Path("/test")
@Stateless
public class TestResource {
@PersistenceContext(unitName = "project-webapi")
private EntityManager em;
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response test(@PathParam("id") UUID id) {
return Response.status(
Response.Status.OK).entity(em.find(type, id)).build();
}
}
正如您在上面看到的,持久的 JAX-RS 资源被注释为@Stateless
EJB。
所有 Java EE 和 Jersey 依赖项都由作为我的目标平台的 GlassFish 4.0 提供。DataNucleus 库包含在WEB-INF/lib
.
该项目具有main/resources/META-INF/persistence.xml
文件描述的标准持久性单元。
<persistence>
<persistence-unit name="project-webapi"/>
</persistence>
(为简单起见,省略了 XML 命名空间和模式引用。)
部署描述符位于main/webapp/WEB-INF/web.xml
:
<web-app version="3.0" metadata-complete="false" />
目标
我想从 JPA 切换到 JDO,而不会像上面那样丢失干净的依赖注入。一个理想的解决方案当然类似于EntityManager
用PersistenceManager
上面的替换,但是如何实现或者可能有更好的方法?如果其他方式对此目的更有效,则不必注入。
我切换的原因是能够在 DataNucleus 的帮助下使用非 SQL 持久性,并为我的 Java EE Web 应用程序提供完整的 ORM 实现。
我相信还有很多其他人会对此感兴趣。有任何想法吗?
编辑:为像上面这样的网络应用程序找到最有效的方法来获取对 a 的引用PersistenceManager
是这个问题的重点。
使用 JPA,它是通过注入完成的。显然,我们知道 Java EE 规范和应用服务器不直接通过 JDO 支持这一点。否则我们不会问这个。因此,我们追求最干净和“最可部署”的方式来为 Web 应用程序做这件事。