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
相关推荐
手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战
摘要: 本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理,通过滑模观测器估算反电动势,结合PLL抑制抖振;2)系统架构,替代编码器信号;3)Simulink建模流程,涵盖Clarke变换、SMO离散化实现、PLL设计等关键步骤;4)参数整定指南和工程实践要点,如启动策略和故障处理。该方法具有成本低、可靠性高的优势,适用于家电、电动车等场景,仿真结果显示角度误差±5°,速度动态跟随良好。文章还提供了调试建议和常见问题解决方案。
JDBC数据源 使用JNDI连接池实现数据库的连接
0.引言 许多Web应用程序需要通过JDBC驱动程序访问数据库,以支持该应用程序所需的功能。Java EE平台规范要求Java EE应用程序服务器为此目的提供一个DataSource实现(即,用于JDBC连接的连接池)。Tomcat提供了完全相同的支持,因此使用此服务在Tomcat上开发的基于数据库的应用程序将在任何Java EE服务器上保持不变。 有关JDBC的信息,请参考以下内容: ...
RK3566全套设计资料.rar
全新RK3566硬件设计资料: RK3566是一款高性能,低功耗的四核应用处理器,专为个人移动互联网设备和AIoT设备而设计。 提供了许多嵌入式功能强大的硬件引擎,以优化高端应用程序的性能。 RK3566支持4K @ 60fps的几乎全格式H.264解码器,4K @ 60fps的H.265解码器,1080p @ 60fps的H.264 / H.265编码器,高质量JPEG编码器/解码器,嵌入式3D GPU 使RK3566完全兼容OpenGL ES 1.1 / 2.0 / 3.2,OpenCL 2.0和Vulkan 1.1。 特殊的2D硬件引擎将最大化显示性能并提供非常流畅的操作。内置NPU支持INT8 / INT16混合操作。 此外,凭借其强大的兼容性,可以轻松地转换基于TensorFlow / MXNet / PyTorch / Caffe等一系列框架的网络模型。 RK3566具有高性能的外部存储器接口(DDR3 / DDR3L / DDR4 / LPDDR3 / LPDDR4 / LPDDR4X),能够维持要求的存储器带宽。
单例模式
单例模式: 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 单例模式注意事项: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 意图: ...
JAVA设计模式之单例模式
本文继续介绍23种设计模式系列之单例模式。 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。 单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例...
java单例模式
定义:单例模式(Singleton)指一个类只有一个实例,并且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。单例类只有一个实例对象;该单例对象必须由单例类自行创建;单例类对外提供一个访问该单例的全局访问点;
Java五种单例模式
Java的五种单例模式,大家应该都接触过或者都用过。本篇介绍下Java的五种单例模式,并分析其优缺点,希望给初学者提供一点帮助。
matlab 等高线图限制范围,matlab等高线图的初级问题,matlab画等高线问题,请高人解答。详细请看补充。...
导航:网站首页 >matlab等高线图的初级问题,matlab画等高线问题,请高人解答。详细请看补充。matlab等高线图的初级问题,matlab画等高线问题,请高人解答。详细请看补充。匿名网友:set和get是设置和获得句柄对象属性值的函数。用法是set句柄,属性1,属性值,属性2,属性值,……属性值=get句柄,属性h是句柄,这里就是指向某等高线图的句柄。你可以用get(h)看到其所有属...
不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置_「初级会计报考指南」浏览器问题解决方案...
关于浏览器相关问题汇总Q:为什么我用360/搜狗/QQ/谷歌浏览器提示不能报名A:很多考生反映报名过程因提示“由于您用的不是Microsoft Internet Explorer”浏览器,所以不能顺利报名,请更换。”而无法顺利报名。为保证大家顺利完成初级会计报名,建议大家使用IE浏览器,可有效避免以上情形出现!记得下载ie10,百度搜索IE10下载!Q:IE浏览器不能报名怎么办?A:一、IE浏览器...
初级会计信息照片采集全流程(附上传失败解决方法)
初级会计信息照片采集全流程及上传失败解决方法:使用微信小程序"拍点点证件照"制作295×413像素、JPG格式的白底照片,下载后通过文件管理器选择照片上传至系统。如遇"请上传指定格式附件"提示,需注意不要直接上传相册照片,而应通过文件选择方式操作。完成上传后等待系统审核即可。
初级的前端应该注意哪些问题;
面试过程中有做面试题的,也有直接聊的,实话讲有些面试题其实就是背书,随便一百度就能出答案的东西其实不太适合用于面试题中。例如某某css属性 的用法,js某函数的作用等等。个人倾向于将实际工作中可能会遇到的问题的场景,以及各种技术的坑作为面试题,这样一则可以看出他的经验多少,二则也可以 防止他做笔试题的时候手机搜索结果。 不过总体来讲基本上每家问的问题也差不多,可能不同业务的公司问的问题的侧重
针对初级和高级开发人员的20个Kotlin面试问题
[总数:4平均:3.3 / 5] Kotlin面试问题 Android目前拥有最大的智能手机OS市场份额, 目前为76% ,而预测称它将在未来增长。 这意味着构建Android应用程序可能是一个成功且有利可图的商业想法。 但是,要将这个想法变成现实,您需要一个精通技术的Kotlin开发人员或开发团队。 Kotlin是一种通用编程语言, 截至2019年5月...
聊聊初级开发者的职业素养问题
邹溪源,现居长沙,十年软件研发经验老兵,长沙.NET技术社区发起者,运营公众号【DotNET技术圈】。记得在我读大学时老师吐槽,在他参加工作的95年-03年间感受到了IT的飞速发展,只要...
【译】如何成为一名优秀的初级工程师
很多人都在想着如何成为一名高级工程师,而我想要的是先成为优秀的初级工程师。 明年将是我正式受雇佣写代码的第15年了。(译者:老外的写代码职业生涯真的挺长的) 回首往昔,我第一天工作的日子仍然历历在目。那时的我每天都在格子间中写着SAP、算法、数据结构、SQL和C++,还涉及了更广泛的主题,包括知识管理和项目管理。我了解所有的这些知识,但我缺乏的是在需要的地方使用这些知识的信心。 我花了很多年才获得...
初级开发面试常遇到的问题
** 以下是我个人觉得初级开发时会经常问到的难点 **
acm 初级入门 装箱问题
1017:装箱问题 查看提交统计提示提问 总时间限制: 1000ms 内存限制: 65536kB 描述一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小
【实战技能】初级软件开发工程师常见问题
本文将从计算机系统结构、软件开发基础、使用软件工具、软件开发技术和软件开发流程多个角度,列出初级工程师在软件开发过程中的常见缺陷。以下内容,来源于我工作和公益教育活动中发现的普遍问题,希望能引起初级工程师、高校教师以及技术管理者的注意。
[译] 如何成为一名优秀的初级开发人员
本文翻译自Medium上的一篇文章,原文标题:How To Be A Good Junior Developer. 点击文末的阅读原文可以跳转到英文原文。 到明年,我的职业编程生涯即将满15年。15年!哇! 回想起来,我仍然记得成为初级开发人员的第一天,走过灯火通明的小隔间,脑袋里塞满了SAP、算法、数据结构、SQL和C++,甚至知识管理和项目管理等更广泛的主题。我拥有所有的知识,而我唯...
写给初级程序员的一些建议
▲点击上方"什么技术值得学",关注持续获得知识您是一名从事软件开发职业的初级开发人员吗?或者是最近刚开始新工作的计算机科学毕业生?也许一个自学成才的开发人员想知道下一步该...
初级8皇后问题
初级8皇后问题,不是真正的8皇后问题,是该问题的初级条件限制:产生不同行,不同列的组合。 typedef struct Spoint { int x; int y; Spoint() { x = -1; y = -1; } }; static Spoint point[8]; int Queen8(int n, int cur) {...
leetcode初级算法 设计问题
设计问题shuffle an array最小栈 shuffle an array 直接copy了别人的代码,用了库函数random_shuffle(iterator1,iterator2) 代码: class Solution { public: vector<int> m_nums; Solution(vector<int> nums) : m_num...
95




被折叠的 条评论
为什么被折叠?



