我正在研究如何为JBossAS 5.1.0构建java webapps,我正在尝试使用JNDI数据源在JBossAS5上构建一个非常基本的jsp web应用程序来进行数据访问。
尝试打开连接时,我遇到了这个例外:
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>
这是我第一次来到这个环境中,我怀疑自己错过了一些非常基本的东西。
答案 0 :(得分:1)
也可以在-ds.xml中使用&lt; application-managed-security /&gt;而不是&lt;安全域&gt;,至少在Jboss6
答案 1 :(得分:0)
查看您的代码,看起来您正确获取了DataSource - 否则它将为null。因此,当您尝试建立连接时会出现问题。
查看HSQLDB docs,您的网址似乎需要“文件”组件:
jdbc:hsqldb:file:${jboss.server.data.dir}${/}hypersonic${/}hedgehogDB
并且,作为一般编码注释,(1)使用标准日志包,而不是本地“日志”方法,以及(2)在记录异常时,使用记录器调用(Log4J和Commons Logging都支持) ,可能是其他人)将异常作为参数(以便获得完整的堆栈跟踪)。
答案 2 :(得分:0)
想出来:
罪魁祸首是hedgehogdb-ds.xml:
<security-domain>HsqlDbRealm</security-domain>
HsqlDbRealm配置了不同的DS&amp;导致连接失败。