You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2013/04/04 00:03:36 UTC

svn commit: r1464216 - in /uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli: CliBase.java DuccJobSubmit.java DuccManagedReservationSubmit.java DuccServiceApi.java DuccServiceSubmit.java DuccUiUtilities.java IUiOptions.java

Author: degenaro
Date: Wed Apr  3 22:03:35 2013
New Revision: 1464216

URL: http://svn.apache.org/r1464216
Log:
UIMA-2793 Support driver and process common specification for each of classpath, environment and jvmargs

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/CliBase.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccManagedReservationSubmit.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceSubmit.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccUiUtilities.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/IUiOptions.java

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/CliBase.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/CliBase.java?rev=1464216&r1=1464215&r2=1464216&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/CliBase.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/CliBase.java Wed Apr  3 22:03:35 2013
@@ -159,7 +159,12 @@ public abstract class CliBase
      */
     boolean resolve_service_dependencies(String endpoint)
     {
-        String jvmargs = cli_props.getProperty(UiOption.ProcessJvmArgs.pname());
+    	String key_ja = UiOption.ProcessJvmArgs.pname();
+        if ( cli_props.containsKey(UiOption.JvmArgs.pname()) ) {
+        	key_ja = UiOption.JvmArgs.pname();
+        }
+    	String jvmargs = cli_props.getProperty(key_ja);
+        
         Properties jvmprops = DuccUiUtilities.jvmArgsToProperties(jvmargs);
 
         String deps = cli_props.getProperty(UiOption.ServiceDependency.pname());
@@ -273,6 +278,10 @@ public abstract class CliBase
         this.init(myClassName, opts, args, cli_props, host_s, port_s, servlet, consoleCb, null);
     }
 
+    protected synchronized void init() {
+    	ducc_home = Utils.findDuccHome();
+    }
+    
     protected synchronized void init(String myClassName, UiOption[] opts, String[] args, DuccProperties cli_props, String host_s, String port_s, String servlet, IDuccCallback consoleCb, String logExtension)
     	throws Exception
     {
@@ -631,12 +640,19 @@ public abstract class CliBase
         if ( console_attach ) {
             console_listener = new ConsoleListener(this, consoleCb);
             
+            String key_pe = UiOption.ProcessEnvironment.pname();
+            String key_de = UiOption.DriverEnvironment.pname();
+            if ( cli_props.containsKey(UiOption.Environment.pname()) ) {
+            	key_pe = UiOption.Environment.pname();
+            	key_de = UiOption.Environment.pname();
+            }
+            
             if ( cli_props.containsKey(UiOption.ProcessAttachConsole.pname()) ) {
-                set_console_port(cli_props, UiOption.ProcessEnvironment.pname());
+                set_console_port(cli_props, key_pe);
             } 
             
             if  (cli_props.containsKey(UiOption.DriverAttachConsole.pname()) ) {
-                set_console_port(cli_props, UiOption.DriverEnvironment.pname());
+                set_console_port(cli_props, key_de);
             } 
         }
     }

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java?rev=1464216&r1=1464215&r2=1464216&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java Wed Apr  3 22:03:35 2013
@@ -42,8 +42,55 @@ public class DuccJobSubmit 
 	// public DuccJobSubmit(IDuccMessageProcessor duccMessageProcessor) {
 // 		this.duccMessageProcessor = duccMessageProcessor;
 // 	}
+    
+    UiOption[] opts_release = new UiOption[] {
+        UiOption.Help,
+        UiOption.Debug, 
+
+        UiOption.ProcessDebug,
+        UiOption.ProcessAttachConsole,
+        UiOption.DriverDebug,
+        UiOption.DriverAttachConsole,
+        UiOption.Timestamp,
+        UiOption.Description,
+        UiOption.SchedulingClass,
+
+        UiOption.LogDirectory,
+        UiOption.WorkingDirectory,
+        UiOption.Jvm,
+        
+        UiOption.JvmArgs,
+        UiOption.Classpath,
+        UiOption.Environment,
+       
+        UiOption.DriverDescriptorCR,
+        UiOption.DriverDescriptorCROverrides,
+        UiOption.DriverExceptionHandler,
+
+        UiOption.ProcessMemorySize,
+        UiOption.ProcessDD,
+        UiOption.ProcessDescriptorCM,
+        UiOption.ProcessDescriptorCMOverrides,
+        UiOption.ProcessDescriptorAE,
+        UiOption.ProcessDescriptorAEOverrides,
+        UiOption.ProcessDescriptorCC,
+        UiOption.ProcessDescriptorCCOverrides,
+        
+        UiOption.ProcessDeploymentsMax,
+        UiOption.ProcessInitializationFailuresCap,
+        UiOption.ProcessFailuresLimit,
+        UiOption.ProcessThreadCount,
+        UiOption.ProcessPerItemTimeMax,
+        UiOption.ProcessGetMetaTimeMax,
+
+        UiOption.Specification,
+        UiOption.WaitForCompletion,
+        UiOption.CancelJobOnInterrupt,
+        UiOption.ServiceDependency,
+        UiOption.ClasspathOrder,
+    };
 
