changeset 1761:13b1fba7d797

Remove remaining devel build vs. release build differences. Reviewed-by: omajid Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2015-June/014168.html
author Severin Gehwolf <sgehwolf@redhat.com>
date Mon, 22 Jun 2015 19:25:50 +0200
parents b2196c1fa9a1
children 36ac62292ea5
files build-deps/pom.xml distribution/config/agent.auth distribution/config/examples/thermostat-roles-example.properties distribution/config/examples/thermostat-users-example.properties distribution/config/thermostat-roles.properties distribution/config/thermostat-users.properties distribution/pom.xml distribution/scripts/thermostat-devsetup integration-tests/itest-run/pom.xml integration-tests/itest-run/src/test/java/com/redhat/thermostat/itest/DevWebStorageTest.java integration-tests/itest-run/src/test/java/com/redhat/thermostat/itest/IntegrationTest.java integration-tests/itest-run/src/test/java/com/redhat/thermostat/itest/WebAppTest.java integration-tests/itest-run/src/test/java/com/redhat/thermostat/itest/WebStorageUsingIntegrationTest.java pom.xml
diffstat 14 files changed, 452 insertions(+), 530 deletions(-) [+]
line wrap: on
line diff
--- a/build-deps/pom.xml	Thu Jun 18 18:13:42 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,299 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- Copyright 2012-2015 Red Hat, Inc.
-
- This file is part of Thermostat.
-
- Thermostat is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- Thermostat is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Thermostat; see the file COPYING.  If not see
- <http://www.gnu.org/licenses/>.
-
- Linking this code with other modules is making a combined work
- based on this code.  Thus, the terms and conditions of the GNU
- General Public License cover the whole combination.
-
- As a special exception, the copyright holders of this code give
- you permission to link this code with independent modules to
- produce an executable, regardless of the license terms of these
- independent modules, and to copy and distribute the resulting
- executable under terms of your choice, provided that you also
- meet, for each linked independent module, the terms and conditions
- of the license of that module.  An independent module is a module
- which is not derived from or based on this code.  If you modify
- this code, you may extend this exception to your version of the
- library, but you are not obligated to do so.  If you do not wish
- to do so, delete this exception statement from your version.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>thermostat</artifactId>
-    <groupId>com.redhat.thermostat</groupId>
-    <version>1.99.2-SNAPSHOT</version>
-  </parent>
-  
-  <artifactId>thermostat-build-deps</artifactId>
-  <packaging>pom</packaging>
-  <name>Thermostat Build Artifact Dependencies</name>
-
-  <!-- List all dependencies for release builds here.
-       Extra deps for development builds go into
-       ../distribution/pom.xml (dev-build profile)
-       directly. It is assumed that release-build artifacts
-       are a subset of devel-build artifacts -->
-  <dependencies>
-    <!-- thermostat core parts. Be sure to
-         also adjust ../distribution/assembly/core-assembly.xml -->
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-main</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-launcher</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-client-swing</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-swing-components</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-client-command</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-client-cli</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-osgi-living-vm-filter-swing</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-agent-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-agent-cli</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-storage-cli</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-agent-command</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-agent-proxy-server</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-killvm-agent</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-killvm-client-swing</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-common-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-common-command</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-osgi-process-handler</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-keyring</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-laf-utils</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-web-client</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <!-- depend on the web archive to be built in order
-         to be able to copy the exploded war into the
-         image directory -->
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-web-war</artifactId>
-        <version>${project.version}</version>
-        <type>war</type>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-system-backend</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-storage-mongodb</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    
-    <!-- Plugins -->
-
-    <!-- Be sure to add the distribution module of your plugin below
-         with type "zip", and also to ../distribution/assembly/all-plugin-assembly.xml -->
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-host-cpu-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-validate-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-host-memory-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-host-overview-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-notes-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-numa-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-storage-profile-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-thread-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-vm-classstat-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-vm-cpu-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-vm-gc-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-vm-heap-analysis-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-vm-io-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-vm-jmx-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-vm-memory-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-vm-overview-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-vm-profiler-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-web-endpoint-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-killvm-distribution</artifactId>
-      <version>${project.version}</version>
-      <type>zip</type>
-    </dependency>
-  </dependencies>
-</project>
--- a/distribution/config/agent.auth	Thu Jun 18 18:13:42 2015 +0200
+++ b/distribution/config/agent.auth	Mon Jun 22 19:25:50 2015 +0200
@@ -6,4 +6,3 @@
 #
 #username=thermostat
 #password=thermostat
