- Entry<ListenerRegistration<DOMDataTreeChangeListener>, Optional<DataTreeCandidate>> regEntry =
- getShard().getDataStore().registerTreeChangeListener(message.getPath(), listener);
-
- getShard().getDataStore().notifyOfInitialData(message.getPath(),
- regEntry.getKey().getInstance(), regEntry.getValue());
-
- listenerActors.add(dataChangeListenerPath);
- final ListenerRegistration<DOMDataTreeChangeListener> delegate = regEntry.getKey();
- return new ListenerRegistration<DOMDataTreeChangeListener>() {
- @Override
- public DOMDataTreeChangeListener getInstance() {
- return delegate.getInstance();
- }
-
- @Override
- public void close() {
- listenerActors.remove(dataChangeListenerPath);
- delegate.close();
- }
- };
- }
-
- @Override
- protected DelayedDataTreeListenerRegistration newDelayedListenerRegistration(
- RegisterDataTreeChangeListener message) {
- return new DelayedDataTreeListenerRegistration(message);
- }
-
- @Override
- protected ActorRef newRegistrationActor(ListenerRegistration<DOMDataTreeChangeListener> registration) {
- return createActor(DataTreeChangeListenerRegistrationActor.props(registration));
- }
-
- @Override
- protected Object newRegistrationReplyMessage(ActorRef registrationActor) {
- return new RegisterDataTreeChangeListenerReply(registrationActor);
+ final ShardDataTree shardDataTree = getShard().getDataStore();
+ shardDataTree.registerTreeChangeListener(message.getPath(),
+ listener, shardDataTree.readCurrentData(), registration -> registrationActor.tell(
+ new DataTreeNotificationListenerRegistrationActor.SetRegistration(registration, () ->
+ removeListenerActor(listenerActor)), ActorRef.noSender()));