Migración de beans de entidad EJB IBM Websphere Commerce Version 8 a Java Persistence API

Los Enterprise Java Entity Beans ya no están soportados en HCL Commerce Version 9. Utilizando una combinación de herramientas y pasos manuales, puede migrar los beans de entidad EJB 1.1 a JPA, y actualizar el código para utilizar las API de HCL Commerce Version 9.

La consolidada Java Persistence API (JPA) tiene numerosas ventajas, incluida la simplicidad y la velocidad. Para aprovechar la tecnología JPA, puede utilizar la herramienta de migración de código para ayudarle a migrar los beans existentes a JPA. La herramienta de migración de código explora los beans EJB e identifica entidades y código que se deben actualizar a la especificación JPA. En el caso de que sea posible, la herramienta puede realizar sustituciones, tales como cambios y eliminaciones de clase, excepción y nombre de método. En el caso de que no sea posible realizar ningún cambio, el programa de utilidad registra lo que se encuentra.
Nota: Los EJB de sesión sin estado todavía se siguen soportando y no se deben migrar a JPA.

Antes de empezar

Exporte los dos proyectos siguientes del entorno de desarrollo de IBM Websphere Commerce Version 8 al entorno de desarrollo de HCL Commerce Version 9.0.0.1+.
  • WebSphereCommerceServerExtensionsData
  • WebSphereCommerceServerExtensionsLogic
  1. Exporte el proyecto web dinámico Stores (WebSphereCommerceServerExtensionsData) como un archivo ZIP desde el área de trabajo del entorno de desarrollo de IBM Websphere Commerce Version 8.
    1. Abra el área de trabajo de entorno de desarrollo de IBM Websphere Commerce Version 8 y abra la perspectiva J2EE.
    2. En la vista Explorador de empresa, pulse con el botón derecho del ratón en el proyecto de WebSphereCommerceServerExtensionsData y, a continuación, pulse Exportar > Exportar .... Se visualiza la ventana Exportar.
    3. Expanda la carpeta General, a continuación, pulse archivo de archivado > Siguiente.
    4. En el directorio WebSphereCommerceServerExtensionsData, desactive el recuadro de selección WebSphereCommerceServerExtensionsData y seleccione los siguientes subdirectorios:
      • ejbModule
      • classdiagram.dnx
    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. Pulse Finalizar. Se crea un archivo de almacenamiento de WebSphereCommerceServerExtensionsData.zip.
    8. Copie el archivo exportado WebSphereCommerceServerExtensionsData.zip en su entorno de desarrollo de HCL Commerce Version 9 para poder efectuar la importación.
  2. Exporte el proyecto Java de WebSphereCommerceServerExtensionsLogic como un archivo de almacenamiento Java (JAR) desde el área de trabajo del entorno de desarrollo de IBM Websphere Commerce Version 8.
    1. Abra el área de trabajo de entorno de desarrollo de IBM Websphere Commerce Version 8 y abra la perspectiva J2EE.
    2. Seleccione el proyecto que contiene el código personalizado. Pulse el botón derecho del ratón y, a continuación, seleccione Exportar > Java > Archivo Jar.
    3. Pulse Siguiente.
    4. En la lista de recursos bajo Seleccionar los recursos para exportar, asegúrese de que el proyecto esté seleccionado.
    5. Asegúrese de que las opciones Exportar archivos de clases y recursos generados y Exportar archivos fuente y recursos Java estén seleccionadas.
    6. Pulse Examinar y seleccione una ruta de acceso para guardar el archivo de almacenamiento Java exportado.
    7. Asegúrese de que la opción Comprimir el contenido del archivo está seleccionada.
    8. Pulse Finalizar. El proyecto Java de WebSphereCommerceServerExtensionsLogic se exporta como un archivo JAR.
  3. Importe el proyecto web dinámico Stores (WebSphereCommerceServerExtensionsData) al entorno de desarrollo de HCL Commerce Version 9.
    1. Abra el área de trabajo de entorno de desarrollo de HCL Commerce Version 9 y abra la perspectiva Java EE.
    2. En la vista Explorador de empresa, pulse con el botón derecho del ratón en el proyecto de WebSphereCommerceServerExtensionsData y, a continuación, pulse Importar > Importar .... Se visualiza 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 de almacenamiento WebSphereCommerceServerExtensionsData.zip que ha exportado desde el entorno de desarrollo de IBM Websphere Commerce Version 8 en el paso 1.
    5. Pulse el recuadro de selección Sobrescribir recursos existentes sin aviso.
    6. Pulse Finalizar. El proyecto de WebSphereCommerceServerExtensionsData se sustituye por el contenido del entorno de desarrollo de IBM Websphere Commerce Version 8.
  4. Importe el proyecto Java de WebSphereCommerceServerExtensionsLogic como un archivo de almacenamiento Java (JAR) al entorno de desarrollo de HCL Commerce Version 9.
    1. Abra el área de trabajo de entorno de desarrollo de HCL Commerce Version 9 y abra la perspectiva Java EE.
    2. Seleccione Perspectiva Java EE > Otros proyectos > WebSphereCommerceServerExtensionsLogic > src.
    3. Pulse el botón derecho del ratón en el proyecto de destino y, a continuación, pulse Importar. Se visualiza la ventana Importar.
    4. Expanda la carpeta General, a continuación, pulse archivo de archivado > Siguiente.
    5. Pulse Examinar y, a continuación, seleccione el archivo de almacenamiento Java de WebSphereCommerceServerExtensionsLogic.jar que ha exportado desde el entorno de desarrollo de IBM Websphere Commerce Version 8 en el paso 2.
      Nota:
      • Debe actualizarse la vía de acceso de clases de cada proyecto personalizado para resolver las dependencias en bibliotecas y entre proyectos.
      • No importe ninguno de los metadatos o la migración no funcionará. Los metadatos incluyen los siguientes archivos:
        • .setting
          • org.eclipse.wst.common.component
          • org.eclipse.wst.common.project.facet.core.xml.factorypath
        • .project
        • .classpath
        • META-INF/
          • MANIFEST.MF
    6. Si se le solicita si desea sobrescribir algún archivo, pulse para cada archivo.
    7. Pulse Finalizar. El proyecto Java de WebSphereCommerceServerExtensionsLogic se sustituye por el contenido del entorno de desarrollo de IBM Websphere Commerce Version 8.

