Objetos de datos de servicio (SDO)

SDO (objetos de datos de servicio) es una infraestructura para el desarrollo de aplicaciones de datos, que incluye una arquitectura y una API. HCL Commerce utiliza las funciones de SDO para la serialización y desclasificación de XML, y la generación de código de XSD para objetos de Java estáticos. Estos SDO son representaciones de nombres de objetos Java, y pueden atravesarse fácilmente utilizando métodos get.

SDO proporciona los siguientes beneficios:

  • Simplifica el modelo de programación de datos J2EE
  • Abstrae datos de una arquitectura orientada a servicios (SOA)
  • Unifica el desarrollo de aplicaciones de datos
  • Soporta e integra XML
  • Incorpora procedimientos recomendados y patrones J2EE

En Java, los objetos de datos del módulo de servicio (incluidos en el proyecto de objeto de datos se representan como objetos de datos de servicio (SDO). Este módulo contiene los XSD de los objetos de datos conjuntamente con el WSDL de los servicios y el código SDO generado que va a utilizar la implementación de la fachada de componentes y el cliente Java.

Un ejemplo de un SDO es com.ibm.commerce.member.facade.datatypes.impl.PersonTypeImpl, que implementa la interfaz com.ibm.commerce.member.facade.datatypes.PersonType. Para obtener información sobre el SDO, es necesario conocer su XPath. Por ejemplo, el XPath del ID de inicio de sesión de una persona es el siguiente: /Person/Credential/LogonID

Para obtener esta información del SDO de la persona, escriba el siguiente código Java:


personType.getCredential().getLogonID();

Cuando un método de SDO devuelve una lista, consulte el Javadoc para determinar el tipo de elementos List. Por ejemplo, la lista de contactos en la libreta de direcciones de una persona es de tipo 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();
}

Consulte Introduction to Service Data Objects en IBM DeveloperWorks para obtener una buena introducción a los SDO.

Anotaciones de SDO

Las anotaciones de SDO son anotaciones de Eclipse Modeling Framework (EMF) para generar código Java basado en XSD. Las anotaciones de SDO pueden añadirse a la XSD para ayudar a las herramientas de EMF a especificar el nombre del paquete y el prefijo de espacio de nombres XML cuando se crea .genmodel como base para generar SDO. Esta extensión es añadir el siguiente espacio de nombres y la siguiente declaración de paquete a cada esquema definido. El elemento namespace es la definición de sintaxis de EMF para permitir especificar el atributo de paquete. Este atributo de paquete lo utilizan las herramientas para generar el nombre de paquete de los objetos generados. En el ejemplo siguiente, el SDO generado escom.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">

Para obtener más información, consulte el artículo en el sitio web dev.eclipse.org.

Nota: La palabra class está reservada por SDO. Si utiliza class como nombre de propiedad, se añade un _ subrayado para facilitar un nombre exclusivo cuando EMF genera los SDO. Sin embargo, no actualiza los archivos de configuración y las actualizaciones manuales son necesarias. Por ejemplo:
En el archivo wc-business-object-mediator.xml:
<_config:userDataProperty logicalPropertyName="class_" 
physicalPropertyName="class_"/>
En el archivo wc-object-relational-metadata.xml:
<_config:column name="CLASS" nullable="true" primaryKey="false" 
propertyName="class_" type="INTEGER"/>

Directrices de programación para objetos de negocio de HCL Commerce

Las siguientes directrices de programación pueden ayudarle a crear objetos de negocio que se ajustan a la estructura predeterminada esperada implementada en HCL Commerce.
  • Cada objeto de negocio definido en el modelo lógico de HCL Commerce debe tener una interfaz Java definida para describir el objeto.
  • Aunque los objetos de negocio implementan la interfaz commonj.sdo.DataObject, se recomienda utilizar la interfaz Java estática siempre que sea posible, y utilizar únicamente la interfaz commonj.sdo.DataObject, cuando sea necesario.
  • Los objetos comerciales suelen estar definidos en el paquete de Java com.ibm.commerce.component.facade.datatypes correspondiente al componente de negocio. Por ejemplo, las interfaces Java del catálogo correspondientes a los objetos de negocio se encuentran en com.ibm.commerce.catalog.facade.datatypes.
  • Puesto que los objetos de negocio están representados por las interfaces Java, es necesaria una clase Factory para crear una instancia de una implementación de la interfaz. La fábrica para crear una instancia de los objetos de negocio debe encontrarse en la misma interfaz de objeto de negocio y paquete Java. Debería utilizar el siguiente convenio de denominación: ComponentFactory. Por ejemplo, la fábrica para crear una instancia de los objetos Catálogo se denomina CatalogFactory.
  • La tecnología Java que se utiliza para implementar las interfaces Java se basa en EMF, donde el patrón de programación para crear una instancia de los objetos sigue un modelo coherente con EMF. Es decir, la interfaz de fábrica que se utiliza para crear las implementaciones Java de la interfaz Java de objeto de negocio tiene un campo eINSTANCE, con enlaces a la implementación de la fábrica para crear el objeto.

    El ejemplo siguiente muestra una ejemplo de instancia de un objeto de negocio CatalogDescription:

    CatalogDescriptionType descType = CatalogFactory.eINSTANCE.createCatalogDescriptionType();
    descType.setLanguage("-1");
    descType.setName("CatalogEntry Name");
    descType.setThumbnail("CatalogEntry Thumbnail Relative URI");
    descType.setShortDescription("CatalogEntry Short Description");