java使用jndi_月光软件站 - 编程文档 - Java - 在JDBC API 中使用JNDI 技术------实战技术篇...

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值