API Java Persistence

Les Enterprise Java Beans (EJB) étaient couramment utilisés dans les versions précédentes de HCL Commerce. A partir de la version 9, l'API Java Persistence (JPA) sera la norme.

Compatibilité avec les versions précédentes

EJB était couramment utilisé dans les versions précédentes, mais à partir de 9.0.0, la prise en charge d'EJB 1.1/2.x sera obsolète. Les API qui seront prises en charge sont JPA et EJB 3.x. JPA sera la technologie standard utilisée pour la personnalisation des fonctionnalités HCL Commerce.

Les beans d'accès EJB existants ont été remplacés par des beans d'accès JPA. La plupart des interfaces de ces beans sont les mêmes que dans le modèle de programmation précédent. Pour les beans de session 2.x existants, nous fournissons des beans de session 3.x à l'aide de l'annotation, au lieu de XML, pour la configuration. Les personnalisations basées sur EJB doivent être migrées vers les beans de session JPA et 3.x.

Recommandations pour la personnalisation de HCL Commerce à l'aide de JPA

  • Ne modifiez pas les entités JPA par défaut ou les tables de base de données par défaut.
  • Définissez le schéma d'entité personnalisé.
  • Enregistrez le schéma personnalisé dans la table keys. La table keys est utilisée pour générer des clés primaires pour les tables personnalisées. Par exemple,
    INSERT INTO KEYS VALUES (10002,'xsocialaccount','xsocialaccount_id',10000,500,0,2147483647,0,1048576,1);
    Veuillez consulter la table KEYS pour obtenir des informations détaillées sur chaque colonne.
  • Définissez une entité JPA personnalisée qui agrandit EntityBase. Cela rend inutile la définition de optCounter, qui est utilisé pour les verrous optimistes. Les entités JPA peuvent éventuellement implémenter des interfaces protégées à des fins de contrôle d'accès. Vous pouvez créer une interface protégée en agrandissant EntityBase. Le contrôle d'accès sera délégué à votre classe d'aide à l'accès.

    Le snippet de code suivant définit une nouvelle entité JPA SocialAccount qui agrandit EntityBase. Il est mappé à la table "XSOCIALACCOUNT". Cette nouvelle entité dispose d'une requête nommée JPA qui définit un JPQL afin de trouver un compte social à l'aide de l'ID de membre.

    @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 {
    
    Le snippet de code suivant définit l'attribut avec l'annotation ID, ce qui signifie qu'il est mappé à la colonne de clé primaire XSOCIALACCOUNT_ID dans la table de base de données.
    @Column(name = "XSOCIALACCOUNT_ID", nullable = false)
        @Basic(optional = false)
        @Id
        public Long getSocialAccountId() {
            return socialAccountId;
        }
    Le dernier snippet de code ci-dessous définit un attribut mappé à la colonne STORE_ID dans la table de base de données.
    @Column(name = "STORE_ID")
        public Integer getStoreId() {
            return storeId;
        }
  • Définissez les implémentations DAO personnalisées qui agrandissent AbstractJPAEntityDaoImpl. Implémentez un constructeur à l'aide de la classe d'entité JPA comme paramètre. Cela vous permet de tirer parti de plusieurs méthodes utiles, telles que CRUD (créer, lire, mettre à jour et supprimer) de base, paging, sorting et generateKey.
    Le snippet de code suivant définit une implémentation DAO pour l'entité JPA, utilise ici générique java, SocialAccount est le type d'entité JPA, et Long est le type de clé primaire.
    public class SocialAccountDaoImpl extends AbstractJPAEntityDaoImpl {   
    /**
         * Default constructor.
         */
        public SocialAccountDaoImpl() {
            super(SocialAccount.class);
        }
  • Vous pouvez éventuellement définir une aide d'accès personnalisée qui agrandit AccessHelper à des fins de contrôle d'accès, où vous devez implémenter les méthodes getOwner() et fulfill().
  • Stockez ces classes dans le projet WebSphereCommerceServerExtensionsData. Si on ne peut pas les trouver dans ce projet, vos entités JPA personnalisées ne seront pas numérisées et chargées.
  • Chargez une stratégie de contrôle d'accès avec le nouvel utilitaire acpload si vous avez besoin d'un contrôle d'accès.