Configurando Dois Arquivos de Referência de Recurso na mesma Origem de Dados

É possível configurar dois arquivos de referência de recurso na mesma origem de dados. Isso permite que você estenda as propriedades customizadas para que a fonte de dados seja estendida para incluir dois nomes de esquemas diferentes (currentSQLId no z/OS® ou currentSchema name nas propriedades customizadas) que podem ser usados para explorar as capacidades do servidor de aplicação.

Sobre esta Tarefa

Quando um EntityManager é criado, o servidor de aplicativos obtém uma conexão com o banco de dados. Quando você estiver utilizando uma transação pessimista, o EntityManager reterá essa conexão até que o EntityManager seja fechado. Quando há dois EntityManagers que estendem as definições de origem de dados, oopenjpa.jdbc.TransactionIsolationpropriedade pode causar um problema com a transação. Esta propriedade pode ser encontrada nopersistence.xmlarquivo na entrada a seguir:
property name="openjpa.jdbc.TransactionIsolation" value="read-committed" 
Para satisfazer esta solicitação, Java™ Persistence API (JPA) irá obter uma conexão e chamar imediatamentesetTransactionIsolation(READ_COMMITTED). Quando você tem dois EntityManagers compartilham uma conexão física única com o banco de dados, o primeiro EntityManager cria uma conexão com o banco de dados e envolve essa conexão em uma transação. Quando o segundo EntityManager criar uma conexão, ele não poderá mudar o nível de isolamento.
É possível evitar esse problema criando dois arquivos de referência de recurso na mesma origem de dados. Você pode criar as referências de recursos com o Rational® Application Developer ou editando os arquivos XML. Você precisará fazer mudanças noejb-jar.xml,ibm-ejb-jar-bnd.xml,ibm-ejb-jar-ext.xml,persistence.xmlarquivos.
Nota: Para IBM® Optim™ PureQuery Runtime, se esta for uma fonte de dados XA você deve definir uma nova propriedade customizada na origem de dados em que nome_proprio = downgradeHoldCursorsUnderXa e valor booleano = true.
Consulte as seções a seguir para obter informações sobre como fazer isso:

