gpt4 book ai didi

java - DataSource 的可移植 JNDI 名称

转载 作者:搜寻专家 更新时间:2023-11-01 03:53:06 24 4
gpt4 key购买 nike

我有一个带字段的 EJB

@Resource(lookup = "jdbc/sampleDS")
private DataSource ds;

和带有条目的persistence.xml

<jta-data-source>jdbc/sampleDS</jta-data-source>

我想让应用程序在不同的 Java EE 服务器之间轻松移植。但在 JBoss 中,JNDI 名称必须以 java:/或 java:jboss/开头。同时 Glassfish 不喜欢符号“:”。如何实现便携性?我尝试为数据源 instandalone.xml 设置属性 use-java-context="false",但它没有帮助我。

提前致谢。

最佳答案

重点是 persistence.xml无意定义您的资源。它旨在引用要用于 JTA 实体管理器(持久性单元)的资源。是的,您可以动态定义资源,而不是引用预定义的资源,但这会将其放置在特定于您正在使用的容器的上下文中。

使用 persistence.xml 时要查找预定义的 JNDI 资源,您可以使用以下语法:

  <persistence-unit name="mydb" transaction-type="JTA">
<jta-data-source>jdbc/mydb</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
</persistence-unit>

就像@Resource ,持久化单元的定义将尝试从 java:comp/env 中的现有上下文中查找 JDBC 数据源。

请注意,为确保这些资源可用,它们应与 resource-ref 一起使用在你的web.xml .这会将它们从全局上下文或应用程序上下文移动到 java:comp/env 中。 ,为它提供一个标准的 JNDI 名称。例如,在 Tomee 的情况下,将它放在 resources.xml 中使其已可用于您的持久性单元,并且 @Resource标记,但不在 java:comp/env 中.

我仍在尝试弄清楚 Tomee 如何处理 catalina/tomcat context.xml ,对此我现在一无所知。

关于java - DataSource 的可移植 JNDI 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19126639/

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