Migration des beans d'entité EJB de IBM Websphere Commerce Version 8 vers Java Persistence API

Les beans d'entité Java Enterprise ne sont plus pris en charge dans HCL Commerce Version 9. En utilisant une combinaison d'outils et d'étapes manuelles, vous pouvez faire migrer vos beans d'entité EJB 1.1 vers JPA et mettre à jour votre code pour utiliser les API HCL Commerce Version 9.

L'API Java Persistence (JPA) bien établie présente de nombreux avantages, notamment la simplicité et la rapidité. Pour tirer parti de la technologie JPA, vous pouvez utiliser l'outil de migration de code pour vous aider à migrer des beans existants vers JPA. L'outil de migration de code analyse les beans EJB et identifie les entités et le code qui doivent être mis à jour avec la spécification JPA. Lorsque cela est possible, l'outil peut effectuer des substitutions, telles que des changements et des suppressions de classe, d'exception et de nom de méthode. Là où il est incapable d'effectuer des modifications, l'utilitaire enregistre les éléments trouvés.
Remarque : Les EJB de session sans état sont toujours pris en charge et n'ont pas besoin d'être migrés vers JPA.

Avant de commencer

Exportez les deux projets suivants depuis votre environnement de développement IBM Websphere Commerce Version 8 vers votre environnement de développement HCL Commerce Version 9.0.0.1+.
  • WebSphereCommerceServerExtensionsData
  • WebSphereCommerceServerExtensionsLogic
  1. Exportez le projet Web dynamique de magasins (WebSphereCommerceServerExtensionsData) en tant qu'archive ZIP à partir de votre espace de travail d'environnement de développement IBM Websphere Commerce Version 8.
    1. Ouvrez l'espace de travail d'environnement de développement IBM Websphere Commerce Version 8, puis la perspective J2EE.
    2. Dans la vue Explorateur d'entreprise, cliquez avec le bouton droit sur le projet WebSphereCommerceServerExtensionsData, puis cliquez sur Exporter > Exporter.... La fenêtre Exporter s'affiche.
    3. Développez le dossier General, puis cliquez sur Fichier d'archivage > Suivant.
    4. Sous le répertoire WebSphereCommerceServerExtensionsData, décochez la case WebSphereCommerceServerExtensionsData, puis sélectionnez les sous-répertoires suivants :
      • ejbModule
      • classdiagram.dnx
    5. Vérifiez que l'option Créer uniquement les répertoires sélectionnés est sélectionnée.
    6. Cliquez sur Parcourir et définissez un chemin où le fichier d'archive doit être exporté.
    7. Cliquez sur Terminer. Un fichier d'archive WebSphereCommerceServerExtensionsData.zip est créé.
    8. Copiez le fichier d'archive WebSphereCommerceServerExtensionsData.zip exporté dans votre environnement de développement HCL Commerce Version 9 afin de pouvoir l'importer.
  2. Exportez le projet WebSphereCommerceServerExtensionsLogic Java en tant que fichier JAR (Archive Java) à partir de votre espace de travail d'environnement de développement IBM Websphere Commerce Version 8.
    1. Ouvrez l'espace de travail d'environnement de développement IBM Websphere Commerce Version 8, puis la perspective J2EE.
    2. Sélectionnez le projet qui contient votre code personnalisé. Cliquez avec le bouton droit de la souris, puis sélectionnez Exporter > Java > Fichier JAR.
    3. Cliquez sur Suivant.
    4. Dans la liste des ressources figurant sous Sélection des ressources à exporter, vérifiez que votre projet est sélectionné.
    5. Assurez-vous de sélectionner les options Exporter les fichiers de classe et les ressources générés et Exporter les fichiers source et les ressources Java.
    6. Cliquez sur Parcourir et sélectionnez un chemin dans lequel sauvegarder le fichier archive Java exporté.
    7. Vérifiez que l'option Compresser le contenu du fichier est sélectionnée.
    8. Cliquez sur Terminer. Le projet Java WebSphereCommerceServerExtensionsLogic est exporté en tant que fichier JAR.
  3. Importez le projet Web dynamique de magasins (WebSphereCommerceServerExtensionsData) dans votre environnement de développement HCL Commerce Version 9.
    1. Ouvrez l'espace de travail d'environnement de développement HCL Commerce Version 9, puis la perspective Java EE.
    2. Dans la vue Explorateur d'entreprise, cliquez avec le bouton droit sur le projet WebSphereCommerceServerExtensionsData, puis cliquez sur Importer > Importer .... La fenêtre Importer s'affiche.
    3. Développez le dossier General, puis cliquez sur Fichier d'archivage > Suivant.
    4. Cliquez sur Parcourir, puis sélectionnez le fichier d'archive WebSphereCommerceServerExtensionsData.zip que vous avez exporté depuis votre environnement de développement IBM Websphere Commerce Version 8 à l'étape 1.
    5. Cochez la case Ecraser les ressources existantes sans avertissement.
    6. Cliquez sur Terminer. Le projet WebSphereCommerceServerExtensionsData est remplacé par le contenu de votre environnement de développement IBM Websphere Commerce Version 8.
  4. Importez le projet WebSphereCommerceServerExtensionsLogic Java en tant que fichier JAR (Archive Java) dans votre environnement de développement HCL Commerce Version 9.
    1. Ouvrez l'espace de travail d'environnement de développement HCL Commerce Version 9, puis la perspective Java EE.
    2. Sélectionnez Perspective Java EE > Autres projets > WebSphereCommerceServerExtensionsLogic > src
    3. Cliquez avec le bouton droit de la souris sur le projet cible, puis cliquez sur Importer. La fenêtre Importer s'affiche.
    4. Développez le dossier General, puis cliquez sur Fichier d'archivage > Suivant.
    5. Cliquez sur Parcourir, puis sélectionnez le fichier d'archive Java WebSphereCommerceServerExtensionsLogic.jar que vous avez exporté depuis votre environnement de développement IBM Websphere Commerce Version 8 à l'étape 2.
      Remarque :
      • Vous devez mettre à jour le chemin d'accès aux classes de chaque projet personnalisé pour résoudre les dépendances dans les bibliothèques et entre les projets.
      • Vous ne devez pas importer de métadonnées, sinon, la migration va échouer. Les métadonnées incluent les fichiers suivants :
        • .setting
          • org.eclipse.wst.common.component
          • org.eclipse.wst.common.project.facet.core.xml.factorypath
        • .project
        • .classpath
        • META-INF/
          • MANIFEST.MF
    6. Si un message vous demande si vous voulez écraser les fichiers, sélectionnez Oui pour chaque fichier.
    7. Cliquez sur Terminer. Le projet Java WebSphereCommerceServerExtensionsLogic est remplacé par le contenu de votre environnement de développement IBM Websphere Commerce Version 8.

