2013-01-17 53 views
1

我有基於Tapestry框架的項目。它使用Hibernate作爲ORM庫。Liquibase集成了Tapestry和Hibernate:初始模式創建步驟

我的類使用annotations映射到數據庫。

我想將Liquibase整合到我的項目中,以便能夠維護數據庫狀態,進行版本更新。

我做了什麼,直到這一刻以下步驟:

1)我創建服務對的:LiquibaseService - >LiquibaseServiceImpl

LiquibaseSerivce具有方法public void update(),其從hibernate.cfg.xml配置創建獨立DataSource和最後做liquibase.update("production");

2)我在AppModule加入結合到該服務:

binder.bind(LiquibaseService.class, LiquibaseServiceImpl.class).eagerLoad();

3)I」已添加initMyApplication方法至AppModule開始Liquibase更新:

我可以舒適的降表,列等:0
@Startup 
public static void initMyApplication(Logger logger, LiquibaseService liquibaseService) { 
    logger.info("Updating database by liquibase service..."); 
    liquibaseService.update(); 
    logger.info("update-db done."); 
} 

這一切生產,在最初的方案已經創建工作正常。

但問題是,我無法從零開始創建新方案(使用Liquibase)將應用程序部署到新服務器時:Hibernate獨立開始回答抱怨,在方案中沒有任何表映射到我的類。

我該如何減慢Hibernate直到Liquibase將完成其工作?

回答

2

而不是使用@Startup你可以做這樣的事情

public static void contributeRegistryStartup(
    final Logger logger, final LiquibaseService liquibaseService, 
    OrderedConfiguration<Runnable> configuration) 
    { 
     configuration.add("Liquibase", new Runnable() 
     { 
      public void run() 
      { 
       logger.info("Updating database by liquibase service..."); 
       liquibaseService.update(); 
       logger.info("update-db done."); 
      } 
     }, "after:HibernateStartup"); 
    } 
+0

你的意思,那'Tapestry'將自動注入'Logger'和'LiquibaseService',會嗎? – Andremoniy

+0

TapestryIOC將所有參數注入AppModule#contribution方法,並且您可以始終訪問內部匿名類的最終變量。 – Tawus

+0

是的,它確實有效,我檢查了它。謝謝,這是一個有趣的決定。我會+1你的答案,但我仍然很有趣如何使用註釋做到這一點。或者這是不可能的? – Andremoniy