Не удается подключиться к источнику данных XA с помощью JNDI - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь подключить приложение java spring batch к источнику данных с помощью JNDI. Мое приложение требует источника данных XA. Я попытался настроить обычный источник данных, используя приведенный ниже код, и он, кажется, подключился к нему отлично Но когда я пытаюсь изменить класс драйвера на XA (oracle .jdb c .xa.client.OracleXADataSource), он, кажется, не подключается. Я попытался изменить тип на javax. sql .XADataSource. Может кто-нибудь сказать мне, если мне нужно установить дополнительные свойства для подключения XA?

<Resource name="jdbc/DS-ref" 
                  auth="Container"
                  type="javax.sql.DataSource"
                  username="user"
                  password="password"
                  driverClassName="oracle.jdbc.OracleDriver"
                  url="jdbc:oracle:thin:@xxx"
                  initialSize="20"
                  maxWaitMillis="15000"
                  maxTotal="75"
                  maxIdle="20"
                  testOnBorrow="true"
                  validationQuery="select 1 from dual" /> 

Если я изменяю код в контексте. xml, я получаю сообщение об ошибке «Name [jdbc / DS-ref] is не связан в этом контексте. Невозможно найти [jdbc]. "

Context. xml

<Resource name="jdbc/DS-ref" 
              auth="Container"
              type="javax.sql.XADataSource"
              username="user"
              password="password"
             driverClassName="oracle.jdbc.xa.client.OracleXADataSource"
              url="jdbc:oracle:thin:@xxx"
              initialSize="20"
              maxWaitMillis="15000"
              maxTotal="75"
              maxIdle="20"
              testOnBorrow="true"
              validationQuery="select 1 from dual" /> 

web. xml

<resource-ref id="ResourceRef_CrcDataSource">
    <description></description>
    <res-ref-name>jdbc/DS-ref</res-ref-name>
    <res-type>javax.sql.XADataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>

источник данных. java

 // Use JNDI via Spring
        Object tmpDs;
        setResourceRef(true); // Make "java:comp/env/" prefix optional
        try {
            log.debug("pJndiName" +pJndiName);
            tmpDs = lookup(pJndiName, DataSource.class);
            log.debug("tmpDs"+tmpDs);
        }
        catch (Exception e) {

            throw new RuntimeException("Error looking up DataSource via JNDI. jndiName: " + pJndiName, e);
        }

         if (null == tmpDs) {
            throw new RuntimeException("DataSource JNDI lookup returned null. jndiName: " + pJndiName);
        }
        if (!DataSource.class.isInstance(tmpDs)) {
            throw new RuntimeException("Illegal class returned by DataSource JNDI lookup. " + "jndiName: "
                    + pJndiName + ", returned class: " + tmpDs.getClass().getName());
        }
        return (DataSource) tmpDs;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...