Desenvolvendo Aplicativos JPA 2.x para um Ambiente Java SE

Preparar aplicativos de persistência para testar fora do contêiner do servidor de aplicativos em um ambiente Java™ SE.

Sobre Esta Tarefa

Atenção: Quando você usar estas ferramentas de comando JPA, execute-as a partir do diretório profile_root/bin, em vez de a partir do diretório app_server_root/bin para certificar-se de que possui a versão mais recente dos comandos para seu nível de liberação.

Para essa tarefa, você deve especificar o arquivo Java archive (JAR) independente com.ibm.ws.jpa-2.1.thinclient_9.0.jar no caminho da classe para compilação com as interfaces JPA 2.1. Para compilar com as interfaces JPA 2.0, especifique o com.ibm.ws.jpa-2.0.thinclient_9.0.jar no caminho da classe. Esse arquivo JAR independente está disponível a partir das imagens de instalação. O local desses arquivos na imagem de instalação do servidor está no diretório ${app_server_root}/runtimes.

Importante: Os aplicativos Java Persistence API (JPA) exigem técnicas de configuração diferentes dos aplicativos que utilizam persistência gerenciada por contêiner (CMP) ou persistência gerenciada por bean (BMP). Eles não seguem as técnicas típicas de implementação que estão associadas a aplicativos que implementam CMP ou BMP. Em aplicativos JPA, você deve definir uma unidade de persistência e configurar as propriedades adequadas no arquivo persistence.xml para garantir que os aplicativos possam executar em um ambiente Java SE.
Há algumas considerações para executar aplicativos JPA em um ambiente Java SE:
  • A injeção de recursos não está disponível. Você deve configurar esses serviços especificamente ou programaticamente.
  • O ciclo de vida de EntityManagerFactory e de EntityManager são gerenciados pelo aplicativo. Os aplicativos controlam a criação, a manipulação e a exclusão dessas construções programaticamente.

