The Texo ObjectStore concept integrates the model layer with JPA. It provides the following functionality:
- It makes it possible to query using an EClass
- Supports cross reference queries
- Supports (de-)serialization with (de-)resolving of references in the XML/XMI against the ObjectStore (the database)
If you want more specific Dao functionality, check out the Texo Dao support.
The Texo Object Store is defined in the org.eclipse.emf.texo.server plugin which is part of the Texo runtime feature (see Download & Install).
Creating an Object Store
An Object Store instance can be created directly if you have an EntityManager available:
EntityManagerObjectStore objectStore = new EntityManagerObjectStore(); objectStore.setEntityManager(entityManager); // the URI is used for de-resolving references when serializing to XML, see below objectStore.setUri("http://jpa.test");
Note that for the ObjectStore to be able to read the model layer: the model package class needs to be loaded and initialized, just touching it is enough, for example:
Creating an Object Store using the Object Store Factory
The runtime layer uses an Object Store factory to create an object store. The object store factory uses the request uri to determine what store to create. You can implement/set your own object store factory using the Texo Component infrastructure or by calling ObjectStoreFactory.setInstance with your own instance.
Cross Reference Queries
The ObjectStore allows you to retrieve all the objects which reference a certain target object:
// get maximum 3 referers and include containment referers List<Object> referers = objectStore.getReferingObjects(target, 3, true);
See the ObjectStore getReferingObjects api and the isReferenced method.
The ObjectStore needs an EntityManager to perform database queries. The ObjectStore uses the standard Texo approach to get an instance of the EntityManager, see this wiki page for more information.
(De-)Serializing XML with correct id's
When (de-)serializing XML most of the time the references to other objects should be serialized as external references (the referenced object is not present in the XML). When de-serializing the XML these references should be correctly resolved to objects again. This resolving needs to be able to read the objects from the database again.
This (de-)resolving of references while reading from the database is done using the ObjectStore. It is quite simple:
// serialize a set of objects to xml, use XMI (specified by the second parameter String xml = objectStore.toXML(objects, true); // and get it back List<Object> objects = objectStore.fromXML(xml, true);