java - 名称中的上下文非法 : java:app/jdbc/ActionBazaarDS

标签 java jakarta-ee jndi wildfly

包含以下内容的 EAR:
META-INF/MANIFEST.MF
META-INF/application.xml
META-INF/glassfish-resources.xml
META-INF/wildfly-ds.xml
actionbazaar-chapter3-client.jar
actionbazaar-chapter3-ejb.jar
actionbazaar-chapter3-web.war

无法在 WildFly 9 中部署,但出现以下异常:java.lang.RuntimeException: WFLYNAM0030: 名称中的上下文非法:java:app/jdbc/ActionBazaarDS"

文件 META-INF/wildfly-ds.xml 使用有问题的 JNDI 名称为应用程序配置数据源。

<?xml version="1.0" encoding="UTF-8"?>
<datasources xmlns="http://www.jboss.org/ironjacamar/schema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.jboss.org/ironjacamar/schema
        http://docs.jboss.org/ironjacamar/schema/datasources_1_1.xsd">
    <datasource enabled="true"
        jndi-name="java:app/jdbc/ActionBazaarDS"
        pool-name="Chapter3EmbeddedH2Pool">
        <connection-url>jdbc:h2:mem:chapter3 ;DB_CLOSE_DELAY=-1</connection-url>
        <driver>h2</driver>
    </datasource>
</datasources>

相同的 JNDI 名称适用于 GlassFIsh 4.1。但我不确定这里出了什么问题。 请解释一下这里出了什么问题。

最佳答案

wildfly-ds.xml 文件是一种主要为了向后兼容而存在的机制。 JNDI 名称应位于全局命名空间中,例如 java:jboss/jdbc/ActionBazaarDS。

任何符合 Java EE 7 的实现现在都允许您在标准部署描述符中配置数据源:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://xmlns.jcp.org/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd"
            version="7">
    <module>
        <java>actionbazaar-chapter3-client.jar</java>
    </module>
    <module>
        <ejb>actionbazaar-chapter3-ejb.jar</ejb>
    </module>
    <module>
        <web>
            <web-uri>actionbazaar-chapter3-web.war</web-uri>
            <context-root>/actionbazaar</context-root>
        </web>
    </module>
    <library-directory>lib</library-directory>
    <data-source>
        <name>java:app/jdbc/ActionBazaarDS</name>
        <url>jdbc:h2:mem:chapter3 ;DB_CLOSE_DELAY=-1</url>
        ... 
    </data-source>
</application>

这应该允许您在 java:app 命名空间中声明 DataSource,因为规范中的示例暗示了这一点。

关于java - 名称中的上下文非法 : java:app/jdbc/ActionBazaarDS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34435324/

相关文章:

jakarta-ee - Netbeans 上的 TableView 不存在异常

java - JBoss 无法启动,因为地址 localhost :1099 is already in use

java - 远程 RMI 注册表

java - @GenerationType.IDENTITY 失败超过 10

java - 以 Intent 开始新 Activity 会抛出可序列化的异常

java - 如何创建一个也处理原始 int 的 ParamConverter<Integer> ?

spring - 如何为 tomcat 6 及其部署的 webapps 正确配置 JNDI?

java - 无法导入内置的java类文件(javax.naming.ldap.SortControl)

java - 如何将日期时间字符串转换为 "yyyy-MM-dd' T'HH :mm:ss. SSSSSSSSSZ"

java - 如何从 servlet 设置或访问 Tomcat 中的 JspCompilationContext?