Tapestry:使用@Startup和@Order注释的启动顺序

时间:2013-01-17 12:57:56

标签: java tapestry

考虑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")

@Order("after:initMyApplication")

不行。实际上我的startup动作是以任意顺序调用的。

1 个答案:

答案 0 :(得分: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");
  }
}