【发布时间】:2010-12-06 08:36:35
【问题描述】:
我有使用 JPA 的代码,并且在我的开发环境和单元测试中一切正常。但是将我的模块部署到 OSGi 目标环境中时,我经常遇到最奇怪的类加载问题。我真的很喜欢 OSGi,但如果我不能一劳永逸地解决这个问题,我会发疯的。只要我不明白哪些类需要被哪些其他类看到,我就永远不会正确设置 OSGi 的东西。
所以,据我所知,我有以下项目,这些项目可能从某些运行代码中可见或不可见,我们称它们为“主题”:
- JPA 注释实体类
-
persistence.xml -
javax.persistence中的持久化 API - 持久性提供程序类
我的代码中有以下情况:
- 创建一个
EntityManagerFactory和一个EntityManager - 实例化新的实体对象
- 将这些对象传递给
EntityManager以将它们放入其持久性上下文中 - 继续使用它们,偶尔要求 EntityManager 保存更改
- 实例化、使用和丢弃实体对象而不将它们保存到数据库或以其他方式显式调用 EntityManager 的方法
- 不是实例化实体对象,而是要求 EM 从数据库中加载它们,这会导致在我看不到的地方发生实例化。
- 使用、更改、保存和丢弃这些实例
那么,在上述哪种情况下,我需要哪些主体可见?
我想这可能很明显
- 持久性提供程序和实体类需要了解 javax.persistence
- 创建 EntityManager 的代码需要查看 javax.persistence(我猜是持久性提供程序,尽管这在我自己的任何代码中都没有直接可见)
【问题讨论】:
标签: jpa visibility classloader