【发布时间】:2014-06-19 19:42:27
【问题描述】:
我正在使用 Apache 的 commons DBCP 1.4 版本的 Jar。我正在关注通过 fscontex 绑定 BasicDataSource 的 JNDI 示例。如以下链接http://commons.apache.org/proper/commons-dbcp/guide/jndi-howto.html提供的代码所示。
我编写了类似的独立代码,但出现以下错误 “javax.naming.OperationNotSupportedException:只能绑定引用或可引用对象”。根据我的 kmowledge,任何想要被引用的对象都必须实现 javax.naming.Referenceable 接口并定义 getReference 方法。我不确定 BasicDataSource 是否这样做?
这是我使用的代码。
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
public class DBCPTest {
public static void main(String[] args) {
try {
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
System.setProperty(Context.PROVIDER_URL, "file:///F:/JNDI/");
InitialContext ic = new InitialContext();
// Construct BasicDataSource
BasicDataSource bds = new BasicDataSource();
bds.setDriverClassName("org.apache.commons.dbcp2.TesterDriver");
bds.setUrl("jdbc:apache:commons:testdriver");
bds.setUsername("username");
bds.setPassword("password");
ic.rebind("jdbc/basic", bds);
// Use
InitialContext ic2 = new InitialContext();
DataSource ds = (DataSource) ic2.lookup("jdbc/basic");
Connection conn = ds.getConnection();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这是我的类路径中的 JAR 列表
- commons-dbcp-1.4.jar
- commons-ppol-1.6.jar
- fscontext.jar
- providerutil.jar
- jndi.jar
感谢任何有关解决此问题或指出我做错了什么的见解。
谢谢 厘米
【问题讨论】:
-
文件系统上是否存在“F:/JNDI/”?
-
是的,该目录确实存在于文件系统上。当我查看 BasicDataSource 的 api 时,它没有实现 javax.naming.Referenceable 接口。这就是原因,我猜它会抛出这个错误。
标签: java jndi apache-commons-dbcp