|
|
在JDBC API 中使用JNDI 技术------实战技术篇 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
JNDI 技术提供了一种程序运行模式,使得Java 应用程序可以通过网络发现和请求远端计算设备上的服务,如数据库服务等。 这里着重介绍JNDI 技术如何与JDBC 技术结合起来,构建强大的访问数据库的Java 应用程序。
究竟JNDI 技术和JDBC 技术的结合会有何好处呢? 1 应用JNDI 技术,可以实现真正的分布式处理,数据库服务器、提供数据库连接服务的组件、执行数据库操作的Java 应用程序可以分布在不同地址的异质计算设备上。 2 将JNDI 技术与JDBC 技术结合可以实现数据库连接缓冲池的功能。 3 将JNDI 技术与JDBC 技术结合可以在Java 应用程序中屏蔽掉很多繁琐的建立数据库连接的代码,这样有有助于系统的安全性
RowSet 包提供了这方面的功能JNDI 技术与JDBC 技术结合的原理如下: 使用JDBC 和JNDI 技术编写一个提供数据库服务的组件,然后将它出版到某个中间层服务器中,侦听服务请求。接下来我们可以编写Java 应用程序查找提供数据库服务的组件,一旦查找到它(组件) 就可以利用它提供的各种方法执行特定的数据库操作。 RowSet 包定义的DataSource 接口提供了建立数据库连接的JNDI 支持。具体的方法如下: 1 首先创建一个Java 类SampleDataSource ,该类扩展了javax..sql.DataSource 接口 具体实现了获取数据库连接的功能,该类的代码如下:
//File Name SampleDataSource.java //Author fancy //Date 2001.3.4 //Note to create tht datasource connection import java.sql.*; import javax.sql.*; import javax.naming.*; public class SampleDataSource implements javax.sql.DataSource javax.naming.Referenceable java.io.Serializable { /* Constructors*/ public SampleDataSource() { // This constructor is needed by the object factory } /** Properties*/ public String getServerName() { return serverName; } public void setServerName(String serverName) { this.serverName = serverName; } public String getDatabaseName() { return databaseName; } public void setDatabaseName(String databaseName) { this.databaseName = databaseName; } /* * Methods inherited from DataSource */ public Connection getConnection() throws SQLException { //vendor specific code to create a JDBC Connection goes here try { Class.forName("jdbcDriver"); Connection conn=DriverManager.getConnection("jdbcURL" "user" "pass"); return conn; } catch(Exception fe) { //to do nothing } return null; } public Connection getConnection(String username String password) throws SQLException { //vendor specific code to create a JDBC Connection goes here String user=username; String pass=password; try { Class.forName("jdbcDriver"); Connection conn=DriverManager.getConnection("jdbcURL" user pass); return conn; } catch(Exception fe) { //to do nothing } return null; } public java.io.PrintWriter getLogWriter() throws SQLException { //vendor specific code goes here } public void setLogWriter(java.io.PrintWriter out) throws SQLException { //vendor specific code goes here } public void setLoginTimeout(int seconds) throws SQLException { //vendor specific code goes here } public int getLoginTimeout() throws SQLException { //vendor specific code goes here } private String serverName = null; private String databaseName = null; } 在SampleDataSource 类中定义了getConnection()方法,利用该方法可以获取java.sql.Connection 接口的实例对象,除了getConnection()方法以外,SampleDataSource.java程序还定义了若干个其他相关方法。
2 接下来我们应该编写一个Java 应用程序,将上面编写好的SampleDataSource组件出版到中间层服务器中去,假设这个应用程序名为JNDIExam.java ,那么它应该含有下面的代码段 例 SampleDataSource sds = new SampleDataSource(); sds.setServerName(“rainbow”); sds.setDatabaseName("fancy"); Context ctx = new InitialContext(); ctx.bind(“jdbc/EmployeeDB” sds); 上面的代码中第一行创建了一个SampleDataSource 对象,接下来的两行代码分别调用setServerName()方法和setDatabaseName()方法初始化SampleDataSource 对象的属性,然后创建JNDI 命名环境对象ctx ,将SampleDataSource 类的实例对象sds 绑定到JNDI 名jdbc/EmployeeDB 中。编译运行JNDIExam.java 程序,将JNDI 服务发布出去。除了使用这个方法也可以使用某些GUI 工具可视化出版JNDI 服务。
3 下一步我们应该编写客户端(此处指相对的客户端,某台服务器相对于另一台服务器来说可以是服务端也可以是客户端)的Java 应用程序,如JSP 程序等,以便使用JNDI 服务。
请看下面的JSP 代码段(try/catch 模块已经省略了) 例 <% Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(“jdbc/EmployeeDB”); Connection con = ds.getConnection(jdbc/webDatabase” "sa” “"); con.setAutoCommit(false); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("SELECT * FROM goods"); while(rs.next()) { out.println(rs.getString(1)); } con.commit(); con.close(); %> 程序的解释请参看 http://blog.csdn.net/jgsfy/archive/2005/01/04/239800.aspx 
|
|
相关文章:相关软件: |
|