如何在glassfish 3上部署期间覆盖JPA数据源JNDI名称?

时间:2012-02-15 11:13:58

标签: jpa properties jpa-2.0 datasource jndi

我正在尝试在同一个glassfish 3域中的2个不同实例上部署 JPA应用程序。 两个实例都将使用相同的JNDI名称查找数据源,但我希望它们能够找到不同的数据源。 我尝试定义2个数据源并将它们绑定到不同的目标,但是DAS不允许2个数据源使用相同的JNDI名称,即使它们绑定到不同的目标。

我尝试使用属性替换,但这不起作用。 有谁知道如何解决这个问题?似乎不可能在同一个域中两次部署应用程序。

1 个答案:

答案 0 :(得分:1)

JNDI名称是特定对象的地址,它们必须是唯一的。有两个JNDI名称就像你的手机中有两个号码“alex”。无法知道您拨打的是哪一个。

我会做什么,哪个适用于任何JPA实现,就是在persistent.xml上有两个PU,一个带有JNDI数据源,另一个带有另一个JNDI数据源。这也很有意义,因为两个数据源上可能没有相同的业务对象。

然后,当您获得EntityManager时,明确指定您想要的PU。您可以在配置文件中设置它,或者以其他方式动态决定它。

entfactory = OpenJPAPersistence.createEntityManagerFactory( *persistentUnitName*, (String) null );

希望这有帮助 -

-Alex