É possível usar a API EntityManager com um ObjectGrid local ou em um ambiente distribuído do eXtreme Scale . A principal diferença é como você se conecta a esse ambiente remoto. Após você estabelecer uma conexão, não existe diferença entre o uso de um objeto Session ou uma API do EntityManager.
Esses arquivos especificam as entidades e os BackingMaps que um servidor hospeda.
O arquivo descritor de metadados da entidade contém uma descrição das entidades que são utilizadas. No mínimo, você deve especificar o nome e a classe da entidade. Se você estiver executando em um ambiente Java Platform, Standard Edition 5, oeXtreme Scale automaticamente lê a classe da entidade e suas anotações. É possível definir atributos XML adicionais se a classe de entidade não tiver anotações ou se você precisar substituir os atributos de classe. Se estiver registrando as entidades sem classe, forneça todas as informações da entidade apenas no arquivo XML.
É possível usar o seguinte fragmento de configuração XML para definir uma grade de dados com entidades. Nesse fragmento, o servidor cria um ObjectGrid com o nome bookstore e um mapa de apoio associado com o nome order. O fragmento no arquivo objectgrid.xml refere-se ao arquivo entity.xml. Nesse caso, o arquivo entity.xml contém uma entidade, a 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 exemplo assume que a classe Order teria os campos orderNumber e desc anotados de modo semelhante.A seguir há um exemplo do arquivo server.properties sem classe equivalente:
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");
Os arquivos XML eram necessários, independentemente de você querer ou não utilizar um subconjunto de entidades no lado do cliente. Esses arquivos não são mais necessários para o uso de entidades, conforme definido pelo servidor. Em vez disso, transmita nulo como o parâmetro overRideObjectGridXml como na opção 2 da seção anterior. Se o arquivo XML não estiver localizado no mesmo caminho configurado no servidor, o cliente usa a configuração da entidade no servidor.
Entretanto, se você utilizar entidades do subconjunto no cliente, será necessário fornecer um XML do ObjectGrid de substituição na opção 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;
}
O arquivo XML descritor da entidade do lado do cliente é necessário nos seguintes casos: se o servidor estiver em execução com entidades baseadas em classe enquanto o lado do cliente está em execução sem classes; ou se o servidor estiver sem classes e o cliente utilizar entidades baseadas em classe. Um modo de cliente sem classe permite que o cliente ainda execute consultas de entidade sem precisar acessar classes físicas. Supondo que o servidor tenha registrado a entidade ServerPerson acima, o cliente poderia substituir a grade de dados por um arquivo entity.xml como a seguir:
<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 arquivo atinge uma entidade de subconjunto equivalente no cliente, sem exigir que o cliente forneça a classe anotada real. Se o servidor não tiver classe e o cliente tiver, o cliente fornecerá um arquivo XML do descritor de entidade de substituição. Este arquivo XML do descritor de entidade contém uma substituição para a referência do arquivo de classe.
Uma grade de dados local não precisa de arquivos XML. O programa pode obter uma referência do ObjectGrid e invocar o método ObjectGrid.registerEntities para especificar uma lista de classes anotadas do Java SE 5 ou um arquivo XML.
O tempo de execução utiliza o arquivo XML ou uma lista de classes anotadas para localizar nomes de entidades, nomes e tipos de atributos, tipos e campos chave e relacionamentos entre entidades. Se o eXtreme Scale estiver executando em um servidor ou em modo independente, então ele cria automaticamente um mapa nomeado após cada entidade. Estes mapas podem ser customizados adicionalmente utilizando o arquivo objectgrid.xml ou APIs configuradas pelo aplicativo ou por estruturas de injeção tais como Spring.