基于rmi的数据库中间件设计
介绍
分布式对象技术课程实践:基于rmi的数据库中间件设计,并利用中间件建立一个数据库应用(Java web项目)。
软件架构
- 前端:React
- 后端:Springboot
- 数据库中间件:Java Rmi服务
安装教程
- 主机安装Node.js,并在控制台进入front-end-pages目录下,按顺序执行以下命令运行前端:
npm install
npm start
- 后端安装eclipse、Springboot插件,运行即可;
- 运行中间件前需要配置
- jdk 1.8
- Mysql(5.6)、Sql Server(2017 express)(其余关系型数据库也行)
- 导入各家数据库的JDBC工具包
- 绑定Rmi服务端口和主机(如果Rmi服务放在远程主机需要注意避开防火墙,并绑定主机,更有甚者需要指定另外一个通信端口)
项目需求分析
-
数据库操作中间件:
-
提供数据库连接接口。该接口可使“数据库操作中间件”连接当前主流的数据库,如Oracle、SQLServer、MySQL、Access等;参数要求:指示数据库类型,数据库相应的连接参数。
-
提供关闭数据库连接接口。该接口可关闭“数据库操作中间件”当前的数据库连接。
-
提供数据库查询语句接口。该接口传入组装好的字符串型的SQL查询语句,返回参数为列表,该列表代表查询的结果。
-
提供数据库操纵语句接口。该接口传入参数为哈希表,哈希表中记录了查询的表名、字段名、操纵语句类型标志、“where”语句的条件等;传出参数为成功和失败的布尔值。针对哈希表中的这些信息,服务端需要做到:
- 多类型(insert、update、delete)操纵语句的自动拼装,必要时需要拼接“where”语句的条件;
- 根据表名自动获取数据类型,从而在拼装SQL语句时决定数值是否加单引号;
- 提供事务确认和回滚处理。
-
接口设计如下表所示:
-
哈希表参数传递示意表如下表所示:
-
-
Web应用:
利用Web技术构建一个学生、教师消费记录管理系统,通过系统可以:
- 学生、教师信息的查询、增加、删除(可批量)、修改。
- 学生、教师的消费记录的查询。
源码下载地址:Java开发基于rmi的数据库中间件设计源码
参与贡献
- 数据库中间件设计
- 本次项目主要是我和实践组长一起完成,我负责编写中间件,他负责写应用,我们交流的很频繁,组长说这就是敏捷开发中的“结对编程”,幡然醒悟,哈哈哈哈哈哈,果然软工的课都是白学了。
- 我将编写好的Rmi服务半成品挂在服务器上,他就可以直接利用已经编写好的接口进行应用的编写,而我可以在本地继续完善Rmi服务,我们两个的工作可以说互不干扰,所有合作“肥肠”愉快!
- 中间件客户端在Springboot后端的部署
- 项目存在的已知缺陷:
- 在使用sql server时,“根据表名自动获取数据类型,从而在拼装SQL语句时决定数值是否加单引号”这一功能存在bug,在装配哈希表中字段时还是需要为非数值类型数据加上单引号。bug原因出在获取数据库表字段信息时未指定表所在的scheme(模式),mysql无需指定,但是sqlserver、oracle需要指定。
- rmi服务调用只支持单用户连接调用,且并没有设置同步,所以不可以多用户同时连接该服务;
- 调用Rmi服务连接数据库后一定要记住调用接口方法关闭连接,不然服务会长时间消耗资源来保持与数据库的连接。如果不需要使用rollback、commit等事务操作,建议修改Rmi服务源码直接让服务端在执行完sql语句后自主关闭连接。