|
Scala example source code file (RemoteRef.scala)
The Scala RemoteRef.scala source code/* __ *\ ** ________ ___ / / ___ Scala API ** ** / __/ __// _ | / / / _ | (c) 2002-2011, LAMP/EPFL ** ** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** ** /____/\___/_/ |_/____/_/ | | ** ** |/ ** \* */ // $Id: RemoteRef.scala 18365 2009-07-21 11:00:42Z michelou $ package scala.runtime import java.net.{InetAddress, MalformedURLException} import java.rmi.{NoSuchObjectException, NotBoundException, Remote} import java.rmi.registry.{LocateRegistry, Registry} import java.rmi.server.{ExportException, RemoteObject, UnicastRemoteObject} import scala.runtime.remoting.{Debug, RemoteGC} /** * * @author Stephane Micheloud * @version 1.0 */ object RemoteRef { /*extends Thread { start() private class QuitException extends Exception private var isTerminated = false // keeps track of live remote objects val remoteGC = new RemoteGC override def run() { info("started thread") try { while (!isTerminated) { this.synchronized { try { wait(200) } catch { case _: InterruptedException => if (isTerminated) throw new QuitException } remoteGC.gc() if (remoteGC.allClosed) throw new QuitException } // synchronized } } catch { case _: QuitException => // allow thread to exit } } */ try { val prop = System.getProperty("sun.rmi.dgc.server.gcInterval") if (prop eq null) System.setProperty("sun.rmi.dgc.server.gcInterval", "10000") } catch { case e => error(e.getMessage) } private val host = try { val prop = System.getProperty("java.rmi.server.hostname") if (prop ne null) prop else InetAddress.getLocalHost.getHostAddress } catch { case e => warning(e.getMessage) InetAddress.getLocalHost.getHostAddress } private val port = try { val prop = System.getProperty("scala.remoting.port") if (prop ne null) prop.toInt else Registry.REGISTRY_PORT } catch { case e => warning(e.getMessage) Registry.REGISTRY_PORT // default port } private val registry = try { LocateRegistry.createRegistry(port) } catch { case e => warning(e.getMessage) LocateRegistry.getRegistry(host, port) } private val prefix = "//"+host+":"+port+"/" printDebugInfos // Variant 1: rebind/unbind def bind(name: String, x: Remote): Remote = try { registry.rebind(prefix+name, x) info("\""+prefix+name+"\" bound") val stub = RemoteObject.toStub(x) //remoteGC.newRef(stub) stub } catch { case e: MalformedURLException => error(e.getMessage); null case e: ExportException => info(""+e); null case e: Exception => // AlreadyBoundException, etc.. throw e } def unbind(name: String) = try { registry.unbind(prefix+name) info("\""+name+"\" unbound") } catch { case e: java.io.EOFException => warning(e.getMessage) case e: NotBoundException => warning(e.getMessage+" already unbound") case e: MalformedURLException => error(e.getMessage) case e: Exception => throw e } /* // Variant 2: un-/exportObject def bind(name: String, x: Remote): Remote = try { val ex = UnicastRemoteObject.exportObject(x) registry.rebind(prefix+name, ex) info("\""+prefix+name+"\" bound") //val stub = RemoteObject.toStub(ex) //remoteGC.newRef(ex) ex //stub } catch { case e: MalformedURLException => error(e.getMessage); null case e: ExportException => info(""+e); null case e: Exception => // AlreadyBoundException, etc.. throw e } def unbind(x: Remote) { try { UnicastRemoteObject.unexportObject(x, false) info("\""+x+"\" unbound") } catch { case e: java.io.EOFException => warning(e.getMessage) case e: NotBoundException => warning(e.getMessage+" already unbound") case e: MalformedURLException => error(e.getMessage) case e: Exception => throw e } } */ private def info(msg: String) { Debug.info("[RemoteRef] "+msg) } private def warning(msg: String) { Debug.warning("[RemoteRef] "+msg) } private def error(msg: String) { Debug.error("[RemoteRef] "+msg) } private def printDebugInfos() { def property(name: String): String = name+"="+( try { System.getProperty(name, "") } catch { case e => warning(e.getMessage); "?" }) info(property("java.rmi.server.hostname")) info(property("sun.rmi.dgc.server.gcInterval")) info("registry="+registry) info("prefix="+prefix) } } Other Scala examples (source code examples)Here is a short list of links related to this Scala RemoteRef.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.