-    UiOption[] opts = new UiOption[] {
+    UiOption[] opts_beta = new UiOption[] {
         UiOption.Help,
         UiOption.Debug, 
 
@@ -59,6 +106,10 @@ public class DuccJobSubmit 
         UiOption.WorkingDirectory,
         UiOption.Jvm,
 
+        UiOption.JvmArgs,
+        UiOption.Classpath,
+        UiOption.Environment,
+        
         UiOption.DriverJvmArgs,
         UiOption.DriverClasspath,
         UiOption.DriverEnvironment,
@@ -92,8 +143,9 @@ public class DuccJobSubmit 
         UiOption.ServiceDependency,
         UiOption.ClasspathOrder,
     };
-
-
+    
+    UiOption[] opts = opts_release;
+    
 	public DuccJobSubmit(ArrayList<String> args)
         throws Exception
     {
@@ -116,13 +168,21 @@ public class DuccJobSubmit 
         throws Exception
     {
         String[] arg_array = args.toArray(new String[args.size()]);
+        init();
+        if(DuccUiUtilities.isSupportedBeta()) {
+        	opts = opts_beta;
+        }
         init(this.getClass().getName(), opts, arg_array, jobRequestProperties, or_host, or_port, "or", consoleCb, null);
     }
 
 	public DuccJobSubmit(String[] args, IDuccCallback consoleCb)
         throws Exception
     {
-        init(this.getClass().getName(), opts, args, jobRequestProperties, or_host, or_port, "or", consoleCb, null);
+		init();
+		if(DuccUiUtilities.isSupportedBeta()) {
+       		opts = opts_beta;
+        }
+		init(this.getClass().getName(), opts, args, jobRequestProperties, or_host, or_port, "or", consoleCb, null);
     }
 
 	public DuccJobSubmit(Properties props, IDuccCallback consoleCb)
@@ -132,6 +192,10 @@ public class DuccJobSubmit 
             Object v = props.get(k);
             jobRequestProperties.put(k, v);
         }
+        init();
+        if(DuccUiUtilities.isSupportedBeta()) {
+        	opts = opts_beta;
+        }
         init(this.getClass().getName(), opts, null, jobRequestProperties, or_host, or_port, "or", consoleCb, null);
     }
 
@@ -147,7 +211,12 @@ public class DuccJobSubmit 
     protected void enrich_parameters_for_debug(Properties props)
         throws Exception
     {
-        
+        String key_process = UiOption.ProcessJvmArgs.pname();
+        String key_driver = UiOption.ProcessJvmArgs.pname();
+        if(jobRequestProperties.containsKey(UiOption.JvmArgs.pname())) {
+        	key_process = UiOption.JvmArgs.pname();
+        	key_driver = UiOption.JvmArgs.pname();
+        }
         try {        
             int jp_debug_port = -1;
             int jd_debug_port = -2;       // a trick, must be different from jp_debug_port; see below
@@ -161,7 +230,7 @@ public class DuccJobSubmit 
                 }
                 jp_debug_port = Integer.parseInt(jp_port_s);
                 
-                set_debug_parms(props, UiOption.ProcessJvmArgs.pname(), jp_debug_port);
+                set_debug_parms(props, key_process, jp_debug_port);
                 // For debugging, if the JP is being debugged, we have to force max processes to .1
                 props.setProperty(UiOption.ProcessDeploymentsMax.pname(), "1");
             }
@@ -173,7 +242,7 @@ public class DuccJobSubmit 
                     throw new IllegalArgumentException("Missing port for " + do_debug);
                 }
                 jd_debug_port = Integer.parseInt(jd_port_s);
-                set_debug_parms(props, UiOption.ProcessJvmArgs.pname(), jd_debug_port);
+                set_debug_parms(props, key_driver, jd_debug_port);
             }
             
             if ( jp_debug_port == jd_debug_port ) {
@@ -272,11 +341,6 @@ public class DuccJobSubmit 
 		}
 
     }
-	
-	private void adjust_jvm_args(Properties jobRequestProperties) {
-		adjust_specific_jvm_args(DuccPropertiesResolver.ducc_submit_driver_jvm_args, UiOption.DriverJvmArgs);
-		adjust_specific_jvm_args(DuccPropertiesResolver.ducc_submit_process_jvm_args, UiOption.ProcessJvmArgs);
-	}
 
 	//**********		
 	
@@ -291,23 +355,49 @@ public class DuccJobSubmit 
             return false;
 		}
         
