Registry Startup

It is possible to provide extra logic to be executed at Registry startup, by making contributions to the RegistryStartup service configuration.

The values contributed are Runnable objects. The configuration is ordered, so it is possible to control in what order the objects are executed.

RegistryStartup occurs after eager loaded services are instantiated.

Here's an example of a module that makes a contribution:

public class MyModule
{
  public static void contributeRegistryStartup(OrderedConfiguration<Runnable> configuration)
  {
    configuration.add("MyContributionName", new Runnable() { ... });
  }
}

Generally, these contributions are in the form of inner classes; if they were services, they could just be eagerly loaded.

Startup Methods

Added in 5.2
Instead of making contributions to the RegistryStartup service configuration you can provide startup methods inside your modules. A startup method is a static or instance method of a module annotated with @Startup annotation. Each module is allowed to contain several startup methods.
public class MyModule
{

  @Startup
  public static void initMyApplication(Logger logger, MyService service)
  {
    logger.info("Starting up...");

    service.init();
  }
}