【问题标题】:JNDI @Resource not found in Wildfly 10在 Wildfly 10 中找不到 JNDI @Resource
【发布时间】:2016-06-29 10:25:49
【问题描述】:

我正在尝试通过 Wildfly 10 上 RestEasy Web 服务中的 @Resource 注释访问 JNDI Oracle 数据源,但返回 null。它适用于 InitialContext.lookup 方法。这是我的java代码:

@Path("/rest")
public class ServiceTest {
    @Resource(name = "jdbc/OracleDS") DataSource source1;
    @Resource(name = "java:/jdbc/OracleDS") DataSource source2;
    @Resource(lookup = "java:/jdbc/OracleDS") DataSource source3;

    @GET
    @Path("/test")
    @Produces(MediaType.TEXT_PLAIN)
    public String testJNDI () {
        try {
            javax.naming.Context initCtx = new InitialContext();
            DataSource source4 = (DataSource)initCtx.lookup("java:/jdbc/OracleDS");
            initCtx.close();
            return "" + source1 + " / " + source2 + " / " + source3 + " / " + source4;
        } catch (Exception error) {
            e.printStackTrace();
    }
}

这是我的standalone.xml 数据源定义:

<datasource jta="true" jndi-name="java:/jdbc/OracleDS" pool-name="OracleDS" enabled="true" use-ccm="true" statistics-enabled="true">
   <connection-url>
       jdbc:oracle:thin:@192.168.10.20:1521:log
   </connection-url>
   <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
   <driver>oracle</driver>
   <pool>
       <initial-pool-size>1</initial-pool-size>
       <max-pool-size>10</max-pool-size>
   </pool>
   <security>
       <user-name>user</user-name>
       <password>passw</password>
   </security>
   <validation>
       <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
       <background-validation>true</background-validation>
       <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
       <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
   </validation>
   <timeout>
        <blocking-timeout-millis>30000</blocking-timeout-millis>
        <idle-timeout-minutes>15</idle-timeout-minutes>
        <query-timeout>300</query-timeout>
   </timeout>
   <statement>
       <track-statements>nowarn</track-statements>
   </statement>
</datasource>

这是我的 module.xml 代码:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.oracle">
    <resources>
        <resource-root path="ojdbc6.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

服务输出是这样的:

null / null / null / org.jboss.as.connector.subsystems.datasources.WildFlyDataSource@4b1881

为什么 source4 会创建资源而其他人不会?我预计至少 source3 会像 source4。 @Resource 定义有问题吗?

谢谢

【问题讨论】:

标签: jndi wildfly-10


【解决方案1】:

确保您的 WEB-INF 目录中有 beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

This will enable CDI in your application.

【讨论】:

    猜你喜欢
    • 2015-04-21
    • 2015-12-01
    • 2017-02-13
    • 2016-12-13
    • 1970-01-01
    • 2014-06-10
    • 2015-11-15
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多