Class RouterHandler

  • All Implemented Interfaces:
    Handler

    public class RouterHandler
    extends Object
    implements Handler
    Auto-configured DispatchHandler. It looks for route configuration files (very similar to the usual general config file) in a defined directory (by default it looks in config/routes/).
       
       {
         "name": "Router",
         "type": "Router",
         "config": {
           "directory": "/tmp/routes",
           "defaultHandler": "404NotFound",
           "scanInterval": 2 or "2 seconds"
         }
       }
       
     
    Note that scanInterval can be defined in 2 ways :
    • as an integer, which defines the number of seconds. If -1 (or any negative value) is provided, only an initial scan is performed at startup, synchronously.
    • as a duration. If "disabled" or "zero" is provided, only an initial scan is performed at startup, synchronously.
    In both cases, the default value is 10 seconds.
    Since:
    2.2
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  RouterHandler.Heaplet
      Creates and initializes a routing handler in a heap environment.
    • Constructor Summary

      Constructors 
      Constructor Description
      RouterHandler​(org.forgerock.openig.handler.router.RouteBuilder builder, org.forgerock.openig.handler.router.DirectoryMonitor directoryMonitor, org.forgerock.monitoring.api.instrument.MeterRegistry routerMeterRegistry)
      Builds a router that loads its configuration from the given directory.
      RouterHandler​(org.forgerock.openig.handler.router.RouteBuilder builder, org.forgerock.openig.handler.router.DirectoryMonitor directoryMonitor, org.forgerock.monitoring.api.instrument.MeterRegistry routerMeterRegistry, Handler defaultHandler)
      Builds a router that loads its configuration from the given directory.
    • Constructor Detail

      • RouterHandler

        public RouterHandler​(org.forgerock.openig.handler.router.RouteBuilder builder,
                             org.forgerock.openig.handler.router.DirectoryMonitor directoryMonitor,
                             org.forgerock.monitoring.api.instrument.MeterRegistry routerMeterRegistry)
        Builds a router that loads its configuration from the given directory.
        Parameters:
        builder - route builder
        directoryMonitor - the directory monitor
        routerMeterRegistry - The router's meter registry
      • RouterHandler

        public RouterHandler​(org.forgerock.openig.handler.router.RouteBuilder builder,
                             org.forgerock.openig.handler.router.DirectoryMonitor directoryMonitor,
                             org.forgerock.monitoring.api.instrument.MeterRegistry routerMeterRegistry,
                             Handler defaultHandler)
        Builds a router that loads its configuration from the given directory.
        Parameters:
        builder - route builder
        directoryMonitor - the directory monitor
        routerMeterRegistry - The router's meter registry
        defaultHandler - the handler which should be invoked when no route matches the request
    • Method Detail

      • stop

        public void stop()
        Stops this handler, shutting down and clearing all the managed routes.
      • deploy

        public void deploy​(String routeId,
                           String routeName,
                           JsonValue routeConfig)
                    throws RouterHandlerException
        Deploy a route, meaning that it loads it but also stores it in a file.
        Parameters:
        routeId - the id of the route to deploy
        routeName - the name of the route to deploy
        routeConfig - the configuration of the route to deploy
        Throws:
        RouterHandlerException - if the given routeConfig is not valid
      • undeploy

        public JsonValue undeploy​(String routeId)
                           throws RouterHandlerException
        Undeploy a route, meaning that it unloads it but also deletes the associated file.
        Parameters:
        routeId - the id of the route to remove
        Returns:
        the configuration of the undeployed route
        Throws:
        RouterHandlerException - if the given routeId is not valid
      • update

        public void update​(String routeId,
                           String routeName,
                           JsonValue routeConfig)
                    throws RouterHandlerException
        Update a route.
        Parameters:
        routeId - the id of the route to update
        routeName - the name of the route to update
        routeConfig - the new route's configuration
        Throws:
        RouterHandlerException - if the given routeConfig is not valid
      • handle

        public Promise<Response,​NeverThrowsException> handle​(Context context,
                                                                   Request request)
        Description copied from interface: Handler
        Returns a Promise representing the asynchronous Response of the given request. If any (asynchronous) processing goes wrong, the promise still contains a Response (probably from the 4xx or 5xx status code family).

        A handler that doesn't hand-off the processing to another downstream handler is responsible for creating the response.

        The returned Promise contains the response returned from the server as-is. This is responsibility of the handler to produce the appropriate error response (404, 500, ...) in case of processing error.

        Note: As of Promise 2.0 implementation, it is not permitted to throw any runtime exception here. Doing so produce unexpected behaviour (most likely a server-side hang of the processing thread).

        Specified by:
        handle in interface Handler
        Parameters:
        context - The request context.
        request - The request.
        Returns:
        A Promise representing the response to be returned to the caller.
      • onChanges

        public void onChanges​(org.forgerock.openig.handler.router.FileChangeSet changes)