我有一个Java EE应用程序,它使用外部jar(用于记录目的),但它需要一个配置URL,它在jar本身中使用JNDI查找进行解析。
一些澄清例子:
LoggingLib.jar: - > LoggingFactory.java
public void resolveJndi(){
Context ctx = new InitialContext();
URL myConf = ctx.lookup('url/myConf');
}
这个lib包含在真正的应用程序EAR文件中,并在各种应用程序类中调用(在web模块,ejb模块中,甚至在另一个带有JPA类的jar中)。
如果jndi名称'url / myConf'存在,则一切正常:但我需要将其映射到部署时指定的个性化名称。 对于其他资源,我使用ibm绑定解决了这个问题:在部署时,会询问哪些是这些资源的真正jndi名称。通过这种方式,软件和配置之间存在脱钩:应用程序将查找java:comp / env / url / myConf,但服务器将使用它的真实名称解析它。 我尝试使用application.xml和ibm-application-bnd.xml做同样的事情,但没有成功。
这种参考的正确方法是什么?
答案 0 :(得分:1)
这通常使用URL providers完成。您需要在组件中定义对资源环境的引用:
<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>