ne pouvez pas obtenir DB Connexion en utilisant JNDI de la source de données sur JBoss
Je suis en train d'étudier comment construire java webapps pour JBossAS 5.1.0 et je suis en train de construire une base très jsp web app sur JBossAS5 à l'aide d'une datasource JNDI pour l'accès aux données.
Lorsque vous essayez d'ouvrir une connexion, j'obtiens cette exception:
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)
La source de données est déployé ok, je peux le voir dans le jmx-console & la base de données de fichiers sont créés ok.
Code Java en question où l'exception est levée:
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>
C'est ma première fois dans ce milieu et je soupçonne que je suis absent quelque chose de vraiment basique.
Vous devez vous connecter pour publier un commentaire.
il est également possible d'en ds.xml utilisez < application de gestion de la sécurité /> au lieu de < la sécurité de domaine >, à la location dans Jboss6
En regardant ton code, il semble que vous obtenez la source de données correctement, sinon elle serait nulle. Si le problème se produit lorsque vous essayez d'obtenir la connexion.
À la recherche à la HSQLDB docs, il semble que votre URL a besoin d'un "fichier" composant:
Et, en tant que général de codage commentaire, (1) l'utilisation d'un standard de journaux paquet, plutôt que d'une " maison "journal" la méthode, et (2) lors de l'enregistrement d'une exception, l'utilisation de l'enregistreur d'appels (prise en charge par Log4J et Commons Logging, et probablement d'autres) qui prend une exception comme un paramètre (de sorte que vous obtenez le plein de trace de pile).
Compris:
Le coupable était présent dans hedgehogdb-ds.xml :
HsqlDbRealm a été configuré pour un autre DS & était la cause de l'échec de la connexion.