Java 数据源的可移植JNDI名称
我有一个带有字段的EJBJava 数据源的可移植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/开头。同时,玻璃鱼不喜欢符号“:
@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 namejava:/…
或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/tomcatcontext.xml,对此我目前一无所知