pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/rmi/RmiUnit.java
New file
@@ -0,0 +1,101 @@
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;
   }
}