-		/*
-		 * employ default driver classpath if not specified
-		 */
-		String driver_classpath = jobRequestProperties.getProperty(UiOption.DriverClasspath.pname());
-		if(driver_classpath == null) {
-			driver_classpath = System.getProperty("java.class.path");
-			jobRequestProperties.setProperty(UiOption.DriverClasspath.pname(), driver_classpath);
-		}
-
-		/*
-		 * employ default process classpath if not specified
-		 */
-		String process_classpath = jobRequestProperties.getProperty(UiOption.ProcessClasspath.pname());
-		if(process_classpath == null) {
-			process_classpath = System.getProperty("java.class.path");
-			jobRequestProperties.setProperty(UiOption.ProcessClasspath.pname(), process_classpath);
-		}
+        boolean cp0 = jobRequestProperties.containsKey(UiOption.Classpath.pname());
+        boolean cpd = jobRequestProperties.containsKey(UiOption.DriverClasspath.pname());
+        boolean cpp = jobRequestProperties.containsKey(UiOption.ProcessClasspath.pname());
+        
+        if(cp0 && cpd) {
+        	throw new IllegalArgumentException("Conflict: cannot specify both "+UiOption.Classpath.pname()+" and "+UiOption.DriverClasspath.pname());
+        }
+        if(cp0 && cpp) {
+        	throw new IllegalArgumentException("Conflict: cannot specify both "+UiOption.Classpath.pname()+" and "+UiOption.ProcessClasspath.pname());
+        }
+        if(cp0) {
+        	// Nothing to do
+        }
+        else {
+        	if(cpd || cpp) {
+        		/*
+        		 * employ default driver classpath if not specified
+        		 */
+        		String driver_classpath = jobRequestProperties.getProperty(UiOption.DriverClasspath.pname());
+        		if(driver_classpath == null) {
+        			driver_classpath = System.getProperty("java.class.path");
+        			jobRequestProperties.setProperty(UiOption.DriverClasspath.pname(), driver_classpath);
+        		}
+        		/*
+        		 * employ default process classpath if not specified
+        		 */
+        		String process_classpath = jobRequestProperties.getProperty(UiOption.ProcessClasspath.pname());
+        		if(process_classpath == null) {
+        			process_classpath = System.getProperty("java.class.path");
+        			jobRequestProperties.setProperty(UiOption.ProcessClasspath.pname(), process_classpath);
+        		}
+        	}
+        	else {
+        		/*
+        		 * employ default classpath if not specified
+        		 */
+        		String classpath = jobRequestProperties.getProperty(UiOption.Classpath.pname());
+        		if(classpath == null) {
+        			classpath = System.getProperty("java.class.path");
+        			jobRequestProperties.setProperty(UiOption.Classpath.pname(), classpath);
+        		}
+        	}
+        }
         
 		/*
 		 * employ default process initialization failures cap if not specified
@@ -331,14 +421,36 @@ public class DuccJobSubmit 
 		/*
 		 * set DUCC_LD_LIBRARY_PATH in driver, process environment
 		 */
-		if (!DuccUiUtilities.ducc_environment(this, jobRequestProperties, UiOption.DriverEnvironment.pname())) {
-			return false;
-		}
-		
-		if (!DuccUiUtilities.ducc_environment(this, jobRequestProperties, UiOption.ProcessEnvironment.pname())) {
-			return false;
-		}
-
+        boolean ev0 = jobRequestProperties.containsKey(UiOption.Environment.pname());
+        boolean evd = jobRequestProperties.containsKey(UiOption.DriverEnvironment.pname());
+        boolean evp = jobRequestProperties.containsKey(UiOption.ProcessEnvironment.pname());
+        if(ev0 && evd) {
+        	throw new IllegalArgumentException("Conflict: cannot specify both "+UiOption.Environment.pname()+" and "+UiOption.DriverEnvironment.pname());
+        }
+        if(ev0 && evp) {
+        	throw new IllegalArgumentException("Conflict: cannot specify both "+UiOption.Environment.pname()+" and "+UiOption.ProcessEnvironment.pname());
+        }
+        if(ev0) {
+        	if (!DuccUiUtilities.ducc_environment(this, jobRequestProperties, UiOption.Environment.pname())) {
+    			return false;
+    		}
+        }
+        else {
+        	if(evd || evp) {
+        		if (!DuccUiUtilities.ducc_environment(this, jobRequestProperties, UiOption.DriverEnvironment.pname())) {
+        			return false;
+        		}
+        		if (!DuccUiUtilities.ducc_environment(this, jobRequestProperties, UiOption.ProcessEnvironment.pname())) {
+        			return false;
+        		}
+        	}
+        	else {
+        		if (!DuccUiUtilities.ducc_environment(this, jobRequestProperties, UiOption.Environment.pname())) {
+        			return false;
+        		}
+        	}
+        }
+        
 		/*
 		 * limit total number of threads
 		 */
