anchor.diff:  ----
   
   ==== Example 2 - limiting access to service by contract agreements
  -> Imagine that you provide paid language translation service via HTTP. Each user has unique agreement which differs from each other.
  -Details of each agreement is stored in relational database, and takes significant time to fetch(for example 100ms). 
  -The example above will not work fine in this case, because time to create/fetch configuration of bucket from database
  +> Imagine that you provide paid language translation service via HTTP. Each user has a unique agreement that differs from the other.
  +Details of each agreement are stored in a relational database and take significant time to fetch(for example 100ms).
  +The example above will not work fine in this case, because time to create/fetch the configuration of the bucket from the database
   will be 100 times slower than limit-checking itself.
  -Bucket4j solves this problem via lazy configuration suppliers which are called if and only if bucket was not yet stored in grid,
  -thus it is possible to implement solution  that will read agreement from database once per each user.
  +Bucket4j solves this problem via lazy configuration suppliers which are called if and only if the bucket was not yet stored in the grid,
  +thus it is possible to implement a solution that will read the agreement from the database once per user.
   
   [source, java]
   ----
  
positive.code:             httpResponse.getWriter().append("Too many requests");
          }
      }
      
      private Supplier<BucketConfiguration> getConfigSupplierForUser(String userId) {
           return () -> {
               long translationsPerDay = limitProvider.readPerDayLimitFromAgreementsDatabase(userId);
  
negative.code:     // cache for storing token buckets, where IP is key.
      @Inject
      private javax.cache.Cache<String, byte[]> cache;
  
      private ProxyManager<String> buckets;
  
      @Override
      public void init(FilterConfig filterConfig) throws ServletException {
           // init bucket registry
           buckets = new JCacheProxyManager<>(cache);
      }
  
      @Override
      public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
          HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
          String ip = IpHelper.getIpFromRequest(httpRequest);
  
          // acquire cheap proxy to the bucket
          Bucket bucket = proxyManager.builder().build(key, configuration);
  
          // tryConsume returns false immediately if no tokens available with the bucket
  