Author: thobbs
Date: Thu Apr 19 12:10:36 2012
New Revision: 1327920

URL: http://svn.apache.org/viewvc?rev=1327920&view=rev
Log:
Moved some files around, deleted ones no longer used.  Added some javadocs.

Added:
    
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/
    
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/CheckServices.java
    
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartAll.java
    
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartHttpServer.java
    
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartLookupService.java
    
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartMahaloService.java
    
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartOutriggerService.java
Removed:
    river/jtsk/skunk/easystart/src-extra/empty.config
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/CheckServices.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartAll.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartHttpServer.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartLookupService.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartMahaloService.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartOutriggerService.java
Modified:
    river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/Djinn.scala
    
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/LookupServices.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/AbstractEasyConfiguration.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ApplicationOptions.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ConfigurationFactory.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/DefaultOptions.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/JavaSpaceConfiguration.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/LookupServiceConfiguration.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/TransactionServiceConfiguration.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/start.config

Modified: 
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=1327920&r1=1327919&r2=1327920&view=diff
==============================================================================
--- river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/Djinn.scala 
(original)
+++ river/jtsk/skunk/easystart/scala-src/org/apache/river/scala/Djinn.scala Thu 
Apr 19 12:10:36 2012
@@ -156,8 +156,7 @@ object Djinn {
   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 UnicastDiscovery (new 
LookupLocator("jini://localhost")))
 //    val djinn = new Djinn(new MulticastDiscovery)
     
     djinn.handleNewService({event: ServiceDiscoveryEvent => println("Found 
one!")})

Modified: 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/LookupServices.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/LookupServices.java?rev=1327920&r1=1327919&r2=1327920&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/LookupServices.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/LookupServices.java
 Thu Apr 19 12:10:36 2012
@@ -19,7 +19,7 @@ package org.apache.river.extra.examples.
 
 import java.io.IOException;
 import java.util.Arrays;
-import java.util.List;
+import java.util.Collection;
 import java.util.logging.Logger;
 
 import net.jini.admin.Administrable;
@@ -55,7 +55,7 @@ public class LookupServices {
                                                                                
                           new Class<?>[] { ExampleService.class },
                                                                                
                           null);
                
-               List<ServiceItem> serviceItems = disco.lookupAll(template);
+               Collection<ServiceItem> serviceItems = 
disco.lookupAll(template);
                log.severe("Found "+serviceItems.size()+" services");
                for(ServiceItem si : serviceItems) {
                        log.severe("\tAttributes: 
"+Arrays.toString(si.attributeSets));

Added: 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/CheckServices.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/CheckServices.java?rev=1327920&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/CheckServices.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/CheckServices.java
 Thu Apr 19 12:10:36 2012
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.river.extra.examples.easystart.riverservices;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.Socket;
+import java.rmi.RMISecurityManager;
+import java.util.Arrays;
+import java.util.logging.Logger;
+
+import net.jini.admin.Administrable;
+import net.jini.admin.JoinAdmin;
+import net.jini.core.discovery.LookupLocator;
+import net.jini.core.lookup.ServiceItem;
+import net.jini.core.lookup.ServiceMatches;
+import net.jini.core.lookup.ServiceRegistrar;
+import net.jini.core.lookup.ServiceTemplate;
+import net.jini.core.transaction.server.TransactionManager;
+import net.jini.lookup.DiscoveryAdmin;
+import net.jini.space.JavaSpace;
+
+public class CheckServices {
+
+       private static final Logger log = 
Logger.getLogger(CheckServices.class.getName());
+       
+       public static void main(String[] args) throws IOException, 
ClassNotFoundException {
+               int port = 8080;
+               
+               System.setSecurityManager(new RMISecurityManager());
+               
+               checkHttpServer(port);
+               
+               checkLookupServices();
+               checkSpaces();
+               checkTransactionManagers();
+               
+               checkLookupServices("jini://localhost:4161");
+               checkSpaces("jini://localhost:4161");
+               checkTransactionManagers("jini://localhost:4161");
+//             
+//             checkAll();
+       }
+
+       private static void checkHttpServer(int port) throws IOException {
+               Socket s = new Socket("localhost", 8080);
+               InputStream in = s.getInputStream();
+               if(null != in) {
+                       log.info("HTTP server is up on port "+port);
+               } else {
+                       log.warning("HTTP server is not up on port "+port);
+               }
+               in.close();
+       }
+
+       private static void checkLookupServices() throws IOException, 
ClassNotFoundException {
+               checkLookupServices("jini://localhost");
+       }
+       private static void checkLookupServices(String lus) throws IOException, 
ClassNotFoundException {
+               LookupLocator ll = new LookupLocator(lus);
+               ServiceRegistrar sr = ll.getRegistrar();
+               
+               if(null != sr) {
+                       log.info("Lookup service found with ID 
"+sr.getServiceID());
+                       
+                       ServiceTemplate st = new 
ServiceTemplate(sr.getServiceID(), null, null);
+                       ServiceMatches sms = sr.lookup(st, 1);
+                       for(ServiceItem sm : sms.items) {
+                               log.info("Lookup service found: 
"+Arrays.toString(sm.attributeSets));
+                               JoinAdmin jAdmin = (JoinAdmin) 
((Administrable)sm.service).getAdmin();
+                               log.info("Lookup groups: 
"+Arrays.toString(jAdmin.getLookupGroups()));
+                               log.info("Lookup Attributes: 
"+Arrays.toString(jAdmin.getLookupAttributes()));
+                               DiscoveryAdmin dAdmin = (DiscoveryAdmin) 
((Administrable)sm.service).getAdmin();
+                               log.info("Member groups: 
"+Arrays.toString(dAdmin.getMemberGroups()));
+                       }
+               } else {
+                       log.warning("Lookup service could not be found");
+               }
+                                       
+       }
+       
+       private static void checkSpaces() throws IOException, 
ClassNotFoundException {
+               checkSpaces("jini://localhost");
+       }
+       private static void checkSpaces(String lus) throws IOException, 
ClassNotFoundException {
+               LookupLocator ll = new LookupLocator(lus);
+               ServiceRegistrar sr = ll.getRegistrar();
+               
+               if(null != sr) {
+                       
+                       ServiceTemplate tmpl = new ServiceTemplate(null, new 
Class[] { JavaSpace.class }, null);
+                       ServiceMatches sms =sr.lookup(tmpl, Integer.MAX_VALUE);
+                       
+                       if(0 == sms.items.length) {
+                               log.severe("No spaces found");
+                       } else {
+                               log.info("Found "+sms.items.length+" spaces");
+                       }
+                       
+                       for(ServiceItem sm : sms.items) {
+                               log.info("Space found: 
"+Arrays.toString(sm.attributeSets));
+                       }
+               } else {
+                       log.warning("Lookup service could not be found");
+               }
+       }
+       
+       private static void checkTransactionManagers() throws IOException, 
ClassNotFoundException {
+               checkTransactionManagers("jini://localhost");
+       }
+       private static void checkTransactionManagers(String lus) throws 
IOException, ClassNotFoundException {
+               LookupLocator ll = new LookupLocator(lus);
+               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 {
+                               log.info("Found "+sms.items.length+" 
transaction managers");
+                       }
+                       
+                       for(ServiceItem sm : sms.items) {
+                               log.info("Transaction Manager found: 
"+Arrays.toString(sm.attributeSets));
+                       }
+               } else {
+                       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

Added: 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartAll.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartAll.java?rev=1327920&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartAll.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartAll.java
 Thu Apr 19 12:10:36 2012
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.river.extra.examples.easystart.riverservices;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.logging.Logger;
+
+import net.jini.config.ConfigurationException;
+
+import org.apache.river.extra.easystart.config.ApplicationOptions;
+import org.apache.river.extra.easystart.config.ConfigurationFactory;
+import org.apache.river.extra.easystart.config.LookupServiceConfiguration;
+
+import com.sun.jini.start.ServiceStarter;
+
+public class StartAll {
+
+       private static final Logger log = 
Logger.getLogger(StartAll.class.getName());
+       
+       private static final int RIVER_HOME_INDEX = 0;
+       private static final int HTTP_PORT_INDEX = 1;
+       
+       public static void main(String[] args) throws ConfigurationException, 
IOException {
+               validateArgs(args);
+               
+               final String RIVER_HOME = args[RIVER_HOME_INDEX];
+               final int HTTP_PORT = Integer.parseInt(args[HTTP_PORT_INDEX]);
+               
+               System.getProperties().setProperty("RIVER_HOME", RIVER_HOME);
+               
+               log.info("Using RIVER_HOME="+RIVER_HOME);
+               log.info("Using HTTP_PORT="+HTTP_PORT);
+               
+               ApplicationOptions options = new ApplicationOptions();
+               options.setHttpOptions("localhost", HTTP_PORT, true);
+               options.setJiniPort(4161);
+               options.addLookupGroup("example");
+               
+               ConfigurationFactory configFac = new 
ConfigurationFactory(options);
+               
+               LookupServiceConfiguration config = 
configFac.lookupServiceConfig();
+               config.addMemberGroup("example");
+               ServiceStarter.main(config.riverConfig());
+               
+               
ServiceStarter.main(configFac.transactionServiceConfig().riverConfig());
+               ServiceStarter.main(configFac.spaceConfig().riverConfig());
+       }
+       
+       private static void validateArgs(String[] args) {
+               if(null == args || 2 != args.length) {
+                       throw new IllegalArgumentException("Expected first 
value of array to be RIVER_HOME");
+               }
+               
+               File riverHomeDir = new File(args[RIVER_HOME_INDEX]);
+               if(!(riverHomeDir.exists() && riverHomeDir.isDirectory())) {
+                       throw new IllegalArgumentException("River home 
["+args[RIVER_HOME_INDEX]+"] either doesn't exist or is not a directory");
+               }
+               
+               try {
+                       Integer.parseInt(args[HTTP_PORT_INDEX]);
+               } catch (NumberFormatException nfe) {
+                       throw new IllegalArgumentException("Unexpected value 
found for HTTP port", nfe);
+               }
+               
+       }
+       
+}

Added: 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartHttpServer.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartHttpServer.java?rev=1327920&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartHttpServer.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartHttpServer.java
 Thu Apr 19 12:10:36 2012
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.river.extra.examples.easystart.riverservices;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.logging.Logger;
+
+import com.sun.jini.tool.ClassServer;
+
+public class StartHttpServer {
+
+       private static final Logger log = 
Logger.getLogger(StartHttpServer.class.getName());
+       
+       private static final int RIVER_HOME_INDEX = 0;
+       private static final int HTTP_PORT_INDEX = 1;
+       
+       /**
+        * The first value in args must be the value of $RIVER_HOME
+        * 
+        * @param args
+        * @throws IOException 
+        */
+       public static void main(String[] args) throws IOException {
+               validateArgs(args);
+
+               final String RIVER_HOME = args[RIVER_HOME_INDEX];
+               final int HTTP_PORT = Integer.parseInt(args[HTTP_PORT_INDEX]);
+               log.info("Using RIVER_HOME="+RIVER_HOME);
+               log.info("Using HTTP_PORT="+HTTP_PORT);
+               
+               final boolean trees = false;
+               final boolean stoppable = false;
+               final boolean verbose = true;
+               
+               ClassServer cs = new ClassServer(HTTP_PORT,
+                RIVER_HOME+File.separator+"lib-dl",
+                trees,
+                stoppable,
+                verbose);
+
+//        cs.setDaemon(true);
+        cs.start();
+
+       }
+       
+       private static void validateArgs(String[] args) {
+               if(null == args || 2 != args.length) {
+                       throw new IllegalArgumentException("Expected first 
value of array to be RIVER_HOME");
+               }
+               
+               File riverHomeDir = new File(args[RIVER_HOME_INDEX]);
+               if(!(riverHomeDir.exists() && riverHomeDir.isDirectory())) {
+                       throw new IllegalArgumentException("River home 
["+args[RIVER_HOME_INDEX]+"] either doesn't exist or is not a directory");
+               }
+               
+               try {
+                       Integer.parseInt(args[HTTP_PORT_INDEX]);
+               } catch (NumberFormatException nfe) {
+                       throw new IllegalArgumentException("Unexpected value 
found for HTTP port", nfe);
+               }
+       }
+
+}

Added: 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartLookupService.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartLookupService.java?rev=1327920&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartLookupService.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartLookupService.java
 Thu Apr 19 12:10:36 2012
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.river.extra.examples.easystart.riverservices;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.logging.Logger;
+
+import net.jini.config.ConfigurationException;
+
+import org.apache.river.extra.easystart.config.ApplicationOptions;
+import org.apache.river.extra.easystart.config.ConfigurationFactory;
+import org.apache.river.extra.easystart.config.LookupServiceConfiguration;
+
+import com.sun.jini.start.ServiceStarter;
+
+public class StartLookupService {
+
+
+       private static final Logger log = 
Logger.getLogger(StartLookupService.class.getName());
+       
+       private static final int RIVER_HOME_INDEX = 0;
+       private static final int HTTP_PORT_INDEX = 1;
+       
+       /**
+        * @param args
+        * @throws ConfigurationException 
+        * @throws IOException 
+        */
+       public static void main(String[] args) throws ConfigurationException, 
IOException {
+               validateArgs(args);
+               
+               final String RIVER_HOME = args[RIVER_HOME_INDEX];
+               final int HTTP_PORT = Integer.parseInt(args[HTTP_PORT_INDEX]);
+               
+               log.info("Using RIVER_HOME="+RIVER_HOME);
+               log.info("Using HTTP_PORT="+HTTP_PORT);
+               
+               ApplicationOptions options = new ApplicationOptions();
+               
+               ConfigurationFactory configFac = new 
ConfigurationFactory(options);
+               LookupServiceConfiguration config = 
configFac.lookupServiceConfig();
+               config.addMemberGroup("Lester").addMemberGroup("Jeff");
+               config.addLookupGroup("Sarah").addLookupGroup("Chuck");
+               config.setRiverPort(4160);
+               
+               ServiceStarter.main(config.riverConfig());
+               
+       }
+
+       private static void validateArgs(String[] args) {
+               if(null == args || 2 != args.length) {
+                       throw new IllegalArgumentException("Expected first 
value of array to be RIVER_HOME");
+               }
+               
+               File riverHomeDir = new File(args[RIVER_HOME_INDEX]);
+               if(!(riverHomeDir.exists() && riverHomeDir.isDirectory())) {
+                       throw new IllegalArgumentException("River home 
["+args[RIVER_HOME_INDEX]+"] either doesn't exist or is not a directory");
+               }
+               
+               try {
+                       Integer.parseInt(args[HTTP_PORT_INDEX]);
+               } catch (NumberFormatException nfe) {
+                       throw new IllegalArgumentException("Unexpected value 
found for HTTP port", nfe);
+               }
+               
+       }
+       
+}

Added: 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartMahaloService.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartMahaloService.java?rev=1327920&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartMahaloService.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartMahaloService.java
 Thu Apr 19 12:10:36 2012
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.river.extra.examples.easystart.riverservices;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.logging.Logger;
+
+import net.jini.config.ConfigurationException;
+
+import org.apache.river.extra.easystart.config.ApplicationOptions;
+import org.apache.river.extra.easystart.config.ConfigurationFactory;
+import org.apache.river.extra.easystart.config.TransactionServiceConfiguration;
+
+import com.sun.jini.start.ServiceStarter;
+
+public class StartMahaloService {
+
+
+       private static final Logger log = 
Logger.getLogger(StartMahaloService.class.getName());
+       
+       private static final int RIVER_HOME_INDEX = 0;
+       private static final int HTTP_PORT_INDEX = 1;
+       
+       /**
+        * @param args
+        * @throws ConfigurationException 
+        * @throws IOException 
+        */
+       public static void main(String[] args) throws ConfigurationException, 
IOException {
+               validateArgs(args);
+               
+               final String RIVER_HOME = args[RIVER_HOME_INDEX];
+               final int HTTP_PORT = Integer.parseInt(args[HTTP_PORT_INDEX]);
+               
+               log.info("Using RIVER_HOME="+RIVER_HOME);
+               log.info("Using HTTP_PORT="+HTTP_PORT);
+               
+               ApplicationOptions options = new ApplicationOptions();
+               
+               ConfigurationFactory configFac = new 
ConfigurationFactory(options);
+               TransactionServiceConfiguration config = 
configFac.transactionServiceConfig();
+               config.addLookupGroup("Lester").addLookupGroup("Jeff");
+               
+               ServiceStarter.main(config.riverConfig());
+       }
+
+       private static void validateArgs(String[] args) {
+               if(null == args || 2 != args.length) {
+                       throw new IllegalArgumentException("Expected first 
value of array to be RIVER_HOME");
+               }
+               
+               File riverHomeDir = new File(args[RIVER_HOME_INDEX]);
+               if(!(riverHomeDir.exists() && riverHomeDir.isDirectory())) {
+                       throw new IllegalArgumentException("River home 
["+args[RIVER_HOME_INDEX]+"] either doesn't exist or is not a directory");
+               }
+               
+               try {
+                       Integer.parseInt(args[HTTP_PORT_INDEX]);
+               } catch (NumberFormatException nfe) {
+                       throw new IllegalArgumentException("Unexpected value 
found for HTTP port", nfe);
+               }
+               
+       }
+       
+}

Added: 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartOutriggerService.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartOutriggerService.java?rev=1327920&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartOutriggerService.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra-examples/org/apache/river/extra/examples/easystart/riverservices/StartOutriggerService.java
 Thu Apr 19 12:10:36 2012
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.river.extra.examples.easystart.riverservices;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.logging.Logger;
+
+import net.jini.config.ConfigurationException;
+
+import org.apache.river.extra.easystart.config.ApplicationOptions;
+import org.apache.river.extra.easystart.config.ConfigurationFactory;
+import org.apache.river.extra.easystart.config.JavaSpaceConfiguration;
+
+import com.sun.jini.start.ServiceStarter;
+
+public class StartOutriggerService {
+
+
+       private static final Logger log = 
Logger.getLogger(StartOutriggerService.class.getName());
+       
+       private static final int RIVER_HOME_INDEX = 0;
+       private static final int HTTP_PORT_INDEX = 1;
+       
+       /**
+        * @param args
+        * @throws ConfigurationException 
+        * @throws IOException 
+        */
+       public static void main(String[] args) throws ConfigurationException, 
IOException {
+               validateArgs(args);
+               
+               final String RIVER_HOME = args[RIVER_HOME_INDEX];
+               final int HTTP_PORT = Integer.parseInt(args[HTTP_PORT_INDEX]);
+               
+               log.info("Using RIVER_HOME="+RIVER_HOME);
+               log.info("Using HTTP_PORT="+HTTP_PORT);
+               
+               ApplicationOptions options = new ApplicationOptions();
+               
+               ConfigurationFactory configFac = new 
ConfigurationFactory(options);
+               JavaSpaceConfiguration config = configFac.spaceConfig();
+               config.addLookupGroup("Lester").addLookupGroup("Jeff");
+               
+               ServiceStarter.main(config.riverConfig());
+       }
+
+       private static void validateArgs(String[] args) {
+               if(null == args || 2 != args.length) {
+                       throw new IllegalArgumentException("Expected first 
value of array to be RIVER_HOME");
+               }
+               
+               File riverHomeDir = new File(args[RIVER_HOME_INDEX]);
+               if(!(riverHomeDir.exists() && riverHomeDir.isDirectory())) {
+                       throw new IllegalArgumentException("River home 
["+args[RIVER_HOME_INDEX]+"] either doesn't exist or is not a directory");
+               }
+               
+               try {
+                       Integer.parseInt(args[HTTP_PORT_INDEX]);
+               } catch (NumberFormatException nfe) {
+                       throw new IllegalArgumentException("Unexpected value 
found for HTTP port", nfe);
+               }
+               
+       }
+       
+}

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/AbstractEasyConfiguration.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/AbstractEasyConfiguration.java?rev=1327920&r1=1327919&r2=1327920&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/AbstractEasyConfiguration.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/AbstractEasyConfiguration.java
 Thu Apr 19 12:10:36 2012
@@ -34,28 +34,53 @@ import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
 
+import com.sun.jini.start.ServiceStarter;
+
+/**
+ * Base class which knows how to convert from the user defined {@link Setting}
+ * and {@link DefaultOptions} to a {@link Configuration} implementation that
+ * can be successfully used with the standard {@link ServiceStarter}
+ * 
+ * @author Tom Hobbs
+ *
+ */
 public class AbstractEasyConfiguration {
 
        private static final Logger LOGGER = 
Logger.getLogger(AbstractEasyConfiguration.class.getName());
        
-       private final DefaultOptions options;
+       private final ApplicationOptions options;
        
-       protected AbstractEasyConfiguration(DefaultOptions opts) {
-               this.options = (DefaultOptions) opts.clone();
+       protected AbstractEasyConfiguration(ApplicationOptions opts) {
+               if(null == opts) {
+                       throw new IllegalArgumentException("Input opts cannot 
be null");
+               }
+               this.options = (ApplicationOptions) opts.clone();
        }
-       
 
-       protected DefaultOptions getDefaultOptions() {
+       protected ApplicationOptions getDefaultOptions() {
                return options;
        }
        
        public AbstractEasyConfiguration addLookupGroup(String grp) {
-               getGroupSetting(DefaultOptions.LOOKUP_GROUP).add(grp);
+               options.addLookupGroup(grp);
                return this;
        }
-
+       
        public AbstractEasyConfiguration setRiverPort(int port) {
-               
getSetting(DefaultOptions.RIVER_PORT).setOverride(String.valueOf(port));
+               options.setJiniPort(port);
+               return this;
+       }
+
+       /**
+        * See comments on {@link ApplicationOptions.setHttpOptions}
+        *  
+        * @param host
+        * @param port
+        * @param stringLiteral
+        * @return
+        */
+       public AbstractEasyConfiguration setHttpOptions(String host, int port, 
boolean stringLiteral) {
+               options.setHttpOptions(host, port, stringLiteral);
                return this;
        }
 

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ApplicationOptions.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ApplicationOptions.java?rev=1327920&r1=1327919&r2=1327920&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ApplicationOptions.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ApplicationOptions.java
 Thu Apr 19 12:10:36 2012
@@ -19,12 +19,21 @@ package org.apache.river.extra.easystart
 
 import java.util.Collection;
 
+import net.jini.config.ConfigurationFile;
 import net.jini.lookup.entry.Name;
 
 import org.apache.river.extra.easystart.config.settings.Setting;
 
-
-
+/**
+ * A more convenient and easy to use version of {@link DefaultOptions} users 
+ * are encouraged to use or extend this class when adapting easystart 
+ * configuration to their own needs.
+ * 
+ * Largely, this class just provides easy to understand convenience methods.
+ * 
+ * @author Tom Hobbs
+ *
+ */
 public class ApplicationOptions extends DefaultOptions {
 
        public ApplicationOptions() {
@@ -36,6 +45,40 @@ public class ApplicationOptions extends 
                return this;
        }
        
+       /**
+        * Self explanitory class, with the exception of one of the arguments.
+        * 
+        * Specifically, <code>stringLiteral</code> is used to determine what 
type
+        * of content is supplied as the value of the <code>server</code> 
argument.
+        * 
+        * E.g. 
+        * <code>
+        * String server = "localhost";
+        * int port = 8080;
+        * boolean stringLiteral = true;
+        * options.setHttpOptions(server, port, stringLiteral);
+        * </code>
+        * 
+        * Or
+        * <code>
+        * String server = "ConfigUtil.getHostName()";
+        * int port = 8080;
+        * boolean stringLiteral = false;
+        * options.setHttpOptions(server, port, stringLiteral);
+        * </code>
+        * 
+        * In the second one, the value of <code>server</code> is actually a 
+        * {@link ConfigurationFile} command to ascertain the hostname of server
+        * on which the code is running.  Here, the value of 
+        * <code>stringLiteral</code> is set to <code>false</code>. 
+        * 
+        * @param server
+        * @param port
+        * @param stringLiteral
+        *                
+        *    
+        * @return
+        */
        public ApplicationOptions setHttpOptions(String server, int port, 
boolean stringLiteral) {
                
super.get(DefaultOptions.HTTP_SERVER).setOverride(String.valueOf(server), 
stringLiteral);
                
super.get(DefaultOptions.HTTP_PORT).setOverride(String.valueOf(port));
@@ -66,11 +109,21 @@ public class ApplicationOptions extends 
                return this;
        }
        
+       /**
+        * This class needs to be extended to support more {@link Entry}s than
+        * just {@link Name}.
+        * 
+        * @param name
+        * @return
+        */
        public ApplicationOptions addInitialLookupAttribute(Name name) {
                super.getInitialLookupAttributes().add(name);
                return this;
        }
        
+       /**
+        * Provides a deep clone of the object.
+        */
        @Override
        public Object clone() {
                ApplicationOptions clone = new ApplicationOptions();
@@ -82,4 +135,5 @@ public class ApplicationOptions extends 
                
                return clone;
        }
+
 }

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ConfigurationFactory.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ConfigurationFactory.java?rev=1327920&r1=1327919&r2=1327920&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ConfigurationFactory.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ConfigurationFactory.java
 Thu Apr 19 12:10:36 2012
@@ -17,12 +17,30 @@
  */
 package org.apache.river.extra.easystart.config;
 
-
+/**
+ * Convenience class which allows for the easy creation of different types of
+ * configuration according to the supplied djinn options.
+ * 
+ * Users are encouraged to extend this class to provide additional 
configuration
+ * methods for their own services.
+ * 
+ * @author Tom Hobbs
+ *
+ */
 public class ConfigurationFactory {
 
        private final ApplicationOptions options;
        
+       /**
+        * Creates such a configuration factory, and clones the supplied options
+        * before it starts to use them.
+        * 
+        * @param options
+        */
        public ConfigurationFactory(ApplicationOptions options) {
+               if(null == options) {
+                       throw new IllegalArgumentException("Input options 
cannot be null");
+               }
                this.options = (ApplicationOptions) options.clone();
        }
 
@@ -38,6 +56,11 @@ public class ConfigurationFactory {
                return new TransactionServiceConfiguration(options);
        }
        
+       /**
+        * Convenience method for extending classes to be able to get access to 
a 
+        * clone of the supplied options.
+        * @return
+        */
        protected ApplicationOptions getDefaultOptions() {
                return (ApplicationOptions) this.options.clone();
        }

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/DefaultOptions.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/DefaultOptions.java?rev=1327920&r1=1327919&r2=1327920&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/DefaultOptions.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/DefaultOptions.java
 Thu Apr 19 12:10:36 2012
@@ -32,17 +32,83 @@ import org.apache.river.extra.easystart.
 import org.apache.river.extra.easystart.config.settings.ServerExporterSetting;
 import org.apache.river.extra.easystart.config.settings.Setting;
 
+/**
+ * Base implementation of the concept of creating a series of options to which
+ * a djinn's services should be started as.  Jini ports, lookup groups and so
+ * on.
+ * 
+ * Users are encouraged to use the more convenient {@link ApplicationOptions}
+ * version, or extend that class, instead of using this one directly.  
However, 
+ * it is likely that in some instances it will be inevitable that this class 
must
+ * be extended or enhanced in some fashion.
+ * 
+ * At time of writing, it is only possible to reconfigure the most simplest 
and 
+ * common options for service starting.
+ * 
+ * For configuring specific classes of service, it is recommended that such 
+ * specialisations be made in specific implementations of 
+ * {@link AbstractEasyConfiguration}.  Follow links below for examples.
+ * 
+ * Typically, classes that pass implementations of DefaultOptions around should
+ * either clone their input argument before modification or a contract between
+ * classes should somehow be enforced so that they only receive a cloned 
object.
+ * 
+ * <b>Important:</b><br/>
+ * This class expects that the system environment <code>RIVER_HOME</code> has 
+ * been set.  The value should be the directory of the root of the River 
+ * installation.  For example, assuming the River distribution has been 
+ * downloaded and extracted to <code>/home/tom/java/river/River2.1/</code> such
+ * that <code>src</code>, <code>lib</code>, <code>lib-dl</code> etc are 
+ * immediately under that directory then <code>RIVER_HOME</code> should be set
+ * to <code>/home/tom/java/river/River2.1/</code>.
+ * 
+ * 
+ * Many of the static String fields specify <em>unique</em> names of different 
+ * configuration items for every service in the djinn.  In some instances, 
+ * e.g. <code>MEMBER_GROUPS</code> the value is set to a meaningful Jini
+ * epecification configuration entry, but this is not the case for all such
+ * fields.
+ * 
+ * @author Tom Hobbs
+ * 
+ * @see {@link LookupServiceConfiguration}
+ * @see {@link JavaSpaceConfiguration}
+ * @see {@link TransactionServiceConfiguration}
+ *
+ */
 public class DefaultOptions implements Cloneable {
 
        private static final Logger LOGGER = 
Logger.getLogger(DefaultOptions.class.getName());
 
+       /**
+        * String format which does not provide any markup.
+        */
        public static final String NO_FORMAT = "%s";
+       
+       /**
+        * String format which puts double quotes around a supplied String.
+        */
        public static final String STRING_FORMAT = "\"%s\"";
+       
+       /**
+        * String format which puts escaped quotes around a supplied String.
+        * E.g. 
+        * <code>
+        * String s = "foo";
+        * String formatted = String.format(ESCAPPED_STRING_FORMAT, s);
+        * System.out.println(formatted);
+        * </code>
+        * would print <code>\"foo\"</code>
+        * 
+        */
        public static final String ESCAPED_STRING_FORMAT = "\\\"%s\\\"";
+       
+       /**
+        * String format for an integer
+        */
        public static final String INTEGER_FORMAT = "%s";
        
-       private static final String RIVER_HOME_ENV_NAME = "RIVER_HOME";
-
+    // unique setting keys start
        public static final String MEMBER_GROUP = "initialMemberGroups";
        public static final String LOOKUP_GROUP = "initialLookupGroups";
        public static final String RIVER_PORT = "initialUnicastDiscoveryPort";
@@ -55,17 +121,25 @@ public class DefaultOptions implements C
        public static final String HTTP_SERVER = "httpServer";
        public static final String SERVICE_NAME = "serviceName";
        public static final String INITIAL_ATTRIBS = "initialLookupAttributes";
+       // unique setting keys end
 
+       public static final String DEFAULT_JINI_PORT = "4160";
+       public static final String DEFAULT_HTTP_PORT = "8080";
        
-       private static String RIVER_HOME_DIR;
+       private static final String RIVER_HOME_ENV_NAME = "RIVER_HOME";
+       private static final String RIVER_HOME_DIR;
+       /**
+        * Checks that the <code>RIVER_HOME</code> environment variable has 
been set
+        */
        static {
-               RIVER_HOME_DIR = (String) 
System.getProperties().get(RIVER_HOME_ENV_NAME);
-               if(null == RIVER_HOME_DIR) {
+               final String rh = (String) 
System.getProperties().get(RIVER_HOME_ENV_NAME);
+               if(null == rh) {
                        LOGGER.severe(RIVER_HOME_ENV_NAME+" has not been set");
                        RIVER_HOME_DIR = ".";
                } else {
-                       LOGGER.severe("Using 
"+RIVER_HOME_ENV_NAME+"="+RIVER_HOME_DIR);
+                       RIVER_HOME_DIR = rh;
                }
+               LOGGER.severe("Using "+RIVER_HOME_ENV_NAME+"="+RIVER_HOME_DIR);
        }
        
        private final Map<String, Setting> options = new HashMap<String, 
Setting>();
@@ -73,8 +147,8 @@ public class DefaultOptions implements C
        protected DefaultOptions() {
                options.put(RIVER_HOME, new Setting(RIVER_HOME, RIVER_HOME_DIR, 
STRING_FORMAT, false));
                options.put("servicePackageName", new 
Setting("servicePackageName", "org.apache.river", NO_FORMAT, false));
-               options.put(RIVER_PORT, new Setting(RIVER_PORT, "4160", 
INTEGER_FORMAT, true));
-               options.put(HTTP_PORT, new Setting(HTTP_PORT, "8080", 
INTEGER_FORMAT, false));
+               options.put(RIVER_PORT, new Setting(RIVER_PORT, 
DEFAULT_JINI_PORT, INTEGER_FORMAT, true));
+               options.put(HTTP_PORT, new Setting(HTTP_PORT, 
DEFAULT_HTTP_PORT, INTEGER_FORMAT, false));
                options.put(MEMBER_GROUP, new GroupedSetting(MEMBER_GROUP,
                                                                                
                                new LinkedList<String>(),
                                                                                
                                NO_FORMAT, 
@@ -118,22 +192,66 @@ public class DefaultOptions implements C
                }
        }
        
+       /**
+        * 
+        * @param key
+        * @return
+        * @throws IllegalArgumentException
+        *                 If no setting is found for that key
+        */
        protected Setting get(String key) {
-               return options.get(key);
+               Setting setting = options.get(key);
+               if(null != setting) {
+                       return setting; 
+               } else {
+                       throw new IllegalArgumentException("No Setting found 
for key ["+key+"]");
+               }
        }
        
+       /**
+        * Convenience method to return the GroupedSetting for a given key.
+        * 
+        * @param key
+        * @return
+        * @throws IllegalArgumentException 
+        *                      If no Setting was found for that key or if the 
object at that
+        *                      key is not a GroupedSetting 
+        */
        protected GroupedSetting getGrouped(String key) {
-               return (GroupedSetting) get(key);
+               Setting setting = get(key);
+               if(setting instanceof GroupedSetting) {
+                       return (GroupedSetting) setting;
+               } else {
+                       throw new IllegalArgumentException("Setting for 
["+key+"] was not a GroupedSetting.  Was "+setting.getClass().getName());
+               }
        }
        
+       /**
+        * Convenience method to return the initial lookup attributes setting
+        * 
+        * @return
+        */
        protected InitialLookupAttributesSetting getInitialLookupAttributes() {
-               return (InitialLookupAttributesSetting) get(INITIAL_ATTRIBS);
+               Setting setting = get(INITIAL_ATTRIBS);
+               if(setting instanceof InitialLookupAttributesSetting) {
+                       return (InitialLookupAttributesSetting) setting;
+               } else {
+                       throw new IllegalArgumentException("Critical problem 
with settings.  Setting for initial lookup attributes was not of class 
"+InitialLookupAttributesSetting.class+" was "+setting.getClass().getName());
+               }
        }
        
+       /**
+        * Returns all the options that have been set.
+        * 
+        * @return
+        */
        public Collection<Setting> getOptions() {
                return options.values();
        }
        
+       /**
+        * Does a deep clone of this class.
+        */
        @Override
        public Object clone() {
                Map<String, Setting> clonedOptions = new HashMap<String, 
Setting>();
@@ -146,8 +264,15 @@ public class DefaultOptions implements C
                return new DefaultOptions(clonedOptions);
        }
 
+       /**
+        * Adds an extra setting to the DefaultOptions.  Ignores null input.
+        * 
+        * @param n
+        */
        public void add(Setting n) {
-               options.put(n.getName(), n);
+               if(null != n) {
+                       options.put(n.getName(), n);
+               }
        }
        
 }

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/JavaSpaceConfiguration.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/JavaSpaceConfiguration.java?rev=1327920&r1=1327919&r2=1327920&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/JavaSpaceConfiguration.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/JavaSpaceConfiguration.java
 Thu Apr 19 12:10:36 2012
@@ -20,7 +20,11 @@ package org.apache.river.extra.easystart
 
 public class JavaSpaceConfiguration extends AbstractEasyConfiguration {
 
-       public JavaSpaceConfiguration(DefaultOptions opts) {
+       /**
+        * Provides sufficient configuration options to start outrigger.
+        * @param opts
+        */
+       public JavaSpaceConfiguration(ApplicationOptions opts) {
                super(opts);
                
                
getDefaultOptions().get(DefaultOptions.PACKAGE_NAME).setOverride("com.sun.jini.outrigger");

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/LookupServiceConfiguration.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/LookupServiceConfiguration.java?rev=1327920&r1=1327919&r2=1327920&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/LookupServiceConfiguration.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/LookupServiceConfiguration.java
 Thu Apr 19 12:10:36 2012
@@ -20,7 +20,11 @@ package org.apache.river.extra.easystart
 
 public class LookupServiceConfiguration extends AbstractEasyConfiguration {
 
-       public LookupServiceConfiguration(DefaultOptions opts) {
+       /**
+        * Provides sufficient configuration options to start reggie.
+        * @param opts
+        */
+       public LookupServiceConfiguration(ApplicationOptions opts) {
                super(opts);
                
                
getDefaultOptions().get(DefaultOptions.PACKAGE_NAME).setOverride("com.sun.jini.reggie");
@@ -31,6 +35,13 @@ public class LookupServiceConfiguration 
                
getDefaultOptions().getGrouped(DefaultOptions.CLASSPATH).add(opts.get(DefaultOptions.RIVER_HOME).getOverride()+"/lib/jsk-platform.jar");
        }
 
+       /**
+        * Remember that <em>member</em> and <em>lookup</em> groups behave 
different
+        * for service registrars than they do for "normal" services.
+        * 
+        * @param grp
+        * @return
+        */
        public LookupServiceConfiguration addMemberGroup(String grp) {
                getGroupSetting(DefaultOptions.MEMBER_GROUP).add(grp);
                return this;

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/TransactionServiceConfiguration.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/TransactionServiceConfiguration.java?rev=1327920&r1=1327919&r2=1327920&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/TransactionServiceConfiguration.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/TransactionServiceConfiguration.java
 Thu Apr 19 12:10:36 2012
@@ -20,7 +20,11 @@ package org.apache.river.extra.easystart
 
 public class TransactionServiceConfiguration extends AbstractEasyConfiguration 
{
 
-       protected TransactionServiceConfiguration(DefaultOptions opts) {
+       /**
+        * Provides sufficient configuration options to start mahalo.
+        * @param opts
+        */
+       protected TransactionServiceConfiguration(ApplicationOptions opts) {
                super(opts);
                
                
getDefaultOptions().get(DefaultOptions.PACKAGE_NAME).setOverride("com.sun.jini.mahalo");

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/start.config
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/start.config?rev=1327920&r1=1327919&r2=1327920&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/start.config
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/start.config
 Thu Apr 19 12:10:36 2012
@@ -22,6 +22,12 @@ import com.sun.jini.config.ConfigUtil;
 import com.sun.jini.start.NonActivatableServiceDescriptor;
 import com.sun.jini.start.ServiceDescriptor;
 
+/*
+ * An empty configuration to be overwritten programmatically by replacing 
+ * certain tokens.
+ *
+ */
+
 com.sun.jini.start {
 
     private static codebase = ${codebase};


Reply via email to