JavaEE 解决方案配置最佳实践

标签 java jakarta-ee jboss glassfish apache-tomee

我们构建 3 层企业解决方案,通常由多个 webapp 和 ejbjar 模块组成,它们都与数据库对话并具有多个外部集成点。

每个模块通常都需要自己的配置,这些配置可以在解决方案的生命周期内发生变化。 部署它变成了一场噩梦,因为现在我们有 18 个属性文件,必须记住要复制和配置这些文件,还要设置数据源、队列、内存要求等。

我对有更好的方法充满希望,但并不乐观。 我们考虑过/使用过的一些选项,每个选项都各有利弊:

  1. 使用多个 maven 项目和持续集成(例如 hudson 或 jenkins)构建一个配置 jar,其中包含每个环境(dev、qa、prod)的所有属性文件,然后将所有内容捆绑为一个 EAR。但是,在需要时无法在生产中轻易更改。
  2. 将大部分设置放在数据库中,并有一个简单的屏幕来修改它。在内部,我们可以有一个通用的配置服务 EJB,它可以读取和修改值。每个模块都可以有一个自定义扩展版本,其中包含特定的 getter 和 setter。
  3. 对所有属性文件进行版本控制,然后在生产中 check out 并在进行更改后将其检入生产分支。

有了所有这些,您仍然需要以特定于容器的方式配置数据源和队列等:(

最佳答案

  1. 考虑将自定义配置对象绑定(bind)到 JNDI。然后在您的应用程序中查找此对象以配置它们。好处 - 您可以使用自定义配置对象,而不是相当通用的 MapProperties
  2. 另一种方法是使用JMX 来配置您需要的应​​用程序。好处 - 您可以将需要配置的对象直接绑定(bind)到 MBean Server,然后使用诸如 jconsolevisualvm 之类的知名工具进行配置您的应用程序的组件。

这两种方式都支持在运行时动态重新配置您的应用程序。我更喜欢使用 JMX

关于JavaEE 解决方案配置最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8164502/

相关文章:

java - 如何设置 ActionListener 来监听另一个 ActionListener 来触发不同类中的事件?

java - Android "application stopped unexpectedly"- google Hello MapView 教程

java - 发送请求时 WSDL 字段名称不同

java - 我的executeUpdate() 工作,但未提交

java - 是否可以在android中以编程方式关闭静音模式?

java - 一键将批量文档(pdf 文件)从服务器复制到客户端计算机?

java - EJB @Local 和 @Stateless 在一起

java - 用于初始化依赖于另一个应用程序 EJB 的 EJB 的模式

java - JBoss SystemPropertiesService 不一致地重新加载属性

缺少 JBoss 作为客户端 5.1.0.GA 存储库