Differences
This shows you the differences between two versions of the page.
udi [2015/03/31 10:47] rafael [Usage] |
udi [2017/07/21 03:08] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | {{template>: | ||
- | | name=UDI | ||
- | | version=0.1 | ||
- | | accountable=Rafael Vasconcelos | ||
- | | depdency= | ||
- | }} | ||
- | |||
- | ====== UDI ====== | ||
- | A Universal DDS Interface (UDI) é uma API similar a do DDS, mas que abstrai os detalhes específicos de diferentes produtos DDS, e inclui wrappers de tópicos DDS para cada produto DDS. Permite também a definição de politicas e perfis de QoS que são mapeados para as primitivas específicas de cada produto DDS. O uso da UDI facilita muito a troca entre produtos DDS. Atualmente, a UDI está disponível para os produtos: RTI Connext, DDS Open Splice Community Edition, e CoreDX DDS | ||
- | |||
- | ===== Usage ===== | ||
- | O UDI implementa os mesmos elementos básicos usados no DDS: Domain Participants, | ||
- | |||
- | <code java> | ||
- | this.dds = UniversalDDSLayerFactory.getInstance(); | ||
- | this.dds.createParticipant(UniversalDDSLayerFactory.CNET_DOMAIN); | ||
- | this.dds.createPublisher(); | ||
- | this.dds.createSubscriber(); | ||
- | |||
- | GroupDefinerListener groupDefinerDDSListener = new GroupDefinerListener(this); | ||
- | |||
- | Object messageTopic = this.dds.createTopic(Message.class, | ||
- | |||
- | this.dds.createDataReader(groupDefinerDDSListener, | ||
- | this.dds.createDataWriter(messageTopic); | ||
- | </ | ||
- | E o listener do exemplo acima recebe objetos do tipo //Message// e precisa implementar o callback // | ||
- | <code java> | ||
- | public class GroupDefinerListener implements UDIDataReaderListener< | ||
- | /** | ||
- | * {@inheritDoc} | ||
- | */ | ||
- | @Override | ||
- | public void onNewData(ApplicationObject nodeMessage) { | ||
- | //do something… | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Para utilizar os Extensible and Dynamic Topic Types for DDS (DDS-XTypes), | ||
- | |||
- | Um tópico dinâmico é representação por uma estrutura do tipo chave-valor, | ||
- | |||
- | O código abaixo inicializa a UDI usando RTI no domínio " | ||
- | |||
- | <code java> | ||
- | this.dds = UniversalDDSLayerFactory.getInstance(SupportedDDSVendors.RTI); | ||
- | this.dds.createParticipant(this._domainId); | ||
- | </ | ||
- | |||
- | Para verificar se o tópico dinâmico " | ||
- | |||
- | <code java> | ||
- | private void startApplication() | ||
- | { | ||
- | _metadata = this.dds.getMetadataByName(" | ||
- | | ||
- | if(_metadata == null) | ||
- | { | ||
- | System.out.println(" | ||
- | return; | ||
- | } | ||
- | | ||
- | System.out.println(" | ||
- | | ||
- | // Creates a (or uses an existing) dynamic topic with this Metadata | ||
- | DynamicDDSTopic dynamicDDSTopic = dds.createDynamicDDSTopic(_metadata); | ||
- | dynamicDDSTopic.subscribe(this); | ||
- | } | ||
- | |||
- | @Override | ||
- | public void onNewDynamicData(String topicName, HashMap< | ||
- | { | ||
- | System.out.println(" | ||
- | } | ||
- | | ||
- | private void writeData() | ||
- | } | ||
- | HashMap< | ||
- | |||
- | newInstance.put(" | ||
- | |||
- | dynamicDDSTopic.publish(newInstance); | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | Para criar um novo tópico dinâmico, pode-se utilizar o seguinte código: | ||
- | |||
- | <code java> | ||
- | |||
- | private void createEntities() | ||
- | { | ||
- | Metadata newMetadata = createSDDLLocationMetadata(); | ||
- | | ||
- | System.out.println(" | ||
- | | ||
- | // Adds the entity on the service | ||
- | // | ||
- | dds.addMetadata(newMetadata); | ||
- | } | ||
- | |||
- | private static Metadata createSDDLLocationMetadata() | ||
- | { | ||
- | String | ||
- | String | ||
- | String | ||
- | boolean enabled = true; | ||
- | | ||
- | Metadata newMetadata = new Metadata(name, | ||
- | | ||
- | ArrayList< | ||
- | | ||
- | MetadataMember stringUUIDMember | ||
- | members.add(stringUUIDMember); | ||
- | | ||
- | //... | ||
- | | ||
- | // Adds all the members to the new entity | ||
- | newMetadata.addMembers(members); | ||
- | | ||
- | return newMetadata; | ||
- | } | ||
- | </ | ||
- | |||
- | Para criar o listener do tópico dinâmico, a classe deve implementar a interface " | ||
- | |||
- | Mais detalhes podem ser obtidos do UDI Developer Guide ({{: | ||
- | ===== Architecture ===== | ||
- | Descrever a arquitetura do componente. As principais classes e relações que sustentam o componente. | ||
- | |||
- | ===== Implementation Details ===== | ||
- | Detalhes de implementação, | ||
- | |||
- | ===== References ===== | ||
- | Rafael Vasconcelos, | ||