HARouter (Oracle - Berkeley DB Java Edition Examples)
Date: 2014-12-16

je.rep.quote

## Class HARouter

- java.lang.Object
- - je.rep.quote.HARouter

-     public class HARouter
      extends Object

  This example illustrates use of an HA aware Router used to forward high level requests to replication nodes implemented by `RouterDrivenStockQuotes`. The router is built using the APIs provided by the `Monitor`; it's a standalone application and does not itself access a JE Environment. The router forwards logical requests, that represent some service provided by the application. It only has knowledge of whether a request will potentially require an write to the database, but does not have any other application level logic, nor does it access a JE environment. The HARouter accepts a request from the console and dispatches it to the application running on the master, if it's a write request, or to one of the replicas if it's a read request. The HARouter keeps track of the current Master via the events that are delivered to the Monitor.

  It's the HARouter instead of each individual node (as in the `UpdateForwardingStockQuotes` example) that tracks the current Master via the `Monitor`. Since the router ensures that writes are directed to the master node, the logic in the node itself is simpler: the node simply services the requests forwarded to it by the router on a port dedicated for this purpose.

  The protocol used to communicate between the router and the nodes has been deliberately kept very simple. In particular, it makes limited provisions for error reporting back to the router.

  The router requires the following arguments:

       java je.rep.quote.HARouter -nodeName <nodeName> \
                                  -nodeHost <host:port> \
                                  -helperHost <host:port>"
        The arguments are described below:
         -nodeName identifies the monitor name associated with this Router
         -nodeHost the hostname:port combination used by the Monitor to listen for
                   election results and group level changes.
         -helperHost one or more nodes that may be used by the Monitor to locate the
                     Master and register the Monitor with the Master.

  Note that the arguments are similar to the ones used to start a replication node. A key difference is that the -env option is absent, since the router is standalone and is not associated with one.

  The router can be started as follows:

       java je.rep.quote.HARouter -nodeName n1 \
                                  -nodeHost node.acme.com:6000 \
                                  -helperHost node.acme.com:5001

  The replication nodes involved in the routing can be started as described in `RouterDrivenStockQuotes`. The Router and the nodes can be started in any convenient order.
  See Also:
    `RouterDrivenStockQuotes`

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static void` | `main(String[] argv)`

    - ### Methods inherited from class java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### main

          public static void main(String[] argv)
                           throws Exception

      Throws:
        `Exception`

Copyright (c) 2004, 2014 Oracle and/or its affiliates. All rights reserved.