gpt4 book ai didi

java - 在 Java 企业应用程序中重新映射 JNDI 资源

转载 作者:太空宇宙 更新时间:2023-11-04 12:55:16 24 4
gpt4 key购买 nike

我们有一个通用的 Web 模块 (foo.war),我们希望将其作为 WAR 部署在多个不同的 EAR 中。 foo.war 通过 JNDI 数据源访问数据库,foo 知道该数据源的名称为 jdbc/FOO-DATASOURCE

但是对于每个应用程序 XXX,该数据源必须重新映射到与 XXX 应用程序关联的数据源,即 jdbc/XXX-DATASOURCE

foo.war 在其 web.xml 中有以下内容:

<resource-ref>
<res-ref-name>jdbc/FOO-DATASOURCE</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

我原以为可以使用 XXX 项目中 glassfish-application.xml 中的以下条目来重新映射:

<resource-ref>
<res-ref-name>jdbc/FOO-DATASOURCE</res-ref-name>
<jndi-name>jdbc/XXX-DATASOURCE</jndi-name>
</resource-ref>

但是当我将 XXX 应用程序部署到 glassfish 时,我收到消息:

This app [xxx-ear-0.0.1-SNAPSHOT] has no resource reference by the name of [jdbc/FOO-DATASOURCE]
DPL8007: Unsupported deployment descriptors element jndi-name value jdbc/XXX-DATASOURCE

有什么方法可以在 EAR 级别为 web.xml 中定义的资源设置翻译吗?
glassfish 在哪里寻找资源引用?
有没有更好的方法来实现这一点?

最佳答案

事实证明,我可以在 EAR 级别声明资源:在 application.xml 中。我出错的地方是我最初使用的是旧版本的 application.xml 架构。当我将其更改为 version="6" 时,我就能够添加一个 resource-ref,然后它也被 glassfish-application.xml 中的 glassfish 接受。

但是有一个复杂的情况:我只能在 application.xml 中声明应用程序级 (java:app/) 资源,而 web.xml 中的数据源是组件级 (java:comp/env/)。

为了解决此问题,我将资源映射到 glassfish-web.xml 中的应用程序级资源,然后将其重新映射到 glassfish-application.xml 中的正确名称:

foo web.xml:

<resource-ref>
<res-ref-name>jdbc/FOO-DATASOURCE</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>CONTAINER</res-auth>
</resource-ref>

foo glassfish-web.xml:

<resource-ref>
<res-ref-name>jdbc/FOO-DATASOURCE</res-ref-name>
<jndi-name>java:app/FOO-DATASOURCE</jndi-name>
</resource-ref>

XXX application.xml(版本=“6”):

<resource-ref>
<res-ref-name>java:app/jdbc/FOO-DATASOURCE</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>CONTAINER</res-auth>
</resource-ref>

XXX glassfish-application.xml:

<resource-ref>
<res-ref-name>java:app/jdbc/FOO-DATASOURCE</res-ref-name>
<jndi-name>java:app/jdbc/XXX-DATASOURCE</jndi-name>
</resource-ref>

这有效,但我真的不知道为什么 web.xml 文件中名为 jdbc/XXX-DATASOURCE 的资源最终相当于 application.xml 文件中名为 java:app/jdbc/XXX-DATASOURCE 的资源。

关于java - 在 Java 企业应用程序中重新映射 JNDI 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35448241/

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