1. Domino Brix
  2. Startup & tasks

Define startup tasks

Startup tasks run after Brix.get().init(config) and before presenters activate. Extend BrixStartupTask, implement run(), and call complete() when finished.

			public class FetchConfigTask extends BrixStartupTask {
  @Override
  public int order() { return 0; }

  @Override
  public void run() {
    fetchRemoteConfig(config -> {
      Brix.get().config().put("apiBase", config.apiBase());
      complete();
    });
  }
}

		

Ordering

  • order() groups tasks; same order runs in parallel.
  • complete() is mandatory—tasks block the next group until they finish.
  • After the final group completes, the onComplete callback passed to start(...) fires.

Provide tasks via DI

Bind tasks with the @BrixTask qualifier so you can inject the set into your entry point.

			@Module
public class AppTasksModule {
  @Provides
  @BrixTask
  static List<BrixStartupTask> tasks(FetchConfigTask fetchConfig,
                                     WarmupTask warmup) {
    return List.of(fetchConfig, warmup);
  }
}

		

Bootstrap with tasks

			public class AppEntryPoint {
  @Inject @BrixTask Set<BrixStartupTask> startupTasks;

  public void onModuleLoad() {
    DaggerAppComponent.create().inject(this);
    Brix.get().init(Map.of("env", "prod"));
    Brix.get().start(startupTasks, () -> DomGlobal.console.info("App started"));
  }
}

		

Classpath discovery (domino-auto)

Annotate tasks with @AutoService(BrixStartupTask.class) to generate a BrixStartupTask_ServiceLoader helper. This lets you start Brix without wiring DI modules.

			@AutoService(BrixStartupTask.class)
public class FetchConfigTask extends BrixStartupTask { /* ... */ }

List<BrixStartupTask> tasks = BrixStartupTask_ServiceLoader.load();
Brix.get().init(Map.of());
Brix.get().start(new LinkedHashSet<>(tasks), () -> DomGlobal.console.info("App started"));

		

Tips

  • Call complete() even for synchronous work.
  • Use higher order() values for tasks that depend on earlier ones.
  • Use getContextWait() if you need to coordinate multiple async operations inside one task.

We are a group of passionate people who love what we do

Donate & Support Us