Migration du magasin Elite IBM Websphere Commerce Version 7 Feature Pack 6

Terminez cette tâche pour migrer votre magasin Elite IBM Websphere Commerce Version 7 Feature Pack 6 vers HCL Commerce Version 9. Après la migration, votre magasin restera un magasin local.

Le processus de migration de magasin implique d'exporter les ressources suivantes sous forme de fichiers d'archivage, puis d'importer ces derniers :
  • Les ressources de magasin statiques personnalisées
  • Le code Java personnalisé
  • Fichiers JSP personnalisés
Les magasins qui sont migrés de IBM Websphere Commerce Version 7 ou de IBM Websphere Commerce Version 8 à HCL Commerce Version 9.1 sont déployés sur le Transaction server, où ils traitent le trafic en direct. Les magasins créés sur HCL Commerce Version 9.1 suivent le nouveau modèle de programmation et sont déployés sur un Store server distinct. Pour plus d'informations sur la migration ou la création d'un magasin sur HCL Commerce Version 9.1, voir :

Procédure

  1. Exportez le projet Web dynamique de magasins à partir d'un espace de travail d'environnement de développement Feature Pack 6.
    1. Ouvrez l'espace de travail d'environnement de développement Feature Pack 6 puis la perspective J2EE.
    2. Dans la vue Explorateur d'entreprise, cliquez avec le bouton droit sur le projet Stores, 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 Stores, décochez les options relatives aux magasins puis sélectionnez les sous-répertoires suivants.
      • WebContent
      • src
    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. Sous Options, assurez-vous que l'option d'exportation suivante est définie.
      • Créer uniquement les répertoires sélectionnés
    8. Cliquez sur Terminer.
      Un fichier Stores.zip est créé et est prêt à être importé dans votre environnement de développement HCL Commerce Version 9.
    9. Copiez le fichier Stores.zip exporté dans votre environnement de développement HCL Commerce Version 9.
  2. Importez votre projet personnalisé.
    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 Stores, 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 Stores.zip que vous avez exporté depuis votre environnement de développement Feature Pack 6.
    5. Sous WebContent, développez WEB-INF et videz le répertoire lib. Il en résulte que le fichier WEB-INF/lib/Foundation-TagLib.jar n'est pas importé dans le nouvel environnement, car il n'est pas pris en charge dans HCL Commerce Version 9.
    6. Cochez la case Ecraser les ressources existantes sans avertissement.
    7. Cliquez sur Terminer.
  3. Faites migrer vos services de recherche BOD pour qu'ils deviennent des services REST.

    Toutes les balises getData utilisent les services BOD fournis par les serveurs de recherche ou de transactions. Remplacez les services de recherche BOD par les services REST utilisés dans l'architecture de recherche actuelle. Les services de recherche BOD ont des modèles spécifiques dans les fichiers JSP, où la valeur de l'attribut type est CatalogNavigationViewType dans les balises getData.

    1. Recherchez la chaîne suivante pour identifier les fichiers JSP nécessitant des mises à jour. Les fichiers qui contiennent cette chaîne utilisent les services BOD pour la recherche.
      
      com.ibm.commerce.catalog.facade.datatypes.CatalogNavigationViewType
      
      Notez chaque fichier qui contient cette chaîne, afin que vous puissiez tous les mettre à jour en conséquence. Par exemple, cet exemple sera utilisé pour montrer comment modifier la balise getData en balise REST.
      Avant :
      
      <wcf:getData type="com.ibm.commerce.catalog.facade.datatypes.CatalogNavigationViewType" var="catalogNavigationView"
          expressionBuilder="getCatalogEntrySearchResultsByIDView" scope="request" varShowVerb="showCatalogNavigationView"
          maxItems="100" recordSetStartNumber="0" scope="request">
          <c:forEach var="marketingSpotData" items="${marketingSpotDatas.baseMarketingSpotActivityData}">
              <c:if test='${marketingSpotData.dataType eq "CatalogEntryId"}'>
                  <wcf:param name="UniqueID" value="${marketingSpotData.uniqueID}"/>
              </c:if>
          </c:forEach>
          <wcf:contextData name="storeId" data="${WCParam.storeId}" />
          <wcf:contextData name="catalogId" data="${WCParam.catalogId}" />
      </wcf:getData>
      <c:set var="eSpotCatalogIdResults" value="${catalogNavigationView.catalogEntryView}"/>
      
    2. Créez le fichier EnvironmentSetup.jspf pour votre magasin Elite.
      1. Téléchargez le fichier suivant : EnvironmentSetupJspf.zip
      2. Extrayez EnvironmentSetup.jspf dans le répertoire Stores/WebContent/Elite/include.
    3. Mettez à jour les importations pour inclure le fichier EnvironmentSetup.jspf :
      
      <%@ include file="/Elite/include/EnvironmentSetup.jspf"%>
      
    4. Assurez-vous qu'il n'y a pas de fichiers d'importation en double. Pour cela, passez en revue EnvironmentSetup.jspf et assurez-vous que les importations énumérées dans le fichier ne sont pas également importées dans chaque fichier JSP.
    5. Examinez la valeur de expressionBuilder dans chaque balise getData. Mappez ces services à une API REST.
      En règle générale, 1 service BOD sera mappé à 2 services REST, l'un d'eux étant utilisé pour obtenir des informations sur le produit unique et l'autre pour obtenir plusieurs produits. Par exemple :
      • store/{storeId}/productview/byId/{productId}
      • store/{storeId}/productview/byIds
      Utilisez les services REST qui conviennent à votre entreprise.
    6. Remplacez la balise wcf:getData par la balise wcf:rest.
      1. Définissez l'attribut url sur l'URL de l'API REST en ajoutant les variables searchHostNamePath et searchContextPath devant l'URI et remplacez les marques de réservation par leurs variables correspondantes. Par exemple :
        
        <wcf:rest var="catalogNavigationView" url="${searchHostNamePath}${searchContextPath}/store/${storeId}/productview/byIds" >
        
      2. Modifiez la balise wcf:contextData par wcf:param dans la balise wcf:getData. Assurez-vous de modifier l'attribut data dans la balise wcf:contextData par value dans la balise wcf:param.
      3. Gardez l'instruction c:forEach à l'intérieur de la balise getData sans la modifier.
      4. Modifiez les valeurs name="UniqueID" par name="id" à l'intérieur de la balise wcf:param.
      5. Ajoutez d'autres paramètres facultatifs définis dans l'API REST. Si les paramètres facultatifs ne sont pas spécifiés, le service API REST les récupère dans le contexte de l'environnement. Il est recommandé de les ajouter aux requêtes spécifiques qui les exigent. Par exemple :
        
        <wcf:param name="LangId" value="${langId}" />
        <wcf:param name="currency" value="${env_currencyCode}" />
        <wcf:param name="responseFormat" value="json" />
        <wcf:param name="catalogId" value="${catalogId}" />
        
      6. Examinez la valeur getData de la balise searchProfile pour trouver le profil de recherche correct à utiliser pour le service REST. Si l'attribut searchProfile n'est pas spécifié, recherchez la valeur par défaut dans le service BOD dans le fichier de configuration de définition : Stores/WebContent/WEB-INF/config/com.ibm.commerce.catalog-fep/get-data-config.xml. La valeur doit être située dans le bloc du générateur d'expression.
        Par exemple :
        
        <expression-builder>
           <param>
              <name>searchProfile</name>
              <value>IBM_findCatalogEntryByID</value>
           </param>
        </expression-builder>
        
        Notez le profil de recherche BOD à mettre à jour à la nouvelle valeur.
      7. Mettez à jour le profil de recherche BOD pour qu'il devienne la nouvelle valeur de profil de recherche REST. Pour plus d'informations sur les mappages de service, voir Mappage des services REST aux services BOD.
        Par exemple, le profil de recherche BOD IBM_findCatalogEntryByID est rendu obsolète par le profil de recherche REST, ce qui se traduit par IBM_findProductByIds_Summary :
        
        <wcf:param name="profileName" value="IBM_findProductByIds_Summary" />
        
      8. Utilisez une balise c:catch pour englober votre balise wcf:rest et spécifiez searchServerException comme valeur de l'attribut var.
        Par exemple, le code obtenu doit ressembler à l'exemple suivant :
        
        <c:catch var="searchServerException">
           <wcf:rest var="catalogNavigationView" url="${searchHostNamePath}${searchContextPath}/store/${storeId}/productview/byIds" >
              <c:forEach var="marketingSpotData" items="${marketingSpotDatas.baseMarketingSpotActivityData}">
                 <c:if test='${marktingSpotData.dataType eq "CatalogEntryId"}'>
                    <wcf:param name="id" value="${fn:trim(marketingSpotData.uniqueID)}"/>
                 </c:if>
              </c:forEach>
              <wcf:param name="LangId" value="${langId}" />
              <wcf:param name="currency" value="${env_currencyCode}" />
              <wcf:param name="responseFormat" value="json" />
              <wcf:param name="catalogId" value="${catalogId}" />
              <wcf:param name="profileName" value="IBM_findProductByIds_Summary" />
           </wcf:rest>
        </c:catch>
        
      9. Vérifiez que vos pages peuvent être chargées avec succès. Pour vous y aider, utilisez la balise wcf:json pour obtenir les données JSON sur la page. Remplacez .value.value par .value après les objets. Si vous ne effectuez pas ce remplacement, des erreurs se produisent, telles que javax.el.PropertyNotFoundException : La propriété 'value' est introuvable sur le type java.lang.String.
  4. Supprimez le filtre inexistant de votre fichier web.xml.
    1. Ouvrez le fichier suivant en mode édition.
      • WCDE_installdir/workspace/Stores/WebContent/WEB-INF/web.xml
    2. Supprimez le bloc de code suivant.
      <filter>
          </icon>
          <filter-name>LikeMindsFilter</filter-name>
          <filter-class>com.ibm.commerce.likeminds.filter.LikeMindsFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>LikeMindsFilter</filter-name>
          <servlet-name>Stores Request Servlet</servlet-name>
      </filter-mapping>
      
    3. Enregistrez et fermez le fichier.
  5. Supprimez la configuration de magasin à distance de votre fichier de fondation wc-component.xml.
    1. Ouvrez le fichier suivant en mode édition.
      • workspace_dir/WC/xml/config/com.ibm.commerce.foundation/wc-component.xml
    2. Supprimez le bloc de code suivant.
      <_config:configgrouping name="RemoteStoreConfiguration">
          <!-- value to remote store web host name -->
          <_config:property name="wc.store.remote.webHostName" value="store"/>
          <!-- value to remote store web host HTTP port number -->
          <_config:property name="wc.store.remote.webNonSSLPort" value="8080"/>
          <!-- value to remote store web host HTTPS port number -->
          <_config:property name="wc.store.remote.webSSLPort" value="8443"/>
          <!-- value to remote store context root -->
          <_config:property name="wc.store.remote.webContextPath" value="/shop"/>
          <!-- value to remote store preview context root -->
          <_config:property name="wc.store.remote.previewContextPath" value="/webapp/remote/preview/servlet"/>
          <!-- value to kafka servers connection string -->
          <_config:property name="wc.store.remote.kafka" value=""/>
          <!-- value to kafka servers topic prefix -->
          <_config:property name="wc.store.remote.kafka.topicPrefix" value="sampleprefix"/>
          <!-- value to remote store web alias -->
          <_config:property name="wc.store.remote.webAlias" value="/wcsstore"/>
          <!-- value to remote store app host name (used for invoking email JSPs in remote store) -->
          <_config:property name="wc.store.remote.appHostName" value="localhost"/>
          <!-- value to remote store app host HTTPS port number (used for invoking email JSPs in remote store) -->
          <_config:property name="wc.store.remote.appSSLPort" value="8443"/>
      </_config:configgrouping>
    3. Enregistrez et fermez le fichier.
  6. Supprimez l'EJB de l'en-tête d'aperçu du magasin.
    1. Ouvrez le fichier /Stores/WebContent/tools/preview/StorePreviewerHeader.jsp pour l'éditer.
    2. Recherchez la chaîne suivante :
      
      pageContext.setAttribute("workspaceId", abWorkspace.getWorkspaceIdInEJBType().toString());
      
      Remplacez-le par la chaîne suivante :
      
      pageContext.setAttribute("workspaceId", abWorkspace.getWorkspaceIdInEntityType().toString());
      
    3. Recherchez la chaîne suivante :
      
      <%@page import="com.ibm.commerce.catalog.facade.server.helpers.SolrSearchWorkspaceHelper"%>
      
      Remplacez-le par la chaîne suivante :
      
      <%@page import="com.ibm.commerce.foundation.internal.server.services.search.util.SolrSearchWorkspaceHelper"%>
      
    4. Enregistrez et fermez le fichier.
  7. Mettez à jour votre fichier RegistrationUpdateCommonPage.jsp pour résoudre une erreur d'analyse HCL Commerce Version 9 potentielle qui se produit lorsque la page Informations personnelles charge.
    1. Ouvrez le fichier suivant en mode édition.
      • /Stores/WebContent/Elite/UserArea/AccountSection/RegistrationSubsection/RegistrationUpdateCommonPage.jsp
    2. Autour de la ligne 120, localisez la ligne de code suivante :
      <fmt:param><fmt:formatDate type="both" dateStyle="long" value="${CommandContext.user.lastSessionInEJBType}"/></fmt:param>
    3. Mettez à jour la ligne de code avec ce qui suit.
      <fmt:param><c:out value="${CommandContext.user.lastSession}"/></fmt:param>
    4. Sauvegardez et fermez les fichiers.
  8. Mettez à jour votre fichier WishListResultDisplay.jsp pour résoudre une erreur potentielle de HCL Commerce Version 9 qui empêche l'ouverture de la page de liste de présélection.
    1. Ouvrez le fichier suivant en mode édition.
      • /Stores/WebContent/Elite/UserArea/ServiceSection/InterestItemListSubsection/WishListResultDisplay.jsp
    2. Utilisez CatalogEntryAccessBean.findBySKUNumberAndStore pour remplacer CatalogEntryCache.findBySKUNumberAndStore et supprimer l'instruction d'importation de CatalogEntryCache.
    3. Autour de la ligne 566, recherchez le code suivant :
      
      <%@ page import="java.util.Enumeration" %>
      <%@ page import="com.ibm.commerce.catalog.objects.CatalogEntryAccessBean" %>
      <%@ page import="com.ibm.commerce.catalog.objects.CatalogEntryCache" %>
      …
          CatalogEntryAccessBean abCatalogEntry = null;
          String[] strStoreId = (String[])request.getAttribute("storeId");
          Enumeration e = CatalogEntryCache.findBySKUNumberAndStore((String)request.getAttribute("itemPartNumber"),new Integer(strStoreId[0]));
          abCatalogEntry = (CatalogEntryAccessBean) e.nextElement();
         …
      
    4. Mettez à jour le code avec ce qui suit :
      
      <%@ page import="java.util.Enumeration" %>
      <%@ page import="com.ibm.commerce.catalog.objects.CatalogEntryAccessBean" %>
      …
          CatalogEntryAccessBean abCatalogEntry = new CatalogEntryAccessBean();
          String[] strStoreId = (String[])request.getAttribute("storeId");
          Enumeration e = abCatalogEntry.findBySKUNumberAndStore((String)request.getAttribute("itemPartNumber"),new Integer(strStoreId[0]));
          abCatalogEntry = (CatalogEntryAccessBean) e.nextElement();
        …
      
    5. Sauvegardez et fermez les fichiers.
  9. Mettez à jour vos fichiers JSPF de paiement et de facturation pour gérer le mode de paiement Apple Pay.
    1. Ouvrez les fichiers suivants en mode édition.
      • /Stores/WebContent/Elite/ShoppingArea/CheckoutSection/CheckoutPaymentsAndBillingAddress.jspf
      • /Stores/WebContent/Elite/ShoppingArea/CheckoutSection/CheckoutPaymentsAndBillingAddress.jspf
    2. Autour de la ligne 500, recherchez le code suivant.
      <c:if test="${currentPaymentMethodName != 'PayInStore' && currentPaymentMethodName 
      != 'CompatiblePayment' && (currentPaymentMethodName ne 'SimplePunchout' or (currentPaymentMethodName 
      eq 'SimplePunchout' and punchoutPaymentAllowed))}">
    3. Mettez à jour le code en ajoutant la méthode currentPaymentMethodName != 'ApplePay'.
      L'exemple suivant montre comment le code se présente après votre mise à jour.
      <c:if test="${currentPaymentMethodName != 'ApplePay' && currentPaymentMethodName 
      != 'PayInStore' && currentPaymentMethodName != 'CompatiblePayment' && 
      (currentPaymentMethodName ne 'SimplePunchout' or (currentPaymentMethodName eq 'SimplePunchout' 
      and punchoutPaymentAllowed))}">
    4. Sauvegardez et fermez les fichiers.
  10. Mettez à jour vos fichiers JSP pour faire pointer vers le serveur de recherche correct.
    1. Ouvrez les fichiers suivants en mode édition.
      • /Stores/WebContent/Elite/include/JSTLEnvironmentSetupExtForSearch.jspf
      • /Stores/WebContent/Elite/Snippets/Search/AutoSuggestSerialize.jsp
    2. Modifiez toutes les instances de CommonsHttpSolrServer par HttpSolrServer.
    3. Sauvegardez et fermez les fichiers.
  11. Mettez à jour vos fichiers JSPF pour corriger les liens d'abonnement.
    1. Ouvrez le fichier suivant en mode édition : Stores/WebContent/Elite/include/JSTLEnvironmentSetupExtForRemoteWidgets.jspf
    2. Supprimez le fragment suivant du fichier :
      
          <c:when test="${!empty restNonSSLPort}">
                <c:set var="restURLPort" value="${restNonSSLPort}" scope="request"/>
                 <c:set var="restURLScheme" value="http" scope="request"/>
          </c:when>
      
    3. Enregistrez et fermez le fichier.
  12. Mettez à jour vos fichiers JSPF pour corriger les aperçus de niveau catégorie.
    1. Ouvrez le fichier suivant en mode édition : /opt/WebSphere/AppServer/profiles/default/installedApps/localhost/ts.ear/Stores.war/tools/preview/StorePreviewer.jspf
    2. Cherchez le fragment de code suivant :
      <c:set var="entitledOrgId" value="${entitledOrg.organizationIdInEntityType}"/>
    3. Mettez à jour la valeur organizationIdInEntityType par organizationIdInEntityType comme dans l'exemple suivant :
      <c:set var="entitledOrgId" value="${entitledOrg.organizationIdInEntityType}"/>
    4. Cherchez le fragment de code suivant :
      <c:set var="entitledOrgId" value="${entitledOrgs.entitledOrganizations[0].organizationIdInEntityType}"/>
    5. Mettez à jour la valeur organizationIdInEntityType par organizationIdInEntityType comme dans l'exemple suivant :
      <c:set var="entitledOrgId" value="${entitledOrgs.entitledOrganizations[0].organizationIdInEntityType}"/>
    6. Enregistrez et fermez le fichier.
  13. Mettez à jour votre B2BMyAccountParticipantRole.jspf fichier pour résoudre une erreur potentielle lorsque vous affichez votre historique à partir de la page Mon compte.
    1. Ouvrez les fichiers suivants en mode édition.
      • /Stores/WebContent/Elite/UserArea/AccountSection/B2BMyAccountParticipantRole.jspf
    2. Modifiez toutes les instances de organizationIdInEJBType par organizationIdInEntityType.
    3. Sauvegardez et fermez les fichiers.
  14. Mettez à jour votre fichier XML de configuration Struts pour corriger le planificateur RefreshExternalContent.
    1. Ouvrez le fichier suivant en mode édition : Stores/WebContent/WEB-INF/struts-config-catalog-fep.xml
    2. Ajoutez l'action suivante au fichier :
      
      <action parameter="com.ibm.commerce.catalog.facade.server.commands.ScheduledExternalContentRefreshCmd" path="/RefreshExternalContent" type="com.ibm.commerce.struts.BaseAction">
      <set-property property="https" value="0:1"/>
      <set-property property="authenticate" value="0:0"/>
      </action>
      <action class="com.ibm.commerce.struts.v2.BaseAction" name="RefreshExternalContent">
      <param name="authenticate">0:0</param>
      <param name="https">0:1</param>
      <param name="parameter">com.ibm.commerce.catalog.facade.server.commands.ScheduledExternalContentRefreshCmd</param>
      </action>
    3. Enregistrez et fermez le fichier.
  15. Assurez-vous que votre modèle de magasin est pris en charge dans votre fichier de configuration HCL Commerce.
    1. Ouvrez le fichier suivant :
      • workspace_dir/WC/xml/config/wc-server.xml
    2. Localisez la propriété <supportedStoreType> et assurez-vous que votre modèle de magasin est répertorié, comme illustré dans l'exemple suivant :
      <supportedStoreType>
          <wca storeType="B2B"/>
          <wca storeType="B2C"/>
      <supportedStoreType/>
      
      Remarque : Vous pouvez trouver votre modèle de magasin en interrogeant la colonne STORETYPE de votre table STORE.
      Le non-respect de cette étape peut conduire au message d'erreur Accelerator suivant lors de la connexion : Vous n'avez pas accès actuellement au magasin utilisant HCL Commerce Accelerator. Contactez l'administrateur système pour vérifier votre contrôle d'accès.
    3. Si vous modifiez le fichier, enregistrez et fermez le fichier.
  16. Les magasins locaux après la migration sont toujours des magasins locaux. Mettez à jour votre table STORECONF pour l'indiquer.
    1. Ouvrez une invite de commande vers votre base de données de développement HCL Commerce Version 9.
    2. Exécutez la commande SQL suivante pour récupérer les ID de magasin pour votre type de magasin spécifique :
      select store_id from store where directory in ('store_name');
      store_name
      Le nom de base de votre magasin, par exemple, Elite.
    3. Pour chaque ID de magasin de site étendu récupéré, insérez un enregistrement correspondant dans votre table STORECONF en exécutant la commande suivante :
      Insert into storeconf values(STOREENT_ID, 'wc.store.isRemote','0',0);
      Où :
      STOREENT_ID
      ID du magasin que vous avez extrait de la commande SQL précédente.