2014-07-16 58 views
1

我正在开发具有GlassFish v3.1部署目标的JavaEE6应用程序。为了隔离应用程序的实例(因为我们可能为测试和生产或多个QA实例部署多个实例),我想为应用程序中的所有资源使用应用程序范围的资源:部署后配置的应用程序范围资源(JDBC)

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

不幸的是,由于JDBC连接细节不是一成不变的,我需要支持以下顺序:

  1. 部署WAR
  2. 在部署过程中,检测到空的JDBC URL /用户/密码,并且不执行自动升级liquibase,显示回退UI警告管理员配置JDBC设置和redeply /重载应用。
  3. 用户在应用范围内配置URL作用域JDBC资源
  4. 用户重新加载/重新部署应用程序。
  5. 完整的部署过程现在包括liquibase模式更新和现在可用的完整Web应用程序。

Unforunately,试图加载与JDBC连接导致部署失败空的URL参数战争:

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

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

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

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

+0

你的回答的第一句话是解决方案,我终于找到了根源。对于产品发布,我使用JPADeployer可以使用的内存H2数据库URL(例如jdbc:h2:mem:myApp),Liquibase会很高兴地升级等。一旦部署,我们可以配置JDBC设置,并执行在GF中重新加载以获得对我们的适当数据库的实际部署。 – Pete

相关问题