javax.naming.NameNotFoundException: в WebSphere Liberty - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь использовать источник данных, настроенный как JNDI на WebSphere Application Server Liberty, однако я получаю следующую ошибку:

javax.naming.NameNotFoundException: java:comp/env/jdbc/myapp/master

Конфигурация для источника данных на сервере приложений Websphere:

<dataSource commitOrRollbackOnCleanup="commit" id="jdbc/myapp/master" jdbcDriverRef="ojdbc7" jndiName="jdbc/myapp/master">
        <properties.oracle URL="jdbc:oracle:thin:@127.0.0.1:1521:xe" oracleRACXARecoveryDelay="0" password="xxxxxxxx" user="app_master"> 
         </properties.oracle>
         <connectionManager maxPoolSize="50"/>
    </dataSource>

Соединение с базой данных осуществляется через этот код внутри сервлета (jndi = jdbc / myapp / master):

Context initCtx = new InitialContext();
            Context envCtx = (Context) initCtx.lookup("java:comp/env");
            DataSource ds = (DataSource) envCtx.lookup(jndi);
            setConnection(ds.getConnection());
            System.out.println(getConnection().toString() );    

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 05 марта 2019

java:comp/env требует ссылки на ресурс.У вас есть следующие варианты решения:

1) Использовать внедрение ресурсов - поэтому вместо того, чтобы искать его напрямую (через InitialContext), просто добавьте следующее в свой класс сервлета

@Resource(lookup = "jdbc/myapp/master", name="jdbc/myapp/master")
private DataSource dataSource;

2)Определите ссылку на ресурс в вашем web.xml как

<resource-ref>
   <description>my datasource</description>
   <res-ref-name>jdbc/myapp/master</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>CONTAINER</res-auth>
</resource-ref>

, или вы можете создать просто ссылку также с помощью аннотации в коде.

3) Используйте прямой JNDI, без ссылки (не Java EE)лучшая практика)

 DataSource ds = (DataSource) initCtx.lookup("jdbc/myapp/master");
1 голос
/ 05 марта 2019

В дополнение к тому, что уже указано в другом ответе, вы также должны убедиться, что вы включили функцию jndi-1.0.Это частая причина, по которой поиски не работают в Liberty.

Например, в server.xml,

<featureManager>
  <feature>jdbc-4.2</feature>
  <feature>jndi-1.0</feature>
  ... other features that you use
</featureManager>

И если этого тоже недостаточно для его работы, выТакже следует проверить конфигурацию ресурсов, от которых зависит источник данных, например, jdbcDriver с идентификатором ojdbc7, на который ссылается предоставленный вами фрагмент конфигурации.

...