不好意思看错了,是注册数据源出现Can only bind References or Referenceable objects

解决方案 »

  1.   

    环境eclipse,jdk150,sql2000,tomcat5.0,jndi1.2.1import 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;
    }
      

  2.   

    有几行注释是错的,关于oracle那几个,我就把代码改了一下忘记改注释了
      

  3.   

    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"
      

  4.   

    bind(java.lang.String name,java.lang.Object obj)只能绑定一个对象(可以为空),而不能绑定References or Referenceable objects
      

  5.   

    上面不是说Can only bind References or Referenceable objects吗
    为什么试图绑定数据源的时候不行呢
      

  6.   

    Context.bind(java.lang.String name,java.lang.Object obj)相对于程序中的ctx.bind(ln, bds);
    ————------这是接口定义规则
    至于出错信息,原始出错在自定义代码at testconn.DataSourceJNDI.bind(DataSourceJNDI.java:46)