| New file | 
 |  |  | 
 |  |  | package com.dy.common.mw.channel.rmi; | 
 |  |  |  | 
 |  |  | import java.io.IOException; | 
 |  |  | import java.rmi.registry.LocateRegistry; | 
 |  |  | import java.rmi.registry.Registry; | 
 |  |  | import java.rmi.server.UnicastRemoteObject; | 
 |  |  |  | 
 |  |  | import com.dy.common.mw.UnitAdapterInterface; | 
 |  |  | import com.dy.common.mw.UnitInterface; | 
 |  |  | import com.dy.common.mw.UnitCallbackInterface; | 
 |  |  |  | 
 |  |  | public class RmiUnit implements UnitInterface { | 
 |  |  | 	 | 
 |  |  |    private static RmiUnit instance = new RmiUnit() ; | 
 |  |  |    private static boolean started = false ; | 
 |  |  | 	 | 
 |  |  |    private static RmiUnitAdapter adapter ; | 
 |  |  | 	 | 
 |  |  |    private static RmiFrameWork rmiFrm = null ; | 
 |  |  |  | 
 |  |  | 	 | 
 |  |  |    private RmiUnit(){} | 
 |  |  | 	 | 
 |  |  |    public static RmiUnit getInstance(){ | 
 |  |  |       return instance ; | 
 |  |  |    } | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  |    @Override | 
 |  |  |    public void setAdapter(UnitAdapterInterface adapter) throws Exception { | 
 |  |  |       if(adapter == null){ | 
 |  |  |          throw new Exception("Rmi模块适配器对象不能为空!") ; | 
 |  |  |       } | 
 |  |  |       RmiUnit.adapter = (RmiUnitAdapter)adapter ;  | 
 |  |  |       RmiConfigVo vo = RmiUnit.adapter.getConfig() ; | 
 |  |  |       if(vo == null){ | 
 |  |  |          throw new Exception("Rmi模块属性配置对象不能为空!") ; | 
 |  |  |       } | 
 |  |  |       if(vo.port == null){ | 
 |  |  |          throw new Exception("Rmi模块port属性值不能为空!") ; | 
 |  |  |       } | 
 |  |  |       if(vo.context == null || vo.context.trim().equals("")){ | 
 |  |  |          throw new Exception("Rmi模块context属性值不能为空!") ; | 
 |  |  |       } | 
 |  |  |    } | 
 |  |  |    /** | 
 |  |  |     * 启动模块 | 
 |  |  |     */ | 
 |  |  |    public void start(UnitCallbackInterface callback) throws Exception { | 
 |  |  |       if(!started){ | 
 |  |  |          started = true ; | 
 |  |  |  | 
 |  |  |          RmiConfigVo vo = RmiUnit.adapter.getConfig() ; | 
 |  |  | 			 | 
 |  |  |          boolean isException = false ; | 
 |  |  |          try { | 
 |  |  | 				 | 
 |  |  |             //改局域变量为静态全局变量,防止局域变量在无引用时被垃圾回收,从而客户端得不到RMI服务端 | 
 |  |  |             if(rmiFrm == null){ | 
 |  |  |                rmiFrm = new RmiFrameWorkImpl(RmiUnit.adapter); | 
 |  |  |             } | 
 |  |  | 				 | 
 |  |  |             //连接到本地JNDI | 
 |  |  |             Registry registry = LocateRegistry.createRegistry(vo.port); | 
 |  |  |  | 
 |  |  |             //解除注册 | 
 |  |  |             UnicastRemoteObject.unexportObject(rmiFrm, true); | 
 |  |  |  | 
 |  |  |             //注册 | 
 |  |  |             registry.bind(vo.context, UnicastRemoteObject.exportObject(rmiFrm, 0)); | 
 |  |  | 				 | 
 |  |  |          } catch (IOException e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |             System.out.println("Rmi通信模块启动失败!"); | 
 |  |  |             isException = true ; | 
 |  |  |          } | 
 |  |  |  | 
 |  |  |          if(!isException){ | 
 |  |  |             if(vo.showStartInfo != null && vo.showStartInfo){ | 
 |  |  |                System.out.println("Rmi模块成功启动,端口:" + vo.port + ",上下文为:" + vo.context ); | 
 |  |  |             } | 
 |  |  |          } | 
 |  |  |          callback.call(null); | 
 |  |  |       } | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    @Override | 
 |  |  |    public void stop(UnitCallbackInterface callback) { | 
 |  |  |    } | 
 |  |  | 	 | 
 |  |  |  | 
 |  |  |    public static boolean isStarted() { | 
 |  |  |       return started; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    public RmiUnitAdapter getAdapter() { | 
 |  |  |       return adapter; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  | 	 | 
 |  |  | } |