- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我们有一个通用的 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/
我是 JNDI 的新手,我阅读了 oracle 的在线资料: http://docs.oracle.com/javase/jndi/tutorial/getStarted/overview/index
什么是JNDI? 它的基本用途是什么? 什么时候使用? 最佳答案 What is JNDI ? 它代表Java Naming and Directory Interface . What is its
我有完整的应用服务器背景,并考虑在 Jetty 等轻量级嵌入式服务器上运行应用。 我一直使用 JNDI 来查找连接池以查找数据库连接之类的东西,但我想知道这是否是轻量级案例的最佳方法。似乎如果我使用
您如何使用 JDBCRealm处理servlet 中的用户身份验证和授权?我能找到的唯一示例是在 web.xml 中创建数据源(例如 Authentication against database u
命名和目录 (JNDI) - 使用 JNDI 的陷阱是什么 最佳答案 这个问题有点含糊,但这里有几点需要考虑并且与 JNDI 相关。 JNDI 的好处是对象创建与对象查找分离 在 JDNI 中直接查找
在 Wildfly 9 中显示注册的 JNDI 名称的正确方法是什么? 对于旧版本,可以使用 /subsystem=naming:jndi-view ,但它似乎不再起作用。在域模式下运行时。 感谢帮助
我有两个 JBoss 服务器,JbossA 和 JbossB。每个都有自己的 JNDI。现在我在 JbossA 上有一个名为 jms/Client 的 JMS,在 JbossB 上有一个名为 jms/
这是我的“hibernate.cfg.xml”,我正在尝试连接到我的本地主机(postgres),但我不确定我是否输入了参数值(例如连接 url 或其他) : org.hiber
是否可以通过 JNDI 访问 Wildfly 属性(在 standalone.xml 中定义)? 喜欢: ... 并在java中阅读它: @Resource(lo
第126章OSGI Enterprise Release 5 specification提到兼容性: "Support the traditional JNDI programming model u
import org.apache.catalina.Context; import org.apache.catalina.deploy.ContextResource; import org.ap
在我们的项目中,我们使用 websphere liberty 服务器和 IBM MQ 作为消息服务器。我们在云中移动。我们想用 AWS SQS 替换 IBM MQ。在 server.xml 中,我们有
似乎每个人都说您应该使用 Tomcat 的 JNDI 上下文来管理您的 JDBC 连接和驱动程序等等。在阅读了文档之后,我理解了平局。但是,如果您使用它,您的应用程序必须从现在开始一直使用 Tomca
我正在 JBoss7.1.1 应用程序服务器上部署我的 MDB (EJB3.1)。当我使用@Resource进行数据源注入(inject)时,我使用全局JNDI引用名称(ENC +本地JNDI引用名称
使用 JBoss eap 6.4.12 出现错误: Error looking up ${email.jndi.lookup.binding} in JNDI 在我的 java 类中映射此 JNDI
使用com.sun.jndi.fscontext.RefFSContextFactory基于文件的 JNDI 上下文工厂,它似乎只允许在您指定的位置有 1 个绑定(bind)文件。例如 Hashtab
这是我的persistence.xml: org.hibernate.ejb.HibernatePersistence jdbc/abcDS 这是来自 src/test
我已经为我的模块之一运行了强化扫描,我已经收到了 动态代码评估:JNDI 引用注入(inject)漏洞问题 显示在下一行 lookup(dataSource) 数据源是动态的。我应该怎么做才能防止这种
我有 EJB 3.1 中的 EJB,我试图将其部署在 JBoss EAP 6 中,但是当我启动服务器时。它在 JNDI 名称中附加版本号,如下所示。 18:27:57,068 INFO [org.j
我有一个测试,它成功地使用嵌入式 glassfish 来测试 JCA 的部署。 但是,与已经在使用端口 3700 的 GlassFish 2.1 的运行版本存在冲突。 如何将嵌入的 GlassFish
我是一名优秀的程序员,十分优秀!