¿Por qué diferentes unidades de persistencia con fuentes de datos separadas consultan la misma fuente de datos?

Estoy desarrollando una aplicación web que necesita acceso a dos servidores de bases de datos diferentes (H2 y Oracle). El contenedor es unApache Tomee 1.5.1 y estoy usando la pila de Java EE con las bibliotecas proporcionadas en ella (JSF, JPA, CDI, EJB, etc.).

Estoy intentando usar dos administradores de entidades dentro de una transacción XA para extraer datos de la base de datos Oracle y conservarlos en el H2 después de transformarlos, PERO todas las consultas se ejecutan contra la base de datos H2 sin importar el administrador de entidades que use. ¿Alguna ayuda?

EDITAR: Encontré que si trato de acceder a los administradores de entidades en orden inverso, su comportamiento es el mismo pero accediendo a Oracle. Es decir: los administradores de la entidad se quedan con la primera base de datos visitada.

El EJB donde esto sucedeservice.getFoo() desde 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 * FROM bar ").getResultList(); 

        //more stuff...
    }
}

El productor de recursos (CDI) para los administradores de entidades (donde @ H2Database y @OracleDatabase soncalificadores):

public class Resources {
    @Produces
    @PersistenceContext(unitName = "OraclePU")
    @OracleDatabase
    private EntityManager emOracle;

    @Produces
    @PersistenceContext(unitName = "H2PU")
    @H2Database
    private EntityManager emH2;
}

Miperistence.xml Se ve como esto:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
    <persistence-unit name="H2PU"
        transaction-type="JTA">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <jta-data-source>H2DS</jta-data-source>
        <class>my.app.h2.Foo</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
    </persistence-unit>

    <persistence-unit name="OraclePU" transaction-type="JTA">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <jta-data-source>OracleDS</jta-data-source>
        <class>my.app.oracle.Bar</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
    </persistence-unit>
</persistence>

Y por último, las fuentes de datos en el interior.tomee.xml (no hay otras fuentes de datos configuradas dentro de este archivo):

<Resource id="OracleDS" type="javax.sql.DataSource">
    jdbcDriver = oracle.jdbc.xa.client.OracleXADataSource
    jdbcUrl = jdbc:oracle:thin:@server:port:instance
    jtaManaged = true
    password = abcde
    userName = user
</Resource>

<Resource id="H2DS" type="javax.sql.DataSource">
    jdbcDriver=org.h2.jdbcx.JdbcDataSource
    jdbcUrl=jdbc:h2:h2/db;AUTO_SERVER=TRUE
    jtaManaged = true
    password = edcba
    userName = user
</Resource>

Respuestas a la pregunta(2)

Su respuesta a la pregunta