Procedimento

  • Configure dois arquivos de referência de recursos na mesma fonte de dados usando o Rational Application Developer.
    1. Editar oejb-jar.xmlfile
      1. Crie o descritor de implementação se ele não existir ainda:
        1. Acesse o menu de contexto do projeto Enterprise Java beans (EJB) e selecione Java EE > Gerar Stub do Descritor de Implementação.
      2. Edite o descritor de implementação:
        1. Acesse o diretório META-INF do projeto e selecione oejb-jar.xml.
      3. Inclua o elemento do enterprise bean no descritor de implementação se ele não existir ainda:
        1. Selecione Nó do Projeto EJB. Clique em Adicionar.
        2. No diálogo, selecione Enterprise Beans. Clique em OK.
      4. Inclua o bean de sessão no descritor de implementação se ele não existir ainda:
        1. Selecione Enterprise Beans. Clique em Adicionar.
        2. Selecione Sessão Bean. Clique em OK.
        3. Digite o nome do bean de sessão no diálogo. Clique em OK.
        4. No painel do lado direito, digite o EJB Class, o business local e as interfaces remotas de negócios.
      5. Inclua os elementos de referência de recurso no bean de sessão:
        1. Selecione o bean de sessão e clique em Incluir.
        2. Selecione Referência de Recursos. Clique em OK.
        3. No diálogo Incluir Referência de Recurso, digite os campos de nome, tipo, autenticação e escopo de compartilhamento. Clique em OK.
        4. Repita para a segunda referência de recurso.
      6. Salve o editor.
    2. Editar oibm-ejb-jar-bnd.xmlfile
      1. Crie o descritor de ligações do WebSphere® EJB se ele já não existe
        1. Acesse o menu de contexto do projeto Enterprise JavaBeans (EJB) e selecione Java EE > Gerar Descritor de Implementação de Ligações WebSphere.
      2. Edite o descritor de ligações:
        1. No diretório META-INF do projeto, selecione oibm-ejb-jar-bnd.xml.
      3. Inclua um elemento de ligação para o bean de sessão no descritor de ligações:
        1. Selecione EJB Jar Ligações nó e clique em Adicionar.
        2. No diálogo, selecione Sessão e clique em OK.
        3. Insira o nome de um bean de sessão.
      4. Inclua as ligações para as referências de recursos no bean de sessão:
        1. Selecione o bean de sessão e clique em Incluir.
        2. No diálogo, selecione Referência de Recursos e clique em OK.
        3. Selecione a referência de recurso.
        4. Insira o nome de o nome da ligação para a referência
        5. Repita para a segunda referência de recurso.
      5. Salve o editor.
    3. Editar oibm-ejb-jar-ext.xml.
      1. Crie o descritor de extensões do WebSphere EJB se ele já não existe:
        1. Acesse o menu de contexto do projeto Enterprise JavaBeans (EJB) e selecione Java EE > Gerar WebSphere Extensions Deployment Descriptor.
      2. Edite o descritor de extensões:
        1. No diretório META-INF do projeto, selecione oibm-ejb-jar-ext.xml.
      3. Inclua um elemento de extensões para o bean de sessão no descritor de extensões:
        1. Selecione o nó EJB Jar Extensions e clique em Add.
        2. No diálogo, selecione Sessão e clique em OK.
        3. Insira o nome de um bean de sessão.
      4. Defina o nível de isolamento para as referências de recursos:
        1. Selecione o bean de sessão e clique em Incluir.
        2. No diálogo, selecione Referência de Recursos e clique em OK.
        3. Selecione a referência de recurso.
        4. Insira o nome e o nível de isolamento.
        5. Repita para a segunda referência de recurso.
      5. Salve o editor.
    4. Editar opersistence.xml.
      1. Inclua o suporte JPA no projeto EJB, que criará o arquivo persistence.xml:
        1. No menu de contexto do projeto, selecione Propriedades.
        2. Selecione o nó Máscaras de Projeto.
        3. Marque a caixa ao lado de Persistência Java.
        4. Clique em OK.
      2. Editar opersistence.xmlarquivo:
        1. No diretório META-INF do projeto, selecione opersistence.xmlfile
      3. O criadopersistence.xmlarquivo já contém uma definição de unidade de persistência. Editar issopersistence.xmlfile
        1. Selecione o nó Unidade de persistência . Defina o nome, a origem de dados JTA e exclua os campos de classes não listados.
      4. Crie uma nova definição de unidade de persistência no arquivo:
        1. Selecione o nó Persistence e clique em Adicionar .
        2. No diálogo, selecione Unidade de persistência e clique em OK.
        3. Selecione o nó Unidade de persistência . Defina o nome, a origem de dados JTA e exclua os campos de classes não listados.
      5. Inclua classes na unidade de persistência:
        1. Selecione o nó da unidade de persistência e clique em Incluir .
        2. No diálogo, selecione Class e clique em OK.
        3. Insira o nome da classe.
        4. Repita para cada classe.
      6. Inclua propriedades na unidade de persistência
        1. Se ainda não houver um elemento Propriedades no arquivo, selecione o nó da unidade de persistência e clique em Incluir.
        2. No diálogo, selecione Propriedades e clique em OK.
        3. Selecione o nó Propriedades e clique em Adicionar.
        4. No diálogo, selecione Propriedade e clique em OK.
        5. Insira o nome e o valor para a propriedade
        6. Repita as três etapas anteriores para incluir as propriedades adicionais.
      7. Salve o editor.
  • Configure dois arquivos de referência de recurso na mesma origem de dados editando os arquivos XML.
    1. Editar oejb-jar.xmlarquivo:
      <?xml version="1.0" encoding="UTF-8"?>
      <ejb-jar id="ejb-jar_ID" metadata-complete="false" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
      xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
          <enterprise-beans>
              <session>
                  <ejb-name>NewOrderSessionFacadeBean</ejb-name>
                  <business-local>newordersession.ejb3.NewOrderSessionFacade</business-local>
                  <business-remote>newordersession.ejb3.NewOrderSessionFacadeRemote</business-remote>
                  <ejb-class>newordersession.ejb3.NewOrderSessionFacadeBean</ejb-class>
                  <session-type>Stateless</session-type>
      			<resource-ref>
      				<description></description>
      				<res-ref-name>jdbc/ERWWDataSourceV5</res-ref-name>
      				<res-type>javax.sql.DataSource</res-type>
      				<res-auth>Container</res-auth>
      				<res-sharing-scope>Shareable</res-sharing-scope>
      			</resource-ref>
      			<resource-ref>
      				<description></description>
      				<res-ref-name>jdbc/ERWWDataSourceV5_HP</res-ref-name>
      				<res-type>javax.sql.DataSource</res-type>
      				<res-auth>Container</res-auth>
      				<res-sharing-scope>Shareable</res-sharing-scope>
      			</resource-ref>
              </session>
           </enterprise-beans>
      </ejb-jar>
    2. Editar oibm-ejb-jar-bnd.xmlarquivo:
      <?xml version="1.0" encoding="UTF-8"?>
      <ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee"
      	xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
      	xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd"
      	version="1.0">
      	<session name="NewOrderSessionFacadeBean" simple-binding-name="ejb/session/NewOrderSessionFacadeBean">
      		<resource-ref name="jdbc/ERWWDataSourceV5" binding-name="jdbc/ERWWDataSourceV5"></resource-ref>
      		<resource-ref name="jdbc/ERWWDataSourceV5_HP" binding-name="jdbc/ERWWDataSourceV5"></resource-ref>
      	</session>
      </ejb-jar-bnd>
      
    3. Editar oibm-ejb-jar-ext.xmlarquivo:
      <?xml version="1.0" encoding="UTF-8"?>
      <ejb-jar-ext xmlns="http://websphere.ibm.com/xml/ns/javaee"
      	xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
      	xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-ext_1_0.xsd"
      	version="1.0" metadata-complete="true">
      	<session name="NewOrderSessionFacadeBean">
      		<resource-ref name="jdbc/ERWWDataSourceV5"
      			isolation-level="TRANSACTION_READ_COMMITTED" />
      		<resource-ref name="jdbc/ERWWDataSourceV5_HP"
      			isolation-level="TRANSACTION_READ_COMMITTED" />
      	</session>
      </ejb-jar-ext>
    4. Editar opersistence.xmlarquivo:
      <?xml version="1.0" encoding="UTF-8"?>
      <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       version="1.0" xsi:schemaLocation=
      "http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
          <persistence-unit name="NewOrderSessionEJB3">
              <jta-data-source>java:comp/env/jdbc/ERWWDataSourceV5</jta-data-source>
              <class>warehouseejb3.WarehouseJPA</class>
              <class>districtejb3.DistrictJPA</class>
              <class>customerejb3.CustomerJPA</class>
              <class>stockejb3.StockJPA</class>
              <class>orderejb3.OrderJPA</class>
              <class>orderlineejb3.OrderlineJPA</class>
              <class>neworderejb3.NewOrderJPA</class>
              <exclude-unlisted-classes>true</exclude-unlisted-classes>
              <properties>
      		<property name="openjpa.LockManager" value="pessimistic"/>
      		<property name="openjpa.ReadLockLevel" value="read"/>
      		<property name="openjpa.WriteLockLevel" value="write"/>
      		<property name="openjpa.LockTimeout" value="30000"/>
          	<property name="openjpa.FetchBatchSize" value="1" />
          	<property name="openjpa.jdbc.TransactionIsolation" value="read-committed" /> 
          	<property name="openjpa.Log" value="none"/>
          	</properties>	
          </persistence-unit>  
          <persistence-unit name="ItemEJB3">
              <jta-data-source>java:comp/env/jdbc/ERWWDataSourceV5_HP</jta-data-source>
              <class>itemejb3.ItemJPA</class>
              <exclude-unlisted-classes>true</exclude-unlisted-classes>
              <properties>
      		<property name="openjpa.LockManager" value="pessimistic"/>
      		<property name="openjpa.ReadLockLevel" value="read"/>
      		<property name="openjpa.WriteLockLevel" value="write"/>
      		<property name="openjpa.LockTimeout" value="30000"/>
          	<property name="openjpa.FetchBatchSize" value="1" />
          	<property name="openjpa.jdbc.TransactionIsolation" value="read-committed" /> 
          	<property name="openjpa.Log" value="none"/>
          	</properties>	
          </persistence-unit>  
      </persistence>