我正在开发一个需要访问两个不同数据库服务器(H2和Oracle)的webapp.容器是Apache Tomee 1.5.1,我使用Java EE堆栈,其中包含库(JSF,JPA,CDI,EJB等).
我正在尝试在XA事务中使用两个实体管理器从Oracle数据库中提取数据并在转换后将其保留在H2中,但无论我使用的实体管理器如何,所有查询都是针对H2数据库执行的.有帮助吗?
编辑:我发现,如果我尝试以相反的顺序访问实体管理器,它们的行为是相同的,但访问Oracle.即:实体经理留在第一个访问的数据库.
发生这种情况的EJB(service.getFoo()从JSF 调用):
@Named
@Stateless
public class Service {
@Inject
@OracleDatabase
private EntityManager emOracle;
@Inject
@H2Database
private EntityManager emH2;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public List<Foo> getFoo() {
TypedQuery<Foo> q = emH2.createQuery(
"SELECT x FROM Foo f", Foo.class);
List<Foo> l = q.getResultList();
if (l == null || l.isEmpty()) {
update();
}
return q.getResultList();
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void update() {
// FAIL: This query executes against H2 with Oracle entity manager!
List<Object[]> l = emOracle.createNativeQuery("SELECT …Run Code Online (Sandbox Code Playgroud) 我一直在Google上搜索Google App Engine后端代码示例,但我一无所获.有谁知道我在哪里可以找到教程或什么?
谢谢.