【问题标题】:jndi resource in Tomcat without java:/comp/env/ prefixTomcat 中没有 java:/comp/env/ 前缀的 jndi 资源
【发布时间】:2015-11-12 05:27:22
【问题描述】:

在 Tomcat 中,context.xml 中定义的任何 jndi 资源都具有前缀 java:/comp/env/。在 Websphere 中,他们没有。我们正在注入的资源相当多

@Resource(mappedName="...")
private Queue queue1;

为本地和托管环境配置两次是很痛苦的。 我想将其配置为仅具有适用于所有环境的 @Resource 注入。毕竟这就是使用 jndi 的意义所在。

有很多方法可以配置 Tomcat 来定义一个全局 jndi 资源,但它们都涉及更改 server.xml,我们不能这样做,因为它是一个 gradle tomcat 插件。

有什么办法可以在不修改Tomcat中的server.xml的情况下达到同样的效果?

【问题讨论】:

  • 注意,EE 规范要求的前缀是java:comp/env/,而不是某些应用服务器使用的java:/comp/env/

标签: java tomcat7 websphere jndi spring-java-config


【解决方案1】:

WebSphere 忽略 mappedName 参见 here,因此您可以在 Tomcat 中使用任何您喜欢的名称,但对于 WebSphere 使用 lookup=jndiNamejava:comp/env/ 前缀用于资源引用或嵌入在应用程序中的资源定义。它不应用作服务器配置中定义的全局对象的 JNDI 名称。

对于 WebSphere,您还可以在 WEB-INF 中使用绑定文件 (ibm-web-bnd.xml),并在那里映射您对服务器配置中定义的 JNDI 名称的引用,例如

// In code use just resource with name
@Resource(name="myQueue")    // this defines reference name which will be bound to jndi name using binding file
private Queue queue;


// binding file
<?xml version="1.0" encoding="UTF-8"?>
<web-bnd 
    xmlns="http://websphere.ibm.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_2.xsd"
    version="1.2">

    <virtual-host name="default_host" />

    <resource-env-ref name="myQueue" binding-name="jms/myQ" />
</web-bnd>

【讨论】:

  • 感谢 Gas 的回答。我仍然无法让它工作。第一个 WAS 不会忽略 MappedName,即使我设置名称或查找其他内容我仍然会得到`No bean named &#39;java:comp/env/jms/myQcf&#39;定义:在JNDI环境中找不到`我的意思是我可以让它在Websphere中工作,这不是问题。问题是让它在 Websphere 和 Tomcat 中都可以工作(不改变 server.xml)
  • 我说的是 8.5.5.5
  • @Leo 你在哪里使用java:comp/env这个名字?
  • 我按照您的建议尝试了 @Resource(mappedName="java:comp/env/jms/qcf1", name=""jms/qcf1") 和 ibm-web-bnd.xml。也尝试了lookup 而不是name
  • @Leo 如果你创建了@Resource(mappedName="java:comp/env/jms/qcf1", name="jms/qcf1"),那么你必须在bnd文件中有`resource-env-ref name="jms/qcf1" binding-name="JNDINameInLibertyServerXML"
猜你喜欢
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 2018-05-16
相关资源
最近更新 更多