¡Pequeño esfuerzo, grandes beneficios! Pasos para migrar a WebSphere Commerce versión 9
por Francesco Schettini, 3/26/2020, 12:44:53 PMLo que se informa en este artículo es el resultado de lo que hemos hecho para una verdadera migración.
Supuestos
En el mejor de los casos: WCS en la versión 7 FEP8 o en la versión 8
Si está en la versión 7 <FEP8, la sugerencia es migrar a la FEP8 y que a la versión 9
No es necesario migrar también los EJB y las personalizaciones de los servidores transaccionales: la buena noticia es que pueden funcionar tal como están (pero, para aprovechar algunas de las ventajas de la versión 9, hay que pensar en su migración a JPA y xC).
El plan de migración
En resumen, el plan es el siguiente (orientado al desarrollo):
Migrar la seguridad fácil - bien documentado
Migrar el medio de los archivos de configuración - puede crear dudas sobre la forma correcta de hacerlo
Migrar el medio de proyecto web de la tienda - es una tarea propensa a errores ya que se necesitan cambios manuales
Complejo del Centro de Gestión de Migración - para la misma naturaleza del CMC
Migrar el Objeto de Datos de Servicio Físico es fácil - bien documentado
Migrar la lógica de la extensión y los proyectos personalizados es fácil - bien documentado
(Opcional) Migrar al complejo xC y JPA - por el impacto y la misma complejidad de personalización
Para una plataforma promedio de WCS (+7 FEP8) la migración del conjunto de herramientas (y por lo tanto del código) puede considerarse una tarea de unas pocas semanas.
A continuación proporcionamos detalles de subtareas específicas que no son tan evidentes en el Centro de Conocimiento. En particular, nuestra atención se centrará en el proyecto web "Migrar la tienda" y en el "Centro de gestión de la migración".
Migrar el Store web project
Todos los servicios usan Https
<FrontEndAssetStore>/Common/EnvironmentSetup.jspf
debe usar
value="https:
en vez de
value="http:
Use fn:trim () function within the <c:if test> JSP tags
La lógica de V9 intenta convertir la cadena en un número antes de compararlos. La función fn:trim () convierte las cadenas en números antes de que se comparen.
<FrontEndAssetStore>/Container/SubCategoryPageContainerWithTabs.jsp
<FrontEndAssetStore>/Container/ProductPageContainer.jsp
Widgets_701/com.ibm.commerce.store.widgets.AddressForm/AddressForm_UI.jspf
Widgets_801/com.ibm.commerce.store.widgets.AddressForm/AddressForm_UI.jspf
Widgets_701/com.ibm.commerce.store.widgets.OrganizationUserInfo/UserInfoUI/UserDetailsForm_UI.jspf
Widgets_801/com.ibm.commerce.store.widgets.OrganizationUserInfo/UserInfoUI/UserDetailsForm_UI.jspf
deben usar
fn:trim()
Ejemplo:
<c:if test="${childWidget.slot.internalSlotId == fn:trim(slotNumber) && !foundCurrentSlot}">
en lugar de
<c:if test="${childWidget.slot.internalSlotId == slotNumber && !foundCurrentSlot}">
Actualiza CommonJSToInclude.jspf con java script adicional
<FrontEndAssetStore>/Common/CommonJSToInclude.jspf
debe seguir el siguiente código
<script type="text/javascript"> //Redirect to HTTPS request in the browser when detect that using HTTP request, //since HTTP request is no longer supported in v9. var httpsProtocol = "https:"; var securedPort = '<c:out value="${configValueMap[\'WebServer/SSLPort\']}"/>'; if (window.location.protocol != httpsProtocol){ var href = httpsProtocol + window.location.href.substring(window.location.protocol.length); var host = window.location.host; var hostname = window.location.hostname; var httpsHost = httpsHost = (securedPort != "" && securedPort != null) ? hostname + ":" + securedPort : hostname; href = href.replace(host, httpsHost); window.location.href = href; } </script>
añadido justo despues
<link rel="apple-touch-icon-precomposed" href="${jspStoreImgDir}images/touch-icon-152px.png" sizes="152x152"/>
Migración de struts
Es necesario migrar Struts a la versión 2. A pesar de que existe una herramienta automática para ello (https://www.ibm.com/support/knowledgecenter/fr/SSZLC2_9.0.0/com.ibm.commerce.migrate.doc/code/strutsmigration.jar?view=kc), esta tarea necesita también acciones manuales como por ejemplo añadir el siguiente código a la versión migrada de struts-wcs-stores-marketing-services.xml
<action class="com.ibm.commerce.struts.v2.BaseAction" name="CustomerSegmentUBXIntegrate"> <param name="authenticate">0:0</param> <param name="https">0:1</param> <param name="parameter">com.ibm.commerce.marketing.segment.commands.CustomerSegmentUBXIntegrateCmd</param> </action> <action class="com.ibm.commerce.struts.v2.BaseAction" name="ScheduledCustomerSegmentImport"> <param name="authenticate">0:0</param> <param name="https">0:1</param> <param name="parameter">com.ibm.commerce.marketing.segment.commands.ScheduledCustomerSegmentImportCmd</param> </action>
Migrar el Management Center
La migración de CMC es bastante sencilla. De hecho, no cambió en absoluto en la versión 9. Sin embargo, por la misma naturaleza de CMC la solución de problemas puede ser realmente difícil y consumir mucho tiempo.
Sugerencias de codificación para tener en cuenta
Migrar el Centro de Gestión
La migración de la CMC es bastante recta. De hecho, no cambió en absoluto en la versión 9. Sin embargo, para la misma naturaleza de CMC la solución de problemas puede ser realmente difícil y consumir mucho tiempo.
V8 | v9 |
---|---|
com.ibm.commerce.base.objects.ServerJDBCHelperAccessBean |
Remove any use of this class |
ServerJDBCHelperAccessBean jdbcAccessBean = new ServerJDBCHelperAccessBean(); results = jdbcAccessBean.executeQuery(query); |
To execute SQL queries, remove this piece of code and use the next instruction instead: results = SessionBeanHelper.lookupSessionBean(ServerJDBCHelperBean.class). executeQuery(query); |
ServerJDBCHelperAccessBean jdbcAccessBean = new ServerJDBCHelperAccessBean(); jdbcAccessBean.executeUpdate(queryValue); |
To execute update queries, remove this piece of code and use the next instruction instead SessionBeanHelper.lookupSessionBean(ServerJDBCHelperBean.class). executeUpdate(queryValue); |
ServerJDBCHelperAccessBean sjdbcHelperAB = new ServerJDBCHelperAccessBean(); records = sjdbcHelperAB.executeParameterizedQueryNoCache( MERCHCONFINFO_ALL, new Object[]{ "recurringMerchantCode" } ); |
To execute executeParameterizedQueryNoCache method, remove this piece of code and use the next instruction instead: SessionBeanHelper.lookupSessionBean(ServerJDBCHelperBean.class). executeParameterizedQueryNoCache( MERCHCONFINFO_ALL, new Object[]{ "recurringMerchantCode" } ); |
results = jdbcAccessBean.executeParameterizedQuery (queryValue, parameters); |
To execute executeParameterizedQuery method, remove this piece of code and use the next instruction instead results = SessionBeanHelper.lookupSessionBean(ServerJDBCHelperBean.class). executeParameterizedQuery(queryValue, parameters ); |
commitCopyHelper() |
remove refreshCopyHelper from the code, no need to explicitly use EntityManager to make the changed JPA entity persistent. Once the transaction commit or flush operation is called, the changed data will be committed to the database. (see the reference). |
refreshCopyHelper |
remove refreshCopyHelper from the code |
InEJBType() |
replace any occurrence of String “InEJBType()” by “InEntityType()” (updating all AccessBeans getters suffix) |
Enumeration sds = ShippingModeCache.findByStoreEntity( getCommandContext().getStoreId()); |
ShippingModeAccessBean has been extended to take advantage of the WebSphere Commerce data cache. Therefore use the following code Enumeration sds = new ShippingModeAccessBean().findByStoreEntity( getCommandContext().getStoreId()); |
addSitemaps method of the com.ibm.commerce.seo.commands.SitemapGenerateCmdImpl implementation |
SitemapGenerateCmdImpl.addSitemaps method has been renamed to zipSiteMapFiles. |
No te quedes atascado en las versiones antiguas, migra a la versión 9
Podemos ayudarte a dirigir la migración, crear la nueva infraestructura, diseñar la estrategia adecuada, planificar el recorte, ejecutarlo!
No dudes en contactarnos.