Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据源的可移植JNDI名称_Java_Jakarta Ee_Jboss_Glassfish - Fatal编程技术网

Java 数据源的可移植JNDI名称

Java 数据源的可移植JNDI名称,java,jakarta-ee,jboss,glassfish,Java,Jakarta Ee,Jboss,Glassfish,我有一个带有字段的EJB @Resource(lookup = "jdbc/sampleDS") private DataSource ds; 和persistence.xml(带有条目) <jta-data-source>jdbc/sampleDS</jta-data-source> jdbc/sampleDS 我想使应用程序易于跨不同的JavaEE服务器移植。但在JBoss中,JNDI名称必须以java:/或java:JBoss/开头。同时,玻璃鱼不喜欢符号“:

我有一个带有字段的EJB

@Resource(lookup = "jdbc/sampleDS")
private DataSource ds;
和persistence.xml(带有条目)

<jta-data-source>jdbc/sampleDS</jta-data-source>
jdbc/sampleDS
我想使应用程序易于跨不同的JavaEE服务器移植。但在JBoss中,JNDI名称必须以java:/或java:JBoss/开头。同时,玻璃鱼不喜欢符号“:”。如何实现可移植性?我试图为数据源instandalone.xml设置属性
使用java context=“false”
,但没有帮助


提前谢谢。

看来我对这个问题研究得不够充分。由于某种原因,我不能注射

@Resource(lookup = "jdbc/sampleDS")
我必须手动查找数据源:

Context ctx = new InitialContext();
dataSource = (DataSource) ctx.lookup("jdbc/sampleDS");

在这种情况下,我可以使用属性为
use java context=“true”
和JNDI name
java:/…
java:jboss/…
的数据源。持久化单元也不需要前缀
java:///code>和
java:jboss/

关键是
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>

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

请注意,为了确保这些资源可用,它们应该与
web.xml
中的
resource ref
一起使用。这将把它们从全局上下文或应用程序上下文移动到
java:comp/env
,为其提供一个标准的JNDI名称。例如,对于TOME,将其放在resources.xml中可以使持久化单元和
@Resource
标记可以使用它,但不能放在
java:comp/env

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