Migración de la tienda Elite del Feature Pack 7 IBM Websphere Commerce Version 7

Complete esta tarea para migrar la IBM Websphere Commerce Version 7tienda Elite de Feature Pack 6 a HCL Commerce Version 9. Después de la migración, la tienda sigue siendo una tienda local.

El proceso de migración de tienda implica exportar los elementos siguientes como archivos de archivado y, a continuación, importar los archivos de archivado:
  • Elementos de tienda estáticos personalizados
  • Código Java personalizado
  • Archivos JSP personalizados
Las tiendas que se migran desde IBM Websphere Commerce Version 7 o IBM Websphere Commerce Version 8 a HCL Commerce Version 9.1 se implementan dentro de Transaction server, donde dan servicio al tráfico en tiempo real. Las tiendas que se crean en HCL Commerce Version 9.1 siguen el nuevo modelo de programación y se despliegan en un Store server independiente. Para obtener más información sobre cómo migrar o crear una tienda en HCL Commerce Version 9.1, consulte:

Procedimiento

  1. Exporte el proyecto web dinámico Stores de un espacio de trabajo del entorno de desarrollo de Feature Pack 6.
    1. Abra el espacio de trabajo del entorno de desarrollo de Feature Pack 6 y abra la perspectiva J2EE.
    2. En la vista Explorador de empresa, pulse el botón derecho del ratón en el proyecto Stores y, a continuación, pulse Exportar > Exportar....
      Aparecerá la ventana Exportar.
    3. Expanda la carpeta General, a continuación, pulse archivo de archivado > Siguiente.
    4. En el directorio Stores, deseleccione el recuadro de selección Tiendas y seleccione los subdirectorios siguientes.
      • WebContent
      • src
    5. Asegúrese de que la opción Crear solo directorios seleccionados está seleccionada.
    6. Pulse Examinar y defina una vía de acceso donde se exporte el archivo de archivado.
    7. En Opciones, asegúrese de que se defina la opción de exportación siguiente.
      • Crear solo directorio seleccionados
    8. Pulse Finalizar.
      Se crea un archivo Stores.zip y está listo para ser importado al entorno de desarrollo de HCL Commerce Version 9.
    9. Copie el archivo exportado Stores.zip en su entorno de desarrollo HCL Commerce Version 9.
  2. Importe el proyecto personalizado.
    1. Abra el espacio de trabajo de entorno de desarrollo de HCL Commerce Version 9 y, a continuación, abra la perspectiva Java EE.
    2. En la vista Explorador de empresa, pulse el botón derecho del ratón en el proyecto Stores y, a continuación, pulse Importar > Importar....
      Aparece la ventana Importar.
    3. Expanda la carpeta General, a continuación, pulse archivo de archivado > Siguiente.
    4. Pulse Examinar y, a continuación, seleccione el archivo Stores.zip que ha exportado del entorno de desarrollo de Feature Pack 6.
    5. En WebContent, expanda WEB-INF y borre el directorio lib. Esto hace que el archivo WEB-INF/lib/Foundation-TagLib.jar no se importe al nuevo entorno, ya que no es compatible con HCL Commerce Version 9.
    6. Pulse el recuadro de selección Sobrescribir recursos existentes sin aviso.
    7. Pulse Finalizar.
  3. Migre los servicios de búsqueda BOD para que sean servicios de REST.

    Todas las etiquetas getData utilizan los servicios de BOD proporcionados por los servidores de búsqueda o de transacciones. Sustituya los servicios de búsqueda de BOD por servicios de REST que se utilizan en la arquitectura de búsqueda actual. Los servicios de búsqueda BOD tienen patrones específicos en archivos JSP, donde el valor del atributo type es CatalogNavigationViewType en las etiquetas getData.

    1. Busque la siguiente serie para identificar qué archivos JSP requieren actualizaciones. Los archivos que contienen esta serie utilizan los servicios de BOD para la búsqueda.
      
      com.ibm.commerce.catalog.facade.datatypes.CatalogNavigationViewType
      
      Anote cada archivo que contenga esta serie, de modo que pueda actualizarlos como corresponda. Por ejemplo, esta muestra se utilizará para indicar cómo se cambia la etiqueta getData a la etiqueta REST.
      Antes:
      
      <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. Cree el archivo EnvironmentSetup.jspf para la tienda Elite.
      1. Descargue el siguiente archivo: EnvironmentSetupJspf.zip
      2. Extraiga el EnvironmentSetup.jspf en el directorio Stores/WebContent/Elite/include.
    3. Actualice las importaciones para que incluyan el archivo EnvironmentSetup.jspf:
      
      <%@ include file="/Elite/include/EnvironmentSetup.jspf"%>
      
    4. Asegúrese de que no haya archivos de importación duplicados. Es decir, revise el EnvironmentSetup.jspf y asegúrese de que las importaciones listadas en el archivo no se importan también en cada archivo JSP.
    5. Revise el valor de expressionBuilder en cada etiqueta getData. Correlacione estos servicios con una API REST.
      Normalmente, un servicio de BOD se correlacionará con dos servicios REST, donde uno se utiliza para obtener información de un producto y el otro se utiliza para obtener varios productos. Por ejemplo:
      • store/{storeId}/productview/byId/{productId}
      • store/{storeId}/productview/byIds
      Utilice los servicios REST que se ajusten a sus necesidades empresariales.
    6. Sustituya la etiqueta wcf:getData por la etiqueta wcf:rest.
      1. Establezca el atributo url en el URL de la API de REST añadiendo las variables searchHostNamePath y searchContextPath antes de los URI y sustituya los marcadores por sus variables correspondientes. Por ejemplo:
        
        <wcf:rest var="catalogNavigationView" url="${searchHostNamePath}${searchContextPath}/store/${storeId}/productview/byIds" >
        
      2. Cambie la etiqueta wcf:contextData por wcf:param en la etiqueta wcf:getData. Asegúrese de cambiar el atributo data de la etiqueta wcf:contextData a value en la etiqueta wcf:param.
      3. Mantenga la sentencia c:forEach dentro de la etiqueta getData tal cual.
      4. Cambie los valores name="UniqueID" por name="id" dentro de la etiqueta wcf:param.
      5. Añada otros parámetros opcionales que estén definidos en la API de REST. Si no se especifican los parámetros opcionales, el servicio de API de REST los recuperará del contexto del entorno. Se recomienda añadirlos a las consultas específicas que los necesiten. Por ejemplo:
        
        <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. Revise en la etiqueta getData el valor searchProfile para encontrar el perfil de búsqueda correcto que se utilizará para el servicio de REST. Si no se especifica el atributo searchProfile, busque el valor predeterminado en el servicio de BOD en el archivo de configuración de definición: Stores/WebContent/WEB-INF/config/com.ibm.commerce.catalog-fep/get-data-config.xml. El valor debe estar ubicado en el bloque generador de expresiones.
        Por ejemplo:
        
        <expression-builder>
           <param>
              <name>searchProfile</name>
              <value>IBM_findCatalogEntryByID</value>
           </param>
        </expression-builder>
        
        Tenga en cuenta que el perfil de búsqueda de BOD se actualizará al nuevo valor.
      7. Actualice el perfil de búsqueda de BOD para que sea el nuevo valor de perfil de búsqueda REST. Para obtener más información sobre las correlaciones de servicios, consulte Correlacionar los servicios de REST con los servicios de BOD..
        Por ejemplo, el perfil de búsqueda de BOD IBM_findCatalogEntryByID está en desuso por el perfil de búsqueda REST IBM_findProductByIds_Summary, lo que da como resultado:
        
        <wcf:param name="profileName" value="IBM_findProductByIds_Summary" />
        
      8. Utilice una etiqueta c:catch para acoger la etiqueta wcf:rest y especifique searchServerException como el valor del atributo var.
        Por ejemplo, el código resultante debe parecerse al siguiente ejemplo:
        
        <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. Pruebe que las páginas se cargan satisfactoriamente. Para ayudarle, consulte la etiqueta wcf:json para generar datos JSON en la página. Sustituir .value.value por .value después de objetos. Si no realiza esta sustitución, se producen errores como, por ejemplo, javax.el.PropertyNotFoundException: No se ha encontrado la propiedad 'value' en el tipo java.lang.String.
  4. Elimine el filtro no existente en el archivo web.xml.
    1. Abra el archivo siguiente para editarlo.
      • WCDE_installdir/workspace/Stores/WebContent/WEB-INF/web.xml
    2. Elimine el bloque de código siguiente.
      <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. Guarde y cierre el archivo.
  5. Elimine la configuración de la tienda remota del archivo wc-component.xml de la fundación.
    1. Abra el archivo siguiente para editarlo.
      • workspace_dir/WC/xml/config/com.ibm.commerce.foundation/wc-component.xml
    2. Elimine el bloque de código siguiente.
      <_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. Guarde y cierre el archivo.
  6. Elimine EJB de la cabecera de vista previa de la tienda.
    1. Abra el archivo /Stores/WebContent/tools/preview/StorePreviewerHeader.jsp para editarlo.
    2. Localice la serie siguiente:
      
      pageContext.setAttribute("workspaceId", abWorkspace.getWorkspaceIdInEJBType().toString());
      
      Sustitúyalo por la siguiente serie:
      
      pageContext.setAttribute("workspaceId", abWorkspace.getWorkspaceIdInEntityType().toString());
      
    3. Localice la serie siguiente:
      
      <%@page import="com.ibm.commerce.catalog.facade.server.helpers.SolrSearchWorkspaceHelper"%>
      
      Sustitúyalo por la siguiente serie:
      
      <%@page import="com.ibm.commerce.foundation.internal.server.services.search.util.SolrSearchWorkspaceHelper"%>
      
    4. Guarde y cierre el archivo.
  7. Actualice el archivo RegistrationUpdateCommonPage.jsp para resolver un posible error de análisis HCL Commerce Version 9 que se produce cuando se carga la página de Información personal .
    1. Abra el archivo siguiente para editarlo.
      • /Stores/WebContent/Elite/UserArea/AccountSection/RegistrationSubsection/RegistrationUpdateCommonPage.jsp
    2. Alrededor de la línea 120, localice la siguiente línea de código.
      <fmt:param><fmt:formatDate type="both" dateStyle="long" value="${CommandContext.user.lastSessionInEJBType}"/></fmt:param>
    3. Actualice la línea de código con lo siguiente.
      <fmt:param><c:out value="${CommandContext.user.lastSession}"/></fmt:param>
    4. Guarde y cierre los archivos.
  8. Actualice el archivo WishListResultDisplay.jsp para resolver un posible error de HCL Commerce Version 9 que impide la apertura de la página de lista de deseos.
    1. Abra el archivo siguiente para editarlo.
      • /Stores/WebContent/Elite/UserArea/ServiceSection/InterestItemListSubsection/WishListResultDisplay.jsp
    2. Utilice CatalogEntryAccessBean.findBySKUNumberAndStore para sustituir CatalogEntryCache.findBySKUNumberAndStore y eliminar la sentencia de importación de CatalogEntryCache.
    3. Alrededor de la línea 566, localice la siguiente línea de código:
      
      <%@ 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. Actualice el código con lo siguiente:
      
      <%@ 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. Guarde y cierre los archivos.
  9. Actualice los archivos JSPF de pagos y facturación para manejar el método de pago de Apple Pay.
    1. Abra los siguientes archivos para su edición.
      • /Stores/WebContent/Elite/ShoppingArea/CheckoutSection/CheckoutPaymentsAndBillingAddress.jspf
      • /Stores/WebContent/Elite/ShoppingArea/CheckoutSection/CheckoutPaymentsAndBillingAddress.jspf
    2. Alrededor de la línea 500, localice la siguiente línea de código.
      <c:if test="${currentPaymentMethodName != 'PayInStore' && currentPaymentMethodName 
      != 'CompatiblePayment' && (currentPaymentMethodName ne 'SimplePunchout' or (currentPaymentMethodName 
      eq 'SimplePunchout' and punchoutPaymentAllowed))}">
    3. Actualice el código añadiendo el método currentPaymentMethodName != 'ApplePay'.
      El ejemplo siguiente muestra la apariencia del código después de la actualización.
      <c:if test="${currentPaymentMethodName != 'ApplePay' && currentPaymentMethodName 
      != 'PayInStore' && currentPaymentMethodName != 'CompatiblePayment' && 
      (currentPaymentMethodName ne 'SimplePunchout' or (currentPaymentMethodName eq 'SimplePunchout' 
      and punchoutPaymentAllowed))}">
    4. Guarde y cierre los archivos.
  10. Actualice los archivos JSP para que apunten al servidor de búsqueda correcto.
    1. Abra los siguientes archivos para su edición.
      • /Stores/WebContent/Elite/include/JSTLEnvironmentSetupExtForSearch.jspf
      • /Stores/WebContent/Elite/Snippets/Search/AutoSuggestSerialize.jsp
    2. Cambie todas las instancias de CommonsHttpSolrServer a HttpSolrServer.
    3. Guarde y cierre los archivos.
  11. Actualice los archivos JSPF para arreglar los enlaces de suscripción.
    1. Abra el archivo siguiente para editarlo: Stores/WebContent/Elite/include/JSTLEnvironmentSetupExtForRemoteWidgets.jspf
    2. Elimine el siguiente fragmento de código del archivo:
      
          <c:when test="${!empty restNonSSLPort}">
                <c:set var="restURLPort" value="${restNonSSLPort}" scope="request"/>
                 <c:set var="restURLScheme" value="http" scope="request"/>
          </c:when>
      
    3. Guarde y cierre el archivo.
  12. Actualice los archivos JSPF para arreglar las vistas previas a nivel de categoría.
    1. Abra el archivo siguiente para editarlo: /opt/WebSphere/AppServer/profiles/default/installedApps/localhost/ts.ear/Stores.war/tools/preview/StorePreviewer.jspf
    2. Localice el fragmento de código siguiente:
      <c:set var="entitledOrgId" value="${entitledOrg.organizationIdInEntityType}"/>
    3. Actualice el valor organizationIdInEntityType a organizationIdInEntityType, tal como se muestra en el ejemplo siguiente:
      <c:set var="entitledOrgId" value="${entitledOrg.organizationIdInEntityType}"/>
    4. Localice el fragmento de código siguiente:
      <c:set var="entitledOrgId" value="${entitledOrgs.entitledOrganizations[0].organizationIdInEntityType}"/>
    5. Actualice el valor organizationIdInEntityType a organizationIdInEntityType, tal como se muestra en el ejemplo siguiente:
      <c:set var="entitledOrgId" value="${entitledOrgs.entitledOrganizations[0].organizationIdInEntityType}"/>
    6. Guarde y cierre el archivo.
  13. Actualice el archivo B2BMyAccountParticipantRole.jspf para resolver un error potencial al visualizar el historial desde la página Mi cuenta .
    1. Abra los siguientes archivos para su edición.
      • /Stores/WebContent/Elite/UserArea/AccountSection/B2BMyAccountParticipantRole.jspf
    2. Cambie todas las instancias de organizationIdInEJBType a organizationIdInEntityType.
    3. Guarde y cierre los archivos.
  14. Actualice el archivo de XML de configuración de Struts para arreglar el planificador de RefreshExternalContent.
    1. Abra el archivo siguiente para editarlo: Stores/WebContent/WEB-INF/struts-config-catalog-fep.xml
    2. Añada la siguiente acción al archivo:
      
      <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. Guarde y cierre el archivo.
  15. Asegúrese de que el modelo de tienda está soportado en el archivo de configuración HCL Commerce.
    1. Abra el archivo siguiente:
      • workspace_dir/WC/xml/config/wc-server.xml
    2. Localice la propiedad <supportedStoreType> y asegúrese de que el modelo de tienda aparece en la lista, tal como se muestra en el ejemplo siguiente:
      <supportedStoreType>
          <wca storeType="B2B"/>
          <wca storeType="B2C"/>
      <supportedStoreType/>
      
      Nota: Puede encontrar el modelo de tienda consultando la columna STORETYPE de la tabla STORE.
      Si no se completa este paso, puede producirse el siguiente mensaje de error de Accelerator al iniciar la sesión: Actualmente no tiene acceso a la tienda utilizando HCL Commerce Accelerator. Póngase en contacto con el administrador del sistema para verificar su control de acceso.
    3. Si ha modificado el archivo, guárdelo y ciérrelo.
  16. Las tiendas locales después de la migración siguen siendo tiendas locales. Actualice la tabla STORECONF para indicarlo.
    1. Abra un indicador de mandatos para la base de datos de desarrollo de HCL Commerce Version 9.
    2. Ejecute el mandato SQL siguiente para recuperar los ID de tienda para el tipo específico de tienda:
      select store_id from store where directory in ('store_name');
      Donde
      store_name
      El nombre base de la tienda, por ejemplo, Elite.
    3. Para cada ID de tienda de sitio ampliado recuperado, inserte un registro correspondiente en la tabla STORECONF ejecutando el mandato siguiente:
      Insert into storeconf values(STOREENT_ID, 'wc.store.isRemote','0',0);
      Donde:
      STOREENT_ID
      El ID de la tienda que ha recuperado del mandato SQL anterior.