@@ -347,7 +459,29 @@ public class DuccJobSubmit 
 		/*
 		 * adjust driver and process jvm args
 		 */
-		adjust_jvm_args(jobRequestProperties);
+        boolean ja0 = jobRequestProperties.containsKey(UiOption.JvmArgs.pname());
+        boolean jad = jobRequestProperties.containsKey(UiOption.DriverJvmArgs.pname());
+        boolean jap = jobRequestProperties.containsKey(UiOption.ProcessJvmArgs.pname());
+        
+        if(ja0 && jad) {
+        	throw new IllegalArgumentException("Conflict: cannot specify both "+UiOption.JvmArgs.pname()+" and "+UiOption.DriverJvmArgs.pname());
+        }
+        if(ja0 && jap) {
+        	throw new IllegalArgumentException("Conflict: cannot specify both "+UiOption.JvmArgs.pname()+" and "+UiOption.ProcessJvmArgs.pname());
+        }
+        
+        if(ja0) {
+        	adjust_specific_jvm_args(DuccPropertiesResolver.ducc_submit_driver_jvm_args, UiOption.JvmArgs);
+        }
+        else {
+        	if(jad || jap) {
+        		adjust_specific_jvm_args(DuccPropertiesResolver.ducc_submit_driver_jvm_args, UiOption.DriverJvmArgs);
+        		adjust_specific_jvm_args(DuccPropertiesResolver.ducc_submit_process_jvm_args, UiOption.ProcessJvmArgs);
+        	}
+        	else {
+        		adjust_specific_jvm_args(DuccPropertiesResolver.ducc_submit_driver_jvm_args, UiOption.JvmArgs);
+        	}
+        }
 
 		/*
 		 * identify invoker

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccManagedReservationSubmit.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccManagedReservationSubmit.java?rev=1464216&r1=1464215&r2=1464216&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccManagedReservationSubmit.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccManagedReservationSubmit.java Wed Apr  3 22:03:35 2013
@@ -41,13 +41,13 @@ public class DuccManagedReservationSubmi
    
     private ServiceRequestProperties serviceRequestProperties;
 
-    private UiOption[] opts = new UiOption[] {
+    private UiOption[] opts_release = new UiOption[] {
         UiOption.Help,
         UiOption.Debug, 
         UiOption.Description,
+        UiOption.Environment,
         UiOption.LogDirectory,
         UiOption.ProcessAttachConsole,
-        UiOption.ProcessEnvironment,
         UiOption.ProcessExecutable,
         UiOption.ProcessExecutableArgs,
         UiOption.ProcessFailuresLimit,
@@ -59,6 +59,26 @@ public class DuccManagedReservationSubmi
         UiOption.CancelManagedReservationOnInterrupt,
     };
 
+    private UiOption[] opts_beta = new UiOption[] {
+        UiOption.Help,
+        UiOption.Debug, 
+        UiOption.Description,
+        UiOption.Environment,
+        UiOption.LogDirectory,
+        UiOption.ProcessAttachConsole,
+        UiOption.ProcessEnvironment,
+        UiOption.ProcessExecutable,
+        UiOption.ProcessExecutableArgs,
+        UiOption.ProcessFailuresLimit,
+        UiOption.ProcessMemorySize,
+        UiOption.SchedulingClass,
+        UiOption.Specification,
+        UiOption.WorkingDirectory,
+        UiOption.WaitForCompletion,
+        UiOption.CancelManagedReservationOnInterrupt,
+    };
+    
+    private UiOption[] opts = opts_release;
 
     public DuccManagedReservationSubmit(String[] args)
         throws Exception
@@ -81,7 +101,11 @@ public class DuccManagedReservationSubmi
     public DuccManagedReservationSubmit(String[] args, IDuccCallback consoleCb)
         throws Exception
     {
-        serviceRequestProperties = new ServiceRequestProperties();        
+        serviceRequestProperties = new ServiceRequestProperties(); 
+        init();
+        if(DuccUiUtilities.isSupportedBeta()) {
+        	opts = opts_beta;
+        }
         init(this.getClass().getName(), opts, args, serviceRequestProperties, or_host, or_port, "or", consoleCb);
     }
         
@@ -89,7 +113,11 @@ public class DuccManagedReservationSubmi
         throws Exception
     {
         String[] arg_array = args.toArray(new String[args.size()]);
-        serviceRequestProperties = new ServiceRequestProperties();        
+        serviceRequestProperties = new ServiceRequestProperties();   
+        init();
+        if(DuccUiUtilities.isSupportedBeta()) {
+        	opts = opts_beta;
+        }
         init(this.getClass().getName(), opts, arg_array, serviceRequestProperties, or_host, or_port, "or", consoleCb);
     }
         
@@ -103,6 +131,10 @@ public class DuccManagedReservationSubmi
             Object v = props.get(k);
             serviceRequestProperties.put(k, v);
         }
+        init();
+        if(DuccUiUtilities.isSupportedBeta()) {
+        	opts = opts_beta;
+        }
         init(this.getClass().getName(), opts, null, serviceRequestProperties, or_host, or_port, "or", consoleCb);
     }
 
@@ -118,8 +150,28 @@ public class DuccManagedReservationSubmi
         /*
          * set DUCC_LD_LIBRARY_PATH in process environment
          */
