Restrictions et exceptions CMP

Certains logiciels externes ayant un impact direct sur vos applications peuvent limiter les fonctions de persistance gérée par conteneur (CMP). Cependant, il existe des solutions de contournement.

Dans tous les cas, seuls certains comportements spécifiques des logiciels imposent des restrictions à vos beans CMP. Les conseils suivants vous aideront à éviter ces comportements.

Restriction en matière de déploiement CMP et de type IMAGE dans Sybase

Si vous déployez des beans enterprise avec des types CMP (persistance gérée par conteneur) non primitifs et non pourvus d'un mappage naturel JDBC, l'outil de déploiement mappe le type CMP sur un type binaire de la base de données dans laquelle il est stocké en tant qu'instance sérialisée. Pour Sybase, l'outil emploie le type JDBC LONG VARBINARY. Le pilote Sybase associe LONG VARBINARY au type natif IMAGE.

Bien que le type VARBINARY soit moins restrictif que le type IMAGE dans Sybase, vous ne pouvez pas l'utiliser car il est limité à une taille de 255 octets, ce qui est trop peu pour des objets sérialisés Java™ types.

Les restrictions spécifiques relatives au type IMAGE sont les suivantes :
  • Vous ne pouvez pas utiliser le type IMAGE dans la clause WHERE d'une requête SQL. Vous rencontrerez cette restriction chaque fois qu'un bean enterprise contiendra une requête EJB-QL dont la clause WHERE comporte le type CMP. Cette clause est mappée sur le type IMAGE dans la base de données relationnelle Sybase.
  • Vous ne pouvez pas utiliser le type IMAGE dans des requêtes select marquées DISTINCT. Cette situation survient dans les scénarios utilisateur suivants :
    • Lorsque le mot-clé DISTINCT est spécifié dans une requête EJB-QL select dotée d'un type Java mappé sur IMAGE.
    • Lorsque les méthodes finder et ejbSelect() des beans enterprise renvoient java.util. Définissez les types CMP et mappez-les sur IMAGE.
Pour y remédier, éditez les mappages d'EJB dans la boîte à outils Rational Studio Application Developer et effectuez l'une des opérations suivantes :
  • Si vous êtes certain que la taille de l'instance sérialisée du type CMP n'est jamais supérieure à 255 octets, vous pouvez modifier le mappage des types CMP en remplaçant IMAGE ou LONG VARBINARY parVARBINARY.
  • Mappez le type CMP sur plusieurs zones RDB via un composeur. Par exemple, si le type CMP est un objet Java X avec une zone int et une zone string, mappez X sur deux zones RDB, INTEGER et VARCHAR, à l'aide d'un composeur. Reportez-vous à la documentation de Rational Application Developer pour plus détails concernant l'utilisation des composeurs.

Une exception ClassCastException se produit lors de l'exécution de beans CMP version 1.1.

Si vous avez créé votre application EJB (JavaBeans) à l'aide de Rational Application Developer ou WebSphere Studio Application Developer Integration Edition, Version 4.0.x , et que cette application contient des beans CMP version 1.1 avec des associations (relations), il se peut que vous receviez une exception java.lang.ClassCastException lors de l'exécution de l'application sous WebSphere Application Server.
Fonction obsolète Fonction obsolète: Les processus métier modélisés avec WebSphere Studio Application Developer Integration Edition version 5.0 ou antérieure sont obsolètes.depfeat

Cette opération de transtypage générée par Rational Application Developer ou WebSphere Studio Application Developer Integration Edition version 4.0.x, n'utilise pas l'objet javax.rmi.PortableRemoteObject.narrow(...) pour convertir l'objet éloigné en interface Remote des beans CMP dans la classe XToYLink.java (ou YToXLink.java) où X et Y sont des beans CMP 1.1.

Solution recommandée :

  1. Recherchez les méthodes suivantes dans toutes les classes de liens, par exemple, XToYLink.java et YToXLink.java, où X et Y sont des 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. Ajoutez l'objet javax.rmi.PortableRemoteObject.narrow(...) pour convertir l'objet éloigné en interface Remote des beans CMP.
Par exemple, modifiez la méthode d'origine suivante :
public void secondaryAddElementCounterLinkOf(javax.ejb.EJBObject anEJB) throws java.rmi.RemoteException {
        if (anEJB != null) 
               ((X) anEJB).secondaryAddY((Y) getEntityContext().getEJBObject()); 
en :
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)); 

Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdat_cmptips
Nom du fichier : rdat_cmptips.html