package com.csii.rmi.server; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.RMIClientSocketFactory; import java.rmi.server.RMIServerSocketFactory; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.csii.rmi.RemoteObjectDescriptor; import com.csii.rmi.RemoteSecurityManager; import com.csii.rmi.util.Utils; import com.csii.service.comm.Server; import com.csii.service.comm.rmi.RMINaming; public class SimpleRMIServer implements Server { protected Log log = LogFactory.getLog(getClass()); private String registryHost = "127.0.0.1"; //注册端口 private int registryPort = 10099; private String registHostIp; private RMIServerSocketFactory rmiServerSocketFactory; private RMIClientSocketFactory rmiClientSocketFactory; //传输端口 private int port = 10098; private boolean alive = false; //远程对象集合 private RemoteObjectDescriptor[] remoteObjects; public void setRegistHostIp(String registHostIp){ this.registHostIp = registHostIp; } // private boolean isListening(String registryHost, int registryPort) // { // try // { // Registry registry = LocateRegistry.getRegistry(registryHost, registryPort, this.rmiClientSocketFactory); // // Remote testService = new Remote() // { // }; // Remote remote = UnicastRemoteObject.exportObject(testService, this.port, this.rmiClientSocketFactory, this.rmiServerSocketFactory); // try // { // registry.rebind("InnerTest", remote); // } // catch (Exception e) // { // return false; // } // try // { // registry.unbind("InnerTest"); // } // catch (Exception e) { // this.log.error("unbind", e); // return false; // } // // return true; // } catch (Exception e1) { // } // return false; // } public synchronized void start(){ if (isAlive()){ return; } try{ //公网访问ip System.setProperty("java.rmi.server.hostname", this.registHostIp); if (this.log.isDebugEnabled()) this.log.debug("cannot find rmiRegistry at " + this.registryHost + ":" + this.registryPort); if (!Utils.isLocalAddress(this.registryHost)) throw new RuntimeException("Cannot located remote Registry Server."); try{ if (this.log.isDebugEnabled()) this.log.debug("create rmiRegistry at " + this.registryHost + ":" + this.registryPort); //在本地主机上创建并导出 Registry 实例,该本地主机使用的是与该实例通信的自定义套接字工厂 LocateRegistry.createRegistry(this.registryPort, this.rmiClientSocketFactory, this.rmiServerSocketFactory); //安全设置 RemoteSecurityManager.setup(); } catch (Exception e) { throw new RuntimeException("Cannot started Registry Server.", e); } //返回本地创建的指定 host 和 port 上对远程对象 Registry 的远程引用。 Registry registry = LocateRegistry.getRegistry(this.registryHost, this.registryPort, this.rmiClientSocketFactory); if (this.log.isDebugEnabled()) { this.log.debug("find rmiRegistry" + registry); } for (int i = 0; i < this.remoteObjects.length; i++){ RemoteObjectDescriptor desc = this.remoteObjects[i]; try{ RMINaming.rebind(desc.getName(), desc.getBean(), desc.getInterfaces(), this.port, this.rmiClientSocketFactory, this.rmiServerSocketFactory); }catch (Exception e){ this.log.error("rebind fail, try to rebind ", e); RMINaming.unbind(desc.getName(), this.rmiClientSocketFactory); RMINaming.bind(desc.getName(), desc.getBean(), desc.getInterfaces(), this.port, this.rmiClientSocketFactory, this.rmiServerSocketFactory); } } this.alive = true; this.log.info("Started... " + this); }catch (Exception e){ this.log.error("start", e); throw new RuntimeException(e); } } public boolean isAlive() { return this.alive; } public synchronized void shutdown() { if (!isAlive()) { return; } this.alive = false; try { Registry registry = LocateRegistry.getRegistry(this.registryHost, this.registryPort, this.rmiClientSocketFactory); for (int i = 0; i < this.remoteObjects.length; i++) { RemoteObjectDescriptor desc = this.remoteObjects[i]; RMINaming.unbind(desc.getName(), this.rmiClientSocketFactory); } } catch (Exception e) { this.log.error("shutdown", e); } } public void setRmiServerSocketFactory(RMIServerSocketFactory rmiServerSocketFactory) { this.rmiServerSocketFactory = rmiServerSocketFactory; } public void setRmiClientSocketFactory(RMIClientSocketFactory rmiClientSocketFactory) { this.rmiClientSocketFactory = rmiClientSocketFactory; } public void setRemoteObjects(RemoteObjectDescriptor[] remoteObjects) { this.remoteObjects = remoteObjects; } public void setRegistryHost(String registryHost) { this.registryHost = registryHost; } public void setRegistryPort(int registryPort) { this.registryPort = registryPort; } public void setPort(int port) { this.port = port; } public void setRemoteObjectList(List list) { this.remoteObjects = ((RemoteObjectDescriptor[])list.toArray(new RemoteObjectDescriptor[0])); } public void restart() { } }
最近下载更多
1971717082 LV2
2021年5月20日
bjwsnl LV22
2021年5月6日
longyin2018 LV14
2019年3月23日
mashangfacai LV2
2017年11月16日
annazhang LV29
2017年10月7日
hh516554097 LV10
2016年8月1日
zhangshangya LV2
2016年7月14日
penghuangit LV2
2016年6月17日
xiaoxuan LV4
2015年1月20日
yekun LV3
2014年11月10日
最近浏览更多
zhos0212 LV19
2022年7月11日
wyx065747 LV67
2022年3月9日
wxd1997 LV13
2022年3月9日
dongzhan LV12
2021年12月16日
1971717082 LV2
2021年5月20日
bjwsnl LV22
2021年5月6日
2929737994 LV1
2020年10月13日
bbdwpyyd LV2
2019年11月13日
longyin2018 LV14
2019年2月28日
大风知微 LV3
2019年1月22日