Por qué y cuándo se efectúa esta tarea

La migración de los beans de entidad EJB 1.1 a JPA implica modificar dos proyectos en el entorno de desarrollo de HCL Commerce Version 9.0.0.1+:
WebSphereCommerceServerExtensionsData
Para migrar este proyecto, puede utilizar una combinación de herramientas. Empiece aprovechando Rational Application Developer (RAD) para generar entidades JPA del esquema de base de datos. A continuación, puede identificar y corregir los errores restantes que se han producido desde la generación JPA que realiza RAD.
WebSphereCommerceServerExtensionsLogic
Para migrar este proyecto, puede convertir manualmente beans de datos EJB a beans de datos JPA y convertir clases de mandatos para utilizar código JPA, a continuación utilice la herramienta de migración de código para identificar y corregir los errores restantes que se han producido desde las conversiones manuales.

Procedimiento

  1. Migre los EJB EJB 1.1 personalizados y AccessBeans a JPA utilizando WC-JPA-Modeler o el método manual.
    • Obtenga WC-JPA-Modeler y siga el archivo README contenido para obtener instrucciones sobre su uso.
    • Para el método manual, siga estos pasos:
      1. Mediante RAD, genere entidades JPA desde el esquema de base de datos para el proyecto WebSphereCommerceServerExtensionsData.
        1. Abra Rational Application Developer.
        2. Pulse el botón derecho del ratón en WebSphereCommerceServerExtensionsData y, a continuación, pulse Renombrar.
        3. Realice una copia de seguridad del proyecto cambiándole el nombre, por ejemplo, WebSphereCommerceServerExtensionsData-EJB.
        4. Pulse el botón derecho del ratón en el proyecto WC, a continuación, pulse Propiedades > Ensamblaje de despliegue para cambiar lo que está incluido en el EAR (Enterprise Archive).
        5. Pulse el proyecto WebSphereCommerceServerExtensionsData que ha renombrado, por ejemplo, WebSphereCommerceServerExtensionData-EJB. A continuación, pulse eliminar > Aceptar.
        6. Pulse Archivo > Nuevo > Proyecto JPA.
        7. Para el nombre del proyecto, escriba WebSphereCommerceServerExtensionData.
        8. En la sección Pertenencia a EAR, pulse Añadir proyecto a un EAR, seleccione WC para el nombre del proyecto EAR y, a continuación, pulse Finalizar.
          Nota: Si se le solicita cambiar la perspectiva a la perspectiva JPA, pulse .
        9. Conmute al Explorador de origen de datos.
        10. Pulse el botón derecho del ratón en Conexionesde base de datos y luego pulse Nuevo.
        11. Seleccione un gestor de base de datos:
          • DB2Para DB2 para Linux, UNIX y Windows:
            1. Seleccione Controlador predeterminado JDBC IBM Data Server Driver para JDBC y SQLJ (JDBC 4.0).
            2. Complete los campos para la Base de datos, el Host, el Número de puerto, el Nombre de usuario, la Contraseña y el Esquema predeterminado.
            3. Pulse Finalizar.
          • OraclePara Oracle:
            1. Seleccione Controlador JDBC Oracle 12 - Controlador ligero de Oracle predeterminado.
            2. Pulse el botón de puntos suspensivos (...) junto al controlador JDBC, añada o edite el controlador JDBC y, a continuación, pulse Aceptar.
            3. Rellene el SID, el Host, el Número de puerto, el Nombre de usuario, la Contraseña y el Esquema predeterminado.
            4. Pulse Finalizar.
        12. Pulse el botón derecho del ratón en el proyecto JPA en el Explorador de proyectos y, a continuación, pulse Herramientas JPA > Generar entidades de tablas.
        13. En la página Seleccionar tablas del asistente Generar entidades de tablas, seleccione la conexión de la base de datos que ha creado.
        14. Complete el asistente y, a continuación, pulse Finalizar.
        15. Cree el proyecto pulsando Proyectos > Construir todo.
      2. Convierta los beans de datos EJB a beans de datos JPA en el proyecto WebSphereCommerceServerExtensionsLogic.
        1. Abra una clase de beans de datos.
        2. Elimine las referencias a los métodos eliminados en el proyecto WebSphereCommerceServerExtensionsData.
        3. Elimine referencias de código a las excepciones siguientes, eliminándolas de las cláusulas throws en declaraciones de métodos y eliminando cláusulas catch que las capturan.
          • java.rmi.RemoteException
          • javax.naming.NamingException
        4. Sustituya las referencias de código a las excepciones siguientes por las subclases javax.persistence.PersistenceException correspondientes, sustituyéndolas en las cláusulas throws en declaraciones de métodos y sustituyendo las cláusulas catch que las capturan.
          • javax.ejb.CreateException
          • javax.ejb.FinderException
        5. Busque todas las referencias al método setEJBRef(...) y actualice el nombre del método por setEntity.
        6. Buscar todas las referencias a .getEJBRef().remove() y actualizarlas a: .remove().
        7. Busque todas las referencias al método getEJBRef() y actualice el nombre del método por getEntity.
        8. Repita estos subpasos para todas las clases de beans de datos.
      3. Convierta las clases de mandatos para utilizar código JPA en el proyecto WebSphereCommerceServerExtensionsLogic.
        1. Abra una clase de mandato.
        2. Elimine las referencias a los métodos eliminados en el proyecto WebSphereCommerceServerExtensionsData.
        3. Elimine referencias de código a las excepciones siguientes, eliminándolas de las cláusulas throws en declaraciones de métodos y eliminando cláusulas catch que las capturan.
          • java.rmi.RemoteException
          • javax.ejb.CreateException
          • javax.ejb.FinderException
          • javax.naming.NamingException
        4. Actualice la lógica para que coincida con JPA.
        5. Repita estos subpasos para cada clase de mandato.
  2. Actualice todas las referencias al EJB 1.1 EJB y AccessBeans predeterminadas a JPA utilizando wc-code-migration-tool o el método manual.
    • Utilice las tablas siguientes como referencia para los cambios necesarios.
      Cambiar todos los usos de cualquier clase de formato Para:
      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.
      eliminar todos los usos de: Notas adicionales:
      com.ibm.commerce.*AccessBeanData Ninguna
      com.ibm.commerce.*Key Donde representaba una clave primaria que está compuesta de una sola columna en la tabla correspondiente.
      com.ibm.commerce.*JDBCHelper Incluir cualquier clase que también tuviera javax.ejb.EJBObject como superclase
      com.ibm.commerce.*JDBCHelperAccessBean
      • Para EJB 1.1:

        Ninguno

      • Para EJB 3 y posteriores:

        Los beans de sesión se han movido de EJB 1.1 a EJB 3.

        Los bean de sesión EJB se han cambiado para eliminar las interfaces de inicio y remota y ahora son beans simples anotados con la anotación Sin estado: @Stateless(name="ServerJDBCHelper")

        Se han eliminado las clases de acceso a los beans de sesión.

        Se recomienda SessionBeanHelper.lookupSessionBean.

      com.ibm.commerce.*JDBCHelperFactory Ninguno
      com.ibm.commerce.*JDBCHelperHome Ninguna
      com.ibm.commerce.*Home. Sustitúyala utilizando la entidad JPA correspondiente directamente o utilice la clase AccessBean correspondiente.
      com.ibm.commerce.*AccessBeanData Ninguna
      • javax.naming.NamingException
      • java.rmi.RemoteException
      Donde las excepciones se han emitido mediante métodos en IBM Websphere Commerce Version 8.
      • javax.ejb.CreateException
      • javax.ejb.FinderException
      Donde las excepciones se han emitido mediante métodos en IBM Websphere Commerce Version 8. Sustitúyalos por la subclase javax.persistence.PersistenceException adecuada.
      javax.ejb.DuplicateKeyException Donde las excepciones se han emitido mediante métodos en IBM Websphere Commerce Version 8. Sustituya estas excepciones por javax.persistence.EntityExistsException.
      ejbCreate() Desde cualquier clase del formulario com.ibm.commerce.*
      ejbPostCreate() Desde cualquier clase del formulario com.ibm.commerce.*BeanBase.
      ejbPostCreate() Desde cualquier clase del formulario com.ibm.commerce.*BeanAccessHelper.
      getSessionContext() Desde cualquier clase del formulario com.ibm.commerce.*.
      ejbActivate() Desde cualquier clase del formulario com.ibm.commerce.*.
      ejbCreate() Desde cualquier clase del formulario com.ibm.commerce.*.
      ejbPassivate() Desde cualquier clase del formulario com.ibm.commerce.*.
      ejbRemove() Desde cualquier clase del formulario com.ibm.commerce.*.
      instantiateEJBByPrimaryKey() Desde cualquier clase del formulario com.ibm.commerce.*AccessBean.
      defaultJNDIName() Desde cualquier clase del formulario com.ibm.commerce.*AccessBean.
      commitCopyHelper() Desde cualquier clase del formulario com.ibm.commerce.*AccessBean.
      refreshCopyHelper() Desde cualquier clase del formulario com.ibm.commerce.*AccessBean.
      copyFields() Desde cualquier clase del formulario com.ibm.commerce.*EntityCreationData.
      getMemorySizeExcludingObjectsToScrub() Desde cualquier clase del formulario com.ibm.commerce.*Key.
      getObjectsToScrub() Desde cualquier clase del formulario com.ibm.commerce.*Key.
      getObjectSize() Desde cualquier clase del formulario com.ibm.commerce.*Key.
      setScrubbedObjects() Desde cualquier clase del formulario com.ibm.commerce.*Key.
      getObjectModelFacade() Desde cualquier clase del formulario com.ibm.commerce.*.
      getOMF() Desde cualquier clase del formulario com.ibm.commerce.*.
      getObjectModuleFacade() Desde cualquier clase del formulario com.ibm.commerce.*.
      getPPCJDBCHelper() Desde cualquier clase del formulario com.ibm.commerce.*.
      getPaymentsFacade() Desde cualquier clase del formulario com.ibm.commerce.*.
      getActivityLoggerFacade() Desde cualquier clase del formulario com.ibm.commerce.*.
      get*InEJBType() Desde cualquier clase del formulario com.ibm.commerce.*. Sustituir por get*InEntityType.
      instantiateEJB() Desde cualquier clase del formulario com.ibm.commerce.*AccessBean. Sustituir por instantiateEntity.
      Lea y grabe todos los campos públicos de las clases del formulario com.ibm.commerce.*BeanBase con el método getter o setter correspondiente. Los métodos getter y setter para algunos campos de clave externa se sustituyen por un método getter/setter que obtiene/establece una entidad JPA padre o hijo.
      Nota:
      • Si ha añadido sus propias personalizaciones a los archivos JSP que utilizan la tecnología EJB, debe migrar las personalizaciones. Utilice las tablas anteriores como referencia para ayudarle con la migración.
      • En algunos casos en los que los EJB tienen aplicadas políticas de control de acceso, el bean de entidad JPA necesitará implementar la interfaz Groupable o Protectable para cumplir con el mismo esquema de seguridad y política.
        • Para una interfaz Protectable, debe implementar los métodos fulfills y getOwner. Para obtener más información, consulte Interfaz Protectable.
        • Para una interfaz Groupable, debe implementar el método getGroupingAttributeValue. Para obtener más información, consulte Interfaz Groupable.