Desenvolvendo Aplicativos JPA 2.x para um Ambiente Java EE

Contêineres no servidor de aplicativos podem fornecer muitas das funções necessárias para a JPA (Java™ Persistence API) em um ambiente Java Enterprise Edition (Java EE). O servidor de aplicativos também fornece ferramentas de comando JPA para ajudá-lo a desenvolver aplicativos em um ambiente Java EE.

Sobre Esta Tarefa

Atenção: Ao 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 você possui a versão mais recente dos comandos para o seu nível de release.

Para essa tarefa, você deve especificar o arquivo Java archive (JAR) independente com.ibm.ws.jpa-2.1.thinclient_9.0.jar no caminho de classe para compilação com relação às interfaces JPA 2.1. Para compilar com relação às interfaces JPA 2.0, especifique o com.ibm.ws.jpa-2.0.thinclient_9.0.jar. Este 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 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 para garantir que os aplicativos possam executar em um ambiente Java EE.

O contêiner suporta todas as injeções necessárias para garantir que os aplicativos executem no ambiente Java EE. Por exemplo, o contêiner pode injetar @PersistenceUnit e @PersistenceContext em seus aplicativos.

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ê começa do início com as definições de entidade e os mapeamentos relacionais do objeto e, em seguida, deriva os esquemas dos bancos de dados a partir desses dados. Se você utilizar essa abordagem, provavelmente cuidará da criação da arquitetura do modelo do objeto e, em seguida, gravará suas classes de entidade. Essas 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 JPA para gerar as tabelas de banco de dados que são baseadas nas classes de entidades. A ferramenta wsmapping ajuda com essa abordagem ao usar OpenJPA como o provedor de persistência.
    • Mapeamento de baixo para cima: Você inicia com o modelo de dados, que são os esquemas de bancos de dados e, em seguida, trabalha para cima em suas classes de entidade. A ferramenta wsreversemapping ajuda com essa abordagem ao utilizar OpenJPA como o provedor de persistência.
    • Mapeamento de encontro no 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 ajudam 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 essas 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 Web sites.
  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, eclenhancer para EclipseLink e wsenhancer para OpenJPA. Um otimizador é uma ferramenta que inclui bytecode de integração específico do provedor para as classes persistentes depois delas terem sido gravadas. 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. Embora o provedor de persistência do servidor de aplicativos possa aprimorar automaticamente as entidades no tempo de execução, você obterá um desempenho melhor se puder aprimorar as entidades ao construir o aplicativo. O aplicativo não tenta aprimorar entidades que já estão aprimoradas.

    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.

  4. Opcional: Se você não estiver utilizando o modelo de desenvolvimento para mapeamento bottom-up, gere ou atualize as tabelas de bancos de dados automaticamente ou utilizando a ferramenta eclenhancer ou 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 do 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 OpenJPA:
      <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 JAR (Java archive) 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 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 implementam o JPA e estão 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 as seguintes etapas:
    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 Web site IBM System i Support: PTF Cover Letters.
    2. Se você usar o DB2 Universal Database para iSeries V6R1 ou V5R3, visite o Web site de correção para o release apropriado.
    3. Instale o nível necessário de pureQuery, que é da Versão 1.3.100 ou posterior. Para obter mais informações, consulte o Web site IBM Optim pureQuery Runtime. Instale o mais recente driver 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 está um exemplo de um arquivo persistence.xml:
<?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="JTA">
        <jta-data-source>jdbc/DataSourceJNDI</jta-data-source>
        <!-- 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=”eclipselink.ddl-generation”
                       value=”create-tables”/> 
			
        </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_jpadeveefepplus
Nome do arquivo: tejb_jpadeveefepplus.html