gpt4 book ai didi

java - Tomcat中的jndi资源没有java :/comp/env/prefix

转载 作者:行者123 更新时间:2023-11-30 07:48:07 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

对于 WebSphere,您还可以使用绑定(bind)文件 (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>

关于java - Tomcat中的jndi资源没有java :/comp/env/prefix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33664990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com