posts - 189,comments - 115,trackbacks - 0
jboss数据源配置问题

在使用JBOSS数据源的时候出现,版本为jboss-4.0.4RC1,使用default配置,添加一个mysql的数据源

1.将mysql包mysql-connector-java-5.0.0-beta-bin.jar拷到.\default\lib下

2.环境变量设置了JAVA_HOME和JBOSS_HOME

3.修改mysql-ds.xml到deploy目录,内容为:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <connection-url>jdbc:mysql://127.0.0.1:3306/testdb</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>root</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

4.在JSP中进行测试:

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="javax.sql.DataSource" %>
<%@ page import="javax.naming.*" %>
<html>
<head>
<title>
index
</title>
</head>
<body bgcolor="#ffffff">
<%
   DataSource datasource = null;
try
   {
     InitialContext initialContext = new InitialContext();
     datasource = (DataSource) initialContext.lookup("java:/MySqlDS");
     if (datasource == null) {
       out.print("null");
     }else {
       java.sql.Connection con = datasource.getConnection();
       java.sql.ResultSet rs = con.createStatement().executeQuery("select * from MYTABLE");
       while (rs.next()) {
         out.print("<BR>---------");
       }
     }
}catch (Exception e) {
  out.print("" + e);
  e.printStackTrace();
}
%>

5.访问该JSP的时候总是出现:

javax.naming.NameNotFoundException: MySqlDS not bound

JNDI名换成了java:comp/env/jdbc/MySqlDS,java:comp/env/MySqlDS, jdbc/MySqlDS, MySqlDS 这些都不行,都是出现没有绑定的错误.

这个问题困扰了我两天,到处搜索相关JBOSS下的数据源配置,找出一大把,结果一看全都是一样的文章,只是在不同的网站出现而已,我不得不感慨:天下文章一大抄!! 还到各大论坛发贴子, 未果, 都不知道那些人到底有没有真正的配置过这些东西, 不过在网上折腾了两天还是找到一点点线索, 通过反复的穷举试的测试, 终于解决了问题.(本来写这个贴子是为了贴出来问大家的,不过在写的过程中解决了问题,所以就一并写下来, 以让后来者不必写这些弯路)

在网上的贴子都是说配置*-ds.xml文件时, JBOSS使用的是本地JNDI, 也就是说在JBOSS容器里才能看到和使用这个JNDI, 按这种说法, 我在JSP里查找那个数据库就没有问题呀, 不明白!

即然JBOSS提供了本地的JNDI, 那也可以设成和Weblogic一样的那种JNDI, 不让JBOSS加上那些莫名其妙的前缀了, 因此在mysql-ds.xml的加入<use-java-context>false</use-java-context><jndi-name>MySqlDS</jndi-name>下面, 这样就可以直接通过MySqlDS做为JNDI名来查寻这个数据源了,JSP代码就改为initialContext.lookup("MySqlDS");

mysql-ds.xml文件既为:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <use-java-context>false</use-java-context>
    <connection-url>jdbc:mysql://127.0.0.1:3306/testdb</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>root</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

还有就是通过现在的方式是可以查寻了, 不过我还不知道使用java:/前缀来查寻数据源的方式到底是什么原因导致错误........

...以上方式是配置Global JNDI, 最后我才发现自已犯了一个白痴错误: 我把..\default\lib下的jboss-*.jar文件拷贝到了我的WAR包的WEB-INF\lib中去了. 在运行过程中用的就是这个lib中的jar包了, 把这些包去掉去加上java:/前缀就可以正常查找本地JNDI了. 使用自已WAR包中的jboss-*.jar包可能会导致ClassLoader的变化, 不能找到相应的容器中的JNDI配置吧.纠缠我几三天的麻烦摆平了,我心释然~~~


posted on 2006-04-14 10:03 MEYE 阅读(960) 评论(0)  编辑  收藏 所属分类: JAVA

只有注册用户登录后才能发表评论。


网站导航: