Gestor de entidades en un entorno distribuido

Puede utilizar la API EntityManager con un ObjectGrid local o en un entorno distribuido de eXtreme Scale. La diferencia principal es el modo de conectarse a este entorno remoto. Después de establecer una conexión, no hay ninguna diferencia entre el uso de un objeto Session o el uso de la API EntityManager.

Archivos de configuración obligatorios

Son necesarios los siguientes archivos de configuración XML:
  • Archivo XML de descriptor ObjectGrid
  • Archivo XML de descriptor de entidad
  • Archivo XML de descriptor de cuadrícula de datos o despliegue

Estos archivos especifican las entidades o BackingMaps que aloja un servidor.

El archivo de descriptor de metadatos de entidad contiene una descripción de las entidades que se utilizan. Como mínimo, debe especificar el nombre y la clase de entidad. Si se ejecuta en un entorno Java Platform, Standard Edition 5, eXtreme Scale lee automáticamente la clase de entidad y sus anotaciones. Puede definir atributos XML adicionales si la clase de entidad no tiene anotaciones o si es necesario que altere temporalmente los atributos de clase. Si registra las entidades sin clases, proporcione toda información de la entidad sólo en el archivo XML.

Puede utilizar el siguiente fragmento de configuración XML para definir una cuadrícula de datos con entidades. En este fragmento, el servidor crea un ObjectGrid con el nombre bookstore y una correlación de respaldo asociada con el nombre order. El fragmento del archivo objectgrid.xml hace referencia al archivo entity.xml. En este caso, el archivo entity.xml contiene una entidad, la entidad Order.

objectgrid.xml
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
 xmlns="http://ibm.com/ws/objectgrid/config">

 <objectGrids>
    <objectGrid name="bookstore" entityMetadataXMLFile="entity.xml">
     <backingMap name="Order"/>
    </objectGrid>
</objectGrids>

</objectGridConfig>

Este archivo objectgrid.xml especifica el archivo entity.xml con el atributo entityMetadataXMLFile. El valor puede ser un directorio relativo o una vía de acceso absoluta.
  • Para un directorio relativo: especifique la ubicación relativa a la ubicación del archivo objectgrid.xml.
  • Para una vía de acceso absoluta: especifique la ubicación con un formato de URL como, por ejemplo, file:// o http://.
A continuación se muestra un ejemplo del archivo entity.xml:
entity.xml
	<entity-mappings xmlns="http://ibm.com/ws/projector/config/emd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://ibm.com/ws/projector/config/emd ./emd.xsd">
	<entity class-name="com.ibm.websphere.tutorials.objectgrid.em.
				distributed.step1.Order" name="Order"/>
	</entity-mappings>
Este ejemplo suponge que la clase Order tendría los campos orderNumber y desc anotados de forma similar.

Un archivo entity.xml equivalente sin clase sería:

classless entity.xml
	<entity-mappings xmlns="http://ibm.com/ws/projector/config/emd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://ibm.com/ws/projector/config/emd ./emd.xsd">
	<entity class-name="@Order " name="Order">
	    <description>"Entity named: Order"</description>
        <attributes>
            <id name="orderNumber" type="int"/>
            <basic name="desc" type="java.lang.String"/>
        </attributes>
	</entity>
	</entity-mappings>
Para obtener información sobre cómo iniciar los servidores, consulte Inicio de los servidores autónomos. Utiliza los archivos deployment.xml y objectgrid.xml para iniciar el servidor de catálogo.

Conexión con un servidor eXtreme Scale distribuido

El siguiente código habilita el mecanismo de conexión para un cliente y un servidor en el mismo sistema:
String catalogEndpoints="localhost:2809";
URL clientOverrideURL= new URL("file:etc/emtutorial/distributed/step1/objectgrid.xml");
ClientClusterContext clusterCtx = ogMgr.connect(catalogEndpoints, null, clientOverrideURL);
ObjectGrid objectGrid=ogMgr.getObjectGrid(clusterCtx, "bookstore");
En el fragmento de código anterior, tenga en cuenta la referencia al servidor eXtreme Scale remoto. Tras establecer la conexión, puede invocar métodos de la API EntityManager como, por ejemplo, persist, update, remove y find.
Atención: Cuando utilice entidades, pase el archivo XML de descriptor de ObjectGrid de alteración temporal del cliente en el método connect. Si se pasa un valor nulo en la propiedad clientOverrideURL y el cliente tiene una estructura de directorios diferente a la del servidor, el cliente podría no encontrar los archivos XML de descriptor de entidad o de ObjectGrid. Como mínimo, los archivos XML de ObjectGrid y de entidad para el servidor se pueden copiar en el cliente.
Antes, el uso de entidades en un cliente ObjectGrid exigía que se pusiera el XML de ObjectGrid y el XML de entidad a disposición del cliente de uno de los dos modos siguientes:
  1. Pasar un XML de ObjectGrid de sustitución al método ObjectGridManager.connect(String catalogServerEndpoints, ClientSecurityConfiguration securityProps, URL overRideObjectGridXml).

    String catalogEndpoints="myHost:2809";
    URL clientOverrideURL= new URL("file:etc/emtutorial/distributed/step1/objectgrid.xml");
    ClientClusterContext clusterCtx = ogMgr.connect(catalogEndpoints, null, clientOverrideURL);
    ObjectGrid objectGrid=ogMgr.getObjectGrid(clusterCtx, "bookstore");

  2. Pasar un valor nulo para el archivo de sustitución y asegurarse de que el XML de ObjectGrid y el XML de la entidad referenciada estén disponibles para el cliente en la misma vía de acceso que en el servidor.

    String catalogEndpoints="myHost:2809";
    ClientClusterContext clusterCtx = ogMgr.connect(catalogEndpoints, null, null);
    ObjectGrid objectGrid=ogMgr.getObjectGrid(clusterCtx, "bookstore");

