1.创建协议接口(UserService)

/**
*
*/
package com.junge.demo.rmi.protocol.service; import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException; import com.junge.demo.rmi.protocol.model.User; /**
* @author Administrator
*
*/
public interface UserService extends Remote, Serializable { Integer addUser(User user) throws RemoteException; void delUser(Integer userid) throws RemoteException; void modifyUser(User user) throws RemoteException; User getUserByUserId(Integer userid) throws RemoteException;
}

User.java

/**
*
*/
package com.junge.demo.rmi.protocol.model; import java.io.Serializable; /**
* @author Administrator
*
*/
public class User implements Serializable { /**
*
*/
private static final long serialVersionUID = -8967262939434460765L; private Integer userid;
private String username; public Integer getUserid() {
return userid;
} public void setUserid(Integer userid) {
this.userid = userid;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} @Override
public String toString() {
return "User [userid=" + userid + ", username=" + username + "]";
}
}

2、创建服务实现类UserServiceProvider.java

package com.junge.demo.rmi.server.service.provider;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject; import com.junge.demo.rmi.protocol.model.User;
import com.junge.demo.rmi.protocol.service.UserService; public class UserServiceProvider extends UnicastRemoteObject implements UserService {
/**
*
*/
private static final long serialVersionUID = 1L; public UserServiceProvider() throws RemoteException {
super();
} public Integer addUser(User user) throws RemoteException {
System.out.println("addUser:" + user);
return user.getUserid();
} public void delUser(Integer userid) throws RemoteException {
System.out.println("delUser,userid=" + userid); } public void modifyUser(User user) throws RemoteException {
System.out.println("modifyUser:" + user); } public User getUserByUserId(Integer userid) throws RemoteException {
System.out.println("getUserByUserId,userid={}" + userid); User user = new User();
user.setUserid(userid);
user.setUsername("寮犱笁");
return user;
}
}

3.启动注册表,注册服务(ServiceStartServlet.java)

/**
*
*/
package com.junge.demo.rmi.server.service.start; import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet; import com.alibaba.fastjson.JSONObject;
import com.junge.demo.rmi.server.service.provider.UserServiceProvider; /**
* @author Administrator
*
*/
public class ServiceStartServlet extends HttpServlet { private static final long serialVersionUID = 1L; private Registry registry; private static final String BIND_NAME = "com.junge.demo.rmi.protocol.service.UserService"; private Registry getRegistry() throws RemoteException {
return LocateRegistry.createRegistry(1099);
} @Override
public void init() throws ServletException { try {
registry = getRegistry();
System.out.println(JSONObject.toJSON(registry.list()));
registry.rebind(BIND_NAME, new UserServiceProvider()); } catch (RemoteException e) {
e.printStackTrace();
}
} @Override
public void destroy() {
if (null != registry) {
try {
registry.unbind(BIND_NAME);
} catch (Exception e) {
e.printStackTrace();
}
}
} }

4.创建客户端调用rmi(RmiClient.java)

/**
*
*/
package com.junge.demo.rmi; import java.rmi.Naming;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import com.junge.demo.rmi.protocol.model.User;
import com.junge.demo.rmi.protocol.service.UserService; /**
* @author Administrator
*
*/
public class RmiClient { /**
* @param args
*/
public static void main(String[] args) {
addUserBatch(); } public static void addUserBatch() { Long btime = System.currentTimeMillis(); ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 1000, 200L, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(50000)); try {
UserService userService = (UserService)Naming.lookup("com.junge.demo.rmi.protocol.service.UserService");
for (int i = 0; i < 50000; i++) {
executor.submit(new OperUser(userService));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
executor.shutdown();
} Long etime = System.currentTimeMillis(); System.out.println(etime - btime);
} } class OperUser implements Runnable {
private UserService userService; public OperUser(UserService userService) {
this.userService = userService;
} @Override
public void run() {
try {
// 增加、详情、修改、删除
User user = new User();
user.setUserid(1);
user.setUsername("名字");
userService.addUser(user); User user2 = userService.getUserByUserId(1); userService.modifyUser(user2); userService.delUser(user2.getUserid());
} catch (Exception e) {
e.printStackTrace();
} }
}

5.注意实现

