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

时间:2015-12-23 12:05:24

标签: java java-ee jndi wildfly

具有以下内容的EAR:
META-INF / MANIFEST.MF
META-INF / application.xml中
META-INF / GlassFish的-resources.xml中
META-INF / wildfly-ds.xml中
actionbazaar - 第三章 - client.jar中
actionbazaar,第3章,ejb.jar
actionbazaar-chapter3-web.war

无法在WildFly 9中部署,但例外情况为java.lang.RuntimeException: WFLYNAM0030: Illegal context in name: 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。但我不确定这里有什么问题。 请解释这里有什么问题。

1 个答案:

答案 0 :(得分:2)

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,因为规范中的示例暗示了这一点。