包含以下内容的 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/