flesh out samples run scripts and doc
diff --git a/README.md b/README.md
index a1515f8..aaadadc 100644
--- a/README.md
+++ b/README.md
@@ -227,34 +227,4 @@
 
 ##Running the samples
 
-General information follows. See the README in each sample category
-directory for additional information.
-
-The build generated uber jar contains all of the dependent 
-Edgent jars and their transitive dependencies.
-
-The desired sample can be run using the run-sample.sh script. e.g.,
-
-```sh
-cd topology
-./run-sample.sh HelloEdgent
-```
-
-For usage information:
-
-```sh
-./run-sample.sh
-./run-sample.sh --list
-```
-
-If you want to run a sample from the standard jar there are two options:
-a) get a local copy of all of the Edgent jars and their dependencies.
-   Form a CLASSPATH to the jars and run the sample's main class.
-   The get-edgent-jars.sh script can be used to get the jars from
-   a maven repository (local or remote).
-b) create an application package bundle.  The bundle includes the
-   sample(s) jar and a copy of all of the dependent Edgent jars
-   and their dependencies.  The package-app.sh script can be
-   used to create this bundle.
-   The package-app.sh script also creates a run-app.sh script.
-   The run-app.sh script configures the CLASSPATH and runs the main class.
+See the README in each sample category directory.
diff --git a/apps/README.md b/apps/README.md
new file mode 100644
index 0000000..391cde3
--- /dev/null
+++ b/apps/README.md
@@ -0,0 +1,3 @@
+See the README.md in the samples root directory for information on building the samples.
+
+See the scripts directory for information on running these samples.
diff --git a/apps/scripts/sensorAnalytics/README b/apps/scripts/sensorAnalytics/README
new file mode 100644
index 0000000..2e0b504
--- /dev/null
+++ b/apps/scripts/sensorAnalytics/README
@@ -0,0 +1,27 @@
+Sensor Analytics sample application.
+
+The application demonstrates a more complete sample that includes
+some common themes.
+
+The source code for the application can be found under the 
+<edgent-release>/<target>/samples/src directory.
+
+Use:
+
+See the SensorAnalytics sample link in <edgent-release>/docs/javadoc/overview-summary.html
+for full information on configuring and running the application
+and observing its behavior.  In particular, the default configuration
+connects to MQTT server url "tcp://localhost:1883".
+
+# run the application
+# the application runs forever printing out and publishing information
+$ ./runSensorAnalytics.sh
+
+# Watch and report the device's MQTT event topics
+$ ./runDeviceComms.sh watch
+
+# Publish a command to change a sensor1 threshold
+$ ./runDeviceComms.sh send sensor1.set1hzMeanRangeThreshold "[125..127]"
+
+# Publish a command telling the device to publish each outlier event as they occur
+$ ./runDeviceComms.sh send sensor1.setPublish1hzOutsideRange true
diff --git a/apps/scripts/sensorAnalytics/runDeviceComms.sh b/apps/scripts/sensorAnalytics/runDeviceComms.sh
new file mode 100755
index 0000000..ac39ff6
--- /dev/null
+++ b/apps/scripts/sensorAnalytics/runDeviceComms.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-apps-*-uber.jar`
+
+# Runs the DeviceComms client
+#
+# ./runDeviceComms.sh watch | send <commandLabel> <commandArg>
+#
+# no checking is done for the validity of commandLabel or commandArg
+
+export CLASSPATH=${UBER_JAR}
+
+java org.apache.edgent.samples.apps.mqtt.DeviceCommsApp sensorAnalytics.properties $*
diff --git a/apps/scripts/sensorAnalytics/runSensorAnalytics.sh b/apps/scripts/sensorAnalytics/runSensorAnalytics.sh
new file mode 100755
index 0000000..eed2242
--- /dev/null
+++ b/apps/scripts/sensorAnalytics/runSensorAnalytics.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-apps-*-uber.jar`
+
+# Runs the SensorAnalytics sample application
+#
+# ./runSensorAnalytics.sh
+
+export CLASSPATH=${UBER_JAR}
+
+java org.apache.edgent.samples.apps.sensorAnalytics.SensorAnalyticsApplication sensorAnalytics.properties
diff --git a/apps/scripts/sensorAnalytics/sensorAnalytics.properties b/apps/scripts/sensorAnalytics/sensorAnalytics.properties
new file mode 100644
index 0000000..9a1e812
--- /dev/null
+++ b/apps/scripts/sensorAnalytics/sensorAnalytics.properties
@@ -0,0 +1,82 @@
+# Application Configuration properties
+#
+# The default topology provider is DirectProvider.
+topology.provider=org.apache.edgent.providers.development.DevelopmentProvider
+#
+application.name=SensorAnalytics
+#
+
+# =========================================================================
+# Application stream logging configuration
+# Where the app puts its stream logs.  
+# The directory will be created when the topology
+# runs if it doesn't already exist.
+application.log.dir=/tmp/SensorAnalytics/logs
+
+# =========================================================================
+# Application "ranges" - e.g., for threshold detections
+# Specify values generated by Range.toString():
+#  <lowerBoundType><lowerBound>..<upperBound><upperBoundType>
+#  where
+#      lowerBoundType is "[" inclusive or "(" exclusive
+#      upperBoundType is "]" inclusive or ")" exclusive
+#      lowerBound or upperBound is "*" for open ranges,
+#         e.g., [*..50]  for "atMost" 50
+#
+sensor1.range.outside1hzMeanRange=[124..129]
+
+# =========================================================================
+# MQTT Device and Connector configuration info.
+#
+# MQTT Device -- See org.apache.edgent.connectors.mqtt.device.MqttDevice for all
+# of the properties.
+#
+# An optional topic prefix.  It can be used to isolate users or applications
+# in shared MQTT broker configurations.  By default it is incorporated
+# into device topics and the MQTT clientId.
+# If you use a public MQTT broker you may want to change the topic
+# prefix so it is still unique for you but doesn't include the
+# user name or application name.
+mqttDevice.topic.prefix=ibm.xyzzy-streams.samples/user/{user.name}/{application.name}/
+#
+# The device id used for identifying the device's events and commands
+# in the MQTT topic namespace.
+# By default it also gets incorporated into the MQTT clientId value.
+mqttDevice.id=012345
+#
+# The MQTT clientId.  Only one instance of a MqttDevice can connect
+# to the MQTT broker with a given clientId.
+#mqttDevice.mqtt.clientId={mqttDevice.topic.prefix}id/{mqttDevice.id}
+#
+# MQTT Connector  See org.apache.edgent.connectors.mqtt.MqttConfig.fromProperties()
+#
+# The default configuration is for a local MQTT broker.
+# See mosquitto.org for instructions on downloading a MQTT broker.
+# Or use some other MQTT broker available in your environment.
+mqtt.serverURLs=tcp://localhost:1883
+#
+# Alternatively, there are some public MQTT brokers available to experiment with.
+# Their availability status isn't guaranteed.  If you're unable to connect
+# to the broker, it's likely that it isn't up or your firewalls don't
+# allow you to connect.  DO NOT PUBLISH ANYTHING SENSITIVE - anyone
+# can be listing.
+#mqtt.serverURLs=tcp://iot.eclipse.org:1883
+#mqtt.serverURLs=tcp://test.mosquitto.org:1883
+#
+# default username is System.getProperty("user.name") value
+#mqtt.userName=xyzzy
+#mqtt.password=myMosquittoPw
+
+# =========================================================================
+# Patterns for identifying which streams to trace to System.out
+# To enable use include.csv and/or includes.regex.
+# To exclude an otherwise included file, use excludes.csv and/or excludes.regex
+#
+# Some tracing labels
+# sensor1.raw1khz,sensor1.j1khz,sensor1.j1hzStats,sensor1.outside1hzMeanRange*,
+# sensor1.periodicLastN*
+#
+#stream.tracing.includes.csv=sensor1.j1hzStats
+stream.tracing.includes.regex=sensor1.outside1hzMeanRange.*
+#stream.tracing.excludes.regex=.*
+#stream.tracing.excludes.csv=sensor1.raw1khz
diff --git a/connectors/README.md b/connectors/README.md
new file mode 100644
index 0000000..391cde3
--- /dev/null
+++ b/connectors/README.md
@@ -0,0 +1,3 @@
+See the README.md in the samples root directory for information on building the samples.
+
+See the scripts directory for information on running these samples.
diff --git a/connectors/scripts/file/README b/connectors/scripts/file/README
new file mode 100644
index 0000000..13629d0
--- /dev/null
+++ b/connectors/scripts/file/README
@@ -0,0 +1,21 @@
+Sample File Streams connector topology applications.
+
+The file writer application writes a stream's tuples to files.
+
+The file reader application watches a directory for files and reads their
+contents into a stream of tuples.
+
+The source code for the samples is in the <edgent-release>/samples directory.
+
+Use:
+
+# create a new directory for the sample to use
+$ mkdir /tmp/fileSample
+
+# run the sample file watcher / reader
+# the reader runs forever printing out content from files read
+$ ./runfilesample.sh reader /tmp/fileSample
+
+# run the sample file writer
+# the writer runs forever printing out each generated tuple
+$ ./runfilesample.sh writer /tmp/fileSample
diff --git a/connectors/scripts/file/runfilesample.sh b/connectors/scripts/file/runfilesample.sh
new file mode 100755
index 0000000..1552d1b
--- /dev/null
+++ b/connectors/scripts/file/runfilesample.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs the File connector sample
+#
+# ./runfilesample.sh writer
+# ./runfilesample.sh reader
+
+sampledir=/tmp/fileConnectorSample
+if [ ! -e $sampledir ]; then
+    mkdir $sampledir
+fi 
+
+export CLASSPATH=${UBER_JAR}
+
+app=$1; shift
+if [ "$app" == "writer" ]; then
+    java org.apache.edgent.samples.connectors.file.FileWriterApp $sampledir
+elif [ "$app" == "reader" ]; then
+    java org.apache.edgent.samples.connectors.file.FileReaderApp $sampledir
+else
+    echo "unrecognized mode '$app'"
+    echo "usage: $0 'writer|reader'"
+    exit 1
+fi
diff --git a/connectors/scripts/iotp/README b/connectors/scripts/iotp/README
new file mode 100644
index 0000000..eccb2f8
--- /dev/null
+++ b/connectors/scripts/iotp/README
@@ -0,0 +1,36 @@
+
+# ##########
+# The "Quickstart" samples connect to the IBM Watson IoT Platform
+# using the Quickstart feature that does not require device registration.
+# When the samples are run they print out a URL which allows a browser
+# to see the data being sent from this sample.
+#
+# IotpQuickstart2 demonstrates using the WIoTP API to initialize the IotpDevice
+# connector as well as the ability to publish events using the WIoTP HTTP protocol.
+
+IotpQuickstart  - ./runquickstart.sh
+IotpQuickstart2 - ./runquickstart2.sh [useHttp]
+
+# ##########
+# IotpSensors connects to your IBM Watson IoT Platform service
+# as the device defined in your device config file.
+#
+# A prototype config file for your WIoTP registered device information 
+# is provided in device.cfg.
+
+IotpSensors     - ./runiotsensors.sh device-cfg-path
+
+# ##########
+# IotpDeviceSample and IotpGatewaySample
+# connect to your IBM Watson IoT Platform service.
+# They publish device events and print out received device commands.
+# Use IotpAppClient to print out the generated device events and
+# to generate the device commands.
+#
+# Prototype config files for your WIoTP registered device, gateway,
+# and application client information are provided in
+# iotp-device-sample.cfg, iotp-gwdevice-sample.cfg and iotp-app-client.cfg
+
+IotpDeviceSample  - ./run-iotp-device-sample.sh [useDeviceClient|useManagedDevice] [useHttp] <device-cfg-path>
+IotpGatewaySample - ./run-iotp-gwdevice-sample.sh [useGatewayClient|useManagedGateway] [useHttp] <device-cfg-path>
+IotpAppClient     - ./run-iotp-client-app.sh [useGW] <app-cfg-path>
\ No newline at end of file
diff --git a/connectors/scripts/iotp/device.cfg b/connectors/scripts/iotp/device.cfg
new file mode 100644
index 0000000..9c67292
--- /dev/null
+++ b/connectors/scripts/iotp/device.cfg
@@ -0,0 +1,7 @@
+[device]
+org =
+type = 
+id = 
+auth-method = token
+auth-token = 
+
diff --git a/connectors/scripts/iotp/iotp-app-client.cfg b/connectors/scripts/iotp/iotp-app-client.cfg
new file mode 100644
index 0000000..177e6b5
--- /dev/null
+++ b/connectors/scripts/iotp/iotp-app-client.cfg
@@ -0,0 +1,25 @@
+# configuration properties for the IotpAppSample app
+
+[application]
+# WIoTP defined application configuration properties
+
+Organization-ID = 
+id = 
+Authentication-Method = apikey
+API-Key = 
+Authentication-Token = 
+
+# --------------------------------------------------------
+# Input for the sample app, not WIoTP App props
+
+# Non-gateway mode target registered device
+# Corresponding values from the iotp-device-sample.cfg file
+deviceType = 
+deviceId = 
+
+# Gateway mode target registered gateway device and the connected device
+# Corresponding values from the iotp-gwdevice-sample.cfg file 
+gwDeviceType = 
+gwDeviceId = 
+cn-dev1-type = myCnDev1Type
+cn-dev1-id = myCnDev1Id
diff --git a/connectors/scripts/iotp/iotp-device-sample.cfg b/connectors/scripts/iotp/iotp-device-sample.cfg
new file mode 100644
index 0000000..3a2aefb
--- /dev/null
+++ b/connectors/scripts/iotp/iotp-device-sample.cfg
@@ -0,0 +1,10 @@
+# configuration properties for IotpDeviceSample
+
+[device]
+# WIoTP defined IoT device configuration properties
+
+Organization-ID = 
+Device-Type = 
+Device-ID = 
+Authentication-Method = token
+Authentication-Token = 
diff --git a/connectors/scripts/iotp/iotp-gwdevice-sample.cfg b/connectors/scripts/iotp/iotp-gwdevice-sample.cfg
new file mode 100644
index 0000000..1845fcc
--- /dev/null
+++ b/connectors/scripts/iotp/iotp-gwdevice-sample.cfg
@@ -0,0 +1,17 @@
+# configuration properties for IotpGWDeviceSample
+
+[device]
+# WIoTP defined IoT Gateway device configuration properties
+
+Organization-ID = 
+Gateway-Type = 
+Gateway-ID = 
+Authentication-Method = token
+Authentication-Token = 
+
+# --------------------------------------------------------
+# Input for the sample app, not WIoTP device props
+
+# a type and id for a device connected to the gateway - pick anything
+cn-dev1-type = myCnDev1Type
+cn-dev1-id = myCnDev1Id
diff --git a/connectors/scripts/iotp/run-iotp-app-client.sh b/connectors/scripts/iotp/run-iotp-app-client.sh
new file mode 100755
index 0000000..349aeb5
--- /dev/null
+++ b/connectors/scripts/iotp/run-iotp-app-client.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs IBM Watson IoT Platform IotpAppClient sample.
+#
+# run-iotp-app-client.sh [useGW] <app-cfg-path>  # see iotp-app-client.cfg
+#
+# Connects to WIoTP and sends device commands to the 
+# IotpDeviceSample or IotpGWDeviceSample device samples.
+#
+# This connects to your IBM Watson IoT Platform service
+# as the Application defined in a application config file.
+# The file format is the standard one for IBM Watson IoT Platform.
+#
+# Note, the config file also contains some additional information for this application.
+# A sample iot-app-client.cfg is in the scripts/connectors/iotp directory.
+
+
+export CLASSPATH=${UBER_JAR}
+
+# https://github.com/ibm-watson-iot/iot-java/tree/master#migration-from-release-015-to-021
+# Uncomment the following to use the pre-0.2.1 WIoTP client behavior.
+#
+#USE_OLD_EVENT_FORMAT=-Dcom.ibm.iotf.enableCustomFormat=false
+
+VM_OPTS=${USE_OLD_EVENT_FORMAT}
+
+java ${VM_OPTS} org.apache.edgent.samples.connectors.iotp.IotpAppClient $* 
diff --git a/connectors/scripts/iotp/run-iotp-device-sample.sh b/connectors/scripts/iotp/run-iotp-device-sample.sh
new file mode 100755
index 0000000..a8b3453
--- /dev/null
+++ b/connectors/scripts/iotp/run-iotp-device-sample.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs IBM Watson IoT Platform IotpDeviceSample sample.
+#
+# run-iotp-device-sample.sh [useDeviceClient|useManagedDevice] [useHttp] <device-cfg-path>  # see iotp-device-sample.cfg
+#
+# Connects to WIoTP and sends device events and receives device commands.
+#
+# This connects to your IBM Watson IoT Platform service
+# as the Device defined in a device config file.
+# The file format is the standard one for IBM Watson IoT Platform.
+#
+# Note, the config file also contains some additional information for this application.
+# A sample iot-device-sample.cfg is in the scripts/connectors/iotp directory.
+
+export CLASSPATH=${UBER_JAR}
+
+# https://github.com/ibm-watson-iot/iot-java/tree/master#migration-from-release-015-to-021
+# Uncomment the following to use the pre-0.2.1 WIoTP client behavior.
+#
+#USE_OLD_EVENT_FORMAT=-Dcom.ibm.iotf.enableCustomFormat=false
+
+VM_OPTS=${USE_OLD_EVENT_FORMAT}
+
+java ${VM_OPTS} org.apache.edgent.samples.connectors.iotp.IotpDeviceSample $* 
diff --git a/connectors/scripts/iotp/run-iotp-gwdevice-sample.sh b/connectors/scripts/iotp/run-iotp-gwdevice-sample.sh
new file mode 100755
index 0000000..75b2dd6
--- /dev/null
+++ b/connectors/scripts/iotp/run-iotp-gwdevice-sample.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs IBM Watson IoT Platform IotpGWDeviceSample sample.
+#
+# run-iotp-gwdevice-sample.sh [useGatewayClient|useManagedGateway] [useHttp] <device-cfg-path>  # see iotp-gwdevice-sample.cfg
+#
+# Connects to WIoTP and sends Gateway and connected device events and receives device commands.
+#
+# This connects to your IBM Watson IoT Platform service
+# as the Gateway defined in a gateway config file.
+# The file format is the standard one for IBM Watson IoT Platform.
+# 
+# Note, the config file also contains some additional information for this application.
+# A sample iot-gwdevice-sample.cfg is in the scripts/connectors/iotp directory.
+
+
+export CLASSPATH=${UBER_JAR}
+
+# https://github.com/ibm-watson-iot/iot-java/tree/master#migration-from-release-015-to-021
+# Uncomment the following to use the pre-0.2.1 WIoTP client behavior.
+#
+#USE_OLD_EVENT_FORMAT=-Dcom.ibm.iotf.enableCustomFormat=false
+
+VM_OPTS=${USE_OLD_EVENT_FORMAT}
+
+java ${VM_OPTS} org.apache.edgent.samples.connectors.iotp.IotpGWDeviceSample $* 
diff --git a/connectors/scripts/iotp/runiotpquickstart.sh b/connectors/scripts/iotp/runiotpquickstart.sh
new file mode 100755
index 0000000..5970fae
--- /dev/null
+++ b/connectors/scripts/iotp/runiotpquickstart.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs IBM Watson IoT Plaform Quickstart sample.
+#
+# runiotpquickstart.sh
+#
+# This connectors to the Qucikstart IBM Watson IoT Platform service
+# which requires no registration at all.
+#
+# The application prints out a URL which allows a browser
+# to see the data being sent from this sample to
+# IBM Watson IoT Plaform Quickstart sample.
+
+export CLASSPATH=${UBER_JAR}
+
+# https://github.com/ibm-watson-iot/iot-java/tree/master#migration-from-release-015-to-021
+# Uncomment the following to use the pre-0.2.1 WIoTP client behavior.
+#
+#USE_OLD_EVENT_FORMAT=-Dcom.ibm.iotf.enableCustomFormat=false
+
+VM_OPTS=${USE_OLD_EVENT_FORMAT}
+
+java ${VM_OPTS} org.apache.edgent.samples.connectors.iotp.IotpQuickstart
diff --git a/connectors/scripts/iotp/runiotpquickstart2.sh b/connectors/scripts/iotp/runiotpquickstart2.sh
new file mode 100755
index 0000000..f712f6e
--- /dev/null
+++ b/connectors/scripts/iotp/runiotpquickstart2.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs IBM Watson IoT Plaform Quickstart sample.
+#
+# runiotpquickstart2.sh
+#
+# This connects to the Quickstart IBM Watson IoT Platform service
+# which requires no registration at all.
+#
+# The application prints out a URL which allows a browser
+# to see the data being sent from this sample to
+# IBM Watson IoT Platform Quickstart sample.
+
+export CLASSPATH=${UBER_JAR}
+
+# https://github.com/ibm-watson-iot/iot-java/tree/master#migration-from-release-015-to-021
+# Uncomment the following to use the pre-0.2.1 WIoTP client behavior.
+#
+#USE_OLD_EVENT_FORMAT=-Dcom.ibm.iotf.enableCustomFormat=false
+
+VM_OPTS=${USE_OLD_EVENT_FORMAT}
+
+java ${VM_OPTS} org.apache.edgent.samples.connectors.iotp.IotpQuickstart2 $*
diff --git a/connectors/scripts/iotp/runiotpsensors.sh b/connectors/scripts/iotp/runiotpsensors.sh
new file mode 100755
index 0000000..a1e840b
--- /dev/null
+++ b/connectors/scripts/iotp/runiotpsensors.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs IBM Watson IoT Plaform sample.
+#
+# runiotpsensors.sh path/device.cfg
+#
+# e.g. runiotpsensors.sh $HOME/device.cfg
+#
+# This connectors to your IBM Watson IoT Platform service
+# as the device defined in the device.cfg.
+# The format of device.cfg is the standard one for
+# IBM Watson IoT Platform and a sample is in this directory
+# (omitting values for the authorization tokens).
+
+export CLASSPATH=${UBER_JAR}
+
+# https://github.com/ibm-watson-iot/iot-java/tree/master#migration-from-release-015-to-021
+# Uncomment the following to use the pre-0.2.1 WIoTP client behavior.
+#
+#USE_OLD_EVENT_FORMAT=-Dcom.ibm.iotf.enableCustomFormat=false
+
+VM_OPTS=${USE_OLD_EVENT_FORMAT}
+
+java ${VM_OPTS} org.apache.edgent.samples.connectors.iotp.IotpSensors $1
diff --git a/connectors/scripts/jdbc/.gitignore b/connectors/scripts/jdbc/.gitignore
new file mode 100644
index 0000000..3292c9c
--- /dev/null
+++ b/connectors/scripts/jdbc/.gitignore
@@ -0,0 +1,3 @@
+# JDBC connector sample's outputs
+JdbcConnectorSampleDb/**
+derby.log
diff --git a/connectors/scripts/jdbc/README b/connectors/scripts/jdbc/README
new file mode 100644
index 0000000..112e02e
--- /dev/null
+++ b/connectors/scripts/jdbc/README
@@ -0,0 +1,35 @@
+Sample JDBC connector dbms writer and reader topology applications.
+
+The following configuration is assumed:
+- Apache Derby is installed and the environment variable DERBY_HOME is set
+
+The writer is a simple JDBC connector sample demonstrating
+streaming write access of a dbms to add stream tuples to a table.
+
+The reader is a simple JDBC connector sample demonstrating
+streaming read access of a dbms table and creating stream
+tuples from the results.
+
+The source code for the samples is in the <edgent-release>/samples directory.
+
+Running the simple sample
+-------------------------
+
+Modify the jdbc.properties file if required.
+
+# run the simple sample writer
+# the writer runs briefly and prints out additions to the table
+$ ./runjdbcsample.sh writer
+Inserting into persons table: person id=1 first=John last=Doe
+Inserting into persons table: person id=2 first=Jane last=Doe
+Inserting into persons table: person id=3 first=Billy last=McDoe
+$
+
+# run the simple sample reader
+# the reader runs briefly and prints out retrieved info
+$ ./runjdbcsample.sh reader
+retrieved person: id=1 first=John last=Doe
+retrieved person: id=2 first=Jane last=Doe
+retrieved person: id=3 first=Billy last=McDoe
+Unknown person id=99999
+$
diff --git a/connectors/scripts/jdbc/jdbc.properties b/connectors/scripts/jdbc/jdbc.properties
new file mode 100644
index 0000000..96a196a
--- /dev/null
+++ b/connectors/scripts/jdbc/jdbc.properties
@@ -0,0 +1,4 @@
+#db.name=      # defaults to "JdbcConnectorSampleDb"
+#db.user=      # defaults to System.getProperties("user.name")
+#db.password=  # defaults to no password
+persondata.path=persondata.txt
diff --git a/connectors/scripts/jdbc/persondata.txt b/connectors/scripts/jdbc/persondata.txt
new file mode 100644
index 0000000..9037c44
--- /dev/null
+++ b/connectors/scripts/jdbc/persondata.txt
@@ -0,0 +1,4 @@
+# id,firstName,lastName
+1,John,Doe
+2,Jane,Doe
+3,Billy,McDoe
diff --git a/connectors/scripts/jdbc/runjdbcsample.sh b/connectors/scripts/jdbc/runjdbcsample.sh
new file mode 100755
index 0000000..717abcf
--- /dev/null
+++ b/connectors/scripts/jdbc/runjdbcsample.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs the Sample JDBC Writer or Reader
+#
+# ./runjdbcsample.sh writer
+# ./runjdbcsample.sh reader
+
+if [ -z "$DERBY_HOME" ]; then
+    echo "\$DERBY_HOME not defined."
+    exit 1;
+fi
+if [ ! -f $DERBY_HOME/lib/derby.jar ]; then
+    echo "\$DERBY_HOME/lib/derby.jar: file not found"
+    exit 1;
+fi
+
+export CLASSPATH=${UBER_JAR}:$DERBY_HOME/lib/derby.jar
+
+app=$1; shift
+if [ "$app" == "writer" ]; then
+    java org.apache.edgent.samples.connectors.jdbc.SimpleWriterApp jdbc.properties
+elif [ "$app" == "reader" ]; then
+    java org.apache.edgent.samples.connectors.jdbc.SimpleReaderApp jdbc.properties
+else
+    echo "unrecognized mode '$app'"
+    echo "usage: $0 writer|reader"
+    exit 1
+fi
diff --git a/connectors/scripts/jdbc/runjdbcsample.sh.orig b/connectors/scripts/jdbc/runjdbcsample.sh.orig
new file mode 100755
index 0000000..46d8f04
--- /dev/null
+++ b/connectors/scripts/jdbc/runjdbcsample.sh.orig
@@ -0,0 +1,46 @@
+#!/bin/bash
+#
+# 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.
+#
+
+edgent=../../..
+
+# Runs the Sample JDBC Writer or Reader
+#
+# ./runjdbcsample.sh writer
+# ./runjdbcsample.sh reader
+
+if [ -z "$DERBY_HOME" ]; then
+    echo "\$DERBY_HOME not defined."
+    exit 1;
+fi
+if [ ! -f $DERBY_HOME/lib/derby.jar ]; then
+    echo "\$DERBY_HOME/lib/derby.jar: file not found"
+    exit 1;
+fi
+
+export CLASSPATH=${edgent}/samples/lib/edgent.samples.connectors.jar:$DERBY_HOME/lib/derby.jar
+
+app=$1; shift
+if [ "$app" == "writer" ]; then
+    java org.apache.edgent.samples.connectors.jdbc.SimpleWriterApp jdbc.properties
+elif [ "$app" == "reader" ]; then
+    java org.apache.edgent.samples.connectors.jdbc.SimpleReaderApp jdbc.properties
+else
+    echo "unrecognized mode '$app'"
+    echo "usage: $0 writer|reader"
+    exit 1
+fi
diff --git a/connectors/scripts/kafka/README b/connectors/scripts/kafka/README
new file mode 100644
index 0000000..b1c6bec
--- /dev/null
+++ b/connectors/scripts/kafka/README
@@ -0,0 +1,39 @@
+Sample Kafka Publisher and Subscriber topology applications.
+
+By default the samples require the following kafka broker configuration:
+- bootstrap.servers="localhost:9092"
+- zookeeper.connect="localhost:2181"
+- kafka topic "kafkaSampleTopic" exists
+- no authentication
+
+See README-kafka for information about setting up a kafka server
+and creating the topic.
+
+The source code for the samples is in the <edgent-release>/samples directory.
+
+Running the simple sample
+-------------------------
+
+Modify the kafka.properties file if required.
+
+# run the simple sample subscriber
+# the subscriber runs forever printing out each received message
+$ ./runkafkasample.sh sub
+
+# run the simple sample publisher
+# the publisher runs forever printing out each published message
+$ ./runkafkasample.sh pub
+
+Running the fully configurable clients
+--------------------------------------
+
+# To see how to specify different values:
+$ ./runkafkaclient.sh -h
+
+# run the sample subscriber
+# the subscriber runs forever printing out each received message
+$ ./runkafkaclient.sh sub
+
+# run the sample producer
+# the producer runs forever printing out each published message
+$ ./runkafkaclient.sh pub
diff --git a/connectors/scripts/kafka/README-kafka b/connectors/scripts/kafka/README-kafka
new file mode 100644
index 0000000..e253963
--- /dev/null
+++ b/connectors/scripts/kafka/README-kafka
@@ -0,0 +1,25 @@
+Setting up a Kafka/Zookeeper config on the default localhost ports is simple
+and well documented at https://kafka.apache.org/quickstart.  This should do it:
+
+After downloading kafka:
+
+tar zxf ~/Downloads/kafka_2.11-0.10.1.0.tgz
+cd kafka_2.11-0.10.1.0/
+
+# start the servers (best in separate windows)
+bin/zookeeper-server-start.sh config/zookeeper.properties
+bin/kafka-server-start.sh config/server.properties
+
+The sample requires a topic.  Create it:
+
+# create our kafka sample topic
+bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic kafkaSampleTopic
+bin/kafka-topics.sh --list --zookeeper localhost:2181
+
+# quick verify
+bin/kafka-console-producer.sh --broker-list localhost:9092 --topic kafkaSampleTopic
+hi
+there
+^D
+bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kafkaSampleTopic --from-beginning
+... you should see the "hi" and "there" messages.
diff --git a/connectors/scripts/kafka/kafka.properties b/connectors/scripts/kafka/kafka.properties
new file mode 100644
index 0000000..2470078
--- /dev/null
+++ b/connectors/scripts/kafka/kafka.properties
@@ -0,0 +1,6 @@
+# bootstrap.servers is for a kafka consumer
+bootstrap.servers=localhost:9092
+# zookeeper.connect is for a kafka producer
+zookeeper.connect=localhost:2181
+#group.id=
+topic=kafkaSampleTopic
diff --git a/connectors/scripts/kafka/runkafkaclient.sh b/connectors/scripts/kafka/runkafkaclient.sh
new file mode 100755
index 0000000..74aae1a
--- /dev/null
+++ b/connectors/scripts/kafka/runkafkaclient.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs the Kafka Publisher or Subscriber Client
+#
+# ./runkafkaclient.sh pub
+# ./runkafkaclient.sh sub
+# ./runkafkaclient.sh -h
+
+export CLASSPATH=${UBER_JAR}
+
+java org.apache.edgent.samples.connectors.kafka.KafkaClient $@
diff --git a/connectors/scripts/kafka/runkafkasample.sh b/connectors/scripts/kafka/runkafkasample.sh
new file mode 100755
index 0000000..817da76
--- /dev/null
+++ b/connectors/scripts/kafka/runkafkasample.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs the Sample Kafka Publisher or Subscriber
+#
+# ./runkafkasample.sh pub
+# ./runkafkasample.sh sub
+
+export CLASSPATH=${UBER_JAR}
+
+app=$1; shift
+if [ "$app" == "pub" ]; then
+    java org.apache.edgent.samples.connectors.kafka.SimplePublisherApp kafka.properties
+elif [ "$app" == "sub" ]; then
+    java org.apache.edgent.samples.connectors.kafka.SimpleSubscriberApp kafka.properties
+else
+    echo "unrecognized mode '$app'"
+    echo "usage: $0 pub|sub"
+    exit 1
+fi
diff --git a/connectors/scripts/mqtt/README b/connectors/scripts/mqtt/README
new file mode 100644
index 0000000..922807c
--- /dev/null
+++ b/connectors/scripts/mqtt/README
@@ -0,0 +1,37 @@
+Sample MQTT Publisher and Subscriber topology applications.
+
+By default, the following MQTT broker configuration is assumed:
+- the broker's connection URL is tcp://localhost:1883
+- the broker is configured for no authentication
+
+See http://mqtt.org for the code and setup information for
+a mqtt broker.
+
+The source code for the samples is in the <edgent-release>/samples directory.
+
+Running the simple sample
+-------------------------
+
+Modify the mqtt.properties file if required.
+
+# run the simple sample subscriber
+# the subscriber runs forever printing out each received message
+$ ./runmqttsample.sh sub
+
+# run the simple sample publisher
+# the publisher runs forever printing out each published message
+$ ./runmqttsample.sh pub
+
+Running the fully configurable clients
+--------------------------------------
+
+# To see how to specify different values:
+$ ./runmqttclient.sh -h
+
+# run the subscriber client
+# the subscriber runs forever printing out each received message
+$ ./runmqttclient.sh sub
+
+# run the publisher client
+# the publisher runs forever printing out each published message
+$ ./runmqttclient.sh pub
diff --git a/connectors/scripts/mqtt/mqtt.properties b/connectors/scripts/mqtt/mqtt.properties
new file mode 100644
index 0000000..9f28c7c
--- /dev/null
+++ b/connectors/scripts/mqtt/mqtt.properties
@@ -0,0 +1,10 @@
+mqtt.serverURLs=tcp://localhost:1883
+#mqtt.serverURLs=tcp://test.mosquitto.org:1883
+#mqtt.serverURLs=tcp://iot.eclipse.org:1883
+mqtt.topic=mqttSampleTopic
+#mqtt.userName=
+#mqtt.password=
+#mqtt.trustStore=
+#mqtt.trustStorePassword=
+#mqtt.keyStore=
+#mqtt.keyStorePassword=
diff --git a/connectors/scripts/mqtt/runmqttclient.sh b/connectors/scripts/mqtt/runmqttclient.sh
new file mode 100755
index 0000000..f755bc9
--- /dev/null
+++ b/connectors/scripts/mqtt/runmqttclient.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs the MQTT Publisher or Subscriber client
+#
+# ./runmqttclient.sh pub
+# ./runmqttclient.sh sub
+# ./runmqttclient.sh -h
+
+export CLASSPATH=${UBER_JAR}
+
+java org.apache.edgent.samples.connectors.mqtt.MqttClient $@
diff --git a/connectors/scripts/mqtt/runmqttsample.sh b/connectors/scripts/mqtt/runmqttsample.sh
new file mode 100755
index 0000000..9d850dd
--- /dev/null
+++ b/connectors/scripts/mqtt/runmqttsample.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+#
+# 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.
+#
+
+CONNECTOR_SAMPLES_DIR=../..
+
+UBER_JAR=`echo ${CONNECTOR_SAMPLES_DIR}/target/edgent-samples-connectors-*-uber.jar`
+
+# Runs the Sample MQTT Publisher or Subscriber
+#
+# ./runmqttsample.sh pub
+# ./runmqttsample.sh sub
+
+export CLASSPATH=${UBER_JAR}
+
+app=$1; shift
+if [ "$app" == "pub" ]; then
+    java org.apache.edgent.samples.connectors.mqtt.SimplePublisherApp mqtt.properties
+elif [ "$app" == "sub" ]; then
+    java org.apache.edgent.samples.connectors.mqtt.SimpleSubscriberApp mqtt.properties
+else
+    echo "unrecognized mode '$app'"
+    echo "usage: $0 pub|sub"
+    exit 1
+fi
diff --git a/console/.gitignore b/console/.gitignore
new file mode 100644
index 0000000..a50dafe
--- /dev/null
+++ b/console/.gitignore
@@ -0,0 +1,2 @@
+# sample's output file
+consoleUrl.txt
\ No newline at end of file
diff --git a/console/run-sample.sh b/console/run-sample.sh
new file mode 100755
index 0000000..7cbd42a
--- /dev/null
+++ b/console/run-sample.sh
@@ -0,0 +1,64 @@
+#!/usr/bin/env bash
+#
+# 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.
+#
+
+USAGE="usage: `basename $0` [--list] simple-main-class-name [sample-args]"
+
+CATEGORY=console
+
+#UBER_JAR=target/edgent-samples-topology-1.2.0-SNAPSHOT-uber.jar
+UBER_JAR=target/edgent-samples-${CATEGORY}-*-uber.jar
+
+SAMPLE_PACKAGE_BASE=org.apache.edgent.samples.${CATEGORY}
+SAMPLES_FQ=`cat <<EOF 
+${SAMPLE_PACKAGE_BASE}.ConsoleWaterDetector
+${SAMPLE_PACKAGE_BASE}.HttpServerSample
+EOF
+`
+
+if [ "$1" = "--list" ] ; then
+  SAMPLES=
+  for i in ${SAMPLES_FQ}; do
+    SAMPLE=`echo ${i} | sed -e 's/.*\.//'`
+    SAMPLES="${SAMPLES} ${SAMPLE}"
+  done
+  echo ${SAMPLES}
+  exit 0
+fi
+if [ "$1" = "" ] ; then
+  echo $USAGE
+  exit 1
+fi
+
+SAMPLE_NAME=$1
+shift
+
+SAMPLE_FQ=
+for i in ${SAMPLES_FQ}; do
+  SAMPLE_FQ=`echo $i | grep -- "\.${SAMPLE_NAME}\$"`
+  if [ "${SAMPLE_FQ}" != "" ]; then
+    break
+  fi
+done
+if [ "${SAMPLE_FQ}" = "" ]; then
+  echo unrecognized sample name \"${SAMPLE_NAME}\"
+  echo ${USAGE}
+  exit 1
+fi
+
+java -cp ${UBER_JAR} "${SAMPLE_FQ}" "$*"
+
diff --git a/cron/.gitignore b/cron/.gitignore
new file mode 100644
index 0000000..ed3454e
--- /dev/null
+++ b/cron/.gitignore
@@ -0,0 +1,3 @@
+
+# mkcrontab generated output
+startapp.cron
\ No newline at end of file
diff --git a/cron/README.md b/cron/README.md
new file mode 100644
index 0000000..0c641e1
--- /dev/null
+++ b/cron/README.md
@@ -0,0 +1,35 @@
+Restarting Edgent if the JVM crashes
+
+The startapp.sh script can be setup to run as a cron job every minute in order
+to monitor a JVM running an Edgent application and restart Edgent if the 
+JVM crashes. The script checks whether the pid of the JVM indicates
+a process which is still running.  If the pid is not there, it executes the 
+command to start the application in the first place.
+
+A crontab entry file contains information which cron uses to schedule the job.
+The sample startapp.cron file is configured to execute the 
+org.apache.edgent.samples.topology.TerminateAfterNTuples sample application,
+which terminates the JVM after processing a preset number of tuples.
+
+See README.md in the samples root directory for information on building the samples.
+
+To setup cron to restart the sample application every minute:
+
+1. Create the startapp.cron file from the startapp.cron.template file:
+
+   $ ./mkcrontab
+
+2. Install startapp.cron:
+
+   $ crontab ./startapp.cron
+
+   Note: if you wish to have your ~/.profile executed you must explicitly
+   do so in the crontab entry or in a script called by the entry.
+
+3. To see the set crontab entries:
+
+   $ crontab -l
+
+3. To remove the current crontab entries:
+
+   $ crontab -r
diff --git a/cron/mkcrontab.sh b/cron/mkcrontab.sh
new file mode 100755
index 0000000..61afc3b
--- /dev/null
+++ b/cron/mkcrontab.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env bash
+#
+# 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.
+#
+
+USAGE="usage: `basename $0`"
+
+set -e
+
+if [ "${JAVA_HOME}" = "" ]; then
+  echo JAVA_HOME not set
+  exit 1
+fi
+
+EDGENT_SAMPLES_DIR=`pwd`/..
+
+TOPOLOGY_SAMPLES_JAR=`echo ${EDGENT_SAMPLES_DIR}/topology/target/edgent-samples-topology-*-uber.jar`
+
+sed -e "s,{EDGENT_SAMPLES_DIR},${EDGENT_SAMPLES_DIR},g" \
+    -e "s,{TOPOLOGY_SAMPLES_JAR},${TOPOLOGY_SAMPLES_JAR},g" \
+    -e "s,{JAVA_HOME},${JAVA_HOME},g" \
+    <startapp.cron.template >startapp.cron
+
+echo created startapp.cron
\ No newline at end of file
diff --git a/cron/startapp.cron.template b/cron/startapp.cron.template
new file mode 100644
index 0000000..9eed367
--- /dev/null
+++ b/cron/startapp.cron.template
@@ -0,0 +1,22 @@
+#
+# 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.
+#
+# Crontab file which contains settings for scheduling the execution of a 
+# monitoring script every minute using cron.
+
+JAVA_HOME={JAVA_HOME}
+
+* * * * * {EDGENT_SAMPLES_DIR}/cron/startapp.sh {TOPOLOGY_SAMPLES_JAR} org.apache.edgent.samples.topology.TerminateAfterNTuples /tmp >> /tmp/edgent-cron.log
diff --git a/cron/startapp.sh b/cron/startapp.sh
new file mode 100755
index 0000000..6954f23
--- /dev/null
+++ b/cron/startapp.sh
@@ -0,0 +1,117 @@
+#!/bin/bash
+#
+# 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.
+#
+
+_usage() {
+  echo -e "Usage: ${0} {classpath} {mainclass} [dir]\n\n\
+Runs a Java application while saving its stdout to dir/mainclass.out, its stderr to dir/mainclass.err, and its process id to dir/mainclass.pid.\n\
+\n\
+This script starts a Java application only if it cannot find its pid. If the process id specified by dir/mainclass.pid exists, then the script will not start the application.\n\
+\n\
+    classpath The application's class path.\n\
+    classname The name of the class to be launched.\n\
+    dir       The directory where the process stdout, stderr and pid files are\n\
+              written. If dir is not specified, then the files are saved into\n\
+              the current directory.\n\
+"
+}
+
+# _get_pid program [pidfile]
+# Set $pid to pids from /tmp* for {program}.
+# $pid should be declared local in the caller.
+_get_pid() {
+  local base=${1##*/}
+  local pid_file=${2:-/tmp/$base.pid}
+
+  pid=
+  if [ -f "$pid_file" ] ; then
+    local p
+
+    [ ! -r "$pid_file" ] && return 1 # "Cannot access pid file"
+
+    p=$(cat "$pid_file")
+    [ -z "${p//[0-9]/}" ] && [ -d "/proc/$p" ] && pid="$p"
+    if [ -n "$pid" ]; then
+        return 0
+    fi
+    return 2 # "Program is not running but pid file exists"
+  fi
+  return 3 # "Program pid file does not exist"
+}
+
+# _readlink path
+# Output the full path, replacement for readlink -f
+_readlink() {
+  (
+  pushd ${1%/*} > /dev/null 2>&1
+  echo $PWD/${1##*/}
+  popd > /dev/null 2>&1
+  )
+}
+
+# _dirname path
+# Get the directory name, replacement for dirname.
+_dirname() {
+  echo ${1%/*}
+}
+
+_error() {
+  echo $1; exit 1
+}
+
+
+## Main script
+#[ ! -n "${EDGENT:-}" ] && EDGENT=../..
+[ ! -n "${JAVA_HOME:-}" ] && _error "JAVA_HOME must be set"
+
+if [ $# -lt 2 ]; then
+  _usage
+  exit 1
+fi
+
+classpath=${1}
+main_class=${2}
+out_dir=${3:-.}
+
+# Command to start the application.
+command="${JAVA_HOME}/bin/java -cp ${classpath} ${main_class}"
+
+if [[ ! -d ${out_dir} || ${out_dir:0:1} != '/' ]]; then
+  ## out_dir as absolute path
+  out_dir=$(_readlink ${out_dir})
+  out_dir=$(_dirname ${out_dir})
+fi
+
+pid_file=${out_dir}/${main_class}.pid
+out_file=${out_dir}/${main_class}.out
+err_file=${out_dir}/${main_class}.err
+pid=
+
+_get_pid $main_class $pid_file
+RC="$?"
+[ $RC == "1" ] && _error "Cannot access pid file $pid_file"
+
+if [ -z "$pid" ]; then
+  $command >> $out_file 2>> $err_file &
+  pid="$!"
+  echo $pid >| $pid_file
+  echo -e "The program was restarted with command:\n\
+${command}\n\
+Process id: $pid"
+else
+  echo "The program's process id is $pid"
+fi
diff --git a/pom.xml b/pom.xml
index c8c58c6..c54819e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -277,9 +277,30 @@
                <goal>shade</goal>
              </goals>
              <configuration>
+               <!-- avoid things like the following when running the uber:
+                   java.lang.NoClassDefFoundError: org.eclipse.paho.client.mqttv3.logging.JSR47Logger
+                   e.g., connectors.iotp uses watson-iot which uses
+                   paho.mqtt.  Apparently watson-iot or paho.mqtt
+                   has some behind the scenes depedency that's not
+                   captured in the uber jar when minimize is true.
+                 -->
                <!-- <minimizeJar>true</minimizeJar> -->
                <shadedArtifactAttached>true</shadedArtifactAttached>
                <shadedClassifierName>uber</shadedClassifierName>
+               <!-- avoid "Invalid signature file digest for Manifest
+                    main attributes" when running the uber jar.
+                    An included jar's signed manifest isn't valid in the uber.
+                 -->
+               <filters>
+                 <filter>
+                   <artifact>*:*</artifact>
+                   <excludes>
+                     <exclude>META-INF/*.SF</exclude>
+                     <exclude>META-INF/*.DSA</exclude>
+                     <exclude>META-INF/*.RSA</exclude>
+                   </excludes>
+                 </filter>
+               </filters>
              </configuration>
            </execution>
          </executions>
diff --git a/scenarios/run-sample.sh b/scenarios/run-sample.sh
new file mode 100755
index 0000000..fea6ead
--- /dev/null
+++ b/scenarios/run-sample.sh
@@ -0,0 +1,64 @@
+#!/usr/bin/env bash
+#
+# 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.
+#
+
+USAGE="usage: `basename $0` [--list] simple-main-class-name [sample-args]"
+
+CATEGORY=scenarios
+
+#UBER_JAR=target/edgent-samples-topology-1.2.0-SNAPSHOT-uber.jar
+UBER_JAR=target/edgent-samples-${CATEGORY}-*-uber.jar
+
+SAMPLE_PACKAGE_BASE=org.apache.edgent.samples.${CATEGORY}
+SAMPLES_FQ=`cat <<EOF 
+${SAMPLE_PACKAGE_BASE}.iotp.IotpFullScenario
+${SAMPLE_PACKAGE_BASE}.iotp.range.sensor.IotpRangeSensor
+EOF
+`
+
+if [ "$1" = "--list" ] ; then
+  SAMPLES=
+  for i in ${SAMPLES_FQ}; do
+    SAMPLE=`echo ${i} | sed -e 's/.*\.//'`
+    SAMPLES="${SAMPLES} ${SAMPLE}"
+  done
+  echo ${SAMPLES}
+  exit 0
+fi
+if [ "$1" = "" ] ; then
+  echo $USAGE
+  exit 1
+fi
+
+SAMPLE_NAME=$1
+shift
+
+SAMPLE_FQ=
+for i in ${SAMPLES_FQ}; do
+  SAMPLE_FQ=`echo $i | grep -- "\.${SAMPLE_NAME}\$"`
+  if [ "${SAMPLE_FQ}" != "" ]; then
+    break
+  fi
+done
+if [ "${SAMPLE_FQ}" = "" ]; then
+  echo unrecognized sample name \"${SAMPLE_NAME}\"
+  echo ${USAGE}
+  exit 1
+fi
+
+java -cp ${UBER_JAR} "${SAMPLE_FQ}" "$*"
+
diff --git a/topology/README.md b/topology/README.md
new file mode 100644
index 0000000..5d8e6a1
--- /dev/null
+++ b/topology/README.md
@@ -0,0 +1,30 @@
+See the README.md in the samples root directory for information on building the samples.
+
+The build generated uber jar contains all of the dependent 
+Edgent jars and their transitive dependencies.
+
+The desired sample can be run using the run-sample.sh script. e.g.,
+
+```sh
+cd topology
+./run-sample.sh HelloEdgent
+```
+
+For usage information:
+
+```sh
+./run-sample.sh
+./run-sample.sh --list
+```
+
+If you want to run a sample from the standard jar there are two options:
+a) get a local copy of all of the Edgent jars and their dependencies.
+   Form a CLASSPATH to the jars and run the sample's main class.
+   The get-edgent-jars.sh script can be used to get the jars from
+   a maven repository (local or remote).
+b) create an application package bundle.  The bundle includes the
+   sample(s) jar and a copy of all of the dependent Edgent jars
+   and their dependencies.  The package-app.sh script can be
+   used to create this bundle.
+   The package-app.sh script also creates a run-app.sh script.
+   The run-app.sh script configures the CLASSPATH and runs the main class.
diff --git a/topology/run-sample.sh b/topology/run-sample.sh
index b87859e..c9568d5 100755
--- a/topology/run-sample.sh
+++ b/topology/run-sample.sh
@@ -18,42 +18,57 @@
 
 USAGE="usage: `basename $0` [--list] simple-main-class-name [sample-args]"
 
-#UBER_JAR=target/edgent-samples-topology-1.2.0-SNAPSHOT-uber.jar
-UBER_JAR=target/edgent-samples-topology-*-uber.jar
+CATEGORY=topology
 
-SAMPLE_PACKAGE=org.apache.edgent.samples.topology
-SAMPLES=`cat <<EOF 
-CombiningStreamsProcessingResults
-DevelopmentMetricsSample
-DevelopentSample
-DevelopmentSampleJobMXBean
-HelloEdgent
-JobEventsSample
-JobExecution
-PeriodicSource
-SensorsAggregates
-SimpleFilterTransform
-SplitWithEnumSample
-TerminateAfterNTuples
+#UBER_JAR=target/edgent-samples-topology-1.2.0-SNAPSHOT-uber.jar
+UBER_JAR=target/edgent-samples-${CATEGORY}-*-uber.jar
+
+SAMPLE_PACKAGE_BASE=org.apache.edgent.samples.${CATEGORY}
+SAMPLES_FQ=`cat <<EOF 
+${SAMPLE_PACKAGE_BASE}.CombiningStreamsProcessingResults
+${SAMPLE_PACKAGE_BASE}.DevelopmentMetricsSample
+${SAMPLE_PACKAGE_BASE}.DevelopmentSample
+${SAMPLE_PACKAGE_BASE}.DevelopmentSampleJobMXBean
+${SAMPLE_PACKAGE_BASE}.HelloEdgent
+${SAMPLE_PACKAGE_BASE}.JobEventsSample
+${SAMPLE_PACKAGE_BASE}.JobExecution
+${SAMPLE_PACKAGE_BASE}.PeriodicSource
+${SAMPLE_PACKAGE_BASE}.SensorsAggregates
+${SAMPLE_PACKAGE_BASE}.SimpleFilterTransform
+${SAMPLE_PACKAGE_BASE}.SplitWithEnumSample
+${SAMPLE_PACKAGE_BASE}.TerminateAfterNTuples
 EOF
 `
 
+if [ "$1" = "--list" ] ; then
+  SAMPLES=
+  for i in ${SAMPLES_FQ}; do
+    SAMPLE=`echo ${i} | sed -e 's/.*\.//'`
+    SAMPLES="${SAMPLES} ${SAMPLE}"
+  done
+  echo ${SAMPLES}
+  exit 0
+fi
 if [ "$1" = "" ] ; then
   echo $USAGE
   exit 1
 fi
-if [ "$1" = "--list" ] ; then
-  echo ${SAMPLES}
-  exit 0
-fi
 
 SAMPLE_NAME=$1
 shift
 
-if [ $# != 0 ] ; then
-  echo $USAGE
+SAMPLE_FQ=
+for i in ${SAMPLES_FQ}; do
+  SAMPLE_FQ=`echo $i | grep -- "\.${SAMPLE_NAME}\$"`
+  if [ "${SAMPLE_FQ}" != "" ]; then
+    break
+  fi
+done
+if [ "${SAMPLE_FQ}" = "" ]; then
+  echo unrecognized sample name \"${SAMPLE_NAME}\"
+  echo ${USAGE}
   exit 1
 fi
 
-java -cp ${UBER_JAR} "${SAMPLE_PACKAGE}.${SAMPLE_NAME}" "$*"
+java -cp ${UBER_JAR} "${SAMPLE_FQ}" "$*"
 
diff --git a/utils/README.md b/utils/README.md
new file mode 100644
index 0000000..348edae
--- /dev/null
+++ b/utils/README.md
@@ -0,0 +1,30 @@
+See the README.md in the samples root directory for information on building the samples.
+
+The build generated uber jar contains all of the dependent 
+Edgent jars and their transitive dependencies.
+
+The desired sample can be run using the run-sample.sh script. e.g.,
+
+```sh
+cd topology
+./run-sample.sh PeriodicSourceWithMetrics
+```
+
+For usage information:
+
+```sh
+./run-sample.sh
+./run-sample.sh --list
+```
+
+If you want to run a sample from the standard jar there are two options:
+a) get a local copy of all of the Edgent jars and their dependencies.
+   Form a CLASSPATH to the jars and run the sample's main class.
+   The get-edgent-jars.sh script can be used to get the jars from
+   a maven repository (local or remote).
+b) create an application package bundle.  The bundle includes the
+   sample(s) jar and a copy of all of the dependent Edgent jars
+   and their dependencies.  The package-app.sh script can be
+   used to create this bundle.
+   The package-app.sh script also creates a run-app.sh script.
+   The run-app.sh script configures the CLASSPATH and runs the main class.
diff --git a/utils/run-sample.sh b/utils/run-sample.sh
new file mode 100755
index 0000000..8e9128a
--- /dev/null
+++ b/utils/run-sample.sh
@@ -0,0 +1,64 @@
+#!/usr/bin/env bash
+#
+# 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.
+#
+
+USAGE="usage: `basename $0` [--list] simple-main-class-name [sample-args]"
+
+CATEGORY=utils
+
+#UBER_JAR=target/edgent-samples-topology-1.2.0-SNAPSHOT-uber.jar
+UBER_JAR=target/edgent-samples-${CATEGORY}-*-uber.jar
+
+SAMPLE_PACKAGE_BASE=org.apache.edgent.samples.${CATEGORY}
+SAMPLES_FQ=`cat <<EOF 
+${SAMPLE_PACKAGE_BASE}.metrics.PeriodicSourceWithMetrics
+${SAMPLE_PACKAGE_BASE}.metrics.SplitWithMetrics
+EOF
+`
+
+if [ "$1" = "--list" ] ; then
+  SAMPLES=
+  for i in ${SAMPLES_FQ}; do
+    SAMPLE=`echo ${i} | sed -e 's/.*\.//'`
+    SAMPLES="${SAMPLES} ${SAMPLE}"
+  done
+  echo ${SAMPLES}
+  exit 0
+fi
+if [ "$1" = "" ] ; then
+  echo $USAGE
+  exit 1
+fi
+
+SAMPLE_NAME=$1
+shift
+
+SAMPLE_FQ=
+for i in ${SAMPLES_FQ}; do
+  SAMPLE_FQ=`echo $i | grep -- "\.${SAMPLE_NAME}\$"`
+  if [ "${SAMPLE_FQ}" != "" ]; then
+    break
+  fi
+done
+if [ "${SAMPLE_FQ}" = "" ]; then
+  echo unrecognized sample name \"${SAMPLE_NAME}\"
+  echo ${USAGE}
+  exit 1
+fi
+
+java -cp ${UBER_JAR} "${SAMPLE_FQ}" "$*"
+