Outils EJB - Notes sur l'édition

1.0 Introduction
2.0 Spécifications et logiciels pris en charge
3.0 Problèmes connus
   3.1 Erreurs de régénération
   3.2 Mappage intermédiaire - Restrictions et conseils
   3.3 Prise en charge du déplacement par glissement dans l'éditeur de mappage
   3.4 Suppression de tables et de schémas dans la vue Navigateur de la perspective J2EE
   3.5 Prédicats optimistes pour les beans entity CMP 1.1
   3.6 Héritage - Restrictions et conseils
   3.7 Référencement des fichiers JAR d'exécution lors du développement
   3.8 Ne pas mapper des types composés dans plusieurs tables
   3.9 La suppression d'une entité CMP ne supprime pas l'entrée de mappage
   3.10 Restrictions EJB QL
   3.11 La validation des références d'EJB n'est pas automatique
   3.12 Noms en arabe non pris en charge pour les fichiers et les beans Java
   3.13 Restrictions de la génération de requête
   3.14 Erreur lors de l'édition du lien local-ejb-ref
   3.15 Erreurs dans la liste des tâches après le déploiement des relations EJB 2.0
   3.16 Méthode ejbCreate spécialisée manquante pour les colonnes de clés externes non vides
   3.17 Restriction des modifications apportées par héritage aux zones CMP de la page Source
   3.18 Code de déploiement d'EJB non supprimé lors de la modification d'une classe de bean
   3.19 Clé primaire inconnue non prise en charge
   3.20 La modification d'une classe de clé principale pour un bean dont la persistance est gérée par conteneur (CMP) 1.1 avec des relations génère des erreurs de compilation
   3.21 Erreurs de réflexion lors d'une mise à jour à partir d'un référentiel CVS
   3.22 Suppression d'une requête de recherche de la vue Structure
   3.23 Page Source et héritage des EJB
   3.24 Les requêtes EJB QL ne sont pas générées correctement pour les relations à origines et destinations multiples dans une structure d'héritage
   3.25 Problème de mappage de serveur SQL avec le type de données FLOAT
   3.26 Linux : Problèmes de connexion lors de l'exécution d'un bean CMP 1.1 dans DB2 sur un serveur WebSphere Application Server V4 (environnement de test d'unité)
   3.27 Il peut être nécessaire de générer le code déployé lorsque des beans enterprise provenant d'un autre projet sont utilisés
   3.28 Prise en charge du mappage des beans enterprise vers les clés externes et les clés primaires
   3.29 Restriction liée à l'héritage et au mappage de tables secondaires
   3.30 Suppression des beans d'accès lors de la migration des beans EJB 1.1 vers EJB 2.0
   3.31 Déploiement d'applications EJB avec des convertisseurs et des composeurs sur WebSphere Application Server v4.0.6
   3.32 Migration de projets EJB contenant des classes binaires
   3.33 Implémentation du mappage ascendant pour les vues

1.0 Introduction

Les outils d'EJB offrent un environnement spécialisé permettant de développer des beans enterprise. Les outils EJB comportent les entités suivantes :

Le présent fichier Readme décrit les problèmes et restrictions connus, ainsi que les solutions associées aux outils d'EJB.

2.0 Spécifications et logiciels pris en charge

L'option -dbvendor de la commande ejbdeploy (outil de déploiement EJB) prend maintenant en charge les valeurs suivantes (en fonction des bases de données prises en charge) :

mais ne prend plus en charge ces valeurs :

3.0 Problèmes connus

3.1 Erreurs de régénération

Si des fichiers ou des ressources du plan de travail semblent ne pas être synchronisés ou qu'une erreur inattendue survient (par exemple, des éditeurs et des vues ne reflètent pas les paramètres du descripteur de déploiement en cours), il est possible d'y remédier en fermant, puis en rouvrant le projet à partir du menu Projet.

3.2 Mappage intermédiaire - Restrictions et conseils

  1. Concordance par nom ne traite que les concordances exactes. Si vous avez généré votre schéma à l'aide d'un commutateur compatible WebSphere Application Server Version 3.5 ou importé un fichier JAR de WebSphere Application Server Version 3.5, les noms de vos tables portent l'extension "tbl" et ne sont pas reconnus.
  2. Héritage : les beans enfant ne sont pas mappés s'ils ne disposent pas de leurs propres zones. Vous devez les mapper manuellement vers la table parent.
  3. java.util.Date n'est pas pris en charge dans le mappage des zones CMP 1.1.
  4. Si un composeur est utilisé dans un mappage, générez la mappe, sauvegardez-la, fermez, puis rouvrez le projet et déployez-le.

3.3 Prise en charge du déplacement par glissement dans l'éditeur de mappage

Le déplacement par glissement n'est pris en charge que dans le "sens" de la mappe. Par exemple, si la mappe a été créée à partir d'une opération "Descendante", vous pouvez déplacer un bean enterprise par glissement dans une base de données. Les opérations de déplacement par glissement sont permises :

  1. Le déplacement par glissement d'un bean enterprise dans une table crée une mappe entre ces deux éléments.
  2. Le déplacement par glissement d'un bean dans une base de données crée une table correspondante et ses colonnes et la mappe vers le bean et les attributs.

3.4 Suppression de tables et de schémas dans la vue Navigateur de la perspective J2EE

Si une table doit être supprimée, utilisez la perspective Données ou la vue Hiérarchie J2EE de la perspective J2EE, tous les liens dépendants seront également supprimés. Normalement, vous ne devez pas utiliser le navigateur ou le navigateur J2EE pour supprimer des ressources J2EE car les dépendances ne sont alors pas mises à jour.

3.5 Prédicats optimistes pour les beans entity CMP 1.1

Dans WSAD 5.0, nous avons ajouté la possibilité pour le développeur de beans d'identifier les attributs à utiliser pour la mise à jour sur-qualifiée. Les fichiers JAR d'EJB créés à l'aide de versions antérieures de WSAD ne contiennent pas cette spécification pour les beans entity CMP 1.1. Toutefois, lors du déploiement à l'aide de WSAD 5.1, la sémantique précédente est prise en charge. Plus particulièrement, dans le cas d'absence d'une liste d'attributs, tous les prédicats disponibles sont utilisés. Les beans entity CMP sont traités différemment. Si aucun attribut n'est sélectionné en tant que prédicat, aucun attribut n'est ajouté à la mise à jour sur-qualifiée.

3.6 Héritage - Restrictions et conseils

  1. N'utilisez pas de type BLOB dans une structure d'héritage feuille/racine si vous utilisez une base de données Oracle.
  2. Le mappage d'un héritage feuille/racine n'est pas pris en charge pour les bases de données MySQL, InstantDB, SQL92 et SQL99. Elles ne supportent pas les opérateurs set SQL pour les requêtes complexes utilisées pour un mappage feuille/racine. Pour effectuer un test avec ces bases de données, vous devez utiliser un mappage sur une seule table.
  3. Le mappage de zones CMP vers des colonnes non vides n'est pas pris en charge dans les beans hérités. Les prédicats optimistes ne peuvent être définis sur les zones CMP qu'à partir du bean racine.

3.7 Référencement des fichiers JAR d'exécution lors du développement

Si vous devez compiler des fichiers JAR visibles par l'environnement d'exécution de Websphere Application Server (par exemple, rt.jar, xerces.jar, etc.), vous devez en règle générale ajouter ces fichiers JAR pour l'installation de l'environnement d'exécution correspondant à l'aide des variables prédéfinies pour le chemin d'accès aux classes. Par exemple, vous devez utiliser la variable de chemin d'accès aux classes WAS_PLUGINDIR pour les fichiers JAR du serveur WebSphere Application Server v4.0 et la variable de chemin d'accès aux classesWAS_50_PLUGINDIR pour les fichiers JAR du serveur WebSphere Application Server v5.0.

3.8 Ne pas mapper des types composés dans plusieurs tables

L'éditeur de mappage permet de mapper un type composé vers plusieurs colonnes dans des tables différentes. Cette opération provoque des erreurs dans la génération du code déployé. Vérifiez que toutes les colonnes du mappage du type composé appartiennent à la même table.

3.9 La suppression d'une entité CMP ne supprime pas l'entrée de mappage

Lorsqu'une entité CMP est supprimée, les mappages des mappes correspondantes référencées par ce bean ne seront pas supprimés. Lorsque l'éditeur de mappage est ouvert sur ces fichiers après la suppression d'une entité, les mappages sont supprimés. Ce comportement est normal. Il n'est pas nécessaire d'ouvrir l'éditeur de mappage avant de générer le code de déploiement.

3.10 Restrictions EJB QL

  1. Les requêtes EJB QL impliquant des beans enterprise dont les clés sont constitués de relations à d'autres beans enterprise apparaissent comme non valides et provoquent des erreurs lors du déploiement. Cet incident est connu.
  2. La prise en charge IBM EJB QL étend la spécification de différentes manières, notamment l'assouplissement de certaines restrictions, l'ajout de prise en charge pour un plus grand nombre de fonctions DB2, etc. Si la portabilité entre les outils de déploiement EJB ou les bases de données des différents fournisseurs est un critère important, notez bien toutes les requêtes EJB QL conformément aux instructions du chapitre 11 de la spécification EJB 2.0.

3.11 La validation des références EJB n'est pas automatique

La validation des références locales d'EJB, des références d'EJB et des références de ressources n'est pas effectuée automatiquement lors de la modification de ces références. Le valideur EAR doit être déclenché de manière explicite pour que ces références soient validées.

3.12 Noms en arabe non pris en charge pour les fichiers et les beans Java

N'utilisez pas de noms en arabe pour les fichiers Java, les beans Java et les beans d'accès. N'utilisez pas de noms en arabe lors de l'emploi de l'exemple MiniBank.

3.13 Restrictions de la génération de requête

  1. Le préchargement entre les relations m:n entraîne la génération d'un SQL incorrect. Il s'agit d'une restriction connue qui sera corrigée ultérieurement.
  2. Le préchargement entre les relations auto-référencées entraîne la génération d'un SQL incorrect.
  3. Les relations entre des beans enterprise parent et enfant d'une même hiérarchie d'héritage qui ne sont pas définies correctement doivent être évitées.

3.14 Erreur lors de l'édition du lien local-ejb-ref

Si vous tentez de modifier le lien d'un élément local-ejb-ref dans la page "Références" de l'éditeur du descripteur de déploiement EJB à l'aide du bouton "Parcourir", il n'est pas possible de sélectionner un bean cible ne possédant pas d'interface Remote. Pour remédier à cela, supprimez la référence, puis créez-la à nouveau.

3.15 Erreurs dans la liste des tâches après le déploiement des relations EJB 2.0

Si vous supprimez une relation EJB 2.0 et que vous regénérez le code de déploiement, des erreurs non valides peuvent apparaître dans la liste des tâches. Pour éviter cela, supprimez le code de déploiement des beans avant de le déployer à nouveau.

Quelquefois, des erreurs non valides peuvent également apparaître dans la liste des tâches après l'ajout d'une relation EJB 2.0 et d'une nouvelle génération de code de déploiement. Dans ce cas, il suffit d'effectuer une nouvelle génération pour supprimer ces erreurs.

3.16 Méthode ejbCreate spécialisée manquante pour les colonnes de clés externes non vides

Si vous effectuez un mappage ascendant sur un schéma avec une clé externe dont les colonnes ne sont pas vides, vous devez créer une méthode ejbCreate() spécialisée avec le type d'interface client d'un rôle ajouté à la signature. Cette action n'est pas automatiquement effectuée par le mappage ascendant.

3.17 Restriction des modifications apportées par héritage aux zones CMP de la page Source

Pour prendre en charge les spécifications EJB 1.1 et 2.0, nous devons créer une zone cmp-field correspondante pour chaque bean subtype d'un lien de parenté d'EJB. Si vous ouvrez l'éditeur de descripteur de déploiement d'EJB et que vous modifiez le nom de l'une de ces zones dans la page Source, la modification de nom correspondante n'est pas apportée aux zones cmp-field créées sur les beans subtype pour satisfaire les spécifications des EJB. La solution consiste à utiliser l'action Editer de la page Beans pour modifier le nom.

3.18 Code de déploiement d'EJB non supprimé lors de la modification d'une classe de bean

Afin de prendre en charge plusieurs beans enterprise utilisant les mêmes classes Java, le code de déploiement généré est requis pour utiliser une technique de nommage permettant de rendre unique les noms des classes de déploiement générées. Les noms sont dérivés des interfaces clés, des interfaces et de la classe de bean existantes.

Si vous avez généré le code de déploiement d'un bean et que vous souhaitez changer une de ses classes, vous devez d'abord supprimer le code de déploiement. Si vous ne le faites pas, les anciennes classes générées ne seront pas supprimées et pourront contenir des erreurs de compilation. Cela peut également être vrai si vous modifiez le type de votre zone primkey-field à l'aide de l'action Editer de la page Beans. Cela remplacera automatiquement la classe de clé par le type de classe spécifié ou une clé composée sera créée si une zone primkey-field n'est plus valide.

3.19 Clé primaire inconnue non prise en charge

Les outils EJB ne prennent pas en charge la définition de clé primaire inconnue décrite par la spécification EJB 2.0. La solution consiste à définir une classe de clé primaire spécifique.

3.20 La modification d'une classe de clé primaire pour un bean dont la persistance est gérée par conteneur (CMP) 1.1 avec des relations génère des erreurs de compilation

Pour prendre en charge les relations 1.1 CMP, des classes de liens sont créées. Il est pour cela nécessaire de connaître les classes des clés primaires des beans. Si vous modifiez la classe de clé primaire d'un CMP version 1.1 impliqué dans les relations, les classes de liens générées contiendront toujours des références à l'ancienne classe de clé primaire. La solution consiste à mettre à jour manuellement la classe de liens. Il ne doit rester que deux occurrences pour lesquelles la modification est nécessaire.

3.21 Erreurs de réflexion lors de la mise à jour à partir du référentiel CVS

Si, après la mise à jour d'un projet EJB à partir d'un référentiel CVS, la liste des tâches affiche des erreurs indiquant que des classes ou des interfaces ne sont pas reflétées, essayez de recompiler le projet EJB pour éliminer les erreurs.

L'erreur est du type suivant : "CHKJ2802E : La classe ejb-class test.SessionBean (ou un de ses supertypes) ne peut pas être reflétée. Vérifiez le chemin d'accès aux classes."

3.22 Suppression d'une requête de recherche de la vue Structure

La suppression d'une requête de recherche d'un bean CMP 2.0 contenant une interface locale de la vue Structure ne parvient pas à supprimer la déclaration de méthode de l'interface Home locale. La solution consiste à utiliser le bouton Supprimer de la section Demandes de l'éditeur de descripteur de déploiement d'EJB.

3.23 Page Source et héritage des EJB

Si vous modifiez la forme des beans CMP dans une hiérarchie d'héritage, vous devez utiliser les pages de conception de l'éditeur de descripteur de déploiement d'EJB et non la page Source. Par exemple, pour ajouter ou supprimer des zones CMP, ou modifier la zone prim-key d'un bean CMP, ces zones sont synchronisées par les outils de tous les beans hérités, pour que ces beans restent conformes à la spécification EJB. Une telle synchronisation peut ne pas se produire si vous changez la source dans la page Source.

3.24 Les requêtes EJB QL ne sont pas générées correctement pour les relations à origines et destinations multiples dans une structure d'héritage

Dans ce scénario, une structure d'héritage d'EJB est définie (soit un héritage racine/feuille, soit un héritage de table unique) et vous disposez d'une relation à origines et destinations multiples vers un bean EJB dans cette structure. Dans ce cas, toute requête EJB QL définie pour ces beans comporte des instructions JOIN incorrectes.

Voici un exemple de la structure :

Client <---- m:m ----> Compte
                            |
                            |
                    ------héritage------
nbsp;                    
                        |         |
                   
Vérification   Sauvegardes

3.25 Problème de mappage de serveur SQL avec le type de données FLOAT

Si votre bean CMP a été mappé vers une base de données SQL Server, un champ de type float doit être mappé vers une colonne de type FLOAT et non REAL.

3.26 Linux : Problèmes de connexion lors de l'exécution d'un bean CMP 1.1 dans DB2 sur un serveur WebSphere Application Server V4 (environnement de test d'unité)

Vous pouvez vous trouver face à des problèmes de connexion lorsque vous exécutez un bean CMP 1.1 dans DB2 sur un serveur WebSphere Application Server V4 (environnement de test d'unité).

Solution : Définissez un bouclage pour votre base de données.

Par exemple, si votre base de données se nomme MyDB, votre nom d'hôte LHOST et que votre numéro de port du service de base de données est 50000, émettez les commandes suivantes :

db2 catalog TCPIP node RHOST remote LHOST server 50000
db2 catalog database MyDB as MyDBAlias
db2 uncatalog db MyDB
db2 catalog database MyDBAlias as MyDB at node RHOST

Pour vérifier le bon fonctionnement, émettez la commande : db2 connect to MyDB user xxx
xxx correspond à votre mot de passe.

3.27 Il peut être nécessaire de générer le code déployé lorsque des beans enterprise provenant d'un autre projet sont utilisés

Si un bean enterprise d'un projet EJB utilise l'interface Home ou Remote d'un deuxième bean enterprise d'un autre projet (par exemple, s'il possède une méthode utilisant l'interface Remote du deuxième bean enterprise en tant que paramètre), vous devez générer le code déployé pour les deux projets si vous changez l'interface Home ou Remote du deuxième bean enterprise.

Ainsi, vous vous assurez que les classes générées par RMIC pour le deuxième bean enterprise sont à jour dans les deux projets.

3.28 Prise en charge du mappage des beans enterprise vers les clés externes et les clés primaires

Lorsque vous mappez un bean enterprise vers une table de base de données, il existe des restrictions impliquant des clés externes et des clés primaires :

3.29 Restriction liée à l'héritage et au mappage de table secondaire

Si vous utilisez l'approche racine/feuille pour le mappage de l'héritage ou que vous utilisez des mappes secondaires avec plusieurs tables, vous devez supprimer les contraintes de clé externe de la base de données afin d'éviter des problèmes de tri d'intégrité référentielle (instructions SQL exécutées dans un ordre incorrect).

3.30 Suppression des beans d'accès lors de la migration des beans EJB 1.1 vers EJB 2.0

Etant donné que les beans d'accès ne sont pas pris en charge pour les beans enterprise ayant uniquement des vues de client local, il est nécessaire d'effectuer des opérations de nettoyage manuelles si vous migrez un bean d'EJB 1.1 vers EJB 2.0 et que vous ajoutez une vue de client local et supprimez la vue de client éloigné. Si vous avez un bean d'accès de classe de données, vous devez supprimer la classe de fabrique associé au bean. Si vous avez un bean d'accès d'assistant de copie, vous devez supprimer le bean d'accès lui-même, supprimer la fabrique et nettoyer les méthodes de la classe de bean qui pourraient être non valides.

3.31 Déploiement d'applications EJB avec des convertisseurs et des composeurs sur WebSphere Application Server v4.0.6

Si vous utilisez des convertisseurs et des composeurs dans le mappage EJB vers RDB et que vous effectuez le déploiement sur WebSphere Application Server v4.0.6.x, vous devez appliquer un correctif à votre serveur WebSphere Application Server. Le correctif WAS met à jour le fichier vaprt.jar.

Le correctif WAS est PQ76109.

Dans WebSphere Studio Application Developer v5.1, le fichier vaprt.jar qui héberge les convertisseurs et les composeurs par défaut a été modifié. De par ces modifications, il est nécessaire de mettre à jour le fichier vaprt.jar dans WebSphere Application Server v4.0.6. Le correctif WAS synchronise ce fichier vaprt.jar.

Une solution alternative au correctif consiste à copier le fichier vaprt.jar du répertoire d'exécution du plugin j2ee.core dans le répertoire lib d'exécution WAS. Les convertisseurs et composeurs suivants ne sont plus à jour dans WAS v4.0.6 sans le correctif :

VapBigDecimalToBooleanConverter VapBigDecimalToDoubleConverter VapBigDecimalToFloatConverter VapBigDecimalToIntegerConverter VapBigDecimalToLongConverter VapBigDecimalToShortConverter VapTimestampToUtilDateConverter NameComposer VapUSPhoneNumberComposer

3.32 Migration de projets EJB contenant des classes binaires

Lorsque vous utilisez l'assistant de migration pour migrer un projet EJB qui contient une ou plusieurs classes Java binaires (fichiers .class), la migration effectue correctement la migration des composants de projet qui contiennent des fichiers Java source (fichiers .java) mais n'effectue pas la migration des classes binaires. Vous devez corriger manuellement les erreurs.

3.33 Implémentation du mappage ascendant pour les vues

Lorsque vous effectuez un mappage ascendant (génération de beans enterprise en fonction de tables existantes), par défaut l'assistant ne génère pas de beans pour les table sous-jacentes des vues. Toutefois, comme il est nécessaire de créer des relations pour les clés externes, l'assistant crée automatiquement un bean pour les tables comportant des clés externe et dont la clé primaire est référencé par une clé externe d'autres tables. Si vous désélectionnez la case à cocher indiquant de ne pas créer de beans pour les tables sous-jacentes des vues , l'assistant génère des beans pour toutes les tables et vues du schéma de la base de données.

Retour au fichier Readme principal