RMI远程服务调用
数据库:info.sql
/*
Navicat MySQL Data Transfer Source Server : yuanzhen
Source Server Version : 50713
Source Host : 192.168.1.6:3306
Source Database : serialnumber Target Server Type : MYSQL
Target Server Version : 50713
File Encoding : 65001 Date: 2016-08-16 09:38:17
*/ SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for info
-- ----------------------------
DROP TABLE IF EXISTS `info`;
CREATE TABLE `info` (
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of info
-- ----------------------------
INSERT INTO `info` VALUES ('Tom', '4564@foxmail.com');
INSERT INTO `info` VALUES ('John', 'You@163.com');
INSERT INTO `info` VALUES ('Harry', 'harry@qq.com');
Bank.java
import java.rmi.*;
import java.util.*;
interface Bank extends Remote{
public List<Customer> getCustomers()throws RemoteException;
}
BankImpl.java
import java.rmi.*;
import java.rmi.server.*;
import java.sql.*;
import java.util.*;
class BankImpl extends UnicastRemoteObject implements Bank{
BankImpl()throws RemoteException{} public static void main (String[] args)throws RemoteException{
List<Customer> list=new BankImpl().getCustomers();
for(Customer customer:list){
System.out.println(customer);
}
return;
}
public List<Customer> getCustomers(){
List<Customer> list=new ArrayList<Customer>();
try{
Class.forName("org.gjt.mm.mysql.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://192.168.1.6:3306/serialnumber","root","123");
PreparedStatement ps=con.prepareStatement("select * from info");
ResultSet rs=ps.executeQuery(); while(rs.next()){
Customer c=new Customer();
c.setName(rs.getString(1));
c.setEmail(rs.getString(2));
list.add(c);
}
con.close();
}catch(Exception e){System.out.println(e);}
return list;
}//end of getCustomers()
}
Customer.java
public class Customer implements java.io.Serializable{
private String name;
private String email;
public void setName(String name){
this.name=name;
}
public void setEmail(String email){
this.email=email;
}
public String getName(){
return name;
}
public String getEmail(){
return email;
}
public String toString(){
return name+" "+email;
}
}
MyServer.java
import java.rmi.*;
public class MyServer{
public static void main(String args[])throws Exception{
Remote r=new BankImpl();
Naming.rebind("rmi://localhost:6666/mine",r);
}
}
编译服务器端源代码

注册:注册的过程中会生成BankImpl_Stub.class(用于拷贝至客户端);

启动服务器:

客户端代码:
Customer.java
public class Customer implements java.io.Serializable{
private String name;
private String email;
public void setName(String name){
this.name=name;
}
public void setEmail(String email){
this.email=email;
}
public String getName(){
return name;
}
public String getEmail(){
return email;
}
public String toString(){
return name+" "+email;
}
}
Bank.java
import java.rmi.*;
import java.util.*;
interface Bank extends Remote{
public List<Customer> getCustomers()throws RemoteException;
}
MyCLient.java
import java.util.*;
import java.rmi.*;
public class MyClient{
public static void main(String args[])throws Exception{
Bank b=(Bank)Naming.lookup("rmi://localhost:6666/mine");
List<Customer> list=b.getCustomers();
for(Customer c:list){
System.out.println(c);
}
System.out.println("done");
}
}
编译:

把服务器端的BankImpl_Stub.class拷贝过来
启动客户端

相关链接:
http://blog.csdn.net/a19881029/article/details/9465663
RMI远程服务调用的更多相关文章
- 远程服务调用RMI框架 演示,和底层原理解析
远程服务调用RMI框架: 是纯java写的, 只支持java服务之间的远程调用,很简单, // 接口要继承 Remote接口 public interface IHelloService extend ...
- 远程服务调用(RMI)
模块概念的引入,是本框架的一大优势,而跨JVM的远程服务调用则是另一个最有价值的功能. <本地服务调用>一文中我们讲解了跨模块间的服务调用可以是这样的: ServiceHelper.inv ...
- spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法
spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...
- dubbo专题」dubbo其实很简单,就是一个远程服务调用的框架(1)
一.dubbo是什么? 1)本质:一个Jar包,一个分布式框架,,一个远程服务调用的分布式框架. 既然是新手教学,肯定很多同学不明白什么是分布式和远程服务调用,为什么要分布式,为什么要远程调用.我简单 ...
- 远程服务调用RPC框架介绍,微服务架构介绍和RPC框架对比,dubbo、SpringClound对比
远程服务调用RPC框架介绍,微服务架构介绍和RPC框架对比,dubbo.SpringClound对比 远程服务调用RPC框架介绍,RPC简单的来说就是像调用本地服务一样调用远程服务. 分布式RPC需要 ...
- 【Dubbo源码阅读系列】之远程服务调用(上)
今天打算来讲一讲 Dubbo 服务远程调用.笔者在开始看 Dubbo 远程服务相关源码的时候,看的有点迷糊.后来慢慢明白 Dubbo 远程服务的调用的本质就是动态代理模式的一种实现.本地消费者无须知道 ...
- 分布式远程服务调用(RPC)框架
分布式远程服务调用(RPC)框架 finagle:一个支持容错,协议无关的RPC系统 热门度(没变化) 10.0 活跃度(没变化) 10.0 Watchers:581 Star:6174 Fork: ...
- maven聚合项目以及使用dubbo远程服务调用debug操作。
1.maven聚合项目以及使用dubbo远程服务调用debug操作. 然后操作如下所示: 然后如下所示: 启动断点所在的包的服务.以debug的形式启动. 断点进来的效果如下所示: 接下来请继续你的表 ...
- java RMI 远程调用
1.背景 在学习代理模式的过程中接触到了远程调用,jdk有自己的RMI实现,所以这边自己实现了RMI远程调用,并记录下心得. 感受最深的是RMI和现在的微服务有点相似,都是通过"注册中心&q ...
随机推荐
- 2017-06-27(useradd usermod userdel 禁止普通用户登录)
useradd useradd -g 组名 用户名 (添加新用户,并将其添加到指定的主用户组) useradd -g 组名 -G 附属组名 用户名 (添加新用户,并将其添加至指定主用 ...
- scrapy_xpath
什么是xpath? 路径表达式 在xml和html中进行导航 包含标准函数库 遵循w3c标准 xpth节点关系是什么? 父节点 子节点 兄弟节点 先辈节点 后代节点 xpth语法 a ...
- CSS学习(一)
/*</br> * color</br> * background-color background-image background-repeat background-po ...
- 译-what is cmdlet
A cmdlet (pronounced "command-let") is a lightweight Windows PowerShell script that perfor ...
- java中可变长参数的定义及使用方法
JAVA中可以为方法定义可变长参数( Varargs)来匹配不确定数量的多个参数,其定义用“...”表示.其实,这类似于为方法传了一个数组,且在使用方法上也和数组相同,如下: public void ...
- easyUI中点击datagrid列标题排序
easyUI中点击datagrid的排序有两种,一种是本地的,一种是服务器的.本地的只能排序当前页,而服务器的可以对全部页进行排序.这里主要是分享下服务器排序. 1.为datagrid添加属性remo ...
- 使用EndNote在Word中插入参考文献的格式设置
endnote其实自带了很多参考文献格式的样式,如下图,但往往跟我们要使用的会有所出入,本文主要介绍的就是设置自定义endnote参考文献格式,以endnote X6和word2003为例,其它版本以 ...
- Part 2:模型与后台管理admin站点--Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- 用Markdown格式写一份前端简历
1. 基本信息 姓名:xxx 手机号码:1380000xxxx 学校:南昌大学 学历:大学本科/硕士/博士 工作经验:3年以上Web前端 电子邮件:xxx@outlook.com 2. 求职意向 工作 ...
- 【转】Linux方向职业分析
引言: 据了解,Linux普通网络管理人员的月薪大约5000元左右,负责编程的Linux软件工程师月薪大约在8000元到12000元之间,Linux嵌入式软件开发人员的月薪大约在12000元以上. 影 ...