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 ...
随机推荐
- mysql根据汉字首字母排序[转]
select areaName from area order by convert(areaName USING gbk) COLLATE gbk_chinese_ci asc 说明 ...
- linu_nginx_location语法
location的作用是什么? 每个server中都需要配置location,通过location匹配域名后内容,再通过location响应同一个域名下不同请求 location语法 location ...
- JS实现倒计时
HTML部分: <div class="div"> <div id="div"> </div> </div> C ...
- 记录一次tomcat下项目没有加载成功
哥们儿实在太low了,web.xml文件中加载的spring mybatis配置文件和配置的文件不是同一个文件名导致的!
- JVM 自动内存管理:对象判定和回收算法
- j2e中操作EXCEL
在j2e中操作excel,无非2种情况,在这里我贴部分代码做个例子就OK,不管是导入和导出都是操作的都是流 1,导入,浏览器输入EXCEL到java后台解析 package action; impor ...
- 基于jsmpeg库下使用ffmpeg创建视频流连接websocket中继器传输视频并播放
这个功能的基本工作是这样的: 1.使用node运行jsmpeg库下的websocket-relay.js文件,这个文件的作用是创建一个websocket视频传输中继器 2.运行ffmpeg,将输出发送 ...
- 揭开Java内存管理的面纱
前言 相对于C.C++这些高性能语言,Java有着让此类程序员羡慕的功能:内存自动管理.似乎这样,Java程序员不用再关心内存,也不用去了解相关知识.但结果真的是这样吗?特别对于我们这种Android ...
- Sql Server的艺术(一) 视图的增删查改
视图是从一个或者多个表中查询数据的另一种方式.利用视图可以集中.简化定制数据库,同时还能保障安全. 视图其结构和数据是建立在对应的查询基础上的.和表一样,视图也是包括几个被定义的数据列和多个数据行,但 ...
- LNMP之Nginx
Nginx初探 概念: Nginx是一款免费.开源.高性能的HTTP服务器和反向代理,同时也可作为邮件代理服务器.其因为高性能.稳定.丰富的功能集.配置简单和低系统资源消耗而闻名. Tengine是由 ...