Tapestry: порядок запуска с использованием аннотаций @Startup и @Order

Рассмотрим некоторый проект AppModule в Tapestry.

Я хочу заказать последовательность действий, которые должны выполняться при запуске системы.

Учтите, у меня есть два простых действия:

1) Действие, которое должно быть первым:

@Startup
public static void initMyApplication(Logger logger, LiquibaseService liquibaseService) {
    logger.info("Updating database by liquibase service...");
    liquibaseService.update();
    logger.info("update-db done.");
}

2) и второй:

@Startup
@Order("after:LiquibaseService")
public static void doSomeChecks(HibernateSessionManager hsm) {
   ... 
}

Не могу понять (даже прочитав документацию): как указать порядок таких действий с помощью аннотации @Order?

Более конкретно: что мне нужно указать на @Order("after:<HERE>)?

Кажется, что конструкции типа:

@Order("after:LiquibaseService")

or

@Order("after:initMyApplication")

не работай. На самом деле мои startup действия вызываются в произвольном порядке.


person Andremoniy    schedule 17.01.2013    source источник


Ответы (1)


Я не думаю, что @Order можно использовать с @Startup, но вы можете использовать contributeRegistryStartup. Поскольку он ожидает OrderedConfiguration, вы можете заказать свои вклады.

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

public class MyModule2
{
  public static void contributeRegistryStartup(OrderedConfiguration<Runnable> configuration)
  {
    configuration.add("MySecondContribution", new Runnable() { ... }, "after:MyFirstContribution");
  }
}
person Tawus    schedule 17.01.2013
comment
да, я знаю о методе contributeRegistryStartup. Но я не понимаю, как я могу внедрить в эти анонимные Runnable объекты экземпляры нужных сервисов, как я сделал с моим методом initMyApplication (я имею в виду экземпляр сервиса LiquibaseService, пока это просто пример). Если вы можете предоставить мне такой пример, он будет +1 и проверен :) - person Andremoniy; 17.01.2013
comment
да, это действительно работает, я проверял. Спасибо, интересное решение. - person Andremoniy; 17.01.2013