java - 如何从命令行初始化应用程序的 java 对象

标签 java ear websphere-7

我有一个在 Websphere 应用程序服务器 (WAS) 上运行的 Ear 应用程序 (myApp)。我有一个 jar (myJar),当 WAS 服务器启动时,它会加载到 myApp 的类路径中。 myJar 有一个类 (MyInitClass),它从数据库读取数据并将一组数据 (myData) 加载到内存中。 myApp 会多次读取此数据。重点是将 myData 放入内存中,以防止每次使用此数据时都进行数据库调用。这部分效果很好!
我试图提供的解决方案是手动初始化 MyInitClass。 myData 会不时更改,我希望能够从命令行重新初始化 MyInitClass,这样我就不必重新启动应用程序。这可能吗?
myApp 调用一个具有如下内容的类 (MyClass):

public static MyInitClass initClass;

public boolean doStuff()
{
    if (initClass == null)
    {
        // this method loads the data into initClass.myData array
        initClass.dataInitializer();
    }
    else
        // no need to reload initClass.myData
}

我在另一个类(MyManualInit)中创建了与此类似的代码:

public static void main(String[] args)
{
    MyClass.initClass = new MyInitClass();
    MyClass.initClass.dataInitializer();
}

当我从命令行运行 MyManualInit 时,它会打印与 myApp 初始化期间打印的所有相同的调试信息。但 myApp 无法识别 MyInitClass 已被重新初始化。我已从两个进程打印了 System.out.println(System.getProperty("java.home")) 以验证我是否使用相同的 JRE 来运行这两个进程。我在这里做了明显错误的事情还是它只是不起作用?我假设如果我在同一个 JRE 上运行 MyManualInit 就会起作用。 MyClass、MyInitClass 和 MyManualInit 都在 myJar 中。
如果您需要更多信息,请告诉我。

最佳答案

你正在混合东西。 Websphere 在 JVM 实例中运行,并且您的命令行程序会实例化一个新实例,并且对象不会在不同 JVM 之间进行通信(至少无需付出一些努力,例如启动套接字等)

实际上,您的代码对 initClass 对象进行了延迟初始化,并且无需任何命令行交互就足够了。为什么这对你来说还不够?

关于java - 如何从命令行初始化应用程序的 java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20803519/

相关文章:

java - Wildfly EAR 部署的应用程序位置路径

java - 在 Websphere 上无法部署

java - 使 Websphere 上的 LTPA token 无效

java - 采用整数并返回所有可能的加法格式的算法

java - 设置MaterialSpinner的背景颜色

JavaEE Arquillian 和 JBoss 8.0.0beta 1 :

升级到 WAS 7 后的 javax.servlet.UnavailableException

java - 如何在 Windows 上将 jar 文件转换为 .dmg

java - 转换以数字作为 header 的 Json 对象

java - 如何覆盖 Jboss 5.1 lib/endorsed 目录中的 jar?