Configurando o Fast Path PWSJPA

O Java™ Persistence API (JPA) é uma especificação muito flexível que fornece diretrizes sobre como os implementadores devem converter dados relacionais na forma de objeto Java. Devido à natureza flexível dessa API, uma grande quantia de trabalho é concluída no tempo de execução pelo provedor da API para determinar como carregar os dados relacionais corretamente para o formato de objeto. Essa flexibilidade resulta em um tempo de execução que, em determinadas circunstâncias, deve-se executar continuamente o código redundante para assegurar que os dados sejam carregados adequadamente. Ao abrir mão de parte dessa flexibilidade, a otimização do WSJPA FastPath tenta ignorar o máximo desse código redundante e gera um código altamente otimizado que interage diretamente com a camada do JDBC. Essa otimização é convertida em desempenho melhorado.

Sobre Esta Tarefa

Nota: Fast Path é suportado somente pelo provedor de persistência WSJPA.

A otimização desses caminhos de códigos é um processo muito complexo e, portanto, nem todos os modelos de domínio satisfazem os requisitos para as otimizações de Fast Path WSJPA.

O recurso Fast Path pode melhorar o desempenho de alguns aplicativos que têm seus dados que são modelados em um formato aceitável e que não estão usando recursos JPA estendidos.

Por exemplo, revise o código a seguir:
public Customer findCustomer(int id) { 
		 		 return em.find(Customer.class, id); 
}

Esse exemplo é um método auxiliar simples que localiza uma entidade de cliente. Cada vez que o método findCustomer é iniciado, o tempo de execução de JPA executa grandes quantias de códigos para analisar a solicitação, acessar o banco de dados e carregar a Customer Entity. Sem o uso da otimização do FastPath, a maior parte da lógica é idêntica para a segunda execução e as subsequentes do método findCustomer. Uma pequena parte das decisões do tempo de execução da primeira execução é retida para chamadas futuras do método findCustomer. Esse processamento de código redundante pode causar problemas de desempenho para alguns cenários.

Quando o recurso FastPath está ativado, na primeira chamada de em.find(Customer.class, id), é gerado um código altamente otimizado que substitui todas as chamadas subsequentes para em.find(Customer, id). Esse código gerado assume que o ID é a única coisa que poderá ser alterada sempre que um Cliente for localizado. Como resultado, é possível gerar um código quase livre de decisões. Na primeira chamada de método, se a geração de FastPath for bem-sucedida, uma mensagem semelhante à seguinte será registrada:
10855  fp_pu  INFO   [main] FP - Successfully generated FastPath com.ibm.ws.persistence.fastpath.entities.Customer$Find$FastPath@1f6b69d7".

Quando essa mensagem for registrada, todas as exceções futuras de localização de um Cliente usarão esse novo caminho gerado.

O exemplo anterior descreveu como um caminho do localizador pode ser executado. O FastPath também tenta otimizar o carregamento lento de campos (relacionamento e não relacionamento) e a execução de NamedQueries.

Configurando o FastPath:

Quando a propriedade de unidade de persistência wsjpa.FastPath=true estiver configurada, o tempo de execução de JPA tentará determinar quais operações poderão ser manipuladas com segurança. As propriedades Incluir e Excluir podem ser usadas para configurar explicitamente quais operações serão executadas usando o FastPath.

Quando wsjpa.FastPath estiver configurado, openjpa.MetaDataRepository=Preload=true também deverá ser configurado. Por exemplo:
<property name=”openjpa.MetaDataRepository” value=”Preload=true”/>
Nota: Caso um determinado caminho não possa ser otimizado pelo tempo de execução de FastPath ou caso esteja configurado na propriedade excluir, ele será executado pelo código de tempo de execução de JPA normal. Esse é um recurso-chave que permite a experimentação com a otimização do FastPath. Os caminhos de código não otimizados retornarão ao caminho de código de JPA original sem nenhuma perda de função.
Sintaxe de configuração:
<property name=”wsjpa.FastPath”
                              value=”true(Include=’<path>;,<path>;...’;Exclude=’<path>,<path>...’)”>