Procedimento

  1. Gerar suas classes de entidades.

    Estas são as entidades Plain Old Java Object (POJO). Dependendo do modelo de desenvolvimento, você pode usar algumas ou todas as ferramentas de JPA:

    Mapeamento de Cima para Baixo
    Você inicia a partir do zero com as definições de entidade e os mapeamentos relacionais do objeto e, em seguida, deriva os esquemas do banco de dados desses dados. Se você usar esta abordagem, provavelmente cuidará da criação da arquitetura do modelo do objeto e, em seguida, gravará suas classes de entidade. Estas classes de entidade eventualmente determinariam a criação do seu modelo de banco de dados. Se você estiver utilizando um mapeamento de cima para baixo do modelo de objeto para o modelo relacional, desenvolva as classes de entidades e, em seguida, utilize a funcionalidade do provedor de persistência para gerar as tabelas de banco de dados que são baseadas nas classes de entidades. A ferramenta wsmapping ajudaria com essa abordagem ao usar OpenJPA como o provedor de persistência.
    Mapeamento Bottom-up
    Você inicia com seu modelo de dados, que são os esquemas do banco de dados e, em seguida, trabalha para cima em suas classes de entidade. A ferramenta wsreversemapping ajudaria com essa abordagem ao usar OpenJPA como o provedor de persistência.
    Encontrar no mapeamento do meio
    Provavelmente o modelo de desenvolvimento mais comum. Você tem uma combinação do modelo de dados e o modelo de objeto parcialmente concluído. Dependendo dos objetivos e dos requisitos, você deve negociar os relacionamentos para resolver quaisquer diferenças. Tanto a ferramenta wsmapping quanto a ferramenta wsreversemapping ajudariam com essa abordagem ao utilizar o OpenJPA como provedor de persistência.

    A solução JPA para o servidor de aplicativos fornece várias ferramentas que ajudam no desenvolvimento de aplicativos JPA. Combinar estas ferramentas com o IBM® Rational Application Developer fornece um ambiente de desenvolvimento sólido para aplicativos Java EE ou Java SE. O Rational Application Developer inclui ferramentas da GUI para inserir anotações, um editor de arquivo persistence.xml customizado, um explorador de banco de dados e outros recursos. Outra alternativa é o projeto Eclipse Dali. Informações adicionais sobre oRational Application Developer ou o plug-in Eclipse Dali podem ser localizadas em seus respectivos websites.

  2. Compile as classes de entidade.

    Compile as entidades como você faria com qualquer classe Java, a menos que esteja usando a API de Critérios. Se você estiver usando o Criteria API, também deverá gerar as classes de metamodelos da Criteria API.

    A seguir estão exemplos de como usar esta opção.

    Usando o EclipseLink, forneça os argumentos a seguir com o comando javac:
    -processor 
    org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor 
    -Aeclipselink.persistencexml= persistence.xml_location 
    app_server_root/java/bin/javac 
    -classpath app_server_root/runtimes/com.ibm.ws.jpa-2.1.thinclient_9.0.0.jar 
    -processor
    org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor 
    -Aeclipselink.persistencexml=app_location/src/META-INF/persistence.xml mypackage\MyEntity.java 
    Usando o OpenJPA ou WSJPA, forneça os argumentos a seguir com o comando javac:
    -Aopenjpa.metamodel=true 
    app_server_root/java/bin/javac 
    -Aopenjpa.metamodel=true 
    -classpath app_server_root/runtimes/com.ibm.ws.jpa-2.0.thinclient_9.0.0.jar  
    mypackage/MyEntity.java 
  3. Aprimore as classes de entidades usando a ferramenta otimizadora JPA ou especifique o agente Java para executar o aprimoramento dinâmico no tempo de execução.
    • Use a ferramenta eclenhancer para EclipseLink ou use a ferramenta wsenhancer para OpenJPA.

      O otimizador pós-processa o bytecode que é gerado pelo compilador Java e inclui os campos e os métodos necessários para implementar os recursos de persistência. Para obter exemplos de como usar a ferramenta eclenhancer, consulte o tópico Comando eclenhancer. Para obter exemplos de como usar a ferramenta wsenhancer, consulte o tópico Comando wsenhancer.

    • Você pode especificar o mecanismo do agente Java para executar o aperfeiçoamento dinâmico no tempo de execução. Por exemplo, digite o seguinte no prompt de comandos:
      Para EclipseLink:
      java -javaagent:${app_client_root}/runtimes/com.ibm.ws.jpa-2.1.thinclient_9.0.jar com.xyz.Main  
      Para OpenJPA:
      java -javaagent:${app_client_root}/runtimes/com.ibm.ws.jpa-2.0.thinclient_9.0.jar com.xyz.Main  
      Atenção: É possível executar a ferramenta otimizadora ou especificar o comando javaagent. Não é necessário fazer os dois.
  4. Opcional: Se você não estiver usando o modelo de desenvolvimento para mapeamento bottom-up, gere ou atualize as tabelas de bancos de dados automaticamente ou usando a ferramenta eclenhancer ou a ferramenta wsmapping.
    • Por padrão, o mapeamento de objeto relacional não ocorre automaticamente, mas é possível configurar o servidor de aplicativos para fornecer esse mapeamento com a propriedade eclipselink.ddl-generation para EclipseLink ou a propriedade openjpa.jdbc.SynchronizeMappings para OpenJPA. Essas propriedades podem acelerar o desenvolvimento assegurando automaticamente que as tabelas de banco de dados correspondam ao modelo de objeto. Para ativar o mapeamento automático, inclua a seguinte linha no arquivo persistence.xml:
      Para EclipseLink:
      <property name=”eclipselink.ddl-generation” value=”create-tables”/>  
      Para Open JPA:
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> 
      Padrão de JPA 2.1:
      <property name=”javax.persistence.schema-generation.database.action” value=”create”/> 
      Evitar Problemas Evitar Problemas: Para ativar o mapeamento relacional de objetos automático no tempo de execução, todas as classes persistentes devem ser listadas no arquivo Java .class, no arquivo de mapeamento e nos elementos do arquivo Java archive (JAR) no formato XML.gotcha
    • Para atualizar ou gerar manualmente suas tabelas de bancos de dados, execute a ferramenta de mapeamento de JPA para o servidor de aplicativos a partir da linha de comandos para criar as tabelas do banco de dados. Para obter exemplos de como executar a ferramenta eclenhancer, consulte o tópico Comando eclenhancer. Para obter exemplos de como usar a ferramenta wsmapping, consulte o tópico Comando wsmapping.
  5. Opcional: Se você estiver utilizando o OpenJPA e o DB2 e desejar usar a Structured Query Language (SQL) estática, execute o comando wsdbgen. Para usar o comando wsdbgen, o IBM Optim PureQuery Run Time deve ser instalado. O comando wsdbgen cria o arquivo persistence_unit_name.pdqxml no mesmo diretório META-INF no qual o arquivo persistence.xml está localizado. Se possuir diversas unidades de persistência, o comando wsdbgen deverá ser executado para cada unidade de persistência.

    Quando diversos arquivos pdqxml estiverem referenciados por um aplicativo, use o utilitário Merge para combiná-los em um arquivo pdqxml único. Especifique o arquivo pdqxml combinado como uma propriedade pureQueryXml de pdqProperties. Consulte a documentação do utilitário Merge no centro de informações do IBM Integrated Data Management.

    Evitar Problemas Evitar Problemas: Os aplicativos que usam o JPA e estiverem configurados para executar SQL estática podem ter várias exceções. Essas exceções podem ocorrer com o comando wsdbgen, que pode ser usado para preparar o aplicativo ou quando o aplicativo estiver em execução e chamar um método JPA. Para resolver este problema, conclua o seguinte:
    1. Instale as program temporary fixes (PTF) para o Driver iSeries JDBC V5R4. Instale PTF números SI32561 e SI32562. É possível localizar os PTFs por meio do website IBM System i Support: PTF Cover Letters.
    2. Se você usa o DB2 Universal Database para iSeries V6R1 ou V5R3, visite o website de correção para o release apropriado.
    3. Instale o nível necessário do IBM Optim PureQuery Run Time, que é da Versão 1.3.100 ou posterior. Para obter mais informações, consulte o website IBM Data Studio pureQuery Runtime. Instale os mais recentes drivers JCC, que é da Versão 3.52.95 ou posterior, com a correção para APAR PK65069. Os drivers JCC mais recentes fazem parte do pacote de software IBM DB2.
    4. Para DB2 em um servidor z/OS, instale a PTF UK39204 para o driver alternativo V8 ou a PTF UK39205 para V9, e instale a correção para o APAR PK67706.
    gotcha

    Para obter exemplos de como executar este comando, consulte o tópico Comando wsdbgen.

  6. Opcional: Se você estiver usando o OpenJPA e a identidade gerenciada por aplicativo, gere uma classe de identidade gerenciada por aplicativo com a ferramenta wsappid. Ao usar uma identidade gerenciada por aplicativo, um ou mais dos campos deve ser um campo de identidade. Utilize uma classe de identidade se sua entidade tiver vários campos de identidade e pelo menos um dos campos estiver relacionado à outra entidade. A ferramenta de identidade gerenciada pelo aplicativo gera o código Java que usa a classe de identidade para qualquer tipo persistente que implementa a identidade gerenciada pelo aplicativo.

    Para obter exemplos de como usar a ferramenta wsappid, consulte o tópico Comando wsappid.

