2

我打算使用 LiquiBase 来管理数据库,我希望每次将 Web 应用程序部署到 Glassfish 3.1 时它都能运行。为了做到这一点,我编写了以下类:

@Singleton
@Startup
public class LiquibaseWrapper {

    @Resource(name = "jdbc/mydatabase")
    private DataSource dataSource;

    @PostConstruct
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public void doLiquibaseUpdate() {
        ResourceAccessor fileOpener = new ClassLoaderResourceAccessor();
        DatabaseFactory databaseFactory = DatabaseFactory.getInstance();
        Database database = null;
        try {
            database = databaseFactory
                    .findCorrectDatabaseImplementation(new Jdbc Connection(
                            dataSource.getConnection()));
            Liquibase liquibase = new Liquibase("ChangeLog.xml",
                    fileOpener, database);
            liquibase.update("");
        } catch (DatabaseException e) {
            // TODO: handle error
        } catch (SQLException e) {
            // TODO: handle error
        } catch (LiquibaseException e) {
            // TODO: handle error
        }
    }
}    

问题是当我通过 Eclipse 将应用程序部署到服务器上时,doLiquiBaseUpdate() 没有执行。当我从中构建一个 WAR 文件并手动部署它时,就会执行该方法。

我有点困惑为什么 doLiquiBaseUpdate() 在通过 Eclipse 部署时不运行。

其他可能有用的信息: - 正在使用 Maven 2 构建 WAR - 使用 JSF 2.1 - 数据库是 MySQL - 使用 LiquiBase 2.0.3 - Eclipse Indigo 和 Glassfish 服务器工具 1.7.3

4

0 回答 0