2016-06-29 2 views
0

Я пытаюсь получить доступ к источнику данных JNDI Oracle через @Resource-аннотацию в RestEasy webservice на Wildfly 10, но возвращается null. Он работает с методом InitialContext.lookup. Это мой Java-код:JNDI @Resource не найден в Wildfly 10

@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:

<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/[email protected]4b1881 

Почему source4 не найден ресурс, а другие нет? Я ожидал, что по крайней мере source3 будет похож на source4. Что-то не так в определении @Resource?

Благодаря

+0

кажется, что wildfly не обрабатывает аннотаций. У вас есть 'beans.xml' в вашем реестре WEB-INF? – fhofmann

+0

Нет, не знаю. Для чего? – user1151816

+0

[он включит CDI в вашем приложении] (https://docs.jboss.org/author/display/WFLY10/CDI+Reference) – fhofmann

ответ

1

Убедитесь, что вы имеете beans.xml в вашем WEB-INF директории.

<?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.

Смежные вопросы