-${agent.auth.snippet}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/distribution/config/examples/thermostat-roles-example.properties	Mon Jun 22 19:25:50 2015 +0200
@@ -0,0 +1,60 @@
+# This file is used if the PropertiesUsernameRolesLoginModule is used
+# as a delegate in the JAAS configuration *and* the 'roles.properties' option
+# has not been specified for the login module.
+#
+# If that is the case, this file does two things:
+#    1.  It maps user names to roles.
+#    2.  Defines an optional recursive set of roles. This is useful in order to
+#        define role sets. Users can then be members of such defined role sets.
+#        Note that every line which does not have a user name (as defined in the
+#        corresponding users.properties file) on the left hand side of the
+#        equals sign ('='), represents a role.
+#
+# A user is assigned multiple roles by separating them by a comma ','. Every
+# entity in this file which isn't a user name, will be implicitly defined as a
+# role.
+#
+##############################################################################
+# The following makes user 'agent-tester' a user suitable for running
+# "thermostat agent".
+agent-tester=thermostat-agent, thermostat-grant-write-files-all-agent
+
+##############################################################################
+# The following makes user 'client-tester' a user suitable for running the GUI and/or
+# shell client. needs thermostat-purge role for clean-data command to work
+client-tester=thermostat-grant-read-all-client, thermostat-cmdc, thermostat-purge
+
+# Agent recursive role
+thermostat-agent = thermostat-cmdc-verify, \
+                   thermostat-login, \
+                   thermostat-prepare-statement, \
+                   thermostat-purge, \
+                   thermostat-register-category, \
+                   thermostat-realm, \
+                   thermostat-save-file, \
+                   thermostat-write
+# Grant agent role so as to be able to write any file
+thermostat-grant-write-files-all-agent = thermostat-files-grant-write-filename-ALL
+                   
+# Client recursive role (granting a client to read all data + all files)
+thermostat-grant-read-all-client = thermostat-agents-grant-read-agentId-ALL, \
+                    thermostat-cmdc-generate, \
+                    thermostat-hosts-grant-read-hostname-ALL, \
+                    thermostat-load-file, \
+                    thermostat-login, \
+                    thermostat-prepare-statement, \
+                    thermostat-query, \
+                    thermostat-realm, \
+                    thermostat-register-category, \
+                    thermostat-vms-grant-read-username-ALL, \
+                    thermostat-vms-grant-read-vmId-ALL, \
+                    thermostat-files-grant-read-filename-ALL, \
+                    thermostat-write
+# Grants all command channel operations
+thermostat-cmdc = thermostat-cmdc-grant-garbage-collect, \
+                  thermostat-cmdc-grant-dump-heap, \
+                  thermostat-cmdc-grant-thread-harvester, \
+                  thermostat-cmdc-grant-killvm, \
+                  thermostat-cmdc-grant-profile-vm, \
+                  thermostat-cmdc-grant-ping, \
+                  thermostat-cmdc-grant-jmx-toggle-notifications
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/distribution/config/examples/thermostat-users-example.properties	Mon Jun 22 19:25:50 2015 +0200
@@ -0,0 +1,14 @@
+# This file is used if the PropertiesUsernameRolesLoginModule is used
+# as a delegate in the JAAS configuration *and* the 'users.properties' option
+# has not been specified for the login module.
+#
+# If that is the case, this defines the database of users with corresponding
+# passwords, the thermostat web storage servlet knows about.
+# 
+# WARNING: Passwords of users are in plain text. This needs to be considered
+#          when using this module in production. The main goal of this login
+#          module is to provide a simple way to define thermostat users and
+#          their corresponding passwords.
+# 
+agent-tester=tester
+client-tester=tester
--- a/distribution/config/thermostat-roles.properties	Thu Jun 18 18:13:42 2015 +0200
+++ b/distribution/config/thermostat-roles.properties	Mon Jun 22 19:25:50 2015 +0200
@@ -75,4 +75,3 @@
 #                  thermostat-cmdc-grant-profile-vm, \
 #                  thermostat-cmdc-grant-ping, \
 #                  thermostat-cmdc-grant-jmx-toggle-notifications
