【问题标题】:change the value of a global variable at runtime在运行时更改全局变量的值
【发布时间】:2013-08-22 17:58:02
【问题描述】:

有没有办法在 websphere 应用服务器运行时更​​改 java 全局变量的值?我在我的 java 应用程序中使用属性文件来指定全局变量的值。但有时我需要在运行时更改变量的值。例如,如果我有一个名为“fileServerLocation”的变量,其值为“C:\Users\test\Downloads”,如果我想将其更改为“C:\Users\test\Desktop”,则为有没有一种方法可以更改变量的值而无需在服务器上重新部署应用程序?

【问题讨论】:

  • 什么是java全局变量?
  • 您应该为此使用 JNDI。请查看stackoverflow.com/questions/8259181/…。
  • 所以你的意思不是全局值?你的意思是某种配置值?
  • 如果您的意思是java:global,您可能应该澄清您的问题,因为当前的措辞已经让几个人感到困惑。
  • 是的,我应该说“配置值”。很抱歉造成混乱。

标签: java websphere


【解决方案1】:

您可以构建通过 HTTP 请求触发的 Web 服务或 EJB 调用,它所做的只是在运行时更改字段值。您可能需要发出此“管理员请求”以要求执行身份验证(例如用户名/密码)。此外,您可能需要将此字段声明为 volatile,以便在更改后在所有线程中可见。

请注意,每个ClassLoader 都有自己的静态字段值(全局变量)。通常所有 EJB 共享同一个类加载器,但每个 war 模块都有自己的类加载器。

【讨论】:

  • 我们是否必须每次都将变量的值作为 Web 服务请求参数传递?
  • @Learner 这取决于你。您可以传递与字符串值相对应的简单整数。
【解决方案2】:

不要使用“全局变量”。创建一个在运行时向客户端提供值的内部服务,并设计该服务,使其具有可以通过 servlet、消息驱动 bean 和/或其他一些机制在运行时接受更改的接口。此外,让服务允许客户端注册回调(“侦听器”),当特定变量值(或任何变量值)发生更改时可以通知这些回调。

【讨论】:

  • 客户端不需要知道任何关于变量的信息。该变量用于表示服务器端的文件夹。
【解决方案3】:

我不会尝试了解全局变量的详细信息,但我认为“全局变量”是每个应用程序的全局变量。

我将重点介绍应该以何种方式进行状态更改的动态更新。
我认为执行此典型管理操作的正确方法是使用 JMX 标准。您必须使用操作公开 MBean,以在运行时动态更新值。使用某种内存屏障,值的更新应该是“线程安全的”。

值的更新将使用某种管理工具(JMX 客户端)执行。

【讨论】:

    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多