+ * {@code
+ * public void onSessionInitiated(ProviderContext session) {
+ * NotificationProviderService notificationService = session.getSALService(NotificationProviderService.class);
+ * }
+ * }
+ * For more information on sending notifications via the NotificationProviderService
+ * see {@link org.opendaylight.controller.sal.binding.api.NotificationProviderService}
+ *
+ * <p>
+ * To register an RPC implementation:
+ *
+ * {@code
+ * public void onSessionInitiated(ProviderContext session) {
+ * RpcRegistration<MyService> registration = session.addRpcImplementation(MyService.class, myImplementationInstance);
+ * }
+ * }
+ *
+ * <p>
+ * Where MyService.class is a Service interface generated from a yang model with RPCs modeled in it and
+ * myImplementationInstance is an instance of a class that implements MyService.
+ *
+ * <p>
+ * To register a Routed RPC Implementation:
+ * {@code
+ * public void onSessionInitiated(ProviderContext session) {
+ * RoutedRpcRegistration<SalFlowService> flowRegistration = session.addRoutedRpcImplementation(SalFlowService.class,
+ * salFlowServiceImplementationInstance);
+ flowRegistration.registerPath(NodeContext.class, nodeInstanceId);
+ * }
+ * }
+ *
+ * <p>
+ * Where SalFlowService.class is a Service interface generated from a yang model with RPCs modeled in it and
+ * salFlowServiceImplementationInstance is an instance of a class that implements SalFlowService.
+ *
+ * <p>
+ * The line:
+ * {@code
+ * flowRegistration.registerPath(NodeContext.class, nodeInstanceId);
+ * }
+ * Is indicating that the RPC implementation is registered to handle RPC invocations that have their NodeContext
+ * pointing to the node with instance id nodeInstanceId. This bears a bit of further explanation. RoutedRPCs can be
+ * 'routed' to an implementation based upon 'context'. 'context' is a pointer (instanceId) to some place in the data
+ * tree. In this example, the 'context' is a pointer to a Node. In this way, a provider can register its ability to
+ * provide a service for a particular Node, but not *all* Nodes. The Broker routes the RPC by 'context' to the correct
+ * implementation, without the caller having to do extra work. Because of this when a RoutedRPC is registered, it
+ * needs to also be able to indicate for which 'contexts' it is providing an implementation.