udi

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

udi [2015/03/31 10:47]
rafael [Usage]
udi [2017/07/21 03:08]
Line 1: Line 1:
-{{template>:doctable 
-    | name=UDI 
-    | version=0.1 
-    | accountable=Rafael Vasconcelos 
-    | depdency=  DDS 
-}} 
- 
-====== 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, Publishers, Subscribers, Tópicos, DataReaders e DataWriters. O exemplo abaixo mostra como  se faz isso para um tópico.//Message//. 
- 
-<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, Message.class.getSimpleName()); 
- 
-  this.dds.createDataReader(groupDefinerDDSListener, messageTopic); 
-  this.dds.createDataWriter(messageTopic); 
-</code> 
-E o listener do exemplo acima recebe objetos do tipo //Message// e precisa implementar o callback //onNewData//, como segue: 
-<code java> 
-public class GroupDefinerListener implements UDIDataReaderListener<ApplicationObject> { 
-    /**  
-   * {@inheritDoc} 
-   */ 
-  @Override 
-  public void onNewData(ApplicationObject nodeMessage) { 
-    //do something… 
-  } 
-} 
-</code> 
- 
-Para utilizar os Extensible and Dynamic Topic Types for DDS (DDS-XTypes), é bem simples. Precisa ser criado o tópico, isto é, o seu nome e atributos, o qual é armazenado no Metadata Sharing Service. Feita a criação do tópico, os publicados e assinantes podem usar o tópico dinâmico. 
- 
-Um tópico dinâmico é representação por uma estrutura do tipo chave-valor, onde a chave é o nome do atributo e o valor é o valor que o atributo terá. 
- 
-O código abaixo inicializa a UDI usando RTI no domínio "_domainId". 
- 
-<code java> 
-      this.dds = UniversalDDSLayerFactory.getInstance(SupportedDDSVendors.RTI); 
-      this.dds.createParticipant(this._domainId); 
-</code> 
- 
-Para verificar se o tópico dinâmico "SDDLLocation" já foi criado, recuperar sua representação, assinar o tópico e por fim enviar um dado do tipo SDDLLocation, utiliza-se o seguinte código. 
- 
-<code java> 
-    private void startApplication() 
-    { 
-        _metadata = this.dds.getMetadataByName("SDDLLocation"); 
-         
-        if(_metadata == null) 
-        { 
-            System.out.println("Could not retrieve the specified metadata"); 
-            return; 
-        } 
-         
-        System.out.println("Retrieved metadata: " + _metadata.toString()); 
-                 
-        // 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<String, Object> hashMapRepresentation) 
-    { 
-        System.out.println("TopicName : " + topicName + "\nValues: " + hashMapRepresentation.toString()); 
-    } 
-     
-    private void writeData() 
-    } 
-        HashMap<String, Object> newInstance = _metadata.getHashMapInstanceRepresentation(); 
- 
-        newInstance.put("uuid", "1234"); //"String",  
- 
-        dynamicDDSTopic.publish(newInstance); 
-    } 
-</code> 
- 
- 
-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("Created metadata: " + "\n" + newMetadata.toString()); 
-                 
-        // Adds the entity on the service 
-        //_metadataSharingService.addMetadata(newMetadata); 
-        dds.addMetadata(newMetadata); 
-    } 
- 
-    private static Metadata createSDDLLocationMetadata() 
-    { 
-        String  name    = "SDDLLocation"; 
-        String  kind    = "EventType"; 
-        String  info    = "Sent by mobile nodes with location data."; 
-        boolean enabled = true; 
-         
-        Metadata newMetadata = new Metadata(name, kind, info, enabled); 
-         
-        ArrayList<MetadataMember> members = new ArrayList<MetadataMember>(); 
-         
-        MetadataMember stringUUIDMember     = new MetadataMember("uuid", "String", 1024, true, "The UUID of the monitored node that sent the SDDLLocation."); 
-        members.add(stringUUIDMember); 
-         
-        //... 
-         
-        // Adds all the members to the new entity 
-        newMetadata.addMembers(members); 
-         
-        return newMetadata; 
-    } 
-</code> 
- 
-Para criar o listener do tópico dinâmico, a classe deve implementar a interface "DynamicDataListener", que contém o método "onNewDynamicData". 
- 
-Mais detalhes podem ser obtidos do UDI Developer Guide ({{:udi_developer_guide.pdf|}}) 
-===== Architecture ===== 
-Descrever a arquitetura do componente. As principais classes e relações que sustentam o componente. 
-  
-===== Implementation Details ===== 
-Detalhes de implementação, por exemplo, descrevendo  as principais rotinas e os seus fluxos de execução, por onde o desenvolvedor deveria olhar para modificar esse componente. 
- 
-===== References ===== 
-Rafael Vasconcelos, UDI Developer Guide (release 0.2), October 2013. ({{:udi_developer_guide.pdf|}}) 
  
  • udi.txt
  • Last modified: 2017/07/21 03:08
  • (external edit)