环境:Resin2.1.13+JDK1.4+MySQL5.0.27
产生过程:
resin.conf中的连接池配置
<resource-ref>
  <res-ref-name>jdbc/mydb</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <init-param driver-name="com.mysql.jdbc.Driver"/>
  <init-param url="jdbc:mysql://localhost:3306/mydb?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=GBK"/>
  <init-param user="javadb"/>
  <init-param password="123456"/>
  <init-param max-connections="20"/>
  <init-param max-idle-time="30"/>
</resource-ref>我写了一个DAOFactory类,来生成数据连接池DAO
这个类在servlet中可以工作。例如在Servlet中com.test.dao.IDAO dao = com.test.dao.DAOFactory
.getInstance().getDAOImp("pooldaoimp");
dao.setConnectionURL("java:comp/env/jdbc/mydb");//从数据库中获得数据
conn = dao.getConnection();
stmt = conn.createStatement();
String   strSql   =   "select   *   from  t_sysconfig";   
rs   =   stmt.executeQuery(strSql);   
while(rs.next())   
{   
  System.out.print(rs.getString(2)+" = ");   
  System.out.println(rs.getString(3));
}   
 rs.close();   
 stmt.close();
 conn.close();
如上代码可以得到数据的
上面dao.getConnection();这句就是调用下面的代码
得到数据源,然后产生Connection的代码
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(this.m_URL);
if(ds==null)
throw new Exception(this.m_URL+" is an unknown DataSource");
con = ds.getConnection();但是我的设计是,一个Servlet初始化Init()过程中,作系统初始化工作。其间调用一个类AppParamterProvider[从数据库中查询处系统参数]。在这个类中调用DAOFactory,得到数据源来检索数据库。现象:
在这种情况下,既servlet->AppParameterProvider->DAOFactory->dao 就会抛出javax.naming.NameNotFoundException: java:comp/env/java/mydb
异常堆栈,说DataSource ds = (DataSource) ctx.lookup(this.m_URL);这句开始抛的!而Servlet->DAOFactory->dao就正确执行求解过程:
在网上找了一下,有人遇到过,但是无解!
修改为Context   envContext   =   (Context)   new   InitialContext().lookup("java:comp/env/jdbc/mydb");   
现象依然一样!以上设计在Tomcat4.X and 5.1.X中执行是没有问题的!在Resin2.1.13下,出现问题!难以理解。不知做何解?讨教!谢谢!