-${dev.roles.snippet}
--- a/distribution/config/thermostat-users.properties	Thu Jun 18 18:13:42 2015 +0200
+++ b/distribution/config/thermostat-users.properties	Mon Jun 22 19:25:50 2015 +0200
@@ -17,4 +17,3 @@
 # user2=password2
 # ...
 #
-${dev.users.snippet}
--- a/distribution/pom.xml	Thu Jun 18 18:13:42 2015 +0200
+++ b/distribution/pom.xml	Mon Jun 22 19:25:50 2015 +0200
@@ -179,6 +179,16 @@
                   </includes>
                 </resource>
                 <resource>
+                  <directory>config/examples</directory>
+                  <targetPath>image/etc/examples</targetPath>
+                  <filtering>false</filtering>
+                  <includes>
+                    <!-- Example files with real users. agent-tester and client-tester -->
+                    <include>thermostat-users-example.properties</include>
+                    <include>thermostat-roles-example.properties</include>
+                  </includes>
+                </resource>
+                <resource>
                   <directory>config</directory>
                   <targetPath>image/etc/plugins.d</targetPath>
                   <filtering>true</filtering>
@@ -276,80 +286,257 @@
       </plugin>
     </plugins>
   </build>
-  <!-- Define two build profiles. One for development builds. Another for
-       release builds. All dependencies for release builds are specified in
-       build-deps/pom.xml. Any extra dependencies for a devel-build
-       go into the dev-build profile directly.
-  -->
-  <profiles>
 
