View Javadoc

1   package com.atlassian.johnson.setup;
2   
3   import com.atlassian.johnson.JohnsonEventContainer;
4   
5   /**
6    * Allows applications using Johnson to provide custom {@link JohnsonEventContainer} implementations for use as part
7    * of their configuration.
8    * <p/>
9    * For example, multi-tenant applications need a way to group events in the container per-tenant, allowing tenants to
10   * see only those application and request events which relate to their view of the system. In such a scenario, the
11   * application may register a custom {@code ContainerFactory} which returns a tenant-aware container. This keeps any
12   * dependency on or knowledge of multi-tenancy libraries Johnson.
13   * 
14   * @since 1.1
15   */
16  public interface ContainerFactory
17  {
18      /**
19       * Creates a {@link JohnsonEventContainer} for use storing events.
20       * <p/>
21       * This method will be called <i>exactly once</i> during Johnson initialisation, and the returned event container
22       * will be used to service all requests on all threads. As a result, the returned implementation is required to be
23       * thread-safe. For multi-tenant systems, handling the differentiation between events for each tenant must happen
24       * below the interface, on a single instance (at least from Johnson's perspective) of the container.
25       *
26       * @return an event container
27       */
28      JohnsonEventContainer create();
29  }