Los archivos XML eran necesarios independientemente de si se deseaba o no utilizar entidades de subconjunto subset en el lado del cliente. Ya no es necesario que estos archivos utilicen las entidades definidas por el servidor. En su lugar, pase un valor nulo como parámetro overRideObjectGridXml como en la opción 2 de la sección anterior. Si no se encuentra el archivo XML en la misma vía de acceso establecida en el servidor, el cliente utiliza la configuración de entidad en el servidor.

No obstante, si utiliza entidades de subconjunto en el cliente, debe proporcionar un XML de ObjectGrid de sustitución como en la opción 1.

Cliente y esquema del lado del servidor

El esquema del lado del servidor define el tipo de datos que se almacenan en las correlaciones en un servidor. El esquema de cliente es una correlación a los objetos de aplicación en el esquema del servidor. Por ejemplo, podría tener el siguiente esquema de servidor:
@Entity
class ServerPerson
{
  @Id String ssn;
  String firstName;
  String surname;
  int age;
  int salary;
}
Un cliente podría tener un objeto anotado como en el siguiente ejemplo:
@Entity(name="ServerPerson")
class ClientPerson
{
  @Id @Basic(alias="ssn") String socialSecurityNumber;
  String surname;
}
Este cliente toma una entidad del lado del servidor y proyecta el subconjunto de la entidad en el objeto del cliente. Esta proyección produce ahorros de ancho de banda y memoria en el cliente ya que el cliente tiene solo la información que necesita en lugar de tener toda la información que se encuentra en la entidad del lado del servidor. Aplicaciones diferentes pueden usar sus propios objetos en lugar de forzar a todas las aplicaciones a compartir un conjunto de clases para el acceso a los datos.

El archivo XML descriptor de entidad del cliente se requiere en los casos siguientes: si el servidor se ejecuta con entidades basadas en clases mientras el cliente se ejecuta sin clases; o si el servidor es sin clases y el cliente utiliza entidades basadas en clases. Una modalidad de cliente sin clases permite que el cliente siga ejecutando consultas de entidad sin tener acceso a las clases físicas. Suponiendo que el servidor ha registrado la entidad ServerPerson anterior, el cliente sustituiría la cuadrícula de datos por un archivo entity.xml, de la forma siguiente:

	<entity-mappings xmlns="http://ibm.com/ws/projector/config/emd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://ibm.com/ws/projector/config/emd ./emd.xsd">
	<entity class-name="@ServerPerson " name="Order">
	    <description>"Entity named: Order"</description>
        <attributes>
            <id name="socialSecurityNumber" type="java.lang.String"/>
            <basic name="surname" type="java.lang.String"/>
        </attributes>
	</entity>
	</entity-mappings>

Este archivo consigue una entidad de subconjunto equivalente en el cliente, sin necesidad de que el cliente proporcione la clase anotada real. Si el servidor es sin clases y el cliente no, el cliente proporciona un archivo XML descriptor de entidad de sustitución. Este archivo XML descriptor de entidad contiene una sustitución de la referencia de archivo de clase.

Referencia al esquema

Si la aplicación se ejecuta en Java SE 5, la aplicación puede añadirse a los objetos utilizando anotaciones. EntityManager puede leer el esquema de las anotaciones en dichos objetos. La aplicación proporciona al tiempo de ejecución de eXtreme Scale referencias a estos objetos utilizando el archivo entity.xml, al que se hace referencia en el archivo objectgrid.xml. El archivo entity.xml lista todas las entidades, cada una de las cuales está asociada con una clase o un esquema. Si se especifica un nombre de clase apropiado, la aplicación intenta leer las anotaciones de Java SE 5 de esas clases para determinar el esquema. Si no se anota el archivo de clase o si se especifica un identificador sin clase, el esquema se toma del archivo XML. El archivo XML se utiliza para especificar todos los atributos, claves y relaciones para cada entidad.

Una cuadrícula de datos local no necesita archivos XML. El programa puede obtener una referencia de ObjectGrid e invocar el método ObjectGrid.registerEntities para especificar una lista de clases anotadas de Java SE 5 o un archivo XML.

El tiempo de ejecución utiliza el archivo XML o una lista de clases anotadas para encontrar los nombres de entidad, nombres y tipos de atributo, campos clave y tipos y relaciones entre entidades. Si eXtreme Scale se ejecuta en un servidor o en la modalidad autónoma, se realiza automáticamente una correlación cuyo nombre será el de cada entidad. Estas correlaciones puede personalizarse más mediante el archivo objectgrid.xml o las API establecidas por la aplicación o infraestructuras de inyección como Spring.

Archivo de descriptor de metadatos de entidad

Consulte Archivo emd.xsd si desea más información sobre el archivo descriptor de metadatos.