有两种使用持久化单元的方法,代码或注解。
代码
[..]
EntityManagerFactory emf;
emf = Persistence.createEntityManagerFactory("SOMEPU");
[..]
或
注释
[..]
@PersistenceContext(name = "persistence/LogicalName", unitName = "SOMEPU")
[..]
问题:如果您想更改持久性单元(或指向不同的 jdbc 源),我可以轻松调整源代码版本以从某些设置文件或其他文件中读取变量。但是我不能将变量放入注释中。解决方案是什么?
是的,我可以始终保持相同的 PU,并将应用程序服务器中的 jbdc 资源指向其他地方,但我不希望任何人在 AS 的管理设置中进行修改。
干杯 斯文
最佳答案
如果您绝对必须使用注释来获取您的 PersistenceContext,那么我猜您可以将 EntityManager 的创建包装在某个类中,然后将其注入(inject)到需要它的 bean 中?
public interface MyPersistenceContext
{
public void getEntityManager();
}
然后在您的 EJB 中:
public class MyEJB
{
@EJB
private MyPersistenceContext persistenceContext;
private EntityManager em;
@PostConstruct
public void postConstruct()
{
em = persistenceContext.getEntityManager();
}
....
您提供的 MyPersistenceContext 的实现如何创建 EntityManager 由您决定。
关于java - Java EE5+ 中的可配置持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1176520/