Sintaxe de caminho:
  • Localizador: <Nome completo da entidade> (como com.ibm.ws.jpa.Customer)
  • Campo de carregamento lento: <Nome completo do campo> (como com.ibm.ws.jpa.Customer.cars)
  • Consulta nomeada: <Nome completo da consulta> (como com.ibm.ws.jpa.customer_find_by_id)
Regras:
  • Se nenhuma propriedade (Incluir/Excluir) for especificada, o tempo de execução verificará todos os tipos persistentes e tentará determinar quais caminhos poderão ser processados.
  • Se a propriedade incluir estiver especificada, somente os caminhos especificados serão processados e a propriedade excluir será ignorada.
  • Se a propriedade excluir estiver especificada, todos os caminhos que não estiverem na lista de exclusão tentarão ser manipulados.
  • Se algum campo for fornecido na lista de exclusão e o tipo de busca do campo for EAGER, o campo será ignorado, pois ele nunca seria carregado lentamente.
Exemplo 1:
<property name="wsjpa.FastPath" value="false"/>
Nesse exemplo, false é o valor padrão. Essa otimização não é ativada por padrão.
Exemplo 2:
<property name="wsjpa.FastPath" value="true"/>
O tempo de execução processa todas as entidades e tenta determinar quais localizadores, operações de carregamento lento e consultas nomeadas poderão ser otimizadas.
Exemplo 3:
<property name="wsjpa.FastPath" value="true(Exclude=com.ibm.ws.jpa.entities.Customer.address,customer.findById"/>
Same as in example #2, except lazy loading the Customer.address field and the named query customer.findById are excluded from FastPath processing.
Exemplo 4:
<property name="wsjpa.FastPath" value="true(Include=com.ibm.ws.jpa.entities.Customer, customer.findById"/>
As únicas operações processadas são a localização de um Cliente e a execução da NamedQuery ‘customer.findById’. Todas as outras operações são executadas usando o tempo de execução de JPA normal.

Limitações:

Conforme mencionado anteriormente, há compensações para realizar o total de ganhos de desempenho usando as otimizações do FastPath. Embora esse recurso tente suportar uma grande variedade de modelos de Entidade e recursos JPA, existem vários casos conhecidos que não são suportados pela otimização FastPath. Consulte a lista a seguir de limitações conhecidas neste momento:
  • Incompatível com a propriedade openjpa.DataCache.
  • Incompatível com a propriedade openjpa.FetchPlan.
  • Passagem de um LockModeType e/ou um mapa de propriedades para o método de localização EntityManager.
  • Estratégias de campo customizado
  • @org.apache.openjpa.persistence.Factory, @javax.persistence.SecondaryTable,
    @org.apache.openjpa.persistence.Externalizer,
    @org.apache.openjpa.persistence.ExternalValues,
    @org.apache.openjpa.persistence.LRS, @java.sql.Lob, @java.sql.Clob, @java.sql.Blo

  • Mapeamento de Coluna XML
  • Integráveis
  • Somente a herança de tabela única é suportada.
  • Retorno de chamada de @javax.persistence.PostLoad
  • Identificadores delimitados
  • Execução de um caminho que resulta em:
    • Busca de um campo ManyToMany.
    • Busca de uma coleção que é implementada como um Mapa ou uma Matriz.
    • Execução de uma instrução SQL que resulta na junção de uma tabela unida
    • Execução de uma instrução SQL que resulta na junção da mesma tabela mais de uma vez. Por exemplo: A presença de uma entidade com vários relacionamentos EAGER OneToOne com a mesma Entidade.
    • Carregamento de vários níveis de relacionamentos eager. Como {A->(eager)B->(eager)C}
  • Chamada dos seguintes métodos setFirst, setFlush, setHind, setLockMode e setMax em um NamedQuery.
  • Incompatível com aplicativos JPA que usam PureQuery.
  • Incompatível com aplicativos JPA que usam intenção de acesso.
  • Configuração de qualquer propriedade no tempo de execução que altera como a JPA busca dados.

Í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_jpafastpath
Nome do arquivo: tejb_jpafastpath.html