1

我有一个使用外部 jar(用于记录目的)的 Java EE 应用程序,但它需要一个用于配置的 URL,该 URL 在 jar 本身中通过 JNDI 查找解析。

一些澄清示例:

LoggingLib.jar:-> LoggingFactory.java

public void resolveJndi(){
     Context ctx = new InitialContext();
     URL myConf = ctx.lookup('url/myConf');
}

这个库包含在真实的应用程序 EAR 文件中,并在应用程序的各个类中调用(在 web 模块、ejb 模块中,甚至在另一个带有 JPA 类的 jar 中)。

如果 jndi name 'url/myConf' 存在,一切正常:但我需要将它映射到部署时指定的个性化名称。对于其他资源,我使用 ibm 绑定解决了这个问题:在部署时,系统会询问这些资源的真正 jndi 名称。这样,软件和配置之间就解耦了:应用程序将查找 java:comp/env/url/myConf 但服务器将使用它的真实名称解析它。我尝试对 application.xml 和 ibm-application-bnd.xml 做同样的事情,但没有成功。

做这种参考的正确方法是什么?

4

1 回答 1

1

这通常使用URL 提供程序来完成。您需要在进行查找的组件中定义对资源环境的引用:

<resource-env-ref>
    <resource-env-ref-name>local_url_reference</resource-env-ref-name>
    <resource-env-ref-type>java.net.URL</resource-env-ref-type>
</resource-env-ref>

然后在定义了 URL 资源之后,您将能够将它绑定到本地组件的命名空间中。ibm-ejb-jar-bnd.xml看起来像这样(对于 EJB):

  <session name="YourBean">
    <resource-env-ref name="local_url_reference" binding-name="global_url_reference"/>
  </session>
于 2013-10-14T13:39:10.260 回答