2

LiquiBase を使用してデータベースを管理することを計画しています。Web アプリケーションを Glassfish 3.1 にデプロイするたびに LiquiBase を実行したいと考えています。これを行うために、次のクラスを作成しました。

@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 ファイルを作成し、手動でデプロイすると、メソッドが実行されます。

Eclipse を介してデプロイするときに doLiquiBaseUpdate() が実行されない理由が少しわかりません。

その他の潜在的に役立つ情報: - WAR は Maven 2 でビルドされています - JSF 2.1 を使用しています - データベースは MySQL です - LiquiBase 2.0.3 を使用しています - Eclipse Indigo と Glassfish サーバー ツール 1.7.3

4

0 に答える 0