Objets SDO (Service Data Objects)
Les objets SDO (Service Data Objects) constituent une infrastructure pour le développement d'applications de données qui comprend une architecture et une API. HCL Commerce utilise les fonctionnalités SDO pour la sérialisation et désérialisation XML, ainsi que pour la génération de code depuis XSD vers des objets Java statiques. Les SDO eux-mêmes sont des représentations d'objets Java de vos noms, et peuvent être facilement traversés en utilisant des getters.
L'objet SDO offre les avantages suivants :
- Il simplifie le modèle de programmation des données J2EE
- Il extrait les données dans une architecture orientée services (SOA)
- Il unifie le développement d'applications de données
- Il prend en charge et intègre le XML
- Il intègre les modèles J2EE et les meilleures pratiques
En Java, les objets de données du module de service (contenus dans le projet d'objets de données) sont représentés en tant qu'objets SDO (Service Data Objects). Ce module contient les documents XSD des objets de données ainsi que le fichier WSDL des services et le code SDO généré à utiliser par l'implémentation de façade de composant et le client Java.
Un exemple de SDO est com.ibm.commerce.member.facade.datatypes.impl.PersonTypeImpl , qui implémente l'interface com.ibm.commerce.member.facade.datatypes.PersonType. Pour obtenir des informations depuis le SDO, vous devez connaître son XPath. Par exemple, le XPath de l'ID d'ouverture de session d'une personne est le suivant : /Person/Credential/LogonID
Pour obtenir ces informations depuis le SDO Person, vous écrivez le code Java suivant :
personType.getCredential().getLogonID();
Lorsqu'un getter SDO renvoie une liste, reportez-vous au Javadoc pour déterminer le type d'élément de liste. Par exemple, la liste des contacts dans le carnet d'adresses d'une personne est de type com.ibm.commerce.foundation.common.datatypes.ContactInfoType :
List contacts = person.getAddressBook().getContact();
for (int i=0; i < contacts.size(); i++) {
ContactInfoType contactInfo = (ContactInfoType) contacts.get(i);
TelephoneType telephone1 = contactInfo.getTelephone1();
}
Voir Introduction to Service Data Objects sur IBM DeveloperWorks pour une bonne introduction à SDO.
Annotations SDO
Les annotations SDO sont des annotations Eclipse Modeling Framework (EMF) pour générer du code Java basé sur des XSD. Des annotations SDO peuvent être ajoutées au XSD pour aider les outils EMF à spécifier le nom du package et le préfixe de l'espace de nom XML lors de la création du .genmodel en tant que base pour générer des SDO. Cette extension consiste à ajouter l'espace de nom et la déclaration de package suivants à chaque schéma défini. L'élément espace de nom est la définition de syntaxe EMF permettant de spécifier l'attribut de package. Cet attribut de package est utilisé par les outils pour générer le nom du package des objets générés. Dans l'exemple ci-dessous, le SDO généré est com.ibm.commerce.catalog.facade.datatypes.
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
xmlns:oa="http://www.openapplications.org/oagis/9"
xmlns:_cat="http://www.ibm.com/xmlns/prod/commerce/9/catalog"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://www.ibm.com/xmlns/prod/commerce/9/catalog"
ecore:nsPrefix="_cat"
ecore:package="com.ibm.commerce.catalog.facade.datatypes">
Pour plus d'informations, consultez l'article sur le site Web dev.eclipse.org.
class est réservé par SDO. Si vous utilisez class comme nom de propriété, un trait de soulignement _ est ajouté pour fournir un nom unique lorsque EMF génère les SDO. Toutefois, il ne met pas à jour les fichiers de configuration, et des mises à jour manuelles sont nécessaires. Par exemple :<_config:userDataProperty logicalPropertyName="class_"
physicalPropertyName="class_"/>
<_config:column name="CLASS" nullable="true" primaryKey="false"
propertyName="class_" type="INTEGER"/>
Recommandations de programmation pour les objets métier HCL Commerce
- Chaque objet métier défini dans le modèle logique HCL Commerce doit avoir une interface Java définie pour décrire l'objet.
- Bien que les objets métier implémentent l'interface
commonj.sdo.DataObject, il est recommandé d'utiliser l'interface Java statique lorsque c'est possible et d'utiliser uniquement l'interfacecommonj.sdo.DataObjecten cas de besoin. - Les objets métier sont généralement définis dans le package Java com.ibm.commerce.component.facade.datatypes pour le composant métier. Par exemple, les interfaces Catalog Java pour les objets métier sont situées dans com.ibm.commerce.catalog.facade.datatypes.
- Étant donné que les objets métier sont représentés par des interfaces Java, une classe de fabrique est nécessaire pour instancier une implémentation de l'interface. La fabrique pour la création et l'instanciation des objets métier doit se trouver dans le même package Java et la même interface d'objets métier. Elle doit utiliser la convention de dénomination suivante : ComponentFactory. Par exemple, la fabrique pour l'instanciation des objets de catalogue est appelée CatalogFactory.
- La technologie Java utilisée pour implémenter les interfaces Java est basée sur EMF, où le modèle de programmation pour instancier les objets suit un modèle cohérent avec EMF. Autrement dit, l'interface de fabrique qui est utilisée pour créer les implémentations Java de l'interface Java des objets métier a un champ
eINSTANCE, avec des liens vers l'implémentation la fabrique pour créer l'objet.Voici un exemple d'instanciation d'un objet métier CatalogDescription :
CatalogDescriptionType descType = CatalogFactory.eINSTANCE.createCatalogDescriptionType(); descType.setLanguage("-1"); descType.setName("CatalogEntry Name"); descType.setThumbnail("CatalogEntry Thumbnail Relative URI"); descType.setShortDescription("CatalogEntry Short Description");