You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by th...@apache.org on 2012/02/03 15:39:49 UTC
svn commit: r1240193 - in /river/jtsk/skunk/easystart: scala-src/
scala-src/org/ scala-src/org/apache/ scala-src/org/apache/river/
scala-src/org/apache/river/scala/ src-extra/org/apache/river/extra/easystart/
Author: thobbs
Date: Fri Feb 3 14:39:48 2012
New Revision: 1240193
URL: http://svn.apache.org/viewvc?rev=1240193&view=rev
Log:
Added scala helpers. Started tidying up the easy config stuff, not even nearly finished though.
Added:
river/jtsk/skunk/easystart/scala-src/
river/jtsk/skunk/easystart/scala-src/org/
river/jtsk/skunk/easystart/scala-src/org/apache/
river/jtsk/skunk/easystart/scala-src/org/apache/river/
river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/
river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/Djinn.scala
river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/RemoteExecution.scala
Modified:
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/CheckServices.java
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/LookupServiceConfiguration.java
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/MahaloServiceConfiguration.java
Added: river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/Djinn.scala
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/Djinn.scala?rev=1240193&view=auto
==============================================================================
--- river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/Djinn.scala (added)
+++ river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/Djinn.scala Fri Feb 3 14:39:48 2012
@@ -0,0 +1,200 @@
+package org.apache.river.scala
+import net.jini.lookup.ServiceDiscoveryManager
+import java.util.ArrayList
+import java.util.Iterator
+import net.jini.core.lookup.ServiceItem
+import scala.collection.immutable.LinearSeq
+import scala.collection.generic.GenericTraversableTemplate
+import scala.collection.TraversableLike
+import java.rmi.RMISecurityManager
+import scala.collection.mutable.MutableList
+import scala.collection.immutable.List$
+import com.sun.jini.lookup.entry.LookupAttributes
+import net.jini.lookup.entry.Name
+import net.jini.core.entry.Entry
+import java.util.Arrays
+import org.apache.river.extra.easystart.discovery.MulticastDiscovery
+import org.apache.river.extra.easystart.discovery.UnicastDiscovery
+import net.jini.core.lookup.ServiceTemplate
+import net.jini.space.JavaSpace
+import org.apache.river.extra.easystart.discovery.EasyDiscovery
+import net.jini.core.discovery.LookupLocator
+import scala.collection.mutable.ListBuffer
+import net.jini.core.lookup.ServiceID
+import scala.collection.JavaConverters._
+import net.jini.lookup.ServiceDiscoveryEvent
+import net.jini.lookup.ServiceDiscoveryListener
+import scala.actors.Actor
+
+class Djinn(disco: EasyDiscovery) {
+
+ val doNothing = {e: ServiceDiscoveryEvent => ()}
+
+ case object Added
+ var serviceAddedFunc = doNothing
+
+ case object Removed
+ var serviceRemovedFunc = doNothing
+
+ case object Changed
+ var serviceChangedFunc = doNothing
+
+ class ServiceEventHandler extends Actor {
+ def act() = {
+ loop {
+ react {
+ case (Added, event :ServiceDiscoveryEvent) => serviceAddedFunc(event)
+ case (Removed, event :ServiceDiscoveryEvent) => serviceRemovedFunc(event)
+ case (Changed, event :ServiceDiscoveryEvent) => serviceChangedFunc(event)
+ case _ => doNothing
+ }
+ }
+ }
+ }
+
+ val ml = disco
+ val eventHandler = new ServiceEventHandler()
+ eventHandler.start()
+
+ ml.addServiceDiscoveryListener(new ServiceDiscoveryListener() {
+ def serviceRemoved(event: ServiceDiscoveryEvent) = {
+ eventHandler ! Removed
+ }
+ def serviceChanged(event: ServiceDiscoveryEvent) = {
+ eventHandler ! Changed
+ }
+ def serviceAdded(event: ServiceDiscoveryEvent) = {
+ eventHandler ! (Added, event)
+ }
+ })
+
+
+ def foreach[A](f: net.jini.core.lookup.ServiceItem => A) = {
+ try {
+ val itr = ml.iterator()
+ while (itr.hasNext()) {
+ val n = itr.next();
+ f(itr.next())
+ }
+ } catch {
+ case e:Throwable => println("Warning! Failed because: "+e.getMessage())
+ }
+ }
+
+ def map[A] (f: net.jini.core.lookup.ServiceItem => A): RemoteExecution[List[A]] = {
+ try {
+ val list = ListBuffer[A]()
+
+ val itr = ml.iterator()
+ while(itr.hasNext()) {
+ list += (f (itr.next()))
+ }
+
+ Result(list.toList)
+ } catch {
+ case e:Throwable => Problem(e)
+ }
+ }
+
+ def filter(template: net.jini.core.lookup.ServiceTemplate): RemoteExecution[List[net.jini.core.lookup.ServiceItem]] = {
+ try {
+ val list = ml.lookupAll(template)
+ Result(list.asScala.toList)
+ } catch {
+ case e:Throwable => Problem(e)
+ }
+ }
+
+ def handleNewService(f: ServiceDiscoveryEvent => Unit) = {
+ serviceAddedFunc = f
+ }
+
+ def handleRemovedService(f: ServiceDiscoveryEvent => Unit) = {
+ serviceAddedFunc = f
+ }
+
+ def handleChangedService(f: ServiceDiscoveryEvent => Unit) = {
+ serviceAddedFunc = f
+ }
+
+ def terminate = ml.terminate()
+
+}
+
+
+object Djinn {
+
+ def findName (attribs: Array[Entry]) : String = {
+ def asName (es: Array[Entry]) = es match {
+ case Array() => "No Name"
+ case _ if es.head.isInstanceOf[Name] => es.head.asInstanceOf[Name].name
+ }
+
+ asName (attribs filter { e: Entry => e.isInstanceOf[Name] })
+
+ }
+
+ def main(args: Array[String]) = {
+ println("Starting djinn")
+
+ val locators = Array[LookupLocator] (new LookupLocator("jini://localhost"))
+ val djinn = new Djinn(new UnicastDiscovery (locators))
+// val djinn = new Djinn(new MulticastDiscovery)
+
+ djinn.handleNewService({event: ServiceDiscoveryEvent => println("Found one!")})
+ djinn.handleRemovedService({event: ServiceDiscoveryEvent => println("Lost one!")})
+ djinn.handleChangedService({event: ServiceDiscoveryEvent => println("Service changed!")})
+
+ val printer = (si:ServiceItem) => println(si.serviceID)
+ val namer = (si:ServiceItem) => println(findName(si.attributeSets))
+
+// djinn map namer
+
+ val spaces = new ServiceTemplate(null,
+// Array[java.lang.Class[_]](classOf[JavaSpace]),
+ Array[java.lang.Class[_]](),
+ null)
+
+ djinn foreach namer
+
+// println(djinn filter spaces)
+
+// val allspaces = djinn filter spaces
+// println(allspaces.flatten)
+
+// val printer2 = {(si: ServiceItem) =>
+// si.serviceID.toString()
+// }
+//
+// val printId = { si: ServiceItem => si.serviceID }
+// val printIds = { sis: List[ServiceItem] => Some(sis map printId) }
+//
+// println(djinn filter spaces flatMap printIds)
+// djinn filter spaces flatMap printIds
+
+// djinn filter spaces map println
+// val mapped = djinn map {si:ServiceItem => si.serviceID}
+//
+// println(mapped.flatten)
+//
+// println (
+// mapped.flatMap({sis:List[ServiceID] =>
+// if(sis.length > 0) {
+// Some(sis)
+// } else {
+// None
+// }
+// })
+// )
+// djinn map printer
+
+ Thread.sleep(5000);
+
+ djinn terminate
+
+ println("Exiting");
+
+ System.exit(0)
+ }
+
+}
\ No newline at end of file
Added: river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/RemoteExecution.scala
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/RemoteExecution.scala?rev=1240193&view=auto
==============================================================================
--- river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/RemoteExecution.scala (added)
+++ river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/RemoteExecution.scala Fri Feb 3 14:39:48 2012
@@ -0,0 +1,39 @@
+package org.apache.river.scala
+
+sealed abstract class RemoteExecution[+A] {
+
+ self =>
+
+ def isException: Boolean
+ def get: A
+ def description: Throwable
+
+ def flatMap[B](f: A => Option[B]): Option[B] =
+ if(isException) {
+ println("Warning! Problem detected: "+description.getMessage())
+ None
+ } else {
+ f(this.get)
+ }
+
+// def flatten : A =
+// if(isException) {
+// println("Warning! Problem detected: "+description.getMessage())
+// None
+// } else {
+// this.get
+// }
+
+}
+
+final case class Result[+A](x: A) extends RemoteExecution[A] {
+ def isException = false;
+ def get = x
+ def description = throw new NoSuchElementException("Result.description")
+}
+
+final case class Problem(ex: Throwable) extends RemoteExecution[Nothing] {
+ def isException = true;
+ def get = throw new NoSuchElementException("Problem.get");
+ def description = ex
+}
\ No newline at end of file
Modified: river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/CheckServices.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/CheckServices.java?rev=1240193&r1=1240192&r2=1240193&view=diff
==============================================================================
--- river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/CheckServices.java (original)
+++ river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/CheckServices.java Fri Feb 3 14:39:48 2012
@@ -49,6 +49,8 @@ public class CheckServices {
checkLookupServices();
checkSpaces();
checkTransactionManagers();
+
+ checkAll();
}
private static void checkHttpServer(int port) throws IOException {
@@ -113,10 +115,10 @@ public class CheckServices {
ServiceRegistrar sr = ll.getRegistrar();
if(null != sr) {
-
+
ServiceTemplate tmpl = new ServiceTemplate(null, new Class[] { TransactionManager.class }, null);
ServiceMatches sms =sr.lookup(tmpl, Integer.MAX_VALUE);
-
+
if(0 == sms.items.length) {
log.severe("No Transaction Managers found");
} else {
@@ -130,5 +132,28 @@ public class CheckServices {
log.warning("Lookup service could not be found");
}
}
+
+ private static void checkAll() throws IOException, ClassNotFoundException {
+ LookupLocator ll = new LookupLocator("jini://localhost");
+ ServiceRegistrar sr = ll.getRegistrar();
+
+ if(null != sr) {
+
+ ServiceTemplate tmpl = new ServiceTemplate(null, null, null);
+ ServiceMatches sms =sr.lookup(tmpl, Integer.MAX_VALUE);
+
+ if(0 == sms.items.length) {
+ log.severe("No services found");
+ } else {
+ log.info("Found "+sms.items.length+" services");
+ }
+
+ for(ServiceItem sm : sms.items) {
+ log.info("Service found: "+Arrays.toString(sm.attributeSets));
+ }
+ } else {
+ log.warning("Lookup service could not be found");
+ }
+ }
}
\ No newline at end of file
Modified: river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/LookupServiceConfiguration.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/LookupServiceConfiguration.java?rev=1240193&r1=1240192&r2=1240193&view=diff
==============================================================================
--- river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/LookupServiceConfiguration.java (original)
+++ river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/LookupServiceConfiguration.java Fri Feb 3 14:39:48 2012
@@ -81,7 +81,7 @@ public class LookupServiceConfiguration
" ",
"http://", ConfigUtil.getHostName(), ":"+port+"/jsk-dl.jar" } );
- final String policy = "/home/tom/projects/river/easystart/src-extra/reggie.policy";
+ final String policy = "/home/tom/projects/river/easystart/src-extra/policy.all";
final String classpath = "/home/tom/projects/river/easystart/lib/reggie.jar";
final String config = "/home/tom/projects/river/easystart/src-extra/empty.config";
// final String config = "/home/tom/projects/river/easystart/src-extra/jrmp-reggie.config";
Modified: river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/MahaloServiceConfiguration.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/MahaloServiceConfiguration.java?rev=1240193&r1=1240192&r2=1240193&view=diff
==============================================================================
--- river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/MahaloServiceConfiguration.java (original)
+++ river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/MahaloServiceConfiguration.java Fri Feb 3 14:39:48 2012
@@ -73,7 +73,7 @@ public class MahaloServiceConfiguration
private ServiceDescriptor[] serviceDescriptorArray() {
- final String port = "8081";
+ final String port = "8080";
try {
String codebase = ConfigUtil.concat(
new Object[] {
@@ -81,7 +81,7 @@ public class MahaloServiceConfiguration
" ",
"http://", ConfigUtil.getHostName(), ":"+port+"/jsk-dl.jar" } );
- final String policy = "/home/tom/projects/river/easystart/src-extra/mahalo.policy";
+ final String policy = "/home/tom/projects/river/easystart/src-extra/policy.all";
final String classpath = "/home/tom/projects/river/easystart/lib/mahalo.jar";
final String config = "/home/tom/projects/river/easystart/src-extra/empty.config";
// final String config = "/home/tom/projects/river/easystart/src-extra/jrmp-outrigger-group.config";