can't get DB Connection using JNDI datasource on JBoss
Solution 1
Figured it out:
The culprit was this in hedgehogdb-ds.xml :
<security-domain>HsqlDbRealm</security-domain>
HsqlDbRealm was configured for a different DS & was causing the connection to fail.
Solution 2
it's also possible to in -ds.xml use < application-managed-security / > instead of < security-domain >, at lease in Jboss6
Dana
Currently on a Rails team with a focus on UI 'cause I'm the JS girl. Will rewrite your app in React/Redux when you're not watching. Loves NodeJS and Javascript. Assistant Organiser/Mentor with NodeGirls Brisbane.
Updated on July 19, 2022Comments
-
Dana almost 2 years
I'm studying how to build java webapps for JBossAS 5.1.0 and I'm trying to build a very basic jsp web app on JBossAS5 using a JNDI datasource for data access.
When trying to open a connection I get this 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)
The datasource is deployed ok, I can see it in the jmx-console & the database files are getting created ok.
Java code in question where the exception is thrown:
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>
This is my first time in this environment and I suspect that I'm missing something really basic.
-
Dana almost 15 yearsfile - odd, none of the examples I've seen use that, it might be required for the jdbc DriverManager style of connection, changing it caused more exceptions