Java Persistence API

En las versiones anteriores de HCL Commerce se solían utilizar los Enterprise Java Beans (EJB). A partir de la versión 9, el estándar será Java Persistence API (JPA).

Compatibilidad con versiones anteriores

EJB se solía utilizar generalmente en releases anteriores, pero a partir de 9.0.0, el soporte para EJB 1.1/2.x se dejará de utilizar. Las API a las que se dará soporte son JPA y EJB 3.x. JPA será la tecnología estándar utilizada para la personalización de las características de HCL Commerce.

Los beans de acceso basados en EJB se han sustituido por beans de acceso basados en JPA. La mayoría de las interfaces para estos beans son las mismas que en el modelo de programación anterior. Para beans de sesión 2.x existentes, proporcionamos beans de sesión 3.x utilizando anotación, en lugar de XML, para la configuración. Las personalizaciones basadas en EJB se deberían migrar a beans de sesión JPA y 3.x.

Directrices para personalizar HCL Commerce utilizando JPA

  • No cambie las entidades JPA o las tablas de base de datos predeterminadas.
  • Defina esquema de entidad personalizado.
  • Registre el esquema personalizado en tabla de claves. La tabla de claves se utiliza para generar claves primarias para tablas personalizadas. Por ejemplo,
    INSERT INTO KEYS VALUES (10002,'xsocialaccount','xsocialaccount_id',10000,500,0,2147483647,0,1048576,1);
    Consulte la tabla KEYS para obtener información detallada sobre cada columna
  • Defina una entidad JPA personalizada que amplía EntityBase. Al hacerlo, hace innecesario definir optCounter, que se utiliza para bloqueos optimísticos. Opcionalmente, las entidades JPA pueden implementar interfaces protegidas para fines de control de acceso. Puede crear una interfaz protegida ampliando EntityBase. El control de acceso se delegará a la clase ayudante de acceso.

    El fragmento de código siguiente define una nueva entidad JPA SocialAccount que amplía EntityBase. Se correlaciona con la tabla "XSOCIALACCOUNT." Esta nueva entidad tiene una consulta denominada JPA, que define un JPQL para poder encontrar una cuenta social utilizando un ID de miembro.

    @Entity
    @Table(name = "XSOCIALACCOUNT")
    @NamedQueries({
            @NamedQuery(name = "SocialAccount.getSocialAccountsByMemberId", query = "select c from SocialAccount c where c.memberId = :memberId") })
    public class SocialAccount extends EntityBase implements Serializable, Protectable {
    
    El siguiente fragmento de código define el atributo con la anotación de ID, lo que significa que se está correlacionando con la columna de clave primaria XSOCIALACCOUNT_ID en la tabla de base de datos.
    @Column(name = "XSOCIALACCOUNT_ID", nullable = false)
        @Basic(optional = false)
        @Id
        public Long getSocialAccountId() {
            return socialAccountId;
        }
    El último fragmento de código define un atributo que se está correlacionando con la columna STORE_ID en la tabla de base de datos.
    @Column(name = "STORE_ID")
        public Integer getStoreId() {
            return storeId;
        }
  • Defina implementaciones DAO personalizadas que amplían AbstractJPAEntityDaoImpl. Implemente un constructor utilizando la clase de entidad JPA como parámetro. Al hacerlo le permite aprovechar varios métodos útiles, tales como CRUD básico, paginación, ordenación y generateKey.
    El fragmento de código siguiente define una implementación DAO para entidad JPA, aquí está utilizando java genérico, SociaAccount es el tipo de entidad JPA y Long es el tipo de clave primaria.
    public class SocialAccountDaoImpl extends AbstractJPAEntityDaoImpl {   
    /**
         * Default constructor.
         */
        public SocialAccountDaoImpl() {
            super(SocialAccount.class);
        }
  • Opcionalmente, puede definir una clase ayudante personalizada, que amplía AccessHelper para fines de control de acceso, donde debe implementar métodos getOwner() y fulfill().
  • Almacene estas clases en el proyecto WebSphereCommerceServerExtensionsData. Si no se pueden encontrar en este proyecto, las entidades JPA personalizadas no se explorarán ni cargarán.
  • Cargue una política de control de acceso con el nuevo programa de utilidad acpload si necesita control de acceso.