我正在阅读DataSource,here,并试图通过使用一个简单的文件作为我的“数据源”在我自己的小项目中实现它。我创建了一个非常简单的课程......
public class QueueData implements DataSource { ... }
虽然它很简单的原因是因为我无法找到解释实现方法应该如何工作的资源。每个人似乎只列出了一个上下文的初始化和一个神奇的getConnection()调用,就像这样。
Context ctx = new InitialContext(env1);
DataSource ds = (DataSource)ctx.lookup("jdbc/mydatasource");
Connection conn = ds.getConnection(); // Magical method!
但是你们其中一个人能给我一个例子来说明getConnection()里面的代码应该是什么样的吗?
答案 0 :(得分:3)
没有人展示如何实现DataSource并且“只是”使用它们的原因是因为只有JDBC驱动程序供应商(通常是数据库制造商)需要编写它们。
它应该做的当然是返回一个Connection对象,该对象也需要是特定于驱动程序的类的实例。在您的情况下,可以接受SQL语句从文件中读取的内容。
您的代码可能如下所示:
public Connection getConnection(){
final String fileName = getFileNameFromMyDatabaseUrl();
return new MyFileConnection(new File(fileName));
}
当然,这也不是非常有趣的代码。
您可以查看一些开源的DataSource实现,看看它们的作用:
答案 1 :(得分:2)
Connection
非常确定接口本身,您也需要实现它。然后,您的getConnection()
将返回您自己班级的实例。但是,要为大量工作做好准备......(例如,如果您希望能够在上下文中获取数据源,则需要首先注册您的实现。)
为什么要开发自己的DataSource?网上有非常轻量级的基于文件和进程内的数据库库(虽然我不得不承认我不太了解它们),例如HSQLDB(Wikipedia article),{ {3}}(H2)...
如果您使用C#开发,我还建议学习Linq To XML,但我不知道Java世界是否已经提出了相应的...
答案 2 :(得分:2)
这不是神奇的。您检索绑定到JNDI服务器的DataSource
对象,通常是在应用程序服务器中设置连接池时。此设置要求您提供所有必需的数据库详细信息,如连接URL,身份验证凭据和其他选项,例如该特定数据库的DataSource
类(存在于该数据库附带的jdbc驱动程序中)。此设置信息用于创建DataSource
,它知道如何为该给定数据库分发连接。
假设您要编写自己的实现,它为客户端提供NOOP连接(所有操作都不产生任何效果的连接对象)。您所要做的就是在应用服务器JNDI服务器上“注册”自定义DataSource
实现。该实现的getConnection()
方法只返回一个实现Connection接口的类和不执行任何操作的方法。