a.协议接口需要继承Remote接口,对外提供的接口需要抛出RemoteException异常

b.协议接口中使用的对象需要实现序列化接口Serializable

c.服务端实现类需要继承UnicastRemoteObject类

6.问题

1.使用maven工程创建的服务端,直接使用java application运行服务端,找不到协议接口

Java RMI 使用例子的更多相关文章

  1. Java RMI简单例子HelloWorld

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  2. JAVA RMI例子

    RMI 是java语言的一个RPC框架,本文给出基础例子如下: 1.实现接口: public interface ICalc extends Remote { public int add(int p ...

  3. Java RMI 介绍和例子以及Spring对RMI支持的实际应用实例

    RMI 相关知识 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网 ...

  4. Java RMI之HelloWorld篇

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  5. java.rmi.NoSuchObjectException: no such object in table

    jmx链接的时候,最简单的例子都行不通,郁闷,出现了: 参考:http://reiz6153.blog.163.com/blog/static/401089152009442723208/ 代码: M ...

  6. Java学习笔记(十六)——Java RMI

    [前面的话] 最近过的好舒服,每天过的感觉很充实,一些生活和工作的技巧注意了就会发现,其实生活也是可以过的如此的有滋有味,满足现在的状况,并且感觉很幸福. 学习java RMI的原因是最近在使用dub ...

  7. JAVA RMI helloworld入门

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  8. Java RMI 远程方法调用

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  9. java rmi 小记

    最近在搞Quartz任务监控管理,碰到了jmx,后来发现Quartz对jmx的支持不是很好,介绍的文档也比较少,另外Quartz可以很方便的支持rmi于是就看了一下rmi.下面把写的一些测试小例子附上 ...

随机推荐

  1. C#对接JAVA系统遇到的AES加密坑

    起因对接合作伙伴的系统,需要对数据进行AES加密 默认的使用了已经写好的帮助类中加密算法,发现结果不对,各种尝试改变加密模式改变向量等等折腾快一下午.最后网上查了下AES在JAVA里面的实现完整代码如 ...

  2. laravel PHPExcel 使用小结

    最近需求要用到PHPExcel,laravel框架中有相应的组件https://github.com/Maatwebsite/Laravel-Excel,我用的是2.1的(3.0文档不详细而且坑似乎也 ...

  3. 解决no module named ipykernel_launcher

    解决no module named ipykernel_launcher 最近开hydrogen的时候,提示no module named ipykernel_launcher. 记得以前解决过这个问 ...

  4. 《Spring_Four》第二次作业 基于Jsoup的大学生考试信息展示系统开题报告

    一.项目概述 该项目拟采用Jsoup对大学生三大考试(考研.考公务员.考教师资格证)进行消息搜集,研发完成一款轻量级的信息展示APP,本项目主要的创新点在于可以搜集大量的考试信息,对其进行一个展示,而 ...

  5. rpm包安装的nginx热升级

    文章目录一.本地环境基本介绍二.yum升级命令说明三.升级好nginx后如何不中断业务切换3.1.nginx相关的信号说明3.2.在线热升级nginx可执行文件程序一.本地环境基本介绍本次测试环境,是 ...

  6. 最小费用最大流 HDU1533

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1533 #include<bits/stdc++.h> #define fi first ...

  7. python生成器(generator)、迭代器(iterator)、可迭代对象(iterable)区别

    三者联系 迭代器(iterator)是一个更抽象的概念,任何对象,如果它的类有next方法(next python3)和__iter__方法返回自己本身,即为迭代器 通常生成器是通过调用一个或多个yi ...

  8. localStorage,sessionStorage,cookie使用场景和区别

    localStorage:HTML5新增的在浏览器端存储数据的方法.设置和获取localStorage的方法: 设置: localStorage.name = 'zjj'; 获取: localStor ...

  9. input type="file"多图片上传 原生html传递的数组集合

    单个的input type="file"表单也是可以实现多图片上传的 代码如下: <form action="manypic.php" method=&q ...

  10. React-router4 第五篇 Preventing Transitions 防止转换

    文档地址:https://reacttraining.com/react-router/web/example/preventing-transitions 大概意思就是说:我在这个页面上写东西呢?不 ...