ODL(OpenDayLight) 기본 튜토리얼 #6 – DataChangeListener 구현

DataStore에 값이 저장되거나 변경 , 삭제가 되면 변경상태를 감지하는 DataChangeListener 를 구현해보도록한다.

  1. 먼저 HelloProvider.java 에서 DataChangeListener를 등록해준다

    CONFIGURATION tree 만 감시하도록 구현하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private DataBroker db;
private InstanceIdentifier path;
private ListenerRegistration data_change_listener;

@Override
public void onSessionInitiated(ProviderContext session) {
LOG.info("HelloProvider Session Initiated");
HelloWorldImpl helloWorldImpl=new HelloWorldImpl();
this.path=helloWorldImpl.HELLO_IID;
this.db=session.getSALService(DataBroker.class);
helloWorldImpl.setDb(session);

//registerDataChangeListener(접근하고자 하는 데이터 트리 종류(config or operational), 데이터 트리 PATH(InstanceIdentifier로 정의),실행될 객체, 변화감지 범위);
this.data_change_listener=this.db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION,path,helloWorldImpl,DataChangeScope.SUBTREE);
this.helloService=session.addRpcImplementation(HelloService.class,helloWorldImpl);
}

다음으론 기존 HelloWorldImpl.java 에 DataChangeListener를 implements 해주고 onDataChanged 를 구현한다.

1
2
3
4
5
6
7
8
9
10
@Override
public void onDataChanged(AsyncDataChangeEvent&lt;InstanceIdentifier<?>, DataObject> change) {

DataObject data_object=change.getUpdatedSubtree();
if(data_object instanceof HelloWorld){
HelloWorld hello=(HelloWorld)data_object;
Long count=hello.getCounter();
LOG.info("updated count:"+count);
}
}

[결과]

1
updated count:0
공유하기