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.
- 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.
- 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

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:
- 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)
- Añada el objeto javax.rmi.PortableRemoteObject.narrow(...) para convertir el objeto remoto en la interfaz remota de los beans CMP.
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));