-        adjustLdLibraryPath(serviceRequestProperties, UiOption.ProcessEnvironment.pname());
-
+        boolean ev0 = serviceRequestProperties.containsKey(UiOption.Environment.pname());
+        boolean evp = serviceRequestProperties.containsKey(UiOption.ProcessEnvironment.pname());
+        if(ev0 && evp) {
+        	throw new IllegalArgumentException("Conflict: cannot specify both "+UiOption.Environment.pname()+" and "+UiOption.ProcessEnvironment.pname());
+        }
+        if(ev0) {
+        	if (!DuccUiUtilities.ducc_environment(this, serviceRequestProperties, UiOption.Environment.pname())) {
+    			return false;
+    		}
+        }
+        else {
+        	if(evp) {
+        		if (!DuccUiUtilities.ducc_environment(this,serviceRequestProperties, UiOption.ProcessEnvironment.pname())) {
+        			return false;
+        		}
+        	}
+        	else {
+        		if (!DuccUiUtilities.ducc_environment(this, serviceRequestProperties, UiOption.Environment.pname())) {
+        			return false;
+        		}
+        	}
+        }
 
         SubmitServiceDuccEvent ev = new SubmitServiceDuccEvent(serviceRequestProperties);
         SubmitServiceReplyDuccEvent reply = null;

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java?rev=1464216&r1=1464215&r2=1464216&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java Wed Apr  3 22:03:35 2013
@@ -50,7 +50,7 @@ public class DuccServiceApi 
     String endpoint = null;
     IDuccCallback callback = null;
 
