JNDI服务提供者连接工厂之RegistryContextFactory(RMI)
来源:互联网 发布:淘宝安装师傅怎么加盟 编辑:程序博客网 时间:2024/05/01 03:37
服务接口:
package com.zzj.jndi.service;import java.rmi.Remote;import java.rmi.RemoteException;public interface JndiService extends Remote {public int getNext() throws RemoteException;}服务实现类:
package com.zzj.jndi.service.impl;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;import com.zzj.jndi.service.JndiService;/** * Unicast:单播(点到点) * @author lenovo * */public class JndiServiceImpl extends UnicastRemoteObject implements JndiService {private static final long serialVersionUID = 1L;private int next;public JndiServiceImpl() throws RemoteException {super();}/** * 非线程安全的 */public int getNext() throws RemoteException {return ++next;}}
发布服务:
package com.zzj.jndi.provider;import java.rmi.registry.LocateRegistry;import java.util.Hashtable;import javax.naming.Context;import javax.naming.InitialContext;import com.zzj.jndi.service.JndiService;import com.zzj.jndi.service.impl.JndiServiceImpl;public class RmiServiceProvider {final static String CONTEXT_FACTORY = "com.sun.jndi.rmi.registry.RegistryContextFactory";final static String PROVIDER_URL = "rmi://localhost:8080";public static void main(String[] args) throws Exception {//注册RMI服务器端口 LocateRegistry.createRegistry(8080); Hashtable<String, Object> env = new Hashtable<>();env.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT_FACTORY);env.put(Context.PROVIDER_URL, PROVIDER_URL);Context ctx = new InitialContext(env);JndiService jndiService = new JndiServiceImpl();ctx.bind("jndiService", jndiService);System.out.println("Jndi服务已绑定...");}}服务提供者启动之后,会开启端口监听来自客户端的请求。
客户端:
package com.zzj.jndi.client;import java.util.Hashtable;import javax.naming.Context;import javax.naming.InitialContext;import com.zzj.jndi.service.JndiService;public class RmiJndiClient {final static String CONTEXT_FACTORY = "com.sun.jndi.rmi.registry.RegistryContextFactory";final static String PROVIDER_URL = "rmi://localhost:8080";public static void main(String[] args) throws Exception {Hashtable<String, Object> env = new Hashtable<>();env.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT_FACTORY);env.put(Context.PROVIDER_URL, PROVIDER_URL);Context ctx = new InitialContext(env);JndiService jndiService = (JndiService) ctx.lookup("jndiService");for (int i = 0; i < 5; i++) {System.out.println(jndiService.getNext());}System.out.println("-------------------");JndiService jndiService2 = (JndiService) ctx.lookup("jndiService");for (int i = 0; i < 5; i++) {System.out.println(jndiService2.getNext());}}}客户端运行结果:
12345-------------------678910再次运行客户端:
1112131415-------------------1617181920由运行结果可知:RMI绑定的对象是单例的,如果在绑定的对象中有成员变量,则会有线程安全的问题。
0 0
- JNDI服务提供者连接工厂之RegistryContextFactory(RMI)
- JNDI服务提供者连接工厂之FSContextFactory
- 常用JNDI服务提供者连接工厂
- 通过Jndi获取RMI服务
- 设计模式-静态工厂之服务提供者框架
- JNDI之数据连接池服务
- RMI服务提供者注册服务的2种方式
- java之服务提供者框架
- 连接远程JMS JNDI的问题:java.rmi.NoSuchObjectException
- LSP(分层服务提供者)
- 服务提供者框架(Service Provider FrameWork)——jdbc连接
- Spring cloud服务发现之服务提供者和服务消费者
- spring Cloud之服务提供者和服务消费者
- 服务提供者框架(Service Provider Framework)
- 服务提供者框架(Service Provider Framework)
- 服务提供者框架(Service Provider Framework)
- 服务提供者框架(Service Provider Framework)
- 服务提供者框架(Service Provider Framework)
- Python入门——认识函数
- GDB简明教程
- 【leetcode】423. Reconstruct Original Digits from English
- 架构、框架、模式和平台的区别
- struts2入门
- JNDI服务提供者连接工厂之RegistryContextFactory(RMI)
- Unity 入门 Ray类
- hdu1098Ignatius's puzzle
- Maya2012中英文对照表(二)
- CodeForces 733B - Parade
- NYOJ-17 单调递增最长子序列
- 设置网站ico图标
- 关于jquery append() 加入的元素,绑定事件无效的方法
- 队列的链表实现