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.
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>
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>
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");
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");
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.
@Entity
class ServerPerson
{
@Id String ssn;
String firstName;
String surname;
int age;
int salary;
}
@Entity(name="ServerPerson")
class ClientPerson
{
@Id @Basic(alias="ssn") String socialSecurityNumber;
String surname;
}
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.
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.