Interagindo com EntityManager

Geralmente os aplicativos primeiro obtêm uma referência do ObjectGrid e, depois, uma Sessão dessa referência para cada encadeamento. As sessões não podem ser compartilhadas entre encadeamentos. Um método extra em Session, o método getEntityManager, está disponível. Este método retorna uma referência para um gerenciador de entidades para uso para este encadeamento. A interface de EntityManager pode substituir as interfaces de Session e ObjectMap para todos os aplicativos. É possível utilizar essas APIs de EntityManager se o cliente tiver acesso às classes de entidade definidas.

Obtendo uma Instância de EntityManager de uma Sessão

O método getEntityManager está disponível em um objeto Session. O exemplo de código a seguir ilustra como criar uma instância de ObjectGrid local e acessar EntityManager. Consulte a interface EntityManager na documentação da API para obter detalhes sobre todos os métodos suportados.

ObjectGrid og = 
ObjectGridManagerFactory.getObjectGridManager().createObjectGrid("intro-grid");
Session s = og.getSession();
EntityManager em = s.getEntityManager();

Existe um relacionamento um para um entre o objeto Session e o objeto EntityManager. É possível utilizar o objeto EntityManager mais de uma vez.

Persistindo uma Entidade

A persistência de uma entidade significa salvar o estado de uma nova entidade em um cache ObjectGrid. Depois de chamar o método "persist", a entidade fica no estado "managed". A operação persist é transacional e a nova entidade fica armazenada no cache do ObjectGrid depois da confirmação do cache.

Cada entidade tem um BackingMap correspondente no qual as tuplas são armazenadas. O BackingMap tem o mesmo nome que a entidade e será criado quando a classe for registrada. O seguinte exemplo de código demonstra como criar um objeto Order usando a operação persist.
Order order = new Order(123);
em.persist(order);
order.setX();
...
O objeto Order é criado com a chave 123 e o objeto é passado para método persist. É possível continuar a modificar o estado do objeto antes de consolidar a transação.
Importante: O exemplo anterior não inclui quaisquer limites transacionais necessários, como begin e commit. Consulte o Tutorial: Armazenando Informações de Pedido nas Entidades para obter mais informações.

Localizando uma Entidade

É possível localizar a entidade no cache do ObjectGrid com o método find fornecendo uma chave após o armazenamento da entidade no cache. Esse método não requer nenhum limite transacional, o que será útil em caso de semântica de somente leitura. O exemplo a seguir ilustra que apenas uma linha de código é suficiente para localizar a entidade.
Order foundOrder = (Order)em.find(Order.class, new Integer(123));

Removendo uma Entidade

O método remove, a exemplo do método persist, é uma operação transacional. O exemplo a seguir mostra o limite transacional ao chamar os métodos begin e commit.

em.getTransaction().begin();
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
em.remove(foundOrder );
em.getTransaction().commit();

Primeiro, a entidade deve estar no estado managed antes que a remoção seja possível; o que pode ser conseguido chamando o método find dentro do limite transacional. Depois, chame o método remove na interface de EntityManager.

Invalidando uma Entidade

O método invalidate se comporta de maneira muito semelhante ao método remove, mas não chama nenhum plug-in do Utilitário de Carga. Use este método para remover entidades do ObjectGrid, mas para preservá-las no armazém de dados de backend.

em.getTransaction().begin();
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
em.invalidate(foundOrder );
em.getTransaction().commit();

Primeiro, a entidade deve ser gerenciada antes que possa ser invalidada, o que pode ser conseguido chamando o método find dentro do limite transacional. Após chamar o método find, será possível chamar o método invalidate na interface de EntityManager.

Atualizando uma Entidade

O método update também é uma operação transacional. A entidade deve ser gerenciada antes que quaisquer atualizações possam ser aplicadas.

em.getTransaction().begin();
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
foundOrder.date = new Date(); // update the date of the order
em.getTransaction().commit();

No exemplo precedente, o método persist não é chamado depois da atualização da entidade. A entidade é atualizada no cache do ObjectGrid quando a transação é confirmada.

Consultas e Filas de Consultas

Com o mecanismo de consulta flexível, é possível recuperar entidades utilizando a API do EntityManager. Crie consultas do tipo SELECT para uma entidade ou esquema baseado em Objeto, utilizando a linguagem de consulta do ObjectGrid. A interface de consulta explica em detalhes como é possível executar as consultas utilizando a API do EntityManager. Consulte a API de Query para obter mais informações sobre o uso de consultas.

Uma QueryQueue de entidade é uma estrutura de dados semelhante a uma fila associada com uma consulta de entidade. Ela seleciona todas as entidades que correspondem à condição WHERE no filtro de consulta e coloca as entidades do resultado em uma fila. Os clientes podem, então, recuperar iterativamente as entidades dessa fila. Consulte Filas de Consulta da Entidade para obter mais informações.