0
我正在查找多个数据源,具体取决于x的值在EJB 3.0中。 要做到这一点,我写了下面的代码。在ejb3.0中查找多个数据源
会话Bean
package entity.library;
import java.util.Collection;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.io.Serializable;
import javax.ejb.*;
@Remote(TestInterface.class)
@Stateless(mappedName="ejb3/TestBeans")
public class TestSessionBean implements Serializable, TestInterface {
/**
*
*/
private static final long serialVersionUID = 1L;
@PersistenceContext(unitName="EntityBeanDS1")
EntityManager emds1;
@PersistenceContext(unitName="EntityBeanDS2")
EntityManager emds2;
protected TestJPA test;
protected Collection <TestJPA> list;
public Collection <TestJPA> getAllList(int x) {
System.out.println("TestInterface.java:getAllPmns x "+x);
if(x==1)
{
System.out.println("going to lookup datasource1");
list=emds1.createQuery("SELECT test FROM TestJPA test").getResultList();
}
else if(x==2)
{
System.out.println("going to lookup datasource2");
list=emds2.createQuery("SELECT test FROM TestJPA test").getResultList();
}
return list;
}
}
Persitence.xml
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="EntityBeanDS1" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>TESTDS</jta-data-source>
<non-jta-data-source>TESTDS</non-jta-data-source>
<properties>
<property name="eclipselink.target-server" value="WebLogic_10"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
<persistence-unit name="EntityBeanDS2" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>TESTDS1</jta-data-source>
<non-jta-data-source>TESTDS1</non-jta-data-source>
<properties>
<property name="eclipselink.target-server" value="WebLogic_10"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>
上面的代码工作successfully.but我认为这不是理由如下一个很好的技术。 1.有10-15个多个会话bean,每个bean中我必须写if-else来查找数据源。 2.未来,如果添加新的数据源或添加了任何新的x值,那么我必须修改所有10-15个文件。
是否可以给我代码,用于连接到多个数据源,这样我就可以更改单个文件中的任何x值更改。 单个文件的外观如何,以便我可以检索'EntityManager'对象。或者有任何其他方法(如persistence.xml中的修改)来执行此操作?
...你能告诉我我的代码是怎么样的!......你可以给我一段代码! – user752590
在原始问题中我忘了提到的一件事:对于x的单值,可以在不同的会话bean中使用不同的查询 – user752590
如果您在每个bean中确实有不同的查询,那么委派创建查询就没有意义了。您必须在知道要构建哪个查询的bean中执行此操作。 – tobiasbayer