Restricciones y excepciones de la persistencia gestionada por contenedor

Cierto software externo que puede afectar directamente las aplicaciones limita las características CMP (persistencia gestionada por contenedor). No obstante, puede encontrar una solución a estas limitaciones.

En cada caso, sólo el comportamiento muy específico del software impone restricciones en los beans CMP. Las recomendaciones siguientes le ayudarán a evitar estos comportamientos.

Restricción del despliegue de CMP y del tipo IMAGE de Sybase

Cuando se despliegan enterprise beans con tipos CMP (Persistencia gestionada por contenedor) que no son primitivos y no tienen una correlación JDBC natural, la herramienta de despliegue correlaciona el tipo CMP con un tipo binario en la base de datos, donde se almacena como instancia serializada. Para Sybase, la herramienta utiliza el tipo JDBC LONG VARBINARY. El controlador de Sybase correlaciona LONG VARBINARY con el tipo nativo IMAGE.

Aunque VARBINARY tiene menos restricciones que IMAGE en Sybase, no se puede utilizar ya que está limitado a un tamaño de 255 bytes, demasiado pequeño para los objetos Java™ serializados típicos.

Las restricciones específicas del tipo IMAGE son:
  • No se puede utilizar el tipo IMAGE en la cláusula WHERE de una consulta SQL. Esta restricción puede aparecer siempre que un enterprise bean contenga una consulta EJB-QL con un tipo CMP en la cláusula WHERE, que se correlacione con el tipo IMAGE en la base de datos relacional de Sybase.
  • No se puede utilizar el tipo IMAGE en las consultas select marcadas DISTINCT. Este problema se da en los siguientes casos de usuario:
    • Cuando se especifica la palabra clave DISTINCT en una consulta select EJB-QL que tiene una correlación del tipo Java con IMAGE.
    • Cuando los enterprise beans tienen métodos finder y ejbSelect() que devuelven java.util. Establezca y correlacione los tipos CMP con IMAGE.
Para solucionar esta restricción, edite las correlaciones EJB en el juego de herramientas de Rational Application Developer y siga uno de estos procedimientos:
  • Si está seguro de que la instancia serializada del tipo CMP no será nunca mayor de 255 bytes, puede cambiar la correlación del tipo CMP de IMAGE o LONG VARBINARY a VARBINARY.
  • Correlacione el tipo CMP con varios campos RDB mediante una herramienta de creación. Por ejemplo, si el tipo CMP es un objeto Java X con un campo int y un campo string, correlacione X con dos campos RDB, INTEGER y VARCHAR, utilizando una herramienta de creación. Consulte la documentación de Rational Application Developer para obtener más información sobre el uso de herramientas de creación.

Se produce una excepción ClassCastException cuando se ejecutan beans CMP 1.1

Si ha creado la aplicación EJB (Enterprise JavaBeans) utilizando Rational Application Developer o WebSphere Studio Application Developer Integration Edition, Versión 4.0.x, y la aplicación contiene beans de persistencia gestionada por contenedor (CMP) 1.1 con asociaciones (relaciones), puede recibir una excepción java.lang.ClassCastException cuando ejecute la aplicación en WebSphere Application Server.
Deprecated feature Deprecated feature: Los procesos de empresa de los que se ha creado un modelo con WebSphere Studio Application Developer Integration Edition Versión 5.0 o anteriores quedan en desuso.depfeat

La operación cast generada por Rational Application Developer o WebSphere Studio Application Developer Integration Edition, Versión 4.0.x, no utiliza el objeto javax.rmi.PortableRemoteObject.narrow(...) para convertir el objeto remoto en la interfaz remota de los beans CMP en la clase XToYLink.java (o YToXLink.java), siendo X e Y beans CMP 1.1.

Respuesta recomendada:

  1. Localice los métodos siguientes en todas las clases de tipo link, por ejemplo, XToYLink.java y YToXLink.java, siendo X y Y 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. Añada el objeto javax.rmi.PortableRemoteObject.narrow(...) para convertir el objeto remoto en la interfaz remota de los beans CMP.
Por ejemplo, cambie el siguiente método original:
public void secondaryAddElementCounterLinkOf(javax.ejb.EJBObject anEJB) throws java.rmi.RemoteException {
        if (anEJB != null) 
               ((X) anEJB).secondaryAddY((Y) getEntityContext().getEJBObject()); 
Por:
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)); 

Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdat_cmptips
File name: rdat_cmptips.html