我把程序移到了JAVA文件中,执行到这句的时候 Context envCtx = (Context)ctx.lookup("java:comp/env");就出现了下面的错误: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 请问这是什么意思??
为什么我使用普通的数据源方式连接数据库,oracle的驱程就可以找到,而换成连接池却不可以了呢?
请高手解惑~~!@@
一定要重启 保留tomcat\common\lib下的驱动
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
请问这是什么意思??
这样不会出现问题的
package struts;import javax.naming.*;
import javax.sql.*;
import java.sql.*;
public class DBTest {
public static void main(String[] args) {
DBTest test =new DBTest();
test.init();
System.out.println(test.getFoo());
}
public void init() {
try{
Context ctx = new InitialContext();
String initial = System.getProperty("javax.naming.factory.initial");
if(ctx == null )
throw new Exception("Boom - No Context");
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
if (ds != null) {
Connection conn = ds.getConnection();
if(conn != null) {
foo = "Got Connection "+conn.toString();
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery("select * from jiveid");
if(rst.next()) {
foo=rst.getString(2)+initial+"mmmm";
bar=rst.getInt(1);
}
conn.close();
}
}
}catch(Exception e) {
e.printStackTrace();
}
}
public String getFoo() { return foo; }
public int getBar() { return bar;}
String foo = "";
int bar = -1;
}
一调试就出现上面的错,这样的话在其它类中也无法引用:(
什么意思?
去掉不行
但把这个类文件做成一个bean通过jsp调用就可以了,就是因为tomcat肯定对这个东西做了定义~!所以JSP页才不报错.
总之在类中使用tomcat数据源,就存在这个问题~!
http://www.csdn.net/Develop/read_article.asp?id=25942
只要是tomcat环境应用程序,你的调用就没有问题
都没有关系跟框架无关,只跟运行环境有关