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;
|
}
|
|
|
}
|