Exemplo

A seguir, um arquivo persistence.xml de amostra para o ambiente Java SE:

Para EclipseLink:

<?xml version="1.0" encoding="UTF-8"?>  
<persistence xmlns="http://java.sun.com/xml/ns/persistence"      
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1"
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence         
          http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">          
     <persistence-unit name="TheWildZooPU" transaction-type="RESOURCE_LOCAL">
          <!-- additional Mapping file, in addition to orm.xml>
         <mapping-file>META-INF/JPAorm.xml</mapping-file>
          <class>com.company.bean.jpa.PersistebleObjectImpl</class>
          <class>com.company.bean.jpa.Animal</class>
          <class>com.company.bean.jpa.Dog</class>
          <class>com.company.bean.jpa.Cat</class>
          <properties>
             <property name="javax.persistence.jdbc.driver"
                        value="org.apache.derby.jdbc.EmbeddedDriver" />
             <property name="javax.persistence.jdbc.url"
                       value="jdbc:derby:target/database/jpa-test-database;create=true" />
             <property name="javax.persistence.schema-generation.database.action"
                        value="create" />
             <property name="javax.persistence.jdbc.user"
                        value="user" />
             <property name="javax.persistence.jdbc.password"
                        value="password"/>
          </properties>
     </persistence-unit>
</persistence>
      
Para OpenJPA:
<?xml version="1.0" encoding="UTF-8"?>  
<persistence xmlns="http://java.sun.com/xml/ns/persistence"               
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      version="2.0"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                       http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
            <persistence-unit name="TheWildZooPU" transaction-type="RESOURCE_LOCAL">
              <!-- additional Mapping file, in addition to orm.xml>
              <mapping-file>META-INF/JPAorm.xml</mapping-file>
              <class>com.company.bean.jpa.PersistebleObjectImpl</class>
              <class>com.company.bean.jpa.Animal</class>
              <class>com.company.bean.jpa.Dog</class>
              <class>com.company.bean.jpa.Cat</class>
                   <properties>
                        <property name="openjpa.ConnectionDriverName"
                                value="org.apache.derby.jdbc.EmbeddedDriver" />
                        <property name="openjpa.ConnectionURL"
                                value="jdbc:derby:target/database/jpa-test-database;create=true" />
                        <property name="openjpa.Log"
                                value="DefaultLevel=INFO,SQL=TRACE,File=./dist/jpaEnhancerLog.log,Runtime=INFO,Tool=INFO" />
                        <property name="openjpa.ConnectionFactoryProperties"
                                value="PrettyPrint=true, PrettyPrintLineLength=72" />
                        <property name="openjpa.jdbc.SynchronizeMappings"
                                value="buildSchema(ForeignKeys=true)" />
                        <property name="openjpa.ConnectionUserName"
                                value="user" />
                        <property name="openjpa.ConnectionPassword"
                                value="password"/>
                        </properties>
            </persistence-unit>
</persistence>
    

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_jpadevsefepplus
Nome do arquivo: tejb_jpadevsefepplus.html