-    UiOption[] registration_options = {
+    UiOption[] registration_options_release = {
         UiOption.Help,
         UiOption.Debug,
         UiOption.Description,
@@ -58,6 +58,39 @@ public class DuccServiceApi 
         UiOption.LogDirectory,
         UiOption.WorkingDirectory,
         UiOption.Jvm,
+        UiOption.JvmArgs,
+        UiOption.Classpath,
+        UiOption.Environment,
+        UiOption.ProcessMemorySize,
+        UiOption.ProcessDD,
+        UiOption.ProcessFailuresLimit,
+        UiOption.ClasspathOrder,
+        // UiOption.Specification          // not used for registration
+        UiOption.ServiceDependency,
+        UiOption.ServiceRequestEndpoint,
+        UiOption.ServiceLinger,
+        UiOption.ServicePingClass,
+        UiOption.ServicePingClasspath,
+        UiOption.ServicePingJvmArgs,
+        UiOption.ServicePingTimeout,
+        UiOption.ServicePingDoLog,
+
+        UiOption.Register,
+        UiOption.Autostart,
+        UiOption.Instances,
+    }; 
+
+    UiOption[] registration_options_beta = {
+        UiOption.Help,
+        UiOption.Debug,
+        UiOption.Description,
+        UiOption.SchedulingClass,
+        UiOption.LogDirectory,
+        UiOption.WorkingDirectory,
+        UiOption.Jvm,
+        UiOption.JvmArgs,
+        UiOption.Classpath,
+        UiOption.Environment,
         UiOption.ProcessJvmArgs,
         UiOption.ProcessClasspath,
         UiOption.ProcessEnvironment,
@@ -79,7 +112,9 @@ public class DuccServiceApi 
         UiOption.Autostart,
         UiOption.Instances,
     }; 
-
+    
+    UiOption[] registration_options = registration_options_release;
+    
     UiOption[] unregister_options = {
         UiOption.Help,
         UiOption.Debug,
@@ -206,8 +241,12 @@ public class DuccServiceApi 
     String extractEndpoint(Properties jvmargs)
     {
         // If claspath is not specified, pick it up from the submitter's environment
-        String classpath = cli_props.getStringProperty(UiOption.ProcessClasspath.pname(), System.getProperty("java.class.path"));
-        cli_props.setProperty(UiOption.ProcessClasspath.pname(), classpath);
+    	String key_cp = UiOption.ProcessClasspath.pname();
+        if ( cli_props.containsKey(UiOption.Classpath.pname()) ) {
+        	key_cp = UiOption.Classpath.pname();
+        }
+        String classpath = cli_props.getStringProperty(key_cp, System.getProperty("java.class.path"));
+        cli_props.setProperty(key_cp, classpath);
         
         // No endpoint, resolve from the DD.
         String dd = cli_props.getStringProperty(UiOption.ProcessDD.pname()); // will throw if can't find the prop
@@ -227,12 +266,20 @@ public class DuccServiceApi 
         throws Exception
     {
         DuccProperties dp = new DuccProperties();
+        init();
+        if(DuccUiUtilities.isSupportedBeta()) {
+        	registration_options = registration_options_beta;
+        }
         init(this.getClass().getName(), registration_options, args, dp, sm_host, sm_port, "sm", callback, "services");
 
         //
         // Now: get jvm args and resolve placeholders, in particular, the broker url
         //
-        String jvmarg_string = cli_props.getProperty(UiOption.ProcessJvmArgs.pname());
+        String key_ja = UiOption.ProcessJvmArgs.pname();
+        if ( cli_props.containsKey(UiOption.JvmArgs.pname()) ) {
+        	key_ja = UiOption.JvmArgs.pname();
+        }
+        String jvmarg_string = cli_props.getProperty(key_ja);
         Properties jvmargs = DuccUiUtilities.jvmArgsToProperties(jvmarg_string);
         DuccUiUtilities.resolvePropertiesPlaceholders(cli_props, jvmargs);
 
@@ -259,8 +306,12 @@ public class DuccServiceApi 
         } else if ( endpoint.startsWith(ServiceType.UimaAs.decode()) ) {
 
             // Infer the classpath (DuccProperties will return the default if the value isn't found.)
-            String classpath = cli_props.getStringProperty(UiOption.ProcessClasspath.pname(), System.getProperty("java.class.path"));
-            cli_props.setProperty(UiOption.ProcessClasspath.pname(), classpath);
+        	String key_cp = UiOption.ProcessClasspath.pname();
+            if ( cli_props.containsKey(UiOption.Classpath.pname()) ) {
+            	key_cp = UiOption.Classpath.pname();
+            }
+            String classpath = cli_props.getStringProperty(key_cp, System.getProperty("java.class.path"));
+            cli_props.setProperty(key_cp, classpath);
 
             // Given ep must match inferred ep. Use case: an application is wrapping DuccServiceApi and has to construct
             // the endpoint as well.  The app passes it in and we insure that the constructed endpoint matches the one

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceSubmit.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceSubmit.java?rev=1464216&r1=1464215&r2=1464216&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceSubmit.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceSubmit.java Wed Apr  3 22:03:35 2013
@@ -43,7 +43,7 @@ public class DuccServiceSubmit 
     static String or_port = "ducc.orchestrator.http.port";
     static String or_host = "ducc.orchestrator.node";
 	
-    UiOption[] opts = new UiOption[] {
+    UiOption[] opts_release = new UiOption[] {
         UiOption.Help,
         UiOption.Debug, 
         UiOption.Description,
@@ -51,6 +51,35 @@ public class DuccServiceSubmit 
         UiOption.LogDirectory,
         UiOption.WorkingDirectory,
         UiOption.Jvm,
+        UiOption.JvmArgs,
+        UiOption.Classpath,
+        UiOption.Environment,
+        UiOption.ProcessMemorySize,
+        UiOption.ProcessDD,
+        UiOption.ProcessFailuresLimit,
+        UiOption.ClasspathOrder,
+        UiOption.Specification,
+        UiOption.ServiceDependency,
+        UiOption.ServiceRequestEndpoint,
+        UiOption.ServiceLinger,
+        UiOption.ServicePingClass,
+        UiOption.ServicePingClasspath,
+        UiOption.ServicePingJvmArgs,
+        UiOption.ServicePingTimeout,
+        UiOption.ServicePingDoLog,
+    };
+	
+    UiOption[] opts_beta = new UiOption[] {
+        UiOption.Help,
+        UiOption.Debug, 
+        UiOption.Description,
+        UiOption.SchedulingClass,
+        UiOption.LogDirectory,
+        UiOption.WorkingDirectory,
+        UiOption.Jvm,
+        UiOption.JvmArgs,
+        UiOption.Classpath,
+        UiOption.Environment,
         UiOption.ProcessJvmArgs,
         UiOption.ProcessClasspath,
         UiOption.ProcessEnvironment,
@@ -68,17 +97,27 @@ public class DuccServiceSubmit 
         UiOption.ServicePingTimeout,
         UiOption.ServicePingDoLog,
     };
- 
+    
+    UiOption[] opts = opts_release;
+    
 	public DuccServiceSubmit(ArrayList<String> args)
         throws Exception
     {
         String[] arg_array = args.toArray(new String[args.size()]);
+        init();
+        if(DuccUiUtilities.isSupportedBeta()) {
+        	opts = opts_beta;
+        }
         init(this.getClass().getName(), opts, arg_array, requestProperties, or_host, or_port, "or", null, "services");
     }
 
 	public DuccServiceSubmit(String[] args)
         throws Exception
     {
+		init();
+        if(DuccUiUtilities.isSupportedBeta()) {
+        	opts = opts_beta;
+        }
         init(this.getClass().getName(), opts, args, requestProperties, or_host, or_port, "or", null, "services");
     }
 
@@ -89,6 +128,10 @@ public class DuccServiceSubmit 
             Object v = props.get(k);
             requestProperties.put(k, v);
         }
+        init();
+        if(DuccUiUtilities.isSupportedBeta()) {
+        	opts = opts_beta;
+        }
         init(this.getClass().getName(), opts, null, requestProperties, or_host, or_port, "or", null, "services");
     }
 	
@@ -127,7 +170,11 @@ public class DuccServiceSubmit 
 	public boolean execute() 
         throws Exception 
     {
-        String jvmarg_string = (String) requestProperties.get(UiOption.ProcessJvmArgs.pname());
+		String key_ja = UiOption.ProcessJvmArgs.pname();
+	    if ( cli_props.containsKey(UiOption.JvmArgs.pname()) ) {
+	      	key_ja = UiOption.JvmArgs.pname();
+	    }
+		String jvmarg_string = (String) requestProperties.get(key_ja);
         Properties jvmargs = DuccUiUtilities.jvmArgsToProperties(jvmarg_string);
 
         ServiceDeploymentType deploymentType = null;
@@ -194,7 +241,11 @@ public class DuccServiceSubmit 
         /*
 		 * set DUCC_LD_LIBRARY_PATH in process environment
 		 */
-		if (!DuccUiUtilities.ducc_environment(this, requestProperties, UiOption.ProcessEnvironment.pname())) {
+		String key_ev = UiOption.ProcessEnvironment.pname();
+	    if ( cli_props.containsKey(UiOption.Environment.pname()) ) {
+	     	key_ev = UiOption.Environment.pname();
+	    }
+		if (!DuccUiUtilities.ducc_environment(this, requestProperties, key_ev)) {
             return false;
 		}
         requestProperties.put(UiOption.ProcessThreadCount.pname(), "1");         // enforce this - OR will complain if it's missing

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccUiUtilities.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccUiUtilities.java?rev=1464216&r1=1464215&r2=1464216&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccUiUtilities.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccUiUtilities.java Wed Apr  3 22:03:35 2013
@@ -46,7 +46,19 @@ import org.w3c.dom.NodeList;
 
 
 public class DuccUiUtilities {
-
+	
+	public static boolean isSupportedBeta() {
+		boolean retVal = false;
+		String key = DuccPropertiesResolver.ducc_submit_beta;
+		String value = DuccPropertiesResolver.getInstance().getProperty(key);
+		if(value != null) {
+			if(value.equalsIgnoreCase("on")) {
+				retVal = true;
+			}
+		}
+		return retVal;
+	}
+	
 	public static String getUser() {
 		String user = System.getProperty("user.name");
 		String runmode = DuccPropertiesResolver.getInstance().getProperty(DuccPropertiesResolver.ducc_runmode);

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/IUiOptions.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/IUiOptions.java?rev=1464216&r1=1464215&r2=1464216&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/IUiOptions.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/IUiOptions.java Wed Apr  3 22:03:35 2013
@@ -90,6 +90,17 @@ public interface IUiOptions
             public boolean required()   { return false; }
         }, 
         
+        Classpath { 
+            public String pname()       { return JobSpecificationProperties.key_classpath; }
+            public String description() { return "Classpath for the Job. Default is current classpath."; }
+            public String argname()     { return "java classpath"; }
+            public String example()     { return null; }
+            public String deflt()       { return null; }
+            public String label()       { return "ClassPath"; }
+            public boolean multiargs()  { return false; }
+            public boolean required()   { return false; }
+        },    
+        
         ClasspathOrder { 
             public String pname()       { return JobSpecificationProperties.key_classpath_order; }
             public String argname()     { return ClasspathOrderParms.UserBeforeDucc.name() + " or " + ClasspathOrderParms.DuccBeforeUser.name(); }
@@ -220,8 +231,19 @@ public interface IUiOptions
             public String label()       { return "DriverJvmArgs"; }
             public boolean multiargs()  { return false; }
             public boolean required()   { return false; }
-        },            
-
+        },    
+        
+        Environment { 
+            public String pname()       { return JobSpecificationProperties.key_environment; }
+            public String argname()     { return "env vars"; }
+            public String description() { return "Blank-delimeted list of environment variables."; }
+            public String example()     { return "\"TERM=xterm DISPLAY=me.org.net:1.0\""; }
+            public String deflt()       { return null; }
+            public String label()       { return "Environment"; }
+            public boolean multiargs()  { return false; }
+            public boolean required()   { return false; }
+        },   
+        
         Help { 
             public String pname()       { return "help"; }
             public String argname()     { return null; }
@@ -253,8 +275,19 @@ public interface IUiOptions
             public String label()       { return null; }
             public boolean multiargs()  { return false; }
             public boolean required()   { return true; }
-        },            
-
+        },
+        
+        JvmArgs { 
+            public String pname()       { return JobSpecificationProperties.key_jvm_args; }
+            public String argname()     { return "jvm arguments"; }
+            public String description() { return "Blank-delimeted list of JVM Arguments passed to the job driver."; }
+            public String example()     { return "-Xmx100M -DMYVAR=foo"; }
+            public String deflt()       { return null; }
+            public String label()       { return "JvmArgs"; }
+            public boolean multiargs()  { return false; }
+            public boolean required()   { return false; }
+        },    
+        
         ManagedReservationId { 
             public String pname()       { return JobRequestProperties.key_id; }
             public String argname()     { return "string"; }
@@ -520,7 +553,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
         ProcessDescriptorCC { 
             public String pname()       { return JobSpecificationProperties.key_process_descriptor_CC; }
             public String description() { return "Process CAS Consumer for aggregate."; }
@@ -565,8 +597,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
-
         ProcessDD { 
             public String pname()       { return JobSpecificationProperties.key_process_DD; }
             public String description() { return "Process deployment descriptor (mutually exclusive with CM+AE+CC)."; }
@@ -589,7 +619,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
         ProcessEnvironment { 
             public String pname()       { return JobSpecificationProperties.key_process_environment; }
             public String argname()     { return "environment-var-list"; }
@@ -634,7 +663,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
         ProcessInitializationFailuresCap { 
             public String pname()       { return JobSpecificationProperties.key_process_initialization_failures_cap; }
             public String description() { return "Maximum number of independent job process initialization failures (i.e. System.exit(), kill-15...) before the number of Job Processes is capped at the number in state Running currently.  Default is " + deflt() + "."; }
@@ -657,7 +685,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
         ProcessJvmArgs { 
             public String pname()       { return JobSpecificationProperties.key_process_jvm_args; }
             public String argname()     { return "jvm arguments"; }
@@ -669,7 +696,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
         ProcessMemorySize { 
             public String pname()       { return JobSpecificationProperties.key_process_memory_size; }
             public String argname()     { return "size-in-GB"; }
@@ -805,7 +831,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
         Signature { 
             // generated, not public
             public String pname()       { return JobSpecificationProperties.key_signature; }
@@ -829,7 +854,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
         SubmitErrors { 
             // generated, not public
             public String pname()       { return JobSpecificationProperties.key_submit_errors; }
@@ -842,7 +866,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
         SubmitWarnings { 
             // generated, not public
             public String pname()       { return JobSpecificationProperties.key_submit_warnings; }
@@ -855,7 +878,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
         Timestamp { 
             public String pname()       { return "timestamp"; }
             public String argname()     { return null; }
@@ -867,7 +889,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
         Unregister  { 
             public String pname()       { return "unregister" ; } 
             public String argname()     { return "service-id-or-endpoint" ; } 
@@ -901,7 +922,6 @@ public interface IUiOptions
             public boolean required()   { return false; }
         },            
 
-
         WaitForCompletion { 
             public String pname()       { return "wait_for_completion"; }
             public String argname()     { return null; }
@@ -939,6 +959,41 @@ public interface IUiOptions
             if ( example() == null ) return description();
             return description() + "\nexample: " + example();
         }
+        
+        // Beta options helper functions
+        
+        public UiOption[] getBetaOptions() {
+        	UiOption[] list = { DriverClasspath, 
+        						DriverEnvironment,
+        						DriverJvmArgs,
+        						ProcessClasspath, 
+        						ProcessEnvironment,
+        						ProcessJvmArgs,
+        						};
+        	return list;
+        }
+        
+        public boolean isBetaOption(String pname) {
+        	boolean retVal = false;
+        	if(pname != null) {
+        		UiOption[] list = getBetaOptions();
+            	for(UiOption option : list) {
+            		if(pname.equals(option.pname())) {
+            			retVal = true;
+            		}
+            	}
+        	}
+        	return retVal;
+        }
+        
+        public boolean isBetaOption(UiOption option) {
+        	boolean retVal = false;
+        	if(option != null) {
+        		retVal = isBetaOption(option.pname());
+        	}
+        	return retVal;
+        }
+        
     };
 
     public enum ClasspathOrderParms