zoukankan      html  css  js  c++  java
  • Java RMI 使用例子

    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运行服务端,找不到协议接口

  • 相关阅读:
    linux进程管理
    使用PL/SQL Developer 学习pl/sql
    Linux入门到放弃之一《在VMware虚拟机中安装Linux系统(RedHat)》
    解决Java连接Oracle 12c存在的问题
    Linux安装64位Mysql5.7.22
    在centos下启动nginx出现Failed to start nginx.service:unit not found
    windows10下IntelliJ IDEA使用logback设置日志输出目录
    Windows下mysql5.6升级到5.7的方法
    Spring+Hibernate+Struts2整合之实现登录功能
    Hibernate关系映射之many-to-many(多对多)
  • 原文地址:https://www.cnblogs.com/junge8618/p/8410445.html
Copyright © 2011-2022 走看看