部署后配置的应用程序作用域资源(JDBC)

时间:2014-07-16 03:55:11

标签: java-ee jdbc glassfish

我正在开发一个部署目标为GlassFish v3.1的JavaEE6应用程序。为了隔离应用程序的实例(因为我们可能为测试,生产或多个QA实例部署了多个实例),我想将应用程序作用域资源用于应用程序中的所有资源:

  • JDBC连接
  • JMS资源
  • 自定义资源

不幸的是,由于JDBC连接细节不是静态的,我需要支持以下序列:

  1. 部署WAR
  2. 在部署期间,检测空的JDBC url / user / password,并且不执行自动liquibase升级,显示fallback UI警告管理员以配置JDBC设置并重新/重新加载应用程序。
  3. 用户在应用范围的JDBC资源中配置URL
  4. 用户重新加载/重新部署应用程序。
  5. 完整部署过程现在包括liquibase架构更新,现在可以使用完整的Web应用程序。
  6. 不幸的是,尝试使用JDBC连接的空url参数加载war会导致部署失败:

    SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
    SEVERE: Exception while preparing the app
    SEVERE: [PersistenceUnit: foo] Unable to build EntityManagerFactory
    

    任何想法如何让应用程序部署得足够远,以至于应用范围的JDBC连接将存在并且可以配置?

1 个答案:

答案 0 :(得分:1)

我最初会输入一个空白或虚拟数据库实例的URL,然后切换它。

您可以使用标有@Startup的类来设计一个切换URL并启动Liquibase脚本的类。如果为虚拟数据库配置了应用程序,那么可能还会包含警告消息。

@Startup示例:http://blog.eisele.net/2010/12/seven-ways-to-get-things-started-java.html