O template de documentos é responsável para realizar a comunicação da entidade para um banco de dados do tipo documentos. Ele é subdividido em DocumentTemplate e DocumentTemplateAsyncpara trabalhos síncronos e assíncronos respectivamente.
DocumentTemplate
O DocumentTemplate é responsável pela persistência de uma Entidade em um banco de dados do tipo documento. Ele é composto, basicamente, por três componentes:
DocumentEntityConverter: Responsável por converter da entidade, por exemplo, Person para DocumentEntity.
DocumentCollectionManager: Entidade manager de documentos do Diana.
DocumentWorkflow: Segue o fluxo de persistência durante os métodos de save e update.
DocumentTemplate template =//instancePerson person =newPerson();person.setAddress("Olympus");person.setName("Artemis Good");person.setPhones(Arrays.asList("55 11 94320121","55 11 94320121"));person.setNickname("artemis");List<Person> people =Collections.singletonList(person);Person personUpdated =template.save(person);template.insert(people);template.insert(person,Duration.ofHours(1L));template.update(person);template.update(people);
Para a busca e a remoção da informação são utilizadas as mesmas classes do Diana para documentos, ou seja, DocumentQuery e DocumentDeleteQuery respectivamente.
ODocumentTemplateAsyncé responsável pela persistência de uma Entidade em um banco de dados do tipo documento de forma assíncrona. Ele é composto, basicamente, por dois componentes:
DocumentEntityConverter: Responsável por converter da entidade, por exemplo, Person para DocumentEntity.
DocumentCollectionManagerAsync: Entidade manager de documentos do Diana de forma assíncrona.
DocumentTemplateAsync templateAsync =//instancePerson person =newPerson();person.setAddress("Olympus");person.setName("Artemis Good");person.setPhones(Arrays.asList("55 11 94320121","55 11 94320121"));person.setNickname("artemis");List<Person> people =Collections.singletonList(person);Consumer<Person> callback = p -> {};templateAsync.insert(person);templateAsync.insert(person,Duration.ofHours(1L));templateAsync.insert(person, callback);templateAsync.insert(people);templateAsync.update(person);templateAsync.update(person, callback);templateAsync.update(people);
Para a busca e a remoção da informação são utilizadas as mesmas classes do Diana para documentos, ou seja, DocumentQuery e DocumentDeleteQuery respectivamente também é possível o uso de callback.
Consumer<List<Person>> callBackPeople = p -> {};Consumer<Void> voidCallBack = v ->{};templateAsync.select(query, callBackPeople);templateAsync.delete(deleteQuery);templateAsync.delete(deleteQuery, voidCallBack);
Como o motor do Artemis é CDI para que se posso utilizar o DocumentTemplate basta dar um @Inject num campo.
@InjectprivateDocumentTemplateAsync template;
Para isso é necessário que a aplicação injete um DocumentCollectionManagerAsync: