【问题标题】:Get application name from EJB on Weblogic 11g从 Weblogic 11g 上的 EJB 获取应用程序名称
【发布时间】:2020-07-08 07:33:34
【问题描述】:

有没有办法从 Weblogic 11g 上的服务器管理对象中找出应用程序的部署名称?例如,我可以从无状态 bean 本身获取应用程序名称吗?

我发现一些服务器允许 JNDI 查找“java:app/AppName”,但它似乎不适用于 Weblogic。此外,我知道我可以使用 MBean 获取所有已部署应用程序(以及更多)的名称,但我不知道如何识别我感兴趣的“应用程序名称”而不事先将应用程序名称传递给我的 bean ,这违背了目的。

【问题讨论】:

    标签: java jakarta-ee jndi weblogic11g mbeans


    【解决方案1】:

    引用 Java EE 8 规范,ch。 EE.5.15“应用程序名称和模块名称参考”

    组件可以使用预定义的 JNDI 名称 java:app/AppName 访问当前应用程序的名称。组件可以使用预定义的 JNDI 名称java:module/ModuleName 访问当前模块的名称。这两个名称都由String 对象表示。

    之后,在 EE.5.15.2“Java EE 产品提供商的责任”中:

    Java EE 产品提供者负责提供本规范要求的正确应用程序名称和模块名称字符串对象。

    因此,需要符合 Java EE 的产品才能提供您提到的 JNDI 值。

    对我来说(目前在 WildFly 15 上)这很有效:

    @Resource(name = "java:app/AppName")
    private String appName;
    
    @Resource(name = "java:module/ModuleName")
    private String moduleName;
    

    【讨论】:

    • 我们正在运行带有 Java 1.6.0_37 的 WebLogic Server 10.3.4.0。我不确定这是否是原因(很可能是),但是您的示例在放入无状态 EJB bean 时会产生空值。其他资源按预期注入。
    • 是的,您可能运行在支持旧版本 J(2)EE 的服务器上,该版本未指定这些 JNDI 值(我不认为 Java 版本起作用)。您可以调整模块的部署描述符吗?我相信您仍然可以从部署描述符中添加 String 类型的 JNDI 条目 - 但在 java:comp/env 命名空间下。
    • 目前,我使用这种方法,但安排有所不同。我使用 ant 脚本部署到 WL 并使用部署计划将应用程序名称作为普通字符串资源传递。然而,这很麻烦,如果可能的话,我想避免它。尝试动态获取应用程序名称的整个动机是避免“手动”进行。
    猜你喜欢
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多