Pourquoi et quand exécuter cette tâche

La migration de vos beans d'entité EJB 1.1 vers JPA implique la modification de deux projets dans votre environnement de développement HCL Commerce Version 9.0.0.1+ :
WebSphereCommerceServerExtensionsData
Pour migrer ce projet, vous pouvez utiliser une combinaison d'outils. Vous commencez par tirer parti de Rational Application Developer (RAD) pour générer des entités JPA à partir de votre schéma de base de données. Vous pouvez ensuite identifier et corriger les erreurs restantes survenues lors de la génération JPA effectuée par RAD.
WebSphereCommerceServerExtensionsLogic
Pour faire migrer ce projet, vous pouvez convertir manuellement les beans de données EJB en beans de données JPA et convertir les classes de commande afin d'utiliser le code JPA, puis utiliser l'outil de migration de code pour identifier et corriger les erreurs restantes issues des conversions manuelles.

Procédure

  1. Migrez vos EJB 1.1 et AccessBean personnalisés vers JPA à l'aide de la méthode WC-JPA-Modeler ou de la méthode manuelle.
    • Obtenez WC-JPA-Modeler et suivez le fichier README pour obtenir des instructions sur son utilisation.
    • Pour la méthode manuelle, procédez comme suit.
      1. En utilisant RAD, générez des entités JPA à partir de votre schéma de base de données pour votre projet WebSphereCommerceServerExtensionsData.
        1. Ouvrez Rational Application Developer.
        2. Cliquez avec le bouton droit de la souris sur WebSphereCommerceServerExtensionsData puis sur Renommer.
        3. Sauvegardez le projet en le renommant autrement, par exemple, WebSphereCommerceServerExtensionsData-EJB.
        4. Cliquez avec le bouton droit de la souris sur le projet WC, puis cliquez sur Propriétés > Assemblage de déploiement pour modifier les éléments des archives d'entreprise (EAR).
        5. Cliquez sur le projet WebSphereCommerceServerExtensionsData que vous avez renommé, par exemple WebSphereCommerceServerExtensionsData-EJB. Ensuite, cliquez sur Retirer > OK.
        6. Cliquez sur Fichier > Nouveau > Projet JPA.
        7. Pour le nom du projet, entrez WebSphereCommerceServerExtensionsData.
        8. Dans la section Appartenance EAR, cliquez sur Ajouter un projet à un fichier EAR, sélectionnez WC pour le nom de votre projet EAR, puis cliquez sur Terminer.
          Remarque : Si vous êtes invité à modifier la perspective dans la perspective JPA, cliquez sur Oui.
        9. Basculez vers votre Explorateur de source de données.
        10. Cliquez avec le bouton droit de la souris sur Connexions de base de données, puis cliquez sur Nouveau.
        11. Sélectionnez un gestionnaire de base de données :
          • DB2Pour DB2 for Linux UNIX and Windows :
            1. Sélectionnez Pilote JDBC IBM Data Server Driver for JDBC and SQLJ (JDBC 4.0) par défaut.
            2. Remplissez les zones correspondant à Base de données, Hôte, Numéro de port, Nom d'utilisateur, Mot de passeet Schéma par défaut.
            3. Cliquez sur Terminer.
          • OraclePour Oracle :
            1. Sélectionnez Pilote JDBC Oracle 12 - Pilote léger Oracle par défaut.
            2. Cliquez sur les points de suspension (…) en regard du pilote JDBC, ajoutez ou modifiez votre pilote JDBC, puis cliquez sur OK.
            3. Remplir les zones SID, Hôte, Numéro de port, Nom d'utilisateur, Mot de passe et Schéma par défaut.
            4. Cliquez sur Terminer.
        12. Cliquez avec le bouton droit de la souris sur le projet JPA dans l'Explorateur de projet, puis cliquez sur Outils JPA > Générer des entités à partir des tables.
        13. Sur la page Sélection de tables de l'assistant de génération d'entités à partir des tables, sélectionnez la connexion à la base de données que vous avez créée.
        14. Exécutez l'assistant, puis cliquez sur Terminer.
        15. Générez votre projet en cliquant sur Projets > Tout générer.
      2. Convertissez vos beans de données EJB en beans de données JPA dans votre projet WebSphereCommerceServerExtensionsLogic.
        1. Ouvrez une classe de bean de données.
        2. Supprimez les références aux méthodes supprimées dans le projet WebSphereCommerceServerExtensionsData.
        3. Supprimez les références de code aux exceptions suivantes en les supprimant des clauses throws dans les déclarations de méthode et en supprimant les clauses catch qui les interceptent.
          • java.rmi.RemoteException
          • javax.naming.NamingException
        4. Remplacez les références de code aux exceptions suivantes par la sous-classe javax.persistence.PersistenceException appropriée en les remplaçant dans les clauses throws des déclarations de méthode et en remplaçant les clauses catch qui les interceptent.
          • javax.ejb.CreateException
          • javax.ejb.FinderException
        5. Trouvez toutes les références à la méthode setEJBRef(...) et mettez à jour le nom de la méthode à setEntity.
        6. Trouvez toutes les références à .getEJBRef().remove() et mettez-les à jour pour : .remove().
        7. Trouvez toutes les références à la méthode getEJBRef() et mettez à jour le nom de la méthode à getEntity.
        8. Répétez ces sous-étapes pour toutes vos classes de beans de données.
      3. Convertissez vos classes de commande pour utiliser le code JPA dans votre projet WebSphereCommerceServerExtensionsLogic.
        1. Ouvrez une classe de commande.
        2. Supprimez les références aux méthodes supprimées dans le projet WebSphereCommerceServerExtensionsData.
        3. Supprimez les références de code aux exceptions suivantes en les supprimant des clauses throws dans les déclarations de méthode et en supprimant les clauses catch qui les interceptent.
          • java.rmi.RemoteException
          • javax.ejb.CreateException
          • javax.ejb.FinderException
          • javax.naming.NamingException
        4. Mettez à jour la logique pour qu'elle coïncide avec JPA.
        5. Répétez ces sous-étapes pour chaque classe de commande.
  2. Mettez à jour toutes les références aux EJB 1.1 et AccessBean personnalisés vers JPA.
    • Utilisez les tableaux suivants comme référence pour vos modifications requises.
      Remplacer toutes les utilisations de n'importe quelle classe du formulaire Au
      com.ibm.commerce.*BeanFinderObject com.ibm.commerce.*QueryHelper.
      com.ibm.commerce.*BeanFinderObjectBase com.ibm.commerce.*QueryHelperBase.
      com.ibm.commerce.base.objects.JDBCFinderObject com.ibm.commerce.base.objects.QueryHelper.
      com.ibm.commerce.*BeanBase com.ibm.commerce.*EntityBase.
      com.ibm.commerce.base.objects.ECEntityBean com.ibm.commerce.base.objects.EntityBase.
      com.ibm.commerce.*BeanAccessHelper com.ibm.commerce.*AccessHelper.
      Supprimez toutes les utilisations de : Remarques supplémentaires :
      com.ibm.commerce.*AccessBeanData Aucun
      com.ibm.commerce.*Key Où elle représentait une clé primaire composée d'une seule colonne dans la table correspondante.
      com.ibm.commerce.*JDBCHelper Y compris toute classe qui avait aussi javax.ejb.EJBObject comme superclasse
      com.ibm.commerce.*JDBCHelperAccessBean
      • Pour EJB 1.1 :

        Aucun

      • Pour EJB 3 et versions ultérieures :

        Les beans de session ont été déplacés depuis EJB 1.1 vers EJB 3.

        Les beans de session EJB ont été modifiés pour supprimer les interfaces home et distante et sont désormais des beans simples annotés avec l'annotation sans état : @Stateless(name="ServerJDBCHelper")

        Les classes de bean d'accès pour les beans de session ont été supprimées.

        SessionBeanHelper.lookupSessionBean est recommandée.

      com.ibm.commerce.*JDBCHelperFactory Aucun
      com.ibm.commerce.*JDBCHelperHome Aucun
      com.ibm.commerce.*Home. Remplacez-la en utilisant directement l'entité JPA appropriée ou utilisez la classe AccessBean correspondante.
      com.ibm.commerce.*AccessBeanData Aucun
      • javax.naming.NamingException
      • java.rmi.RemoteException
      Lorsque ces exceptions ont été générées par des méthodes dans IBM Websphere Commerce Version 8.
      • javax.ejb.CreateException
      • javax.ejb.FinderException
      Lorsque ces exceptions ont été générées par des méthodes dans IBM Websphere Commerce Version 8. Remplacez-les par la sous-classe javax.persistence.PersistenceException appropriée.
      javax.ejb.DuplicateKeyException Lorsque ces exceptions ont été générées par des méthodes dans IBM Websphere Commerce Version 8. Remplacez ces exceptions par javax.persistence.EntityExistsException.
      ejbCreate() De n'importe quelle classe du formulaire com.ibm.commerce.*
      ejbPostCreate() De n'importe quelle classe du formulaire com.ibm.commerce.*BeanBase.
      ejbPostCreate() De n'importe quelle classe du formulaire com.ibm.commerce.*BeanAccessHelper.
      getSessionContext() De n'importe quelle classe du formulaire com.ibm.commerce.*.
      ejbActivate() De n'importe quelle classe du formulaire com.ibm.commerce.*.
      ejbCreate() De n'importe quelle classe du formulaire com.ibm.commerce.*.
      ejbPassivate() De n'importe quelle classe du formulaire com.ibm.commerce.*.
      ejbRemove() De n'importe quelle classe du formulaire com.ibm.commerce.*.
      instantiateEJBByPrimaryKey() De n'importe quelle classe du formulaire com.ibm.commerce.*AccessBean.
      defaultJNDIName() De n'importe quelle classe du formulaire com.ibm.commerce.*AccessBean.
      commitCopyHelper() De n'importe quelle classe du formulaire com.ibm.commerce.*AccessBean.
      refreshCopyHelper() De n'importe quelle classe du formulaire com.ibm.commerce.*AccessBean.
      copyFields() De n'importe quelle classe du formulaire com.ibm.commerce.*EntityCreationData.
      getMemorySizeExcludingObjectsToScrub() De n'importe quelle classe du formulaire com.ibm.commerce.*Key.
      getObjectsToScrub() De n'importe quelle classe du formulaire com.ibm.commerce.*Key.
      getObjectSize() De n'importe quelle classe du formulaire com.ibm.commerce.*Key.
      setScrubbedObjects() De n'importe quelle classe du formulaire com.ibm.commerce.*Key.
      getObjectModelFacade() De n'importe quelle classe du formulaire com.ibm.commerce.*.
      getOMF() De n'importe quelle classe du formulaire com.ibm.commerce.*.
      getObjectModuleFacade() De n'importe quelle classe du formulaire com.ibm.commerce.*.
      getPPCJDBCHelper() De n'importe quelle classe du formulaire com.ibm.commerce.*.
      getPaymentsFacade() De n'importe quelle classe du formulaire com.ibm.commerce.*.
      getActivityLoggerFacade() De n'importe quelle classe du formulaire com.ibm.commerce.*.
      get*InEJBType() De n'importe quelle classe du formulaire com.ibm.commerce.*. Remplacer par get*InEntityType.
      instantiateEJB() De n'importe quelle classe du formulaire com.ibm.commerce.*AccessBean. Remplacer par instantiateEntity.
      Lecture et écriture de toutes les zones publiques dans les classes du formulaire com.ibm.commerce.*BeanBase avec la méthode get ou set correspondante. Les méthodes d'accès get et set de certains champs de clés externes sont remplacées par d'autres qui récupèrent/définissent une entité JPA parent ou enfant.
      Remarque :
      • Si vous avez ajouté vos propres personnalisations aux fichiers JSP qui utilisent la technologie EJB, vous devez migrer vos personnalisations. Utilisez les tables précédentes comme référence pour faciliter la migration.
      • Dans certains cas où des stratégies contrôle d'accès sont appliquées aux EJB, votre bean d'entité JPA devra implémenter l'interface Groupable ou Protectable pour se conformer au même schéma de sécurité et de stratégie.
        • Pour une interface Protectable, vous devez implémenter les méthodes fulfills et getOwner. Pour plus d'informations, voir Interface Protectable.
        • Pour une interface Groupable, vous devez implémenter la méthode getGroupingAttributeValue. Pour plus d'informations, voir Interface groupable.