【问题标题】:Liquibase: How to execute Servlet Listener before EntityManager constructionLiquibase:如何在 EntityManager 构建之前执行 Servlet Listener
【发布时间】:2011-03-24 05:39:11
【问题描述】:

我设法发布了 Liquibase 更新,如 Liquibase Servlet Listener 中所述。

<listener>
    <listener-class>liquibase.servlet.LiquibaseServletListener</listener-class>
</listener>

这有效地执行了我的变更日志。

但是,这发生在 EntityManager 的设置之后。显然,如果我希望我的 Persistence 提供程序验证数据库架构,则为时已晚:

   <property name="hibernate.hbm2ddl.auto" value="validate"/>

...这些表根本不存在。

有没有办法让 Liquibase 更新数据库架构,EntityManager 初始化之前?

PS:AppServer 是 JBoss6

==========================[更新]================ ===========

根据下面与 Nathan 的简短讨论,我可能不得不将问题改写如下:

有谁知道 JBoss 启动序列中的代码挂钩之前 EntityManager 的初始化?

如果存在,我可以将 Liquibase 更新逻辑移动到那个地方吗?

【问题讨论】:

    标签: java servlets jpa jboss liquibase


    【解决方案1】:

    您的 EntityManager 是否也在侦听器中启动(例如 spring 的侦听器)?

    应用服务器通常按照它们在您的 web.xml 文件中列出的顺序启动侦听器,确保在启动休眠之前列出您的 liquibase 侦听器。

    【讨论】:

    • PersistenceUnit(和关联的 EntityManager)在 JBOSS 启动过程的早期启动。只有在那之后,网络应用才会被初始化...... 8-/
    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 2019-11-16
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多