Migration des beans d'entité EJB de IBM Websphere Commerce Version 7 Feature Pack 7 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
- WebSphereCommerceServerExtensionsData
- WebSphereCommerceServerExtensionsLogic
- Exportez le projet Web dynamique de magasins (WebSphereCommerceServerExtensionsData) à partir de votre espace de travail d'environnement de développement IBM Websphere Commerce Version 7.
- Ouvrez l'espace de travail d'environnement de développement IBM Websphere Commerce Version 7, puis la perspective J2EE.
- Dans la vue Explorateur d'entreprise, cliquez avec le bouton droit sur le projet
WebSphereCommerceServerExtensionsData, puis cliquez sur . La fenêtre Exporter s'affiche. - Développez le dossier General, puis cliquez sur .
- Sous le répertoire WebSphereCommerceServerExtensionsData, décochez la case WebSphereCommerceServerExtensionsData, puis sélectionnez les sous-répertoires suivants :
- ejbModule
- classdiagram.dnx
- Vérifiez que l'option Créer uniquement les répertoires sélectionnés est sélectionnée.
- Cliquez sur Parcourir et définissez un chemin où le fichier d'archive doit être exporté.
- Cliquez sur Terminer. Un fichier d'archive WebSphereCommerceServerExtensionsData.zip est créé.
- Copiez le fichier d'archive WebSphereCommerceServerExtensionsData.zip exporté dans votre environnement de développement HCL Commerce Version 9 afin de pouvoir l'importer.
- Exportez le projet
WebSphereCommerceServerExtensionsLogicJava en tant que fichier JAR (Archive Java) à partir de votre espace de travail d'environnement de développement IBM Websphere Commerce Version 7.- Ouvrez l'espace de travail d'environnement de développement IBM Websphere Commerce Version 7, puis la perspective J2EE.
- Sélectionnez le projet qui contient votre code personnalisé. Cliquez avec le bouton droit de la souris, puis sélectionnez .
- Cliquez sur Suivant.
- Dans la liste des ressources figurant sous Sélection des ressources à exporter, vérifiez que votre projet est sélectionné.
- 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.
- Cliquez sur Parcourir et sélectionnez un chemin dans lequel sauvegarder le fichier archive Java exporté.
- Vérifiez que l'option Compresser le contenu du fichier est sélectionnée.
- Cliquez sur Terminer. Le projet Java
WebSphereCommerceServerExtensionsLogicest exporté en tant que fichier JAR.
- Importez le projet Web dynamique de magasins (WebSphereCommerceServerExtensionsData) dans votre environnement de développement HCL Commerce Version 9.
- Ouvrez l'espace de travail d'environnement de développement HCL Commerce Version 9, puis la perspective Java EE.
- Dans la vue Explorateur d'entreprise, cliquez avec le bouton droit sur le projet
WebSphereCommerceServerExtensionsData, puis cliquez sur . La fenêtre Importer s'affiche. - Développez le dossier General, puis cliquez sur .
- 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 7 à l'étape 1.
- Cochez la case Ecraser les ressources existantes sans avertissement.
- Cliquez sur Terminer. Le projet
WebSphereCommerceServerExtensionsDataest remplacé par le contenu de votre environnement de développement IBM Websphere Commerce Version 7.
- Importez le projet
WebSphereCommerceServerExtensionsLogicJava en tant que fichier JAR (Archive Java) dans votre environnement de développement HCL Commerce Version 9.- Ouvrez l'espace de travail d'environnement de développement HCL Commerce Version 9, puis la perspective Java EE.
- Sélectionnez
- Cliquez avec le bouton droit de la souris sur le projet cible, puis cliquez sur Importer. La fenêtre Importer s'affiche.
- Développez le dossier General, puis cliquez sur .
- Cliquez sur Parcourir, puis sélectionnez le fichier d'archive Java
WebSphereCommerceServerExtensionsLogic.jarque 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
- .setting
- Si un message vous demande si vous voulez écraser les fichiers, sélectionnez Oui pour chaque fichier.
- Cliquez sur Terminer. Le projet Java
WebSphereCommerceServerExtensionsLogicest remplacé par le contenu de votre environnement de développement IBM Websphere Commerce Version 7.
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 :
- 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
- 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.
- En utilisant RAD, générez des entités JPA à partir de votre schéma de base de données pour votre projet WebSphereCommerceServerExtensionsData.
- Ouvrez Rational Application Developer.
- Cliquez avec le bouton droit de la souris sur WebSphereCommerceServerExtensionsData puis sur Renommer.
- Sauvegardez le projet en le renommant autrement, par exemple,
WebSphereCommerceServerExtensionsData-EJB. - Cliquez avec le bouton droit de la souris sur le projet WC, puis cliquez sur pour modifier les éléments des archives d'entreprise (EAR).
- Cliquez sur le projet WebSphereCommerceServerExtensionsData que vous avez renommé, par exemple WebSphereCommerceServerExtensionsData-EJB. Ensuite, cliquez sur .
- Cliquez sur .
- Pour le nom du projet, entrez WebSphereCommerceServerExtensionsData.
- 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.
- Basculez vers votre Explorateur de source de données.
- Cliquez avec le bouton droit de la souris sur Connexions de base de données, puis cliquez sur Nouveau.
- Sélectionnez un gestionnaire de base de données :
Pour DB2 for Linux UNIX and Windows :- Sélectionnez Pilote JDBC IBM Data Server Driver for JDBC and SQLJ (JDBC 4.0) par défaut.
- 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.
- Cliquez sur Terminer.
Pour Oracle :- Sélectionnez Pilote JDBC Oracle 12 - Pilote léger Oracle par défaut.
- Cliquez sur les points de suspension (…) en regard du pilote JDBC, ajoutez ou modifiez votre pilote JDBC, puis cliquez sur OK.
- Remplir les zones SID, Hôte, Numéro de port, Nom d'utilisateur, Mot de passe et Schéma par défaut.
- Cliquez sur Terminer.
- Cliquez avec le bouton droit de la souris sur le projet JPA dans l'Explorateur de projet, puis cliquez sur .
- 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.
- Exécutez l'assistant, puis cliquez sur Terminer.
- Générez votre projet en cliquant sur .
- Convertissez vos beans de données EJB en beans de données JPA dans votre projet WebSphereCommerceServerExtensionsLogic.
- Ouvrez une classe de bean de données.
- Supprimez les références aux méthodes supprimées dans le projet WebSphereCommerceServerExtensionsData.
- Supprimez les références de code aux exceptions suivantes en les supprimant des clauses
throwsdans les déclarations de méthode et en supprimant les clausescatchqui les interceptent.java.rmi.RemoteExceptionjavax.naming.NamingException
- Remplacez les références de code aux exceptions suivantes par la sous-classe
javax.persistence.PersistenceExceptionappropriée en les remplaçant dans les clausesthrowsdes déclarations de méthode et en remplaçant les clausescatchqui les interceptent.javax.ejb.CreateExceptionjavax.ejb.FinderException
- Trouvez toutes les références à la méthode
setEJBRef(...)et mettez à jour le nom de la méthode àsetEntity. - Trouvez toutes les références à
.getEJBRef().remove()et mettez-les à jour pour :.remove(). - Trouvez toutes les références à la méthode
getEJBRef()et mettez à jour le nom de la méthode àgetEntity. - Répétez ces sous-étapes pour toutes vos classes de beans de données.
- Convertissez vos classes de commande pour utiliser le code JPA dans votre projet WebSphereCommerceServerExtensionsLogic.
- Ouvrez une classe de commande.
- Supprimez les références aux méthodes supprimées dans le projet WebSphereCommerceServerExtensionsData.
- Supprimez les références de code aux exceptions suivantes en les supprimant des clauses
throwsdans les déclarations de méthode et en supprimant les clausescatchqui les interceptent.java.rmi.RemoteExceptionjavax.ejb.CreateExceptionjavax.ejb.FinderExceptionjavax.naming.NamingException
- Mettez à jour la logique pour qu'elle coïncide avec JPA.
- Répétez ces sous-étapes pour chaque classe de commande.
- En utilisant RAD, générez des entités JPA à partir de votre schéma de base de données pour votre projet WebSphereCommerceServerExtensionsData.
-
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 7. - javax.ejb.CreateException
- javax.ejb.FinderException
Lorsque ces exceptions ont été générées par des méthodes dans IBM Websphere Commerce Version 7. 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 7. 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
fulfillsetgetOwner. 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.
- Pour une interface Protectable, vous devez implémenter les méthodes
- Pour EJB 1.1 :
- Utilisez les tableaux suivants comme référence pour vos modifications requises.