-    <profile> <!-- dev-build -->
-      <id>dev-build</id>
-      <activation>
-        <property>
-          <name>environment.type</name>
-          <value>!release</value>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>com.redhat.thermostat</groupId>
-          <artifactId>thermostat-build-deps</artifactId>
-          <version>${project.version}</version>
-          <type>pom</type>
-        </dependency>
-        <!-- This duplication needs to be here since copy-dependencies plugin
-             which prepares the exploded web archive would fail
-             otherwise -->
-        <dependency>
-          <groupId>com.redhat.thermostat</groupId>
-          <artifactId>thermostat-web-war</artifactId>
-          <version>${project.version}</version>
-          <type>war</type>
-        </dependency>
-
-        <!-- Plugins -->
-
-        <!-- Be sure to add the distribution module of your plugin below
-             with type "zip", and also to distribution/assembly/all-plugin-assembly.xml -->
+  <dependencies>
+    <!-- thermostat core parts. Be sure to
+         also adjust ../distribution/assembly/core-assembly.xml -->
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-main</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-launcher</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-client-swing</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-swing-components</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-client-command</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-client-cli</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.redhat.thermostat</groupId>
+        <artifactId>thermostat-osgi-living-vm-filter-swing</artifactId>
+        <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-agent-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-agent-cli</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-storage-cli</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-agent-command</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-agent-proxy-server</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-killvm-agent</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.redhat.thermostat</groupId>
+        <artifactId>thermostat-killvm-client-swing</artifactId>
+        <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-common-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-common-command</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.redhat.thermostat</groupId>
+        <artifactId>thermostat-osgi-process-handler</artifactId>
+        <version>${project.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.redhat.thermostat</groupId>
+        <artifactId>thermostat-keyring</artifactId>
+        <version>${project.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.redhat.thermostat</groupId>
+        <artifactId>thermostat-laf-utils</artifactId>
+        <version>${project.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.redhat.thermostat</groupId>
+        <artifactId>thermostat-web-client</artifactId>
+        <version>${project.version}</version>
+    </dependency>
+    <!-- depend on the web archive to be built in order
+         to be able to copy the exploded war into the
+         image directory -->
+    <dependency>
+        <groupId>com.redhat.thermostat</groupId>
+        <artifactId>thermostat-web-war</artifactId>
+        <version>${project.version}</version>
+        <type>war</type>
+    </dependency>
+    <dependency>
+        <groupId>com.redhat.thermostat</groupId>
+        <artifactId>thermostat-system-backend</artifactId>
+        <version>${project.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.redhat.thermostat</groupId>
+        <artifactId>thermostat-storage-mongodb</artifactId>
+        <version>${project.version}</version>
+    </dependency>
+    
+    <!-- Plugins -->
 
-        <!-- build list-categories command for dev builds only -->
-        <dependency>
-          <groupId>com.redhat.thermostat</groupId>
-          <artifactId>thermostat-schema-info-distribution</artifactId>
-          <version>${project.version}</version>
-          <type>zip</type>
-        </dependency>
-      </dependencies>
-    </profile> <!-- dev-build -->
+    <!-- Be sure to add the distribution module of your plugin below
+         with type "zip", and also to ../distribution/assembly/all-plugin-assembly.xml -->
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-host-cpu-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-validate-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-host-memory-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-host-overview-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-notes-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-numa-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-storage-profile-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-thread-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-vm-classstat-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-vm-cpu-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-vm-gc-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-vm-heap-analysis-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-vm-io-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-vm-jmx-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-vm-memory-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-vm-overview-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-vm-profiler-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-web-endpoint-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-killvm-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
 
-    <profile> <!-- release-build -->
-      <id>release-build</id>
-      <activation>
-        <property>
-          <name>environment.type</name>
-          <value>release</value>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>com.redhat.thermostat</groupId>
-          <artifactId>thermostat-build-deps</artifactId>
-          <version>${project.version}</version>
-          <type>pom</type>
-        </dependency>
-        <!-- This duplication needs to be here since copy-dependencies plugin
-             which prepares the exploded web archive would fail
-             otherwise -->
-        <dependency>
-          <groupId>com.redhat.thermostat</groupId>
-          <artifactId>thermostat-web-war</artifactId>
-          <version>${project.version}</version>
-          <type>war</type>
-        </dependency>
-      </dependencies>
-    </profile> <!-- release-build -->
+    <!-- list-categories command -->
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-schema-info-distribution</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+    </dependency>
+  </dependencies>
 
-  </profiles>
 </project>
 
--- a/distribution/scripts/thermostat-devsetup	Thu Jun 18 18:13:42 2015 +0200
+++ b/distribution/scripts/thermostat-devsetup	Mon Jun 22 19:25:50 2015 +0200
@@ -61,5 +61,10 @@
   exit $retval
 fi
 
-# Copy the agent.auth file into USER_THERMOSTAT_HOME
-cp -v $THERMOSTAT_HOME/etc/agent.auth $USER_THERMOSTAT_HOME/etc/agent.auth
+# Use example users/roles files:
+#  thermostat-users-example.properties
+#  thermostat-roles-example.properties
+cp -v $THERMOSTAT_HOME/etc/examples/thermostat-users-example.properties $THERMOSTAT_HOME/etc/thermostat-users.properties
+cp -v $THERMOSTAT_HOME/etc/examples/thermostat-roles-example.properties $THERMOSTAT_HOME/etc/thermostat-roles.properties
+# Use the agent-tester user as defined in thermostat-users-example.properties
+echo -e 'username=agent-tester\npassword=tester' > $USER_THERMOSTAT_HOME/etc/agent.auth
--- a/integration-tests/itest-run/pom.xml	Thu Jun 18 18:13:42 2015 +0200
+++ b/integration-tests/itest-run/pom.xml	Mon Jun 22 19:25:50 2015 +0200
@@ -87,7 +87,6 @@
         <configuration>
           <argLine>
             -Djava.security.auth.login.config=${thermostat.home}/etc/thermostat_jaas.conf
-            -Ddevel.build=${devel.build}
             ${coverageAgent}
           </argLine>
           <skip>true</skip>
--- a/integration-tests/itest-run/src/test/java/com/redhat/thermostat/itest/DevWebStorageTest.java	Thu Jun 18 18:13:42 2015 +0200
+++ b/integration-tests/itest-run/src/test/java/com/redhat/thermostat/itest/DevWebStorageTest.java	Mon Jun 22 19:25:50 2015 +0200
@@ -44,27 +44,35 @@
 import java.nio.file.NoSuchFileException;
 import java.util.Map;
 
-import org.junit.After;
-import org.junit.Before;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import expectj.Spawn;
 
-public class DevWebStorageTest extends IntegrationTest {
+public class DevWebStorageTest extends WebStorageUsingIntegrationTest {
     
     private static final String THERMOSTAT_DEV_SETUP_SCRIPT = "thermostat-devsetup";
 
-    @Before
-    public void setUp() throws Exception {
+    @BeforeClass
+    public static void setUp() throws IOException {
         clearStorageDataDirectory();
+        backupOriginalCredentialsFiles();
+        try {
+            runThermostatDevSetup();
+        } catch (Exception e) {
+            e.printStackTrace();
+            restoreBackedUpCredentialsFiles();
+        }
     }
 
     
-    @After
-    public void tearDown() throws IOException {
+    @AfterClass
+    public static void tearDown() throws IOException {
         removeSetupCompleteStampFiles();
         removeAgentAuthFile();
 
+        restoreBackedUpCredentialsFiles();
         clearStorageDataDirectory();
     }
     
@@ -77,35 +85,17 @@
         }
     }
 
+    /**
+     * Singleton sanity check test whether web-storage-service works OK.
+     * 
+     * @throws Exception
+     */
     @Test
     public void canRunWebStorageService() throws Exception {
-        if (isDevelopmentBuild()) {
-            // test setup
-            removeSetupCompleteStampFiles();
-            
-            // run the test methods
-            runThermostatSetup();
-            runWebStorageTest();
-        }
-        // otherwise service is not build so don't run the
-        // test.
-    }
-
-    private void runThermostatSetup() throws Exception {
-        Spawn setup = spawnScript(THERMOSTAT_DEV_SETUP_SCRIPT, new String[] {});
-        setup.expectClose();
-        String stdout = setup.getCurrentStandardOutContents();
-        // cp -v of thermostat-devsetup should produce this
-        assertTrue("was agent.auth copied?", stdout.contains("distribution/target/user-home/etc/agent.auth"));
-        assertTrue(stdout.contains("Thermostat setup complete!"));
-        assertTrue(stdout.contains("mongodevuser"));
-    }
-
-    private void runWebStorageTest() throws Exception {
         Map<String, String> testProperties = getVerboseModeProperties();
         SpawnResult spawnResult = spawnThermostatWithPropertiesSetAndGetProcess(testProperties, "web-storage-service");
         Spawn service = spawnResult.spawn;
-
+        
         try {
             service.expect("Agent started.");
         } finally {
@@ -119,7 +109,19 @@
                 // ignore if second try of stopping storage failed.
             }
         }
-
+        
         service.expectClose();
     }
+
+    /*
+     * This overwrites stock thermostat-users/roles.properties files. Therefore
+     * we back them up before we run the test.
+     */
+    private static void runThermostatDevSetup() throws Exception {
+        Spawn setup = spawnScript(THERMOSTAT_DEV_SETUP_SCRIPT, new String[] {});
+        setup.expectClose();
+        String stdout = setup.getCurrentStandardOutContents();
+        assertTrue(stdout.contains("Thermostat setup complete!"));
+        assertTrue(stdout.contains("mongodevuser"));
+    }
 }
--- a/integration-tests/itest-run/src/test/java/com/redhat/thermostat/itest/IntegrationTest.java	Thu Jun 18 18:13:42 2015 +0200
+++ b/integration-tests/itest-run/src/test/java/com/redhat/thermostat/itest/IntegrationTest.java	Mon Jun 22 19:25:50 2015 +0200
@@ -395,11 +395,6 @@
 
     }
 
-    protected static boolean isDevelopmentBuild() {
-        boolean isDevelBuild = Boolean.getBoolean("devel.build");
-        return isDevelBuild;
-    }
-
     /**
      * Kill the process and all its children, recursively. Sends SIGTERM.
      */
--- a/integration-tests/itest-run/src/test/java/com/redhat/thermostat/itest/WebAppTest.java	Thu Jun 18 18:13:42 2015 +0200
+++ b/integration-tests/itest-run/src/test/java/com/redhat/thermostat/itest/WebAppTest.java	Mon Jun 22 19:25:50 2015 +0200
@@ -51,8 +51,6 @@
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -65,7 +63,6 @@
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.eclipse.jetty.server.Server;
@@ -118,7 +115,6 @@
 
 import expectj.ExpectJ;
 import expectj.Spawn;
-import expectj.TimeoutException;
 
 /**
  * This test class starts up a mongod instance and a web storage instance
@@ -136,7 +132,7 @@
  * Please don't introduce any more sporadic test failures to this
  * integration test!!!
  */
-public class WebAppTest extends IntegrationTest {
+public class WebAppTest extends WebStorageUsingIntegrationTest {
 
     /*
      * Registry of descriptors this test needs to allow in order to avoid
@@ -242,32 +238,20 @@
     private static final String TEST_USER = "testuser";
     private static final String TEST_PASSWORD = "testpassword";
     private static final double EQUALS_DELTA = 0.00000000000001;
-    private static final String THERMOSTAT_USERS_FILE = getConfigurationDir() + "/thermostat-users.properties";
-    private static final String THERMOSTAT_ROLES_FILE = getConfigurationDir() + "/thermostat-roles.properties";
-    private static final String THERMOSTAT_WEB_AUTH_FILE = getConfigurationDir() + "/web.auth";
+    
     private static final String VM_ID1 = "vmId1";
     private static final String VM_ID2 = "vmId2";
     private static final String VM_ID3 = "vmId3";
 
     private static Server server;
     private static int port;
-    private static Path backupUsers;
-    private static Path backupRoles;
-    private static Path backupWebAuth;
+    
 
     @BeforeClass
     public static void setUpOnce() throws Exception {
         clearStorageDataDirectory();
 
-        backupUsers = Files.createTempFile("itest-backup-thermostat-users", "");
-        backupRoles = Files.createTempFile("itest-backup-thermostat-roles", "");
-        backupWebAuth = Files.createTempFile("itest-backup-webapp-auth", "");
-        backupRoles.toFile().deleteOnExit();
-        backupUsers.toFile().deleteOnExit();
-        backupWebAuth.toFile().deleteOnExit();
-        Files.copy(new File(THERMOSTAT_USERS_FILE).toPath(), backupUsers, StandardCopyOption.REPLACE_EXISTING);
-        Files.copy(new File(THERMOSTAT_ROLES_FILE).toPath(), backupRoles, StandardCopyOption.REPLACE_EXISTING);
-        Files.copy(new File(THERMOSTAT_WEB_AUTH_FILE).toPath(), backupWebAuth, StandardCopyOption.REPLACE_EXISTING);
+        backupOriginalCredentialsFiles();
 
         createFakeSetupCompleteFile();
         createFakeUserSetupDoneFile();
@@ -325,9 +309,7 @@
                     throw e;
                 } finally {
                     removeSetupCompleteStampFiles();
-                    Files.copy(backupUsers, new File(THERMOSTAT_USERS_FILE).toPath(), StandardCopyOption.REPLACE_EXISTING);
-                    Files.copy(backupRoles, new File(THERMOSTAT_ROLES_FILE).toPath(), StandardCopyOption.REPLACE_EXISTING);
-                    Files.copy(backupWebAuth, new File(THERMOSTAT_WEB_AUTH_FILE).toPath(), StandardCopyOption.REPLACE_EXISTING);
+                    restoreBackedUpCredentialsFiles();
                     System.out.println("RESTORED backed-up files!");
                     clearStorageDataDirectory();
                 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/integration-tests/itest-run/src/test/java/com/redhat/thermostat/itest/WebStorageUsingIntegrationTest.java	Mon Jun 22 19:25:50 2015 +0200
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2012-2015 Red Hat, Inc.
+ *
+ * This file is part of Thermostat.
+ *
+ * Thermostat is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2, or (at your
+ * option) any later version.
+ *
+ * Thermostat is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Thermostat; see the file COPYING.  If not see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Linking this code with other modules is making a combined work
+ * based on this code.  Thus, the terms and conditions of the GNU
+ * General Public License cover the whole combination.
+ *
+ * As a special exception, the copyright holders of this code give
+ * you permission to link this code with independent modules to
+ * produce an executable, regardless of the license terms of these
+ * independent modules, and to copy and distribute the resulting
+ * executable under terms of your choice, provided that you also
+ * meet, for each linked independent module, the terms and conditions
+ * of the license of that module.  An independent module is a module
+ * which is not derived from or based on this code.  If you modify
+ * this code, you may extend this exception to your version of the
+ * library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package com.redhat.thermostat.itest;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+
+public class WebStorageUsingIntegrationTest extends IntegrationTest {
+
+    protected static final String THERMOSTAT_USERS_FILE = getConfigurationDir() + "/thermostat-users.properties";
+    protected static final String THERMOSTAT_ROLES_FILE = getConfigurationDir() + "/thermostat-roles.properties";
+    protected static final String THERMOSTAT_WEB_AUTH_FILE = getConfigurationDir() + "/web.auth";
+    
+    private static Path backupUsers;
+    private static Path backupRoles;
+    private static Path backupWebAuth;
+    
+    protected static void backupOriginalCredentialsFiles() throws IOException {
+        backupUsers = Files.createTempFile("itest-backup-thermostat-users", "");
+        backupRoles = Files.createTempFile("itest-backup-thermostat-roles", "");
+        backupWebAuth = Files.createTempFile("itest-backup-webapp-auth", "");
+        backupRoles.toFile().deleteOnExit();
+        backupUsers.toFile().deleteOnExit();
+        backupWebAuth.toFile().deleteOnExit();
+        Files.copy(new File(THERMOSTAT_USERS_FILE).toPath(), backupUsers, StandardCopyOption.REPLACE_EXISTING);
+        Files.copy(new File(THERMOSTAT_ROLES_FILE).toPath(), backupRoles, StandardCopyOption.REPLACE_EXISTING);
+        Files.copy(new File(THERMOSTAT_WEB_AUTH_FILE).toPath(), backupWebAuth, StandardCopyOption.REPLACE_EXISTING);
+    }
+    
+    protected static void restoreBackedUpCredentialsFiles() throws IOException {
+        Files.copy(backupUsers, new File(THERMOSTAT_USERS_FILE).toPath(), StandardCopyOption.REPLACE_EXISTING);
+        Files.copy(backupRoles, new File(THERMOSTAT_ROLES_FILE).toPath(), StandardCopyOption.REPLACE_EXISTING);
+        Files.copy(backupWebAuth, new File(THERMOSTAT_WEB_AUTH_FILE).toPath(), StandardCopyOption.REPLACE_EXISTING);
+    }
+}
--- a/pom.xml	Thu Jun 18 18:13:42 2015 +0200
+++ b/pom.xml	Mon Jun 22 19:25:50 2015 +0200
@@ -113,88 +113,6 @@
           </plugin>
         </plugins>
       </build>
-
-    </profile>
-    <!-- Development settings for web.xml. Release builds should
-         have the "environment.type=release" property. -->
-    <profile>
-      <id>dev-build</id>
-      <activation>
-        <property>
-          <name>environment.type</name>
-          <value>!release</value>
-        </property>
-      </activation>
-      <properties>
-        <!--
-             The devel.build property is used in the WebAppTest integration
-             test. For this test to work for devel builds, we need
-             to perform actual setup of the below mongodb credentials.
-             Why? Because the snippet for a devel build has the
-             storage username/password NOT commented out in the
-             web.xml of the web archive. That results in MongoConnection
-             of WebAppTest use non-null creds. If those are used mongodb
-             connections would fail with auth-fail if the creds are not
-             set up.
-        -->
-        <devel.build>true</devel.build>
-        <agent.dev.username> agent-tester </agent.dev.username>
-        <agent.dev.password> tester </agent.dev.password>
-        <mongodb.dev.username> mongodevuser </mongodb.dev.username>
-        <mongodb.dev.password> mongodevpassword </mongodb.dev.password>
-        <!--
-             Used in thermostat-users.properties. We define two users.
-             One client user and one agent user.
-        -->
-        <dev.users.snippet>
-${agent.dev.username}=${agent.dev.password}
-client-tester=tester
-        </dev.users.snippet>
-        <dev.roles.snippet>
-# Roles for our two dev users
-${agent.dev.username}=thermostat-agent, thermostat-grant-write-files-all-agent
-# client-tester needs thermostat-purge role for clean-data command to work
-client-tester=thermostat-grant-read-all-client, thermostat-cmdc, thermostat-purge
-# Agent recursive role
-thermostat-agent = thermostat-cmdc-verify, \
-                   thermostat-login, \
-                   thermostat-prepare-statement, \
-                   thermostat-purge, \
-                   thermostat-register-category, \
-                   thermostat-realm, \
-                   thermostat-save-file, \
-                   thermostat-write
-# Grant agent to write any file
-thermostat-grant-write-files-all-agent = thermostat-files-grant-write-filename-ALL
-                   
-# Client recursive role (granting a client to read all data + all files)
-thermostat-grant-read-all-client = thermostat-agents-grant-read-agentId-ALL, \
-                    thermostat-cmdc-generate, \
-                    thermostat-hosts-grant-read-hostname-ALL, \
-                    thermostat-load-file, \
-                    thermostat-login, \
-                    thermostat-prepare-statement, \
-                    thermostat-query, \
-                    thermostat-realm, \
-                    thermostat-register-category, \
-                    thermostat-vms-grant-read-username-ALL, \
-                    thermostat-vms-grant-read-vmId-ALL, \
-                    thermostat-files-grant-read-filename-ALL, \
-                    thermostat-write
-# Grants all command channel operations
-thermostat-cmdc = thermostat-cmdc-grant-garbage-collect, \
-                  thermostat-cmdc-grant-dump-heap, \
-                  thermostat-cmdc-grant-thread-harvester, \
-                  thermostat-cmdc-grant-killvm, \
-                  thermostat-cmdc-grant-profile-vm, \
-                  thermostat-cmdc-grant-ping, \
-                  thermostat-cmdc-grant-jmx-toggle-notifications
-        </dev.roles.snippet>
-        <agent.auth.snippet>
-username=${agent.dev.username}
-password=${agent.dev.password}
-        </agent.auth.snippet>
-      </properties>
     </profile>
     <profile>
       <id>skip-license-check-on-skip-tests</id>
@@ -305,18 +223,11 @@
          to change to a newer version, unless you abolutely have to. -->
     <javax.servlet.version>2.5</javax.servlet.version>
 
-    <!--
-         Used in thermostat-users.properties and
-         thermostat-roles.properties respectively. We don't define
-         users or roles for release builds. Hence, those
-         empty property definitions.
-    -->
-    <dev.users.snippet /> <!-- intentionally empty -->
-    <dev.roles.snippet /> <!-- intentionally empty -->
-    <agent.auth.snippet /> <!-- intentionally empty -->
     <!-- see web/common/pom.xml for an example as to how this is used -->
     <surefire-perftests-exclusion>com.redhat.thermostat.testutils.PerformanceTest</surefire-perftests-exclusion>
     <surefire-argline /> <!-- intentionally empty -->
+    <mongodb.dev.username> mongodevuser </mongodb.dev.username>
+    <mongodb.dev.password> mongodevpassword </mongodb.dev.password>
   </properties>
 
   <modules>
@@ -354,9 +265,6 @@
     <module>thermostat-plugin-validator</module>
     <module>validate-command</module>
     <module>config</module>
-    <!-- pom-only artifact for reducing duplication
-         of deps across dev/release build profiles -->
-    <module>build-deps</module>
     <!-- development related modules -->
     <module>integration-tests</module>
     <module>dev</module>