JNDI的问题--既然已经绑定了,为何会找不到

poorman1 2002-07-28 07:30:59
以下的两个代码分别是用来绑定数据源和查找数据源的
运行绑定数据源的代码后再运行查找数据源的代码会提示:javax.naming.NameNotFoundException; remaining name '"jdbc/test"'
可是再次运行绑定数据源的代码来测试时,就会提示:javax.naming.NameAlreadyBoundException: jdbc/test

既然已经被绑定了为何会找不到呢
本程序的IDE是JBUILDER7,APPLICATION SERVER:WEBSPHERE
请各位帮忙看看~~谢谢


绑定数据源的代码:

import COM.ibm.db2.jdbc.DB2DataSource;

import java.util.Hashtable;
import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.spi.*;

import java.sql.*;
import javax.sql.DataSource;

public class UsingJdbc {

public UsingJdbc() {
}

public static void main(String argv[]){
String databaseName = "test";
String login = "db2amdin";
String password = "123456";
String description = "Testing DB2 DataSource";

String dsName = "jdbc/test";

try{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
Context cxt = new InitialContext(env);

DB2DataSource ds = new DB2DataSource();
ds.setDatabaseName(databaseName);
ds.setDescription(description);
//ds.setUser(login);
//ds.setPassword(password);

cxt.bind(dsName,ds);
cxt.close();

}catch(Exception e){
e.printStackTrace();
}
}
}


查找数据源的代码:

import COM.ibm.db2.jdbc.DB2DataSource;

import java.util.Hashtable;
import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.spi.*;

import java.sql.*;
import javax.sql.DataSource;

public class UsingJdbc2 {

public UsingJdbc2() {
}

public static void main(String argv[]){

Connection con = null;

try {

String dsName = "jdbc/test";


Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.FSContextFactory");
Context ctx = new InitialContext(env);
DataSource ds = (DataSource)ctx.lookup(dsName);

con = ds.getConnection("db2admin","123456");

}catch(SQLException ex){
while (ex != null) {
System.out.println("Message: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("ErrorCode: " + ex.getErrorCode());
ex = ex.getNextException();
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(con != null)
con.close();
}catch(SQLException ex){
System.out.println("\nERROR:----- SQLException -----\n");
System.out.println("Message: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("ErrorCode: " + ex.getErrorCode());
}
}
}
}

...全文
84 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
walkcamel 2002-07-30
  • 打赏
  • 举报
回复
是不是你机器上有开防火墙?
alink 2002-07-30
  • 打赏
  • 举报
回复
贴异常出来看看?
poorman1 2002-07-30
  • 打赏
  • 举报
回复
难道就这么困难吗
lifeis 2002-07-30
  • 打赏
  • 举报
回复
在APP SERVER上建立DATA SOURCE给出的名称,而不是数据库的名称。
你在APP SERVER上把数据源起名叫jdbc/test了吗???
lifeis 2002-07-30
  • 打赏
  • 举报
回复
(DataSource)ctx.lookup(dsName);
查找的应该是JNDI的名称,就是你在APP SERVER上建立的时候给出的名称。
Brain 2002-07-30
  • 打赏
  • 举报
回复
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
名字工厂的类指定不对
应该用WAS的类
不知道你WAS什么版本
4.0以下用
ht.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"com.ibm.ejs.ns.jndi.CNInitialContextFactory");
3.5.4以上用
ht.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");

版本的区分可能不大正确,总之:老一点的用前者,新的WAS用后者
wjmmml 2002-07-30
  • 打赏
  • 举报
回复
不用dsname直接用字符串。
poorman1 2002-07-29
  • 打赏
  • 举报
回复
只是小问题,大家帮帮忙吧
poorman1 2002-07-29
  • 打赏
  • 举报
回复
是程序太长了,大家没兴趣看???

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