Topic: tomcat5配置jndi的问题 (jdbc:comp is not bound in this Context)

  Print this page

1.tomcat5配置jndi的问题 (jdbc:comp is not bound in this Context) Copy to clipboard
Posted by: returner
Posted on: 2004-11-09 22:42

tomcat5配置jndi的问题;斑竹高手们来看看啊,情况紧急!!!!!!!!10万分感谢

这个问题我是搜索出来的,我也遇到了同样的问题,希望高手给于关注:
http://www.cjsdn.net/post/view?bid=7&id=95089&tpg=1&ppg=1&sty=1&age=0#95089

本人的环境是Eclipse2.1.2+tomcat5.0+lomboz+mysql
$tomcat_home$/comm/lib下加入jndi.jar,mysql+jdbc驱动。
在tomcat的Sever.xml中的〈/Engine>前加入以下内容:
<Context path="/testhibernate" docbase="testhibernate" debug="5" reload="true" crossContext="true">
<Resource name="jdbc/hibernate" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/hibernate">
<parameter>
<name>factory</name>
<values>org.apache.commons.dbcp.BasicDataSourceFactory</values>
</parameter>
<parameter>
<name>url</name>
<values>jdbc:mysql://localhost:3306/shop</values>
</parameter>
<parameter>
<name>driverclassname</name>
<values>com.mysql.jdbc.Driver</values>
</parameter>
<parameter>
<name>username</name>
<values>root</values>
</parameter>
<parameter>
<name>password</name>
<values>root</values>
</parameter>
<parameter>
<name>maxWait</name>
<values>3000</values>
</parameter>
<parameter>
<name>maxIdle</name>
<values>10</values>
</parameter>
<parameter>
<name>maxActive</name>
<values>100</values>
</parameter>
</ResourceParams>
</Context>
在Webapps的Web.xml中加入以下内容:
<resource-ref>
<description>connectDB test</description>
<res-ref-name>jdbc/hibernate</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
测试代码如下:
package com.yzs.test.hibernate;

import java.io.IOException;
import java.io.PrintWriter;

import javax.naming.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.*;
import java.sql.*;

/**
* @author yzs
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class testservlet extends HttpServlet {

protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//TODO Method stub generated by Lomboz
Context initctx=null;
Context ctx=null;
DataSource ds=null;
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
response.setContentType("text/html");
PrintWriter out=response.getWriter();

try {
initctx=new InitialContext();
ctx= (Context) initctx.lookup("jdbc:comp/env");
ds=(DataSource)ctx.lookup("jdbc/hibernate");
if(ds==null) throw new NamingException("no database");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
conn=ds.getConnection();
stmt=conn.createStatement();
rs=stmt.executeQuery("select * from brand");
rs.next();
out.println("<html>");
out.println("<head");
out.println("<title>test jndi</title>");
out.println("</head>");
out.println("<body>");
out.println(rs.getString("name"));
} catch (SQLException e4) {
// TODO Auto-generated catch block
e4.printStackTrace();
}
}
}

出现了Name jdbc:comp is not bound in this Context的问题,请各位大侠
帮忙看一下问题出在哪里。

2.Re:tomcat5配置jndi的问题 [Re: returner] Copy to clipboard
Posted by: returner
Posted on: 2004-11-09 22:45

另外,tomcat5中的<context>是个单独的xml文件
那么还需要把它的内容拷贝到server.xml文件中么
急需答案。

建议斑竹,给参与的人加分!!!!!!!!!

3.Re:tomcat5配置jndi的问题 [Re: returner] Copy to clipboard
Posted by: 牛老板
Posted on: 2004-11-10 08:53

我"觉得"是不用copy到server.xml中的.

可以再看看tomcat的How_to .

4.Re:tomcat5配置jndi的问题;斑竹高手们来看看啊,情况紧急!!!!!!!!10万分感谢 [Re: returner] Copy to clipboard
Posted by: lot1
Posted on: 2004-11-10 18:05

the hint is very clear, this line is wrong:
ctx= (Context) initctx.lookup("jdbc:comp/env");

should be:
ctx= (Context) initctx.lookup("java:comp/env");

customer jndi names are mounted to java:comp/env, this is a standard.

5.Re:tomcat5配置jndi的问题;斑竹高手们来看看啊,情况紧急!!!!!!!!10万分感谢 [Re: returner] Copy to clipboard
Posted by: returner
Posted on: 2004-11-10 22:30

谢谢楼上。
但是我自己的程序:
environment = new Properties( );
environment.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.naming.java.javaURLContextFactory");
environment.put(Context.PROVIDER_URL,"localhost:8080");
initCtx = new InitialContext( environment );
ctx = (Context) initCtx.lookup("java:comp/env");
sessionFactory= (SessionFactory) initCtx.lookup("jdbc/mycat");

确实出现这个问题的:
javax.naming.NameNotFoundException: Name java:comp is not bound in this Context

6.Re:tomcat5配置jndi的问题 [Re: returner] Copy to clipboard
Posted by: lot1
Posted on: 2004-11-10 23:52

Why you lookup SessionFactory, instead of datasource?

try this:
initctx=new InitialContext();
ctx= (Context) initctx.lookup("java:comp/env");
ds=(DataSource)ctx.lookup("jdbc/hibernate");

And move your resource defintion outside of your Context - move it to default Context and try.



or post your server.xml here.

If still cannot work, reverse to the original and make changes step by step.



tomcat jndi is just a gift, dont take it so serious like commercial product.

{ Please consider using the Editing function rather than posting multiple replies in a short period of time. }


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923