2015-12-18 2 views
0

Я пишу приложение Opendaylight, которое будет извлекать все правила потока, как и когда оно будет удалено, добавлено или обновлено.Уведомление о потоке Opendaylight

Чтобы получать уведомления, когда поток добавлен, удален или обновлен, приложение должно предоставить слушатель, который расширяет интерфейс salFlowListener. Однако, когда я создаю структуру каталога приложений, из обучающих программ Opendaylight в Интернете не ясно, где должна быть поставлена ​​логика.

Кроме того, существуют ошибки компиляции, когда служба уведомлений дополняется с использованием модели YANG.

Правильный ли подход к получению уведомлений и какие-либо четкие учебники онлайн, на которые я могу ссылаться?

Спасибо.

+0

Не могли бы вы лучше объяснить свою цель? Какую версию Opendaylight вы используете? Почему вы увеличиваете услугу оповещения? –

ответ

0
public class ChangeListener implements DataChangeListener { 
private static final Logger logger = LoggerFactory.getLogger(DhcontrollerListener.class); 
private DataBroker   dataBroker; 

public DhcontrollerListener(DataBroker broker) { 
    this.dataBroker = broker; 

    //flow 
    InstanceIdentifier<Flow> flowPath = InstanceIdentifier.builder(Nodes.class) 
     .child(Node.class).augmentation(FlowCapableNode.class).child(Table.class) 
     .child(Flow.class).build(); 
    dataBroker.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, flowPath, this, 
     DataChangeScope.BASE); 

} 

@Override 
public void onDataChanged(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) { 

    if (change == null) { 
     logger.info("DhcontrollerListener ===>>> onDataChanged: change is null"); 
     return; 
    } 

    handleCreatedFlow(change); 
    handleUpdatedFlow(change); 
    handleDeletedFlow(change); 

} 

private void handleCreatedFlow(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) { 
    Map<InstanceIdentifier<?>, DataObject> createdData = change.getCreatedData(); 
    if (createdData == null) { 
     logger.info("handleCreatedFlow ===>>> getRemovedPaths==null"); 
     return; 
    } 
    for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : createdData.entrySet()) { 
     final DataObject dataObject = entry.getValue(); 

     if (dataObject instanceof Flow) { 
      Flow flow = (Flow) dataObject; 
      logger.info("create flow : " + flow.getCookie() + " " + flow.getKey().toString()); 
     } 

    } 
} 

private void handleUpdatedFlow(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) { 
    Map<InstanceIdentifier<?>, DataObject> updatedData = change.getCreatedData(); 
    if (updatedData == null) { 
     logger.info("handleUpdatedFlow ===>>> getRemovedPaths==null"); 
     return; 
    } 
    for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : updatedData.entrySet()) { 
     final DataObject dataObject = entry.getValue(); 

     if (dataObject instanceof Flow) { 
      Flow flow = (Flow) dataObject; 
      logger.info("update flow : " + flow.getCookie() + " " + flow.getKey().toString()); 
     } 

    } 
} 

private void handleDeletedFlow(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) { 
    Map<InstanceIdentifier<?>, DataObject> originalData = change.getOriginalData(); 
    Set<InstanceIdentifier<?>> removedData = change.getRemovedPaths(); 
    if (removedData == null) { 
     logger.info("handleDeletedFlow ===>>> getRemovedPaths==null"); 
     return; 
    } 
    for (InstanceIdentifier<?> instanceIdentifier : removedData) { 
     final DataObject dataObject = originalData.get(instanceIdentifier); 

     if (dataObject instanceof Flow) { 
      Flow flow = (Flow) dataObject; 
      logger.info("remove flow : " + flow.getCookie() + " " + flow.getPriority() + " " 
         + flow.getMatch().getIpMatch() + " " + flow.getKey().toString()); 
     } 
    } 
} 

}

Как сделать, это установить InstanceIdentifier. При установке другого InstanceIdentifier вы также можете прослушивать изменение узла, таблицы и т. Д.

+0

InstanceIdentifier flowPath = InstanceIdentifier.builder (Nodes.class.child (Node.class) .augmentation (FlowCapableNode.class) .child (Table.class) .child (Flow.class) .build(); как вы определили это heirarchy? Есть ли какая-нибудь модель янга, которая говорит вам об этом? Спасибо. – LostInTheFrequencyDomain

Смежные вопросы