实习一远程过程调用中间件及数据访问中间件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一远程过程调用中间件及数据访问中间件
一、实习目的
通过实例掌握RMI,RPC,JDBC等中间件的使用。

二、实习要求
1)RPC实现远程计算服务。

服务器端提供计算服务;客户端调用计算服务。

2)RMI+JDBC远端数据库的访问。

实现简单的成绩查询系统(创建表,录入成绩,查询成绩等)。

在服务器端,通过JDBC访问数据库。

客户端调用服务端提供的各种数据库操作。

3)服务器和客户端不在同的机器上进行测试。

4)打包成易于执行的文件,如exe, bat文件。

三、实习过程
1 利用RPC实现远程计算服务。

(1)使用IDL定义服务接口mathservice.idl, 定义计算服务操作,方法如下:
加:void Cal_Add([in] double a, [in] double b, [out] double * result);
减:void Cal_Sub([in] double a, [in] double b, [out] double * result);
乘:void Cal_Mul([in] double a, [in] double b, [out] double * result);
除:void Cal_Div([in] double a, [in] double b, [out] double * result);
(2)编写配置文件mathservice.acf, 定义绑定句柄
(3) 编译mathservice.idl文件,产生文件mathservice.h, mathservice_s.c, mathservice_c.c
(4) 编写服务端程序, 编译连接工程,生成mathservice.exe
(5) 编写客户端程序
(6) 测试:
测试结果截图如下:
加法运算:
减法运算:乘法运算:除法运算:
2 RMI+JDBC远端数据库的访问
(1) 使用mysql-connector-java-5[1].0.8.zip驱动包,编写DBmanager类,访问mysql数据
库,实现创建表,录入成绩,查询成绩等操作,主要代码如下:
//加载驱动,获取连接
static {
try {
Class.forName("com.mysql.jdbc.Driver");
cn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
}
//创建表
public boolean createTable() {
int i = 0;
try {
ps = cn.prepareStatement("" +
"create table rmitest(id int primary key,name varchar(20) not null);");
i = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (i!=0) {
return true;
} else {
return false;
}
}
//插入数据
public boolean insertDate() {
int j = 0;
try {
ps = cn.prepareStatement("insert into rmitest
values(100,'rmitest')");
j += ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (j != 0)
return true;
else
return false;
}
//获取数据
public String getDate() {
ResultSet rs = null;
String result="";
try {
ps = cn.prepareStatement("select * from rmitest");
rs = ps.executeQuery();
while(rs.next()){
result+="id="+rs.getObject(1).toString()+",
name="+rs.getObject(2).toString()+"\n";
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
(2)定义服务接口DataService,。

提供创建表,录入成绩,查询成绩等操作,方法如下:
public boolean createTable() throws RemoteException;
public boolean insertDate() throws RemoteException;
public String getDate() throws RemoteException ;
(3)实现服务,对实现创建表,录入成绩,查询成绩等操作。

实现过程中可直接使用DBmanager类,主要代码如下:
public class DataServiceImpl extends UnicastRemoteObject implements DataService {
DBmanager dBmanager;
public DataServiceImpl() throws RemoteException {
super();
dBmanager = new DBmanager();
}
//调用DBmanager的方法创建表
public boolean createTable() {
return dBmanager.createTable();
}
//调用DBmanager的插入数据
public boolean insertDate() {
return dBmanager.insertDate();
}
//调用DBmanager的方法显示数据
public String getDate() {
return dBmanager.getDate();
}
(4)编写部署类DeployServer,主要代码如下:
// 创建远程对象
DataServiceImpl ds=new DataServiceImpl();
LocateRegistry.createRegistry(1117); //配置端口
// 远程对象绑定到服务
Naming.rebind("//localhost:1117/ds", ds);
System.out.println("RMI服务器正在运行。

");
(5)使用DataService接口,实现客户端RmiJDBCClient 类,主要代码如下:DataService ds = (DataService) Naming.lookup("//localhost:1118/ds");
System.out.println("获取远程数据库中数据如下:");
ds.createTable();//调用远程创建表方法
ds.insertDate();//调用远程插入数据方法
System.out.println(ds.getDate());//调用远程显示数据方法(6)测试
测试如下:
1. 运行服务器端:
2. 运行客户端
四、实习总结
本次实习的主要内容为通过RPC 实现远程计算服务,通过RMI 、JBDC实现远程访问数据库;
通过老师的案例按照实习指导书完成了本次实习,对通过RPC、RMI 实现远程访问有了进一步的理解,但对他们的底层具体实现还不是很理解。

相关文档
最新文档