jndi绑定数据源得问题

razelan 2005-02-22 10:06:24
我想用jndi绑定sql2000得数据源,但程序运行抛出异常Can only bind References or Referenceable objects.看了以前得帖子也没什么头绪.请问如何解决这个问题
...全文
138 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
razelan 2005-02-22
上面不是说Can only bind References or Referenceable objects吗
为什么试图绑定数据源的时候不行呢
回复
lydong 2005-02-22
bind(java.lang.String name,java.lang.Object obj)

只能绑定一个对象(可以为空),而不能绑定References or Referenceable objects
回复
razelan 2005-02-22
Doing a bind with the logical name : jdbc/chidb
javax.naming.OperationNotSupportedException: Can only bind References or Referenceable objects
at com.sun.jndi.fscontext.RefFSContext.addObjectToBindings(RefFSContext.java:479)
at com.sun.jndi.fscontext.RefFSContext.bindObject(RefFSContext.java:337)
at com.sun.jndi.fscontext.RefFSContext.bind(RefFSContext.java:169)
at com.sun.jndi.fscontext.FSContext.bind(FSContext.java:167)
at javax.naming.InitialContext.bind(Unknown Source)
at testconn.DataSourceJNDI.bind(DataSourceJNDI.java:46)
at testconn.DataSourceJNDI.main(DataSourceJNDI.java:31)
Exception in thread "main"
回复
jFresH_MaN 2005-02-22
代码上看没什么问题啊
报错是哪里呢?
回复
razelan 2005-02-22
有几行注释是错的,关于oracle那几个,我就把代码改了一下忘记改注释了
回复
razelan 2005-02-22
环境eclipse,jdk150,sql2000,tomcat5.0,jndi1.2.1

import java.sql.*;

import javax.sql.*;
import javax.naming.*;
import javax.naming.spi.*;
import java.util.Hashtable;
import com.sun.jndi.fscontext.RefFSContextFactory;

public class DataSourceJNDI {
public static void main(String args[]) throws NamingException, SQLException {
// 初始化名称服务环境
Context ctx = null;
try {
Hashtable env = new Hashtable(5);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
env.put(Context.PROVIDER_URL, "file:JNDI");
ctx = new InitialContext(env);
} catch (NamingException ne) {
ne.printStackTrace();
}

bind(ctx, "jdbc/chidb");
lookup(ctx, "jdbc/chidb");

}
static void bind(Context ctx, String ln) throws NamingException,
SQLException {
// 创建一个OracleDataSource实例
org.apache.commons.dbcp.BasicDataSource bds = new org.apache.commons.dbcp.BasicDataSource();
bds.setDriverClassName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
bds.setUsername("sa");
bds.setPassword("resume");
bds.setUrl("jdbc:microsoft:sqlserver://219.217.52.54:1433;DatabaseName=test");

// 把OracleDataSource实例注册到JNDI中
System.out.println("Doing a bind with the logical name : " + ln);
ctx.bind(ln, bds);
System.out.println("Successfully bound");
}

static void lookup(Context ctx, String ln) throws NamingException,
SQLException {
// 从JNDI中查询OracleDataSource实例
System.out.println("Doing a lookup with the logical name : " + ln);
org.apache.commons.dbcp.BasicDataSource ods = (org.apache.commons.dbcp.BasicDataSource) ctx
.lookup(ln);
System.out.println("Successful lookup");

// 从查询到的OracleDataSource实例中获取数据库连接
Connection conn = ods.getConnection();
// 进行数据库操作
if (null != conn)
System.out.println("ok");
// 关闭连接
conn.close();
conn = null;
}


回复
jFresH_MaN 2005-02-22
代码看看
还有环境说一下
回复
razelan 2005-02-22
不好意思看错了,是注册数据源出现Can only bind References or Referenceable objects
回复
jFresH_MaN 2005-02-22
你自己绑定吗?没什么用啊,你自己绑定了也不能持久化的
一般是用服务器实现数据源绑顶的
回复
lydong 2005-02-22
Context.bind(java.lang.String name,java.lang.Object obj)

相对于程序中的ctx.bind(ln, bds);
————------

这是接口定义规则
至于出错信息,原始出错在自定义代码at testconn.DataSourceJNDI.bind(DataSourceJNDI.java:46)
回复
相关推荐
发帖
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2005-02-22 10:06
社区公告
暂无公告