Restrições e Exceções de Container-Managed Persistence

Algum software externo que causa impacto diretamente em seus aplicativos pode limitar os recursos de CMP (Container-Managed Persistence). No entanto, é possível solucionar essas limitações.

Em cada caso, apenas os comportamentos muito específicos das restrições de local de software em seus beans de CMP. As dicas a seguir o ajudarão a evitar esses comportamentos.

Restrição de Implementação de CMP e de Tipo de IMAGEM do Sybase

Ao implementar beans corporativos com tipos CMP (Container Managed Persistence) que não são primitivos e não possuem um mapeamento natural do JDBC, a ferramenta de implementação mapeia o tipo CMP para um tipo binário no banco de dados no qual ele é armazenado como uma instância serializada. Para o Sybase, a ferramenta utiliza o tipo JDBC LONG VARBINARY. O driver do Sybase mapeia LONG VARBINARY para o tipo nativo IMAGE.

Embora o tipo VARBINARY tenha menos restrições do que IMAGE no Sybase, você não pode utilizá-lo porque ele está limitado a um tamanho de 255 bytes, o que é muito pouco para objetos Java™ serializados típicos.

As restrições específicas sobre o tipo IMAGE são:
  • Você não pode utilizar o tipo IMAGE na cláusula WHERE de uma consulta SQL. Você pode encontrar essa restrição sempre que um enterprise bean contiver uma consulta EJB-QL que tenha um tipo CMP na cláusula WHERE, que mapeia para o tipo IMAGE no banco de dados relacional Sybase.
  • Você não pode utilizar o tipo IMAGE em consultas selecionadas marcadas DISTINCT. Essa situação ocorre nestes cenários do usuário:
    • Quando a palavra-chave DISTINCT é especificada em uma consulta de seleção EJB-QL tendo um mapeamento do tipo Java para IMAGE.
    • Quando os beans corporativos têm métodos finder e ejbSelect() retornando java.util. Defina e tenha tipos CMP mapeados para IMAGE.
Para contornar essa restrição, edite os mapeamentos EJB no conjunto de ferramentas do Rational Application Developer e proceda de uma das seguintes formas:
  • Se você tiver certeza de que a instância serializada do tipo CMP nunca é maior do que 255 bytes, poderá alterar o mapeamento do tipo CMP de IMAGE ou LONG VARBINARY para VARBINARY.
  • Mapeie o tipo CMP para vários campos RDB por meio de um compositor. Por exemplo, se o tipo CMP for um objeto Java X com um campo int e um campo de cadeia, mapeie X para os dois campos RDB, INTEGER e VARCHAR, utilizando um criador. Consulte a documentação do Rational Application Developer para obter mais informações sobre o uso de criadores.

Ocorre uma Exceção ClassCastException ao Executar os Beans CMP 1.1

Se você criou seu aplicativo Enterprise JavaBeans (EJB) usando o Rational Application Developer ou o WebSphere Studio Application Developer Integration Edition, Versão 4.0.x, e o aplicativo contiver beans de persistência gerenciada por contêiner (CMP) 1.1 com associações (relacionamentos), poderá receber uma exceção java.lang.ClassCastException quando executar seu aplicativo no WebSphere Application Server.
Recurso Reprovado Recurso Reprovado: Os processos de negócios modelados com o WebSphere Studio Application Developer Integration Edition Versão 5.0 ou anterior foram reprovados.depfeat

A operação de lançamento gerada pelo Rational Application Developer ou pelo WebSphere Studio Application Developer Integration Edition, Versão 4.0.x, não utiliza o objeto javax.rmi.PortableRemoteObject.narrow(...) para converter o objeto remoto para a interface remota de beans CMP na classe XToYLink.java (ou YToXLink.java), em que X e Y são beans CMP 1.1.

Resposta Recomendada:

  1. Localize os métodos a seguir em todas as classes de link, por exemplo, XToYLink.java e YToXLink.java, em que X e Y são beans CMP 1.1:
    public void secondaryAddElementCounterLinkOf(javax.ejb.EJBObject anEJB)
    public void secondaryRemoveElementCounterLinkOf(javax.ejb.EJBObject anEJB) 
    public void secondarySetCounterLinkOf(javax.ejb.EJBObject anEJB)
  2. Inclua o objeto javax.rmi.PortableRemoteObject.narrow(...) para converter o objeto remoto na interface remota de beans CMP.
Por exemplo, altere o seguinte método original:
public void secondaryAddElementCounterLinkOf(javax.ejb.EJBObject anEJB) throws java.rmi.RemoteException {
        if (anEJB != null) 
               ((X) anEJB).secondaryAddY((Y) getEntityContext().getEJBObject()); 
para:
public void secondaryAddElementCounterLinkOf(javax.ejb.EJBObject anEJB) throws java.rmi.RemoteException {
        if (anEJB != null)
             ((X) anEJB).secondaryAddY((Y)
javax.rmi.PortableRemoteObject.narrow(getEntityContext().getEJBObject(), Y.class)); 

Ícone que indica o tipo de tópico Tópico de Referência



Í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=rdat_cmptips
Nome do arquivo: rdat_cmptips.html