Я пытаюсь настроить 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();
jndiName="java:comp/..."
неверно, как предполагает исключение IllegalArgumentException. Если бы@Resource
работало, он отвечал бы за созданиеjava:comp/env/jdbc/Oracle
, а затем привязка по умолчанию была быjdbc/Oracle
, которая соответствовала бы вашему jndiName. Однако@Resource
, похоже, не работает. Какой класс содержит@Resource
и как вы создаете экземпляры этого класса? - person Brett Kail   schedule 19.11.2014