我正在尝试在同一个glassfish 3域中的2个不同实例上部署 JPA应用程序。 两个实例都将使用相同的JNDI名称查找数据源,但我希望它们能够找到不同的数据源。 我尝试定义2个数据源并将它们绑定到不同的目标,但是DAS不允许2个数据源使用相同的JNDI名称,即使它们绑定到不同的目标。
我尝试使用属性替换,但这不起作用。 有谁知道如何解决这个问题?似乎不可能在同一个域中两次部署应用程序。
答案 0 :(得分:1)
JNDI名称是特定对象的地址,它们必须是唯一的。有两个JNDI名称就像你的手机中有两个号码“alex”。无法知道您拨打的是哪一个。
我会做什么,哪个适用于任何JPA实现,就是在persistent.xml上有两个PU,一个带有JNDI数据源,另一个带有另一个JNDI数据源。这也很有意义,因为两个数据源上可能没有相同的业务对象。
然后,当您获得EntityManager时,明确指定您想要的PU。您可以在配置文件中设置它,或者以其他方式动态决定它。
entfactory = OpenJPAPersistence.createEntityManagerFactory( *persistentUnitName*, (String) null );
希望这有帮助 -
-Alex