Ошибка инициализации источника данных на сервере профиля свободы

Я пытаюсь настроить DataSource на сервере профиля Liberty, но я получаю NullPointerException (в моей переменной ds ниже), когда мой код пытается его использовать.

Соответствующий код и server.xml записи приведены ниже. Интересно, что если я изменю jndiName на java:comp/env/jdbc/Oracle, я получу IllegalArgumentException при запуске сервера, но с приведенной ниже конфигурацией он даже не пытается активировать DataSource...

public abstract class DAOBase {
    //@Resource(name = "jdbc/Oracle", type = javax.sql.DataSource.class, shareable = true, authenticationType = AuthenticationType.CONTAINER)
    @Resource(lookup = "jdbc/Oracle")
    private DataSource ds;


protected Connection getConnection() throws SQLException {
    Connection conn = ds.getConnection();
    return conn;
}

Мой server.xml конфиг:

<featureManager>
    <feature>jsp-2.2</feature>
    <feature>jaxrs-1.1</feature>
    <feature>localConnector-1.0</feature>
    <feature>appSecurity-2.0</feature>
    <feature>jpa-2.0</feature>
    <feature>jdbc-4.0</feature>
    <feature>jndi-1.0</feature>
</featureManager>

<library id="OracleJDBC_ID">
    <fileset dir="C:\src\main\lib" includes="ojdbc6.jar"/>
</library>
<jdbcDriver id="OracleDriver" libraryRef="OracleJDBC_ID"/>

<dataSource jdbcDriverRef="OracleDriver" jndiName="jdbc/Oracle">
    <properties.oracle URL="jdbc:oracle:thin:@ldap://oid:***/opl***,cn=OracleContext,dc=****,dc=com" password="****" user="*****"/>
</dataSource>

Ошибка в журнале:

[ERROR   ] CWWKE0701E: [com.ibm.ws.jdbc.dataSource(200)] The modified method has
thrown an exception Bundle:com.ibm.ws.jdbc(id=82) java.lang.IllegalArgumentException: 
J2CA8011E: Value java:comp/env/jdbc/Oracle is not supported for jndiName on dataSource
    at com.ibm.ws.jdbc.DataSourceService.activate(DataSourceService.java:209)
    at [internal classes]

РЕДАКТИРОВАТЬ: код находится в базовом классе для нашего уровня доступа к данным. Мы вызываем это в веб-службе RESTful через очень простую инициализацию:

AuditDAO auditDAO = new AuditDAO();

person James Hutchinson    schedule 19.11.2014    source источник
comment
Использование jndiName="java:comp/..." неверно, как предполагает исключение IllegalArgumentException. Если бы @Resource работало, он отвечал бы за создание java:comp/env/jdbc/Oracle, а затем привязка по умолчанию была бы jdbc/Oracle, которая соответствовала бы вашему jndiName. Однако @Resource, похоже, не работает. Какой класс содержит @Resource и как вы создаете экземпляры этого класса?   -  person Brett Kail    schedule 19.11.2014


Ответы (1)


@Resource не будет работать в POJO, если вы не активируете CDI. Попробуйте следующее:

  • добавьте файл beans.xml в папку WEB-INF и добавьте функцию CDI
<feature>cdi-1.0</feature>
  • внедрить аудитDAO в свой веб-сервис, используя @Inject AuditDAO auditDAO
  • используйте следующую ссылку в дао
   @Resource(name="jdbc/Oracle", lookup = "jdbc/Oracle")
   private DataSource ds;
person Gas    schedule 19.11.2014
comment
Это сработало хорошо, большое спасибо, но у меня есть еще один вопрос для более сложного сценария: stackoverflow.com/questions/27044253/ - person James Hutchinson; 20.11.2014