не удается получить соединение с БД с использованием источника данных JNDI на JBoss

Я изучаю, как создавать веб-приложения java для JBossAS 5.1.0, и я пытаюсь создать очень простое веб-приложение jsp на JBossAS5, используя источник данных JNDI для доступа к данным.

При попытке открыть соединение я получаю исключение:

21:42:52,834 ERROR [STDERR] Cannot get connection: org.jboss.util.NestedSQLException:
Unable to get managed connection for hedgehogDB; - nested throwable:
(javax.resource.ResourceException: Unable to get managed connection for hedgehogDB)

Источник данных развернут нормально, я вижу его в jmx-console, и файлы базы данных создаются нормально.

Рассматриваемый код Java, в котором выбрасывается исключение:

static public Connection getHedgehogConnection()
{
    Connection result = null;
    try 
    {
        String DS_Context = "java:comp/env/jdbc/hedgehogDB";

        Context initialContext = new InitialContext();

        if ( initialContext == null)
            log("JNDI problem. Cannot get InitialContext.");

        DataSource datasource = (DataSource)initialContext.lookup(DS_Context);

        if (datasource != null)
            result = datasource.getConnection();
        else
            log("Failed: datasource was null");
    }
    catch(Exception ex)
    {
        log("Cannot get connection: " + ex);
    }

    return result;
}

web.xml:

<web-app>
    <resource-ref>
    <res-ref-name>jdbc/hedgehogDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
</web-app>

jboss-web.xml:

<jboss-web>
    <resource-ref>
        <res-ref-name>jdbc/hedgehogDB</res-ref-name>
        <jndi-name>java:/hedgehogDB</jndi-name>
    </resource-ref>
</jboss-web>

hedgehogdb-ds.xml

<datasources>
   <local-tx-datasource>
      <jndi-name>hedgehogDB</jndi-name>
      <connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}hedgehogDB</connection-url>
      <driver-class>org.hsqldb.jdbcDriver</driver-class>
      <user-name>sa</user-name>
      <password></password>
      <min-pool-size>5</min-pool-size>
      <max-pool-size>20</max-pool-size>
      <idle-timeout-minutes>0</idle-timeout-minutes>
      <track-statements/>
      <security-domain>HsqlDbRealm</security-domain>
      <prepared-statement-cache-size>32</prepared-statement-cache-size>
      <metadata>
         <type-mapping>Hypersonic SQL</type-mapping>
      </metadata>
      <depends>jboss:service=Hypersonic,database=hedgehogDB</depends>
   </local-tx-datasource>

   <mbean code="org.jboss.jdbc.HypersonicDatabase"
     name="jboss:service=Hypersonic,database=hedgehogDB">
     <attribute name="Database">hedgehogDB</attribute>
     <attribute name="InProcessMode">true</attribute>
   </mbean>

</datasources>

Я впервые в этой среде, и я подозреваю, что мне не хватает чего-то действительно простого.


person Dana    schedule 05.07.2009    source источник


Ответы (3)


также можно в -ds.xml использовать ‹application-managed-security /> вместо‹ security-domain>, по запросу в Jboss6

person zhimapi    schedule 15.04.2011

Глядя на ваш код, кажется, что вы правильно получили DataSource - в противном случае он был бы нулевым. Итак, проблема возникает, когда вы пытаетесь установить соединение.

Глядя на документы HSQLDB, кажется, что вашему URL-адресу нужен «файловый» компонент:

jdbc:hsqldb:file:${jboss.server.data.dir}${/}hypersonic${/}hedgehogDB

И, как общий комментарий по кодированию, (1) используйте стандартный пакет ведения журнала, а не доморощенный метод "журнала", и (2) при регистрации исключения используйте вызов журнала (поддерживается как Log4J, так и Commons Logging, возможно, другими ), который принимает исключение в качестве параметра (так что вы получите полную трассировку стека).

person kdgregory    schedule 05.07.2009
comment
file - странно, ни один из примеров, которые я видел, не использовал это, он может потребоваться для стиля подключения jdbc DriverManager, его изменение вызвало больше исключений - person Dana; 06.07.2009

Догадаться:

Причина заключалась в следующем в hedgehogdb-ds.xml:

<security-domain>HsqlDbRealm</security-domain>

HsqlDbRealm был настроен для другого DS и приводил к сбою соединения.

person Dana    schedule 06.07.2009