Terminez cette tâche pour migrer votre magasin Madisons IBM Websphere Commerce Version 7 Feature Pack 7 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
-
Exportez le projet Web dynamique de magasins à partir d'un espace de travail d'environnement de développement Feature Pack 7.
-
Ouvrez l'espace de travail d'environnement de développement Feature Pack 7 puis la perspective J2EE.
-
Dans la vue Explorateur d'entreprise, cliquez avec le bouton droit sur le projet Stores, puis cliquez sur .
La fenêtre Exporter s'affiche.
-
Développez le dossier General, puis cliquez sur .
-
Sous le répertoire Stores, décochez les options relatives aux magasins puis sélectionnez les sous-répertoires suivants.
-
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é.
-
Sous Options, assurez-vous que l'option d'exportation suivante est définie.
- Créer uniquement les répertoires sélectionnés
-
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.
-
Copiez le fichier Stores.zip exporté dans votre environnement de développement HCL Commerce Version 9.
-
Importez votre projet personnalisé.
-
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 Stores, 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 Stores.zip que vous avez exporté depuis votre environnement de développement Feature Pack 7.
-
Cochez la case Ecraser les ressources existantes sans avertissement.
-
Cliquez sur Terminer.
-
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.
-
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}"/>
-
Vérifiez votre répertoire de magasin Madisons pour voir si le fichier EnvironmentSetup.jspf existe dans son emplacement d'inclusion.
- Accédez au répertoire Stores/WebContent/Madisons/include.
- Vérifiez que le fichier EnvironmentSetup.jspf existe. Si tel est le cas, continuez jusqu'à la prochaine étape.
- Si le fichier EnvironmentSetup.jspf n'existe pas, copiez le fichier du répertoire Stores/WebContent/Widgets/Common dans le répertoire include et effectuez les modifications suivantes :
Modification de <%@ include file="../Common/JSTLEnvironmentSetup.jspf" %> en <%@ include file="JSTLEnvironmentSetup.jspf" %>
Modification de request.setAttribute("searchHostNamePath", "http://" + hostname + ":" + port); en request.setAttribute("searchHostNamePath", "https://" + hostname + ":" + port);
Modification de <%@ include file="SterlingConfiguratorIntegrationSetup.jspf" %> en <%@ include file="../ShoppingArea/Configurator/SterlingConfiguratorIntegrationSetup.jspf" %>
-
Mettez à jour les importations pour inclure le fichier EnvironmentSetup.jspf :
<%@ include file="/Madisons/include/EnvironmentSetup.jspf"%>
-
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.
-
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.
-
Remplacez la balise
wcf:getData par la balise wcf:rest.
- 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" >
- 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.
- Gardez l'instruction
c:forEach à l'intérieur de la balise getData sans la modifier.
- Modifiez les valeurs
name="UniqueID" par name="id" à l'intérieur de la balise wcf:param.
- 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}" />
- 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.
- 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" />
- 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>
- 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.
-
Supprimez le filtre inexistant de votre fichier web.xml.
-
Ouvrez le fichier suivant en mode édition.
- WCDE_installdir/workspace/Stores/WebContent/WEB-INF/web.xml
-
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>
-
Enregistrez et fermez le fichier.
-
Supprimez la configuration de magasin à distance de votre fichier de fondation wc-component.xml.
-
Ouvrez le fichier suivant en mode édition.
- workspace_dir/WC/xml/config/com.ibm.commerce.foundation/wc-component.xml
-
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>
-
Enregistrez et fermez le fichier.
-
Supprimez l'EJB de l'en-tête d'aperçu du magasin.
-
Ouvrez le fichier /Stores/WebContent/tools/preview/StorePreviewerHeader.jsp pour l'éditer.
-
Recherchez la chaîne suivante :
pageContext.setAttribute("workspaceId", abWorkspace.getWorkspaceIdInEJBType().toString());
-
Remplacez-le par la chaîne suivante :
pageContext.setAttribute("workspaceId", abWorkspace.getWorkspaceIdInEntityType().toString());
-
Enregistrez et fermez le fichier.
-
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.
-
Ouvrez le fichier suivant en mode édition.
- /Stores/WebContent/Madisons/UserArea/AccountSection/RegistrationSubsection/RegistrationUpdateCommonPage.jsp
-
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>
-
Mettez à jour la ligne de code avec ce qui suit.
<fmt:param><c:out value="${CommandContext.user.lastSession}"/></fmt:param>
-
Sauvegardez et fermez les fichiers.
-
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.
-
Ouvrez le fichier suivant en mode édition.
- /Stores/WebContent/Madisons/UserArea/ServiceSection/InterestItemListSubsection/WishListResultDisplay.jsp
-
Utilisez
CatalogEntryAccessBean.findBySKUNumberAndStore pour remplacer CatalogEntryCache.findBySKUNumberAndStore et supprimer l'instruction d'importation de CatalogEntryCache.
-
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();
…
-
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();
…
-
Sauvegardez et fermez les fichiers.
-
Mettez à jour vos fichiers JSPF de paiement et de facturation pour gérer le mode de paiement Apple Pay.
-
Ouvrez les fichiers suivants en mode édition.
- /Stores/WebContent/Madisons/ShoppingArea/CheckoutSection/CheckoutPaymentsAndBillingAddress.jspf
- /Stores/WebContent/Madisons/ShoppingArea/CheckoutSection/CheckoutPaymentsAndBillingAddress.jspf
-
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))}">
-
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))}">
-
Sauvegardez et fermez les fichiers.
-
Mettez à jour vos fichiers JSPF pour corriger les liens d'abonnement.
-
Ouvrez le fichier suivant en mode édition : Stores/WebContent/Madisons/include/JSTLEnvironmentSetupExtForRemoteWidgets.jspf
-
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>
-
Enregistrez et fermez le fichier.
-
Mettez à jour vos fichiers JSPF pour corriger les aperçus de niveau catégorie.
-
Ouvrez le fichier suivant en mode édition : /opt/WebSphere/AppServer/profiles/default/installedApps/localhost/ts.ear/Stores.war/tools/preview/StorePreviewer.jspf
-
Supprimez le fragment suivant du fichier :
-
Enregistrez et fermez le fichier.
-
Mettez à jour votre fichier XML de configuration Struts pour corriger le planificateur RefreshExternalContent.
-
Ouvrez le fichier suivant en mode édition : Stores/WebContent/WEB-INF/struts-config-catalog-fep.xml
-
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>
-
Enregistrez et fermez le fichier.
- Assurez-vous que votre modèle de magasin est pris en charge dans votre fichier de configuration HCL Commerce.
- Ouvrez le fichier suivant :
- workspace_dir/WC/xml/config/wc-server.xml
- 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="CPS"/>
<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.
- Si vous modifiez le fichier, enregistrez et fermez le fichier.
-
Les magasins locaux après la migration sont toujours des magasins locaux. Mettez à jour votre table STORECONF pour l'indiquer.
-
Ouvrez une invite de commande vers votre base de données de développement HCL Commerce Version 9.
-
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');
Où
- store_name
- Le nom de base de votre magasin, par exemple,
Madisons.
-
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.