[rhq] Branch 'bug/747925' - 3 commits - modules/enterprise
by mazz
modules/enterprise/binding/pom.xml | 3
modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssert.java | 442 ++++------
modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssertionException.java | 32
modules/enterprise/binding/src/test/java/org/rhq/bindings/util/ScriptAssertTest.java | 171 ++-
modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml | 1
modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java | 13
6 files changed, 334 insertions(+), 328 deletions(-)
New commits:
commit 263dce3f1a76e985905b1d5baa088f63a3ff869d
Merge: fc67e79 f89134f
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Feb 23 10:53:59 2012 -0500
Merge remote-tracking branch 'origin/master' into bug/747925
commit f89134fbef3b076ccdb048a77296375e83d5c3cd
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Wed Feb 22 23:54:04 2012 +0100
[BZ 796405] - Catching any throwable while running a CLI script alert
notification. This will ensure that whatever exception happens (that the
script engine doesn't catch and rethrow as ScriptException) will cause the
notification to fail and be reported as such.
diff --git a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
index deba524..da003f6 100644
--- a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
+++ b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
@@ -103,6 +103,7 @@ public class CliSender extends AlertSender<CliComponent> {
private static class ExceptionHolder {
public ScriptException scriptException;
+ public Throwable throwable;
}
public SenderResult send(Alert alert) {
@@ -136,11 +137,14 @@ public class CliSender extends AlertSender<CliComponent> {
final ScriptEngine e = engine;
Thread scriptRunner = new Thread(new Runnable() {
+ @Override
public void run() {
try {
- e.eval(rdr);
+ e.eval(rdr);
} catch (ScriptException e) {
exceptionHolder.scriptException = e;
+ } catch (Throwable e) {
+ exceptionHolder.throwable = e;
}
}
}, "Script Runner for alert " + alert);
@@ -166,6 +170,11 @@ public class CliSender extends AlertSender<CliComponent> {
int line = exceptionHolder.scriptException.getLineNumber();
String scriptName = createSummary(config, "script $packageName ($packageVersion) in repo $repoName");
throw new ScriptException(message, scriptName, line, col);
+ } else if (exceptionHolder.throwable != null) {
+ LOG.info("The script execution for CLI notification of alert [" + alert + "] failed.",
+ exceptionHolder.throwable);
+
+ throw exceptionHolder.throwable;
}
scriptOut.flush();
@@ -184,7 +193,7 @@ public class CliSender extends AlertSender<CliComponent> {
return result;
} catch (IllegalArgumentException e) {
return SenderResult.getSimpleFailure(e.getMessage()); //well, let's just hope the message doesn't exceed 4k.
- } catch (Exception e) {
+ } catch (Throwable e) {
result.addFailureMessage(ThrowableUtil.getAllMessages(e, true, remainingResultSize(result)));
return result;
} finally {
commit 4b1400bfbccef58edceb6e76ae46aeec19e36bdd
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Thu Feb 23 13:10:39 2012 +0100
[BZ 786795] - rewritten the ScriptAssert class to not depend on TestNG (and
added a bunch of unit tests). Removed the testng runtime dependency and
removed testng from the CLI deployment.
diff --git a/modules/enterprise/binding/pom.xml b/modules/enterprise/binding/pom.xml
index 52def8e..4b610cf 100644
--- a/modules/enterprise/binding/pom.xml
+++ b/modules/enterprise/binding/pom.xml
@@ -181,8 +181,7 @@
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
- <scope>compile</scope> <!-- yes, this is meant to be in compile, because we're providing assertions
- to the scripts -->
+ <scope>test</scope>
</dependency>
<dependency>
diff --git a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssert.java b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssert.java
index 8575883..15ed37c 100644
--- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssert.java
+++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssert.java
@@ -23,16 +23,48 @@
package org.rhq.bindings.util;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
import javax.script.ScriptEngine;
-import org.testng.Assert;
-
+/**
+ * This class provides the assertion functions to the scripts.
+ * It is heavily inspired by and in part copied from org.testng.Assert class.
+ * <p>
+ * We specifically do not use the TestNG class here so that we avoid a runtime
+ * dependency on TestNG.
+ */
public class ScriptAssert {
private ScriptEngine scriptEngine;
+ //borrowed from TestNG
+ private static String format(Object actual, Object expected, String message) {
+ String formatted = "";
+ if (null != message) {
+ formatted = message + " ";
+ }
+
+ return formatted + "expected:<" + expected + "> but was:<" + actual + ">";
+ }
+
+ private void failNotEquals(Object actual, Object expected, String message) {
+ fail(format(actual, expected, message));
+ }
+
+ private void failAssertNoEqual(Object[] actual, Object[] expected, String message, String defaultMessage) {
+ if (message != null) {
+ fail(message);
+ } else {
+ fail(defaultMessage);
+ }
+ }
+
public ScriptAssert() {
}
@@ -47,347 +79,226 @@ public class ScriptAssert {
}
public void assertTrue(boolean condition, String msg) {
- try {
- Assert.assertTrue(condition, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if (!condition) {
+ failNotEquals(Boolean.valueOf(condition), Boolean.TRUE, msg);
}
}
public void assertTrue(boolean condition) {
- try {
- Assert.assertTrue(condition);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ assertTrue(condition, null);
}
public void assertFalse(boolean condition, String msg) {
- try {
- Assert.assertFalse(condition, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if (condition) {
+ failNotEquals(Boolean.valueOf(condition), Boolean.FALSE, msg);
}
}
public void assertFalse(boolean condition) {
- try {
- Assert.assertFalse(condition);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ assertFalse(condition, null);
}
public void fail(String msg, Throwable throwable) {
- try {
- Assert.fail(msg, throwable);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ throw new ScriptAssertionException(msg, throwable);
}
public void fail(String msg) {
- try {
- Assert.fail(msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ throw new ScriptAssertionException(msg);
}
public void fail() {
- throw new ScriptAssertionException(new AssertionError());
+ throw new ScriptAssertionException();
}
public void assertEquals(Object actual, Object expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(Object actual, Object expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(String actual, String expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(String actual, String expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(double actual, double expected, double delta, String msg) {
- try {
- Assert.assertEquals(actual, expected, delta, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(double actual, double expected, double delta) {
- try {
- Assert.assertEquals(actual, expected, delta);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(float actual, float expected, float delta, String msg) {
- try {
- Assert.assertEquals(actual, expected, delta, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(float actual, float expected, float delta) {
- try {
- Assert.assertEquals(actual, expected, delta);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if ((expected == null) && (actual == null)) {
+ return;
}
- }
-
- public void assertEquals(long actual, long expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if (expected != null) {
+ if (expected.getClass().isArray()) {
+ assertArrayEquals(actual, expected, msg);
+ return;
+ } else if (expected.equals(actual)) {
+ return;
+ }
}
+ failNotEquals(actual, expected, msg);
}
+
+ /**
+ * <b>COPIED FROM TESTNG</b>
+ * Asserts that two objects are equal. It they are not, an AssertionError,
+ * with given message, is thrown.
+ * @param actual the actual value
+ * @param expected the expected value (should be an non-null array value)
+ * @param message the assertion error message
+ */
+ private void assertArrayEquals(Object actual, Object expected, String message) {
+ //is called only when expected is an array
+ if (actual.getClass().isArray()) {
+ int expectedLength = Array.getLength(expected);
+ if (expectedLength == Array.getLength(actual)) {
+ for (int i = 0; i < expectedLength; i++) {
+ Object _actual = Array.get(actual, i);
+ Object _expected = Array.get(expected, i);
+ try {
+ assertEquals(_actual, _expected);
+ } catch (AssertionError ae) {
+ failNotEquals(actual, expected, message == null ? "" : message + " (values as index " + i
+ + " are not the same)");
+ }
+ }
+ //array values matched
+ return;
+ } else {
+ failNotEquals(Array.getLength(actual), expectedLength, message == null ? "" : message
+ + " (Array lengths are not the same)");
+ }
+ }
+ failNotEquals(actual, expected, message);
+ }
- public void assertEquals(long actual, long expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertEquals(Object actual, Object expected) {
+ assertEquals(actual, expected, null);
}
- public void assertEquals(boolean actual, boolean expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertNotNull(Object object) {
+ assertNotNull(object, null);
}
- public void assertEquals(boolean actual, boolean expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertNotNull(Object object, String msg) {
+ if (object == null) {
+ String message = "";
+ if (msg != null) {
+ message += msg + " ";
+ }
+
+ message = "expected the object to not be null";
+ fail(message);
}
}
- public void assertEquals(byte actual, byte expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertNull(Object object) {
+ assertNull(object, null);
}
- public void assertEquals(byte actual, byte expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertNull(Object object, String msg) {
+ if (object != null) {
+ failNotEquals(object, null, msg);
}
}
- public void assertEquals(char actual, char expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertSame(Object actual, Object expected, String msg) {
+ if (actual != expected) {
+ failNotEquals(actual, expected, msg);
}
}
- public void assertEquals(char actual, char expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertSame(Object actual, Object expected) {
+ assertSame(actual, expected, null);
}
- public void assertEquals(short actual, short expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch(AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertNotSame(Object actual, Object expected, String msg) {
+ if (actual == expected) {
+ String formatted = "";
+ if (msg != null) {
+ formatted = msg + " ";
+ }
+ fail(formatted + "expected not same with:<" + expected + "> but was same:<" + actual + ">");
}
}
- public void assertEquals(short actual, short expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertNotSame(Object actual, Object expected) {
+ assertNotSame(actual, expected, null);
}
- public void assertEquals(int actual, int expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertEquals(Collection<?> actual, Collection<?> expected) {
+ assertEquals(actual, expected, null);
}
- public void assertEquals(int actual, int expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
+ public void assertEquals(Collection<?> actual, Collection<?> expected, String msg) {
+ if(actual == expected) {
+ return;
+ }
- public void assertNotNull(Object object) {
- try {
- Assert.assertNotNull(object);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
+ if (actual == null || expected == null) {
+ if (msg != null) {
+ fail(msg);
+ } else {
+ fail("Collections not equal: expected: " + expected + " and actual: " + actual);
+ }
+ }
- public void assertNotNull(Object object, String msg) {
- try {
- Assert.assertNotNull(object, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
+ assertEquals(actual.size(), expected.size(), msg + ": lists don't have the same size");
- public void assertNull(Object object) {
- try {
- Assert.assertNull(object);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
+ Iterator<?> actIt = actual.iterator();
+ Iterator<?> expIt = expected.iterator();
+ int i = -1;
+ while(actIt.hasNext() && expIt.hasNext()) {
+ i++;
+ Object e = expIt.next();
+ Object a = actIt.next();
+ String explanation = "Lists differ at element [" + i + "]: " + e + " != " + a;
+ String errorMessage = msg == null ? explanation : msg + ": " + explanation;
- public void assertNull(Object object, String msg) {
- try {
- Assert.assertNull(object, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ assertEquals(a, e, errorMessage);
+ }
}
- public void assertSame(Object actual, Object expected, String msg) {
- try {
- Assert.assertSame(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertEquals(Object[] actual, Object[] expected, String msg) {
+ if (actual == expected) {
+ return;
}
- }
- public void assertSame(Object actual, Object expected) {
- try {
- Assert.assertSame(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if ((actual == null && expected != null) || (actual != null && expected == null)) {
+ if (msg != null) {
+ fail(msg);
+ } else {
+ fail("Arrays not equal: " + Arrays.toString(expected) + " and " + Arrays.toString(actual));
+ }
}
+ assertEquals(Arrays.asList(actual), Arrays.asList(expected), msg);
}
- public void assertNotSame(Object actual, Object expected, String msg) {
- try {
- Assert.assertNotSame(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertEqualsNoOrder(Object[] actual, Object[] expected, String msg) {
+ if (actual == expected) {
+ return;
}
- }
- public void assertNotSame(Object actual, Object expected) {
- try {
- Assert.assertNotSame(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if ((actual == null && expected != null) || (actual != null && expected == null)) {
+ failAssertNoEqual(actual, expected,
+ "Arrays not equal: " + Arrays.toString(expected) + " and " + Arrays.toString(actual), msg);
}
- }
- public void assertEquals(Collection actual, Collection expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if (actual.length != expected.length) {
+ failAssertNoEqual(actual, expected, "Arrays do not have the same size:" + actual.length + " != "
+ + expected.length, msg);
}
- }
- public void assertEquals(Collection actual, Collection expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ List<Object> actualCollection = new ArrayList<Object>();
+ for (Object a : actual) {
+ actualCollection.add(a);
}
- }
-
- public void assertEquals(Object[] actual, Object[] expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ for (Object o : expected) {
+ actualCollection.remove(o);
}
- }
-
- public void assertEqualsNoOrder(Object[] actual, Object[] expected, String msg) {
- try {
- Assert.assertEqualsNoOrder(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if (actualCollection.size() != 0) {
+ failAssertNoEqual(actual, expected,
+ "Arrays not equal: " + Arrays.toString(expected) + " and " + Arrays.toString(actual), msg);
}
}
public void assertEquals(Object[] actual, Object[] expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ assertEquals(actual, expected, null);
}
public void assertEqualsNoOrder(Object[] actual, Object[] expected) {
- try {
- Assert.assertEqualsNoOrder(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(byte[] actual, byte[] expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(byte[] actual, byte[] expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ assertEqualsNoOrder(actual, expected, null);
}
public void assertExists(String identifier) {
- assertNotNull(scriptEngine.get(identifier), identifier + " is not defined");
+ Object value = scriptEngine.get(identifier);
+ assertNotNull(value, identifier + " is not defined");
}
/**
@@ -414,9 +325,12 @@ public class ScriptAssert {
* @param actual The actual value
* @param expected The expected value
* @param msg A useful, meaningful error message
+ *
+ * @deprecated - it is now possible to use assertEquals() with numbers from within javascript because we
+ * now only provide {@link #assertEquals(Object, Object)} to which the numbers convert to correctly.
*/
+ @Deprecated
public void assertNumberEqualsJS(double actual, double expected, String msg) {
assertEquals(actual, expected, msg);
}
-
}
diff --git a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssertionException.java b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssertionException.java
index f0305f3..a505b7a 100644
--- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssertionException.java
+++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssertionException.java
@@ -35,21 +35,23 @@ import javax.script.ScriptException;
*/
public class ScriptAssertionException extends RuntimeException {
-// public ScriptAssertionException() {
-// super();
-// }
-//
-// public ScriptAssertionException(String message) {
-// super(message);
-// }
-//
-// public ScriptAssertionException(String message, Throwable cause) {
-// super(message, cause);
-// }
-//
-// public ScriptAssertionException(Throwable cause) {
-// super(cause);
-// }
+ private static final long serialVersionUID = 1L;
+
+ public ScriptAssertionException() {
+ super();
+ }
+
+ public ScriptAssertionException(String message) {
+ super(message);
+ }
+
+ public ScriptAssertionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ScriptAssertionException(Throwable cause) {
+ super(cause);
+ }
public ScriptAssertionException(AssertionError error) {
super(new ScriptException(error.getMessage()));
diff --git a/modules/enterprise/binding/src/test/java/org/rhq/bindings/util/ScriptAssertTest.java b/modules/enterprise/binding/src/test/java/org/rhq/bindings/util/ScriptAssertTest.java
index cfd06b5..8fed153 100644
--- a/modules/enterprise/binding/src/test/java/org/rhq/bindings/util/ScriptAssertTest.java
+++ b/modules/enterprise/binding/src/test/java/org/rhq/bindings/util/ScriptAssertTest.java
@@ -23,70 +23,153 @@
package org.rhq.bindings.util;
-import static org.testng.Assert.*;
+import static org.testng.Assert.fail;
-import org.testng.annotations.Test;
-import org.testng.annotations.BeforeClass;
-
-import org.rhq.bindings.util.ScriptAssert;
+import java.io.File;
+import java.io.PrintWriter;
+import java.util.Collections;
import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import org.rhq.bindings.FakeRhqFacade;
+import org.rhq.bindings.ScriptEngineFactory;
+import org.rhq.bindings.StandardBindings;
public class ScriptAssertTest {
+ private ScriptEngine engine;
+
+ @BeforeTest
+ public void verifyScriptEngineIsAvailable() throws Exception {
+ StandardBindings bindings = new StandardBindings(new PrintWriter(System.out), new FakeRhqFacade());
+ engine =
+ ScriptEngineFactory.getScriptEngine("JavaScript", new PackageFinder(Collections.<File> emptyList()),
+ bindings);
+ }
+
@Test
- public void dummyTest() {
- // Dummy test while the other tests are disabled
+ public void testAssertExists() {
+ testWorks("var a = 1; assertExists('a');", "assertExists should succeed for a defined variable.");
+ testThrowsAssertion("assertExists('foo')", "assertExists should fail for an undefined variable.");
+ testWorks("function func() { return 42 }; assertExists('func');",
+ "assertExists should succeed for a defined function.");
}
- // @BeforeClass
- public void verifyScriptEngineIsAvailable() {
- assertNotNull(createScriptEngine(), "ScriptEngine is not available. Are the required libraries on the classpath?");
+ @Test
+ public void testAssertTrue() {
+ testWorks("var a = true; assertTrue(a);", "assertTrue of a true variable should succeed");
+ testWorks("assertTrue(1 == 1)", "assertTrue on a true boolean expression should succeed");
+ testThrowsAssertion("var a = false; assertTrue(a)", "assertTrue should fail on a false variable");
+ testThrowsAssertion("assertTrue(1 == 2)", "assertTrue should fail on a false boolean expression");
+ }
+
+ @Test
+ public void testAssertFalse() {
+ testWorks("var a = false; assertFalse(a);", "assertFalse of a false variable should succeed");
+ testWorks("assertFalse(1 == 2)", "assertFalse on a false boolean expression should succeed");
+ testThrowsAssertion("var a = true; assertFalse(a)", "assertFalse should fail on a true variable");
+ testThrowsAssertion("assertFalse(1 == 1)", "assertFalse should fail on a true boolean expression");
+ }
+
+ @Test
+ public void testAssertNull() {
+ testWorks("assertNull(foo)", "assertNull should succeed on an undefined variable");
+ testWorks("var foo = null; assertNull(foo);", "assertNull should succeed on a null variable");
+ testWorks("assertNull(null)", "assertNull should succeed on a null literal");
+ testThrowsAssertion("assertNull(1)", "assertNull should fail on a number");
+ testThrowsAssertion("var foo = '1'; assertNull(foo)", "assertNull should fail on a non-null variable");
+ }
+
+ @Test
+ public void testAssertNotNull() {
+ testWorks("assertNotNull(1)", "assertNotNull should succeed on a number");
+ testWorks("var foo = '1'; assertNotNull(foo)", "assertNotNull should succeed on a non-null variable");
+ testThrowsAssertion("assertNotNull(foo)", "assertNotNull should fail on an undefined variable");
+ testThrowsAssertion("var foo = null; assertNotNull(foo);", "assertNotNull should fail on a null variable");
+ testThrowsAssertion("assertNotNull(null)", "assertNotNull should fail on a null literal");
+ }
+
+ @Test
+ public void testAssertEquals_Numbers() {
+ testWorks("assertEquals(1, 1)", "1 == 1");
+ testWorks("assertEquals(1.0, 1)", "1.0 == 1");
+ testWorks("assertEquals(1.0, 1.0)", "1.0 == 1.0");
+ testThrowsAssertion("assertEquals(1, 2)", "1 == 2");
+ }
+
+ @Test
+ public void testAssertEquals_Arrays() {
+ testWorks("assertEquals(['a', 'b'], ['a', 'b'])", "native array comparison");
+ testThrowsAssertion("assertEquals(['a', 'b'], ['c', 'd'])", "native array comparison with difference");
}
- // @Test
- public void assertExistsShouldReturnTrueWhenVariableIsBound() {
- ScriptEngine scriptEngine = createScriptEngine();
- scriptEngine.put("foo", "bar");
+ @Test
+ public void testAssertEquals_Collections() {
+ testWorks("a = new java.util.ArrayList; " + "b = new java.util.ArrayList; " + "a.add('a'); " + "b.add('a'); "
+ + "assertEquals(a, b)", "ArrayList comparison");
+ testThrowsAssertion("a = new java.util.ArrayList; " + "b = new java.util.ArrayList; " + "a.add('a'); "
+ + "b.add('b'); " + "assertEquals(a, b)", "ArrayList comparison with difference");
+ }
- ScriptAssert scriptAssert = new ScriptAssert(scriptEngine);
+ @Test
+ public void testAssertEqualsNoOrder() {
+ testWorks("assertEqualsNoOrder(['a', 'b'], ['b', 'a'])", "native array comparison");
+ }
+ @Test
+ public void testAssertSame() {
+ testWorks("var a = '1'; assertSame(a, a)", "assertSame should succeed comparing one variable");
+ testWorks("var a = '1'; b = a; assertSame(a, b)", "asserSame should succeed comparing 2 references of the same object");
+ testWorks("assertSame(null, null);", "assertSame should succeed on null values");
+ testThrowsAssertion("var a = '1'; b = '2'; assertSame(a, b)", "assertSame should fail comparing 2 different variables");
+ testThrowsAssertion("var a = 1; assertSame(a, null)", "assertSame should fail comparing non-null variable with a null value");
+ }
+
+ @Test
+ public void testAssertNotSame() {
+ testThrowsAssertion("var a = '1'; assertNotSame(a, a)", "assertNotSame should fail comparing one variable");
+ testThrowsAssertion("var a = '1'; b = a; assertNotSame(a, b)", "asserNotSame should fail comparing 2 references of the same object");
+ testThrowsAssertion("assertNotSame(null, null);", "assertNotSame should fail on null values");
+ testWorks("var a = '1'; b = '2'; assertNotSame(a, b)", "assertNotSame should succeed comparing 2 different variables");
+ testWorks("var a = 1; assertNotSame(a, null)", "assertNotSame should succeed comparing non-null variable with a null value");
+ }
+
+ private void testWorks(String script, String message) {
try {
- scriptAssert.assertExists("foo");
- assert true;
- } catch (AssertionError ae) {
- assert false : "Expected isDefined() to return true when the variable is bound.";
+ engine.eval(script);
+ } catch (ScriptException e) {
+ fail(message, e);
}
}
- // @Test(expectedExceptions={ScriptAssertionException.class})
- public void assertExistsShouldReturnFalseWhenVariableIsNotBound() {
- ScriptEngine scriptEngine = createScriptEngine();
-
- ScriptAssert scriptAssert = new ScriptAssert(scriptEngine);
-
- scriptAssert.assertExists("foo");
- }
-
- // @Test
- public void assertExistsShouldReturnTrueWhenFunctionIsBound() {
- ScriptEngine scriptEngine = createScriptEngine();
- scriptEngine.put("func", "function func() { return 123; }");
-
- ScriptAssert scriptAssert = new ScriptAssert(scriptEngine);
-
+ private void testThrowsAssertion(String script, String message) {
try {
- scriptAssert.assertExists("func");
- assert true;
- } catch (AssertionError ae) {
- assert false : "Expected isDefined() to return true when function is bound.";
+ engine.eval(script);
+ } catch (ScriptException e) {
+ checkExpectedAssertionException(e, message);
}
}
- ScriptEngine createScriptEngine() {
- ScriptEngineManager scriptEngineMgr = new ScriptEngineManager();
- return scriptEngineMgr.getEngineByName("JavaScript");
- }
+ private static void checkExpectedAssertionException(Throwable t, String message) {
+ boolean ok = false;
+ while (t != null) {
+ if (t instanceof ScriptAssertionException) {
+ ok = true;
+ break;
+ } else if ((t instanceof ScriptException) && (t.getMessage().contains("ScriptAssertionException"))) {
+ ok = true;
+ break;
+ }
+
+ t = t.getCause();
+ }
+ if (!ok) {
+ fail((message == null ? "" : message) + " ScriptAssertException expected but wasn't found.", t);
+ }
+ }
}
diff --git a/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml b/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml
index b7dfe30..ecf304e 100644
--- a/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml
+++ b/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml
@@ -65,7 +65,6 @@
<copy file="${settings.localRepository}/javax/persistence/persistence-api/${persistence-api.version}/persistence-api-${persistence-api.version}.jar" tofile="${lib.home}/persistence-api-${persistence-api.version}.jar" verbose="true" />
<copy file="${basedir}/target/${project.artifactId}-${project.version}.jar" tofile="${lib.home}/${project.artifactId}-${project.version}.jar" verbose="true" />
<copy file="${settings.localRepository}/net/sf/opencsv/opencsv/${opencsv.version}/opencsv-${opencsv.version}.jar" tofile="${lib.home}/opencsv-${opencsv.version}.jar" verbose="true" />
- <copy file="${settings.localRepository}/org/testng/testng/${testng.version}/testng-${testng.version}.jar" tofile="${lib.home}/testng-${testng.version}.jar" verbose="true" />
<copy file="${settings.localRepository}/org/rhq/rhq-script-bindings/${project.version}/rhq-script-bindings-${project.version}.jar" tofile="${lib.home}/rhq-script-bindings-${project.version}.jar" verbose="true" />
<copy file="${settings.localRepository}/hibernate-annotations/hibernate-annotations/${hibernate-annotations.version}/hibernate-annotations-${hibernate-annotations.version}.jar" todir="${lib.home}" verbose="true" />
</target>
12 years, 3 months
[rhq] Branch 'bug/747925' - modules/enterprise
by mazz
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest.java | 156 ++++++++++
modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/child1_plugin_v1.xml | 19 +
modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/child2_plugin_v1.xml | 19 +
modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/parent_plugin_v1.xml | 18 +
modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/parent_plugin_v2.xml | 18 +
5 files changed, 230 insertions(+)
New commits:
commit fc67e7966295be0b0b64c5442695f24ce2440a6b
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Feb 23 09:23:46 2012 -0500
[BZ 747925] add more tests
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest.java
new file mode 100644
index 0000000..bed5645
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest.java
@@ -0,0 +1,156 @@
+package org.rhq.enterprise.server.resource.metadata;
+
+import java.util.List;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import org.rhq.core.domain.criteria.ResourceTypeCriteria;
+import org.rhq.core.domain.operation.OperationDefinition;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.enterprise.server.auth.SubjectManagerLocal;
+import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+/**
+ * This test shows a plugin extended multiple times via the embedded extension model.
+ * There is one parent plugin and two child plugins. This test makes sure multiple
+ * plugins can extend and be updated; it won't test a full comprehensive set of
+ * metadata being upgraded. See {@link PluginExtensionMetadataTest} for a
+ * comprehensive test showing all the different kinds of metadata being updated.
+ *
+ * @author John Mazzitelli
+ */
+@Test(groups = { "plugin.multiple.extension.metadata", "plugin.metadata" })
+public class MultiplePluginExtensionMetadataTest extends MetadataBeanTest {
+
+ private static final String PLUGIN_NAME_PARENT = "MultiplePluginExtensionMetadataParentTestPlugin";
+ private static final String PLUGIN_NAME_CHILD1 = "PluginExtensionMetadataChild1TestPlugin";
+ private static final String PLUGIN_NAME_CHILD2 = "PluginExtensionMetadataChild2TestPlugin";
+ private static final String TYPE_NAME_PARENT = "ParentServerA";
+ private static final String TYPE_NAME_CHILD1 = "Child1ServerA";
+ private static final String TYPE_NAME_CHILD2 = "Child2ServerA";
+
+ // names of things from the first version of the plugin metadata
+ private static final String OP_NAME = "A-op";
+ private static final int OP_TIMEOUT = 123456;
+ private static final String OP_DESC = "a op";
+
+ // names of things from the second, updated version of the plugin metadata
+ // updated operations
+ private static final String NEW_OP_NAME = "A-op-NEW";
+ private static final int NEW_OP_TIMEOUT = 987654;
+ private static final String NEW_OP_DESC = "a new op";
+
+ private SubjectManagerLocal subjectMgr;
+ private ResourceTypeManagerLocal resourceTypeMgr;
+
+ @BeforeMethod
+ public void beforeMethod() {
+ subjectMgr = LookupUtil.getSubjectManager();
+ resourceTypeMgr = LookupUtil.getResourceTypeManager();
+ }
+
+ public void testRegisterPlugins() throws Exception {
+ registerParentPluginV1(); // create an initial type (called the parent)
+ registerChild1PluginV1(); // using plugin extension mechanism, create child #1 type that extends that parent type
+ registerChild2PluginV1(); // using plugin extension mechanism, create child #2 type that extends that parent type
+ registerParentPluginV2(); // update the parent type
+ checkChild1Plugin(); // check that the changes to the parent type propogated to the child #1
+ checkChild2Plugin(); // check that the changes to the parent type propogated to the child #2
+ }
+
+ private void registerParentPluginV1() throws Exception {
+ // register the plugin, load the new type and test to make sure its what we expect
+ createPlugin("parent-plugin.jar", "1.0", "parent_plugin_v1.xml");
+ ResourceType resourceType = loadResourceTypeFully(TYPE_NAME_PARENT, PLUGIN_NAME_PARENT);
+ assert resourceType.getName().equals(TYPE_NAME_PARENT);
+ assert resourceType.getPlugin().equals(PLUGIN_NAME_PARENT);
+ assertVersion1(resourceType);
+ }
+
+ private void registerChild1PluginV1() throws Exception {
+ // register the plugin, load the new type and test to make sure its what we expect
+ createPlugin("child1-plugin.jar", "1.0", "child1_plugin_v1.xml");
+ ResourceType resourceType = loadResourceTypeFully(TYPE_NAME_CHILD1, PLUGIN_NAME_CHILD1);
+ assert resourceType.getName().equals(TYPE_NAME_CHILD1);
+ assert resourceType.getPlugin().equals(PLUGIN_NAME_CHILD1);
+ assertVersion1(resourceType);
+
+ // in our child #1 plugin, our extended type is actually a child of child #1 plugin's root type
+ // here we want to make sure that hierarchy remains intact with our extended type - the parent
+ // of our extended type should be this child #1 root type
+ assert resourceType.getParentResourceTypes() != null;
+ assert resourceType.getParentResourceTypes().size() == 1;
+ assert resourceType.getParentResourceTypes().iterator().next().getName().equals("OuterServerA");
+ }
+
+ private void registerChild2PluginV1() throws Exception {
+ // register the plugin, load the new type and test to make sure its what we expect
+ createPlugin("child2-plugin.jar", "1.0", "child2_plugin_v1.xml");
+ ResourceType resourceType = loadResourceTypeFully(TYPE_NAME_CHILD2, PLUGIN_NAME_CHILD2);
+ assert resourceType.getName().equals(TYPE_NAME_CHILD2);
+ assert resourceType.getPlugin().equals(PLUGIN_NAME_CHILD2);
+ assertVersion1(resourceType);
+ }
+
+ private void registerParentPluginV2() throws Exception {
+ // register the plugin, load the new type and test to make sure its what we expect
+ createPlugin("parent-plugin.jar", "2.0", "parent_plugin_v2.xml");
+ ResourceType resourceType = loadResourceTypeFully(TYPE_NAME_PARENT, PLUGIN_NAME_PARENT);
+ assert resourceType.getName().equals(TYPE_NAME_PARENT);
+ assert resourceType.getPlugin().equals(PLUGIN_NAME_PARENT);
+ assertVersion2(resourceType);
+ }
+
+ private void checkChild1Plugin() throws Exception {
+ // load the child #1 type and test to make sure it has been updated to what we expect
+ ResourceType resourceType = loadResourceTypeFully(TYPE_NAME_CHILD1, PLUGIN_NAME_CHILD1);
+ assert resourceType.getName().equals(TYPE_NAME_CHILD1);
+ assert resourceType.getPlugin().equals(PLUGIN_NAME_CHILD1);
+ assertVersion2(resourceType);
+
+ // in our child #1 plugin, our extended type is actually a child of child #1 plugin's root type
+ // here we want to make sure that hierarchy remains intact with our extended type - the parent
+ // of our extended type should be this child #1 root type
+ assert resourceType.getParentResourceTypes() != null;
+ assert resourceType.getParentResourceTypes().size() == 1;
+ assert resourceType.getParentResourceTypes().iterator().next().getName().equals("OuterServerA");
+ }
+
+ private void checkChild2Plugin() throws Exception {
+ // load the child #2 type and test to make sure it has been updated to what we expect
+ ResourceType resourceType = loadResourceTypeFully(TYPE_NAME_CHILD2, PLUGIN_NAME_CHILD2);
+ assert resourceType.getName().equals(TYPE_NAME_CHILD2);
+ assert resourceType.getPlugin().equals(PLUGIN_NAME_CHILD2);
+ assertVersion2(resourceType);
+ }
+
+ private void assertVersion1(ResourceType resourceType) {
+ assert resourceType.getOperationDefinitions().size() == 1;
+ OperationDefinition op = resourceType.getOperationDefinitions().iterator().next();
+ assert op.getName().equals(OP_NAME);
+ assert op.getTimeout().intValue() == OP_TIMEOUT;
+ assert op.getDescription().equals(OP_DESC);
+ }
+
+ private void assertVersion2(ResourceType resourceType) {
+ assert resourceType.getOperationDefinitions().size() == 1;
+ OperationDefinition op = resourceType.getOperationDefinitions().iterator().next();
+ assert op.getName().equals(NEW_OP_NAME);
+ assert op.getTimeout().intValue() == NEW_OP_TIMEOUT;
+ assert op.getDescription().equals(NEW_OP_DESC);
+ }
+
+ private ResourceType loadResourceTypeFully(String typeName, String typePlugin) {
+ ResourceTypeCriteria c = new ResourceTypeCriteria();
+ c.addFilterName(typeName);
+ c.addFilterPluginName(typePlugin);
+ c.setStrict(true);
+ c.fetchParentResourceTypes(true);
+ c.fetchOperationDefinitions(true);
+ List<ResourceType> t = resourceTypeMgr.findResourceTypesByCriteria(subjectMgr.getOverlord(), c);
+ ResourceType resourceType = t.get(0);
+ return resourceType;
+ }
+}
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/child1_plugin_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/child1_plugin_v1.xml
new file mode 100644
index 0000000..befc699
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/child1_plugin_v1.xml
@@ -0,0 +1,19 @@
+<plugin name="PluginExtensionMetadataChild1TestPlugin"
+ version="1.0"
+ displayName="Plugin Extension Metadata Child 1 Test Plugin"
+ package="org.rhq.plugins.test.child1"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <server name="OuterServerA">
+ <server name="Child1ServerA"
+ description="Child 1 Server type that extends Parent Server type"
+ discovery="Child1DiscoveryComponent"
+ class="Child1Component"
+ sourcePlugin="MultiplePluginExtensionMetadataParentTestPlugin"
+ sourceType="ParentServerA">
+ </server>
+ </server>
+
+</plugin>
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/child2_plugin_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/child2_plugin_v1.xml
new file mode 100644
index 0000000..0dafa9b
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/child2_plugin_v1.xml
@@ -0,0 +1,19 @@
+<plugin name="PluginExtensionMetadataChild2TestPlugin"
+ version="1.0"
+ displayName="Plugin Extension Metadata Child 2 Test Plugin"
+ package="org.rhq.plugins.test.child2"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+
+ <server name="Child2ServerA"
+ description="Child 2 Server type that extends Parent Server type"
+ discovery="Child2DiscoveryComponent"
+ class="Child2Component"
+ sourcePlugin="MultiplePluginExtensionMetadataParentTestPlugin"
+ sourceType="ParentServerA">
+ </server>
+
+
+</plugin>
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/parent_plugin_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/parent_plugin_v1.xml
new file mode 100644
index 0000000..627c5a8
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/parent_plugin_v1.xml
@@ -0,0 +1,18 @@
+<plugin name="MultiplePluginExtensionMetadataParentTestPlugin"
+ version="1.0"
+ displayName="Multiple Plugin Extension Metadata Parent Test Plugin"
+ package="org.rhq.plugins.test.parent"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <server name="ParentServerA"
+ description="Parent Server type that can be extended by a Child Server type"
+ discovery="ParentDiscoveryComponent"
+ class="ParentComponent">
+
+ <operation name="A-op" timeout="123456" description="a op"></operation>
+
+ </server>
+
+</plugin>
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/parent_plugin_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/parent_plugin_v2.xml
new file mode 100644
index 0000000..2c0e9d8
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/parent_plugin_v2.xml
@@ -0,0 +1,18 @@
+<plugin name="MultiplePluginExtensionMetadataParentTestPlugin"
+ version="2.0"
+ displayName="Multiple Plugin Extension Metadata Parent Test Plugin"
+ package="org.rhq.plugins.test.parent"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <server name="ParentServerA"
+ description="Parent Server type that can be extended by a Child Server type"
+ discovery="ParentDiscoveryComponent"
+ class="ParentComponent">
+
+ <operation name="A-op-NEW" timeout="987654" description="a new op"></operation>
+
+ </server>
+
+</plugin>
\ No newline at end of file
12 years, 3 months
[rhq] 2 commits - modules/enterprise
by lkrejci
modules/enterprise/binding/pom.xml | 3
modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssert.java | 442 ++++------
modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssertionException.java | 32
modules/enterprise/binding/src/test/java/org/rhq/bindings/util/ScriptAssertTest.java | 171 ++-
modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml | 1
modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java | 13
6 files changed, 334 insertions(+), 328 deletions(-)
New commits:
commit f89134fbef3b076ccdb048a77296375e83d5c3cd
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Wed Feb 22 23:54:04 2012 +0100
[BZ 796405] - Catching any throwable while running a CLI script alert
notification. This will ensure that whatever exception happens (that the
script engine doesn't catch and rethrow as ScriptException) will cause the
notification to fail and be reported as such.
diff --git a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
index deba524..da003f6 100644
--- a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
+++ b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
@@ -103,6 +103,7 @@ public class CliSender extends AlertSender<CliComponent> {
private static class ExceptionHolder {
public ScriptException scriptException;
+ public Throwable throwable;
}
public SenderResult send(Alert alert) {
@@ -136,11 +137,14 @@ public class CliSender extends AlertSender<CliComponent> {
final ScriptEngine e = engine;
Thread scriptRunner = new Thread(new Runnable() {
+ @Override
public void run() {
try {
- e.eval(rdr);
+ e.eval(rdr);
} catch (ScriptException e) {
exceptionHolder.scriptException = e;
+ } catch (Throwable e) {
+ exceptionHolder.throwable = e;
}
}
}, "Script Runner for alert " + alert);
@@ -166,6 +170,11 @@ public class CliSender extends AlertSender<CliComponent> {
int line = exceptionHolder.scriptException.getLineNumber();
String scriptName = createSummary(config, "script $packageName ($packageVersion) in repo $repoName");
throw new ScriptException(message, scriptName, line, col);
+ } else if (exceptionHolder.throwable != null) {
+ LOG.info("The script execution for CLI notification of alert [" + alert + "] failed.",
+ exceptionHolder.throwable);
+
+ throw exceptionHolder.throwable;
}
scriptOut.flush();
@@ -184,7 +193,7 @@ public class CliSender extends AlertSender<CliComponent> {
return result;
} catch (IllegalArgumentException e) {
return SenderResult.getSimpleFailure(e.getMessage()); //well, let's just hope the message doesn't exceed 4k.
- } catch (Exception e) {
+ } catch (Throwable e) {
result.addFailureMessage(ThrowableUtil.getAllMessages(e, true, remainingResultSize(result)));
return result;
} finally {
commit 4b1400bfbccef58edceb6e76ae46aeec19e36bdd
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Thu Feb 23 13:10:39 2012 +0100
[BZ 786795] - rewritten the ScriptAssert class to not depend on TestNG (and
added a bunch of unit tests). Removed the testng runtime dependency and
removed testng from the CLI deployment.
diff --git a/modules/enterprise/binding/pom.xml b/modules/enterprise/binding/pom.xml
index 52def8e..4b610cf 100644
--- a/modules/enterprise/binding/pom.xml
+++ b/modules/enterprise/binding/pom.xml
@@ -181,8 +181,7 @@
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
- <scope>compile</scope> <!-- yes, this is meant to be in compile, because we're providing assertions
- to the scripts -->
+ <scope>test</scope>
</dependency>
<dependency>
diff --git a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssert.java b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssert.java
index 8575883..15ed37c 100644
--- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssert.java
+++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssert.java
@@ -23,16 +23,48 @@
package org.rhq.bindings.util;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
import javax.script.ScriptEngine;
-import org.testng.Assert;
-
+/**
+ * This class provides the assertion functions to the scripts.
+ * It is heavily inspired by and in part copied from org.testng.Assert class.
+ * <p>
+ * We specifically do not use the TestNG class here so that we avoid a runtime
+ * dependency on TestNG.
+ */
public class ScriptAssert {
private ScriptEngine scriptEngine;
+ //borrowed from TestNG
+ private static String format(Object actual, Object expected, String message) {
+ String formatted = "";
+ if (null != message) {
+ formatted = message + " ";
+ }
+
+ return formatted + "expected:<" + expected + "> but was:<" + actual + ">";
+ }
+
+ private void failNotEquals(Object actual, Object expected, String message) {
+ fail(format(actual, expected, message));
+ }
+
+ private void failAssertNoEqual(Object[] actual, Object[] expected, String message, String defaultMessage) {
+ if (message != null) {
+ fail(message);
+ } else {
+ fail(defaultMessage);
+ }
+ }
+
public ScriptAssert() {
}
@@ -47,347 +79,226 @@ public class ScriptAssert {
}
public void assertTrue(boolean condition, String msg) {
- try {
- Assert.assertTrue(condition, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if (!condition) {
+ failNotEquals(Boolean.valueOf(condition), Boolean.TRUE, msg);
}
}
public void assertTrue(boolean condition) {
- try {
- Assert.assertTrue(condition);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ assertTrue(condition, null);
}
public void assertFalse(boolean condition, String msg) {
- try {
- Assert.assertFalse(condition, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if (condition) {
+ failNotEquals(Boolean.valueOf(condition), Boolean.FALSE, msg);
}
}
public void assertFalse(boolean condition) {
- try {
- Assert.assertFalse(condition);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ assertFalse(condition, null);
}
public void fail(String msg, Throwable throwable) {
- try {
- Assert.fail(msg, throwable);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ throw new ScriptAssertionException(msg, throwable);
}
public void fail(String msg) {
- try {
- Assert.fail(msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ throw new ScriptAssertionException(msg);
}
public void fail() {
- throw new ScriptAssertionException(new AssertionError());
+ throw new ScriptAssertionException();
}
public void assertEquals(Object actual, Object expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(Object actual, Object expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(String actual, String expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(String actual, String expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(double actual, double expected, double delta, String msg) {
- try {
- Assert.assertEquals(actual, expected, delta, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(double actual, double expected, double delta) {
- try {
- Assert.assertEquals(actual, expected, delta);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(float actual, float expected, float delta, String msg) {
- try {
- Assert.assertEquals(actual, expected, delta, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(float actual, float expected, float delta) {
- try {
- Assert.assertEquals(actual, expected, delta);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if ((expected == null) && (actual == null)) {
+ return;
}
- }
-
- public void assertEquals(long actual, long expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if (expected != null) {
+ if (expected.getClass().isArray()) {
+ assertArrayEquals(actual, expected, msg);
+ return;
+ } else if (expected.equals(actual)) {
+ return;
+ }
}
+ failNotEquals(actual, expected, msg);
}
+
+ /**
+ * <b>COPIED FROM TESTNG</b>
+ * Asserts that two objects are equal. It they are not, an AssertionError,
+ * with given message, is thrown.
+ * @param actual the actual value
+ * @param expected the expected value (should be an non-null array value)
+ * @param message the assertion error message
+ */
+ private void assertArrayEquals(Object actual, Object expected, String message) {
+ //is called only when expected is an array
+ if (actual.getClass().isArray()) {
+ int expectedLength = Array.getLength(expected);
+ if (expectedLength == Array.getLength(actual)) {
+ for (int i = 0; i < expectedLength; i++) {
+ Object _actual = Array.get(actual, i);
+ Object _expected = Array.get(expected, i);
+ try {
+ assertEquals(_actual, _expected);
+ } catch (AssertionError ae) {
+ failNotEquals(actual, expected, message == null ? "" : message + " (values as index " + i
+ + " are not the same)");
+ }
+ }
+ //array values matched
+ return;
+ } else {
+ failNotEquals(Array.getLength(actual), expectedLength, message == null ? "" : message
+ + " (Array lengths are not the same)");
+ }
+ }
+ failNotEquals(actual, expected, message);
+ }
- public void assertEquals(long actual, long expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertEquals(Object actual, Object expected) {
+ assertEquals(actual, expected, null);
}
- public void assertEquals(boolean actual, boolean expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertNotNull(Object object) {
+ assertNotNull(object, null);
}
- public void assertEquals(boolean actual, boolean expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertNotNull(Object object, String msg) {
+ if (object == null) {
+ String message = "";
+ if (msg != null) {
+ message += msg + " ";
+ }
+
+ message = "expected the object to not be null";
+ fail(message);
}
}
- public void assertEquals(byte actual, byte expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertNull(Object object) {
+ assertNull(object, null);
}
- public void assertEquals(byte actual, byte expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertNull(Object object, String msg) {
+ if (object != null) {
+ failNotEquals(object, null, msg);
}
}
- public void assertEquals(char actual, char expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertSame(Object actual, Object expected, String msg) {
+ if (actual != expected) {
+ failNotEquals(actual, expected, msg);
}
}
- public void assertEquals(char actual, char expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertSame(Object actual, Object expected) {
+ assertSame(actual, expected, null);
}
- public void assertEquals(short actual, short expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch(AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertNotSame(Object actual, Object expected, String msg) {
+ if (actual == expected) {
+ String formatted = "";
+ if (msg != null) {
+ formatted = msg + " ";
+ }
+ fail(formatted + "expected not same with:<" + expected + "> but was same:<" + actual + ">");
}
}
- public void assertEquals(short actual, short expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertNotSame(Object actual, Object expected) {
+ assertNotSame(actual, expected, null);
}
- public void assertEquals(int actual, int expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ public void assertEquals(Collection<?> actual, Collection<?> expected) {
+ assertEquals(actual, expected, null);
}
- public void assertEquals(int actual, int expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
+ public void assertEquals(Collection<?> actual, Collection<?> expected, String msg) {
+ if(actual == expected) {
+ return;
+ }
- public void assertNotNull(Object object) {
- try {
- Assert.assertNotNull(object);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
+ if (actual == null || expected == null) {
+ if (msg != null) {
+ fail(msg);
+ } else {
+ fail("Collections not equal: expected: " + expected + " and actual: " + actual);
+ }
+ }
- public void assertNotNull(Object object, String msg) {
- try {
- Assert.assertNotNull(object, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
+ assertEquals(actual.size(), expected.size(), msg + ": lists don't have the same size");
- public void assertNull(Object object) {
- try {
- Assert.assertNull(object);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
+ Iterator<?> actIt = actual.iterator();
+ Iterator<?> expIt = expected.iterator();
+ int i = -1;
+ while(actIt.hasNext() && expIt.hasNext()) {
+ i++;
+ Object e = expIt.next();
+ Object a = actIt.next();
+ String explanation = "Lists differ at element [" + i + "]: " + e + " != " + a;
+ String errorMessage = msg == null ? explanation : msg + ": " + explanation;
- public void assertNull(Object object, String msg) {
- try {
- Assert.assertNull(object, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ assertEquals(a, e, errorMessage);
+ }
}
- public void assertSame(Object actual, Object expected, String msg) {
- try {
- Assert.assertSame(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertEquals(Object[] actual, Object[] expected, String msg) {
+ if (actual == expected) {
+ return;
}
- }
- public void assertSame(Object actual, Object expected) {
- try {
- Assert.assertSame(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if ((actual == null && expected != null) || (actual != null && expected == null)) {
+ if (msg != null) {
+ fail(msg);
+ } else {
+ fail("Arrays not equal: " + Arrays.toString(expected) + " and " + Arrays.toString(actual));
+ }
}
+ assertEquals(Arrays.asList(actual), Arrays.asList(expected), msg);
}
- public void assertNotSame(Object actual, Object expected, String msg) {
- try {
- Assert.assertNotSame(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ public void assertEqualsNoOrder(Object[] actual, Object[] expected, String msg) {
+ if (actual == expected) {
+ return;
}
- }
- public void assertNotSame(Object actual, Object expected) {
- try {
- Assert.assertNotSame(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if ((actual == null && expected != null) || (actual != null && expected == null)) {
+ failAssertNoEqual(actual, expected,
+ "Arrays not equal: " + Arrays.toString(expected) + " and " + Arrays.toString(actual), msg);
}
- }
- public void assertEquals(Collection actual, Collection expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if (actual.length != expected.length) {
+ failAssertNoEqual(actual, expected, "Arrays do not have the same size:" + actual.length + " != "
+ + expected.length, msg);
}
- }
- public void assertEquals(Collection actual, Collection expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ List<Object> actualCollection = new ArrayList<Object>();
+ for (Object a : actual) {
+ actualCollection.add(a);
}
- }
-
- public void assertEquals(Object[] actual, Object[] expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ for (Object o : expected) {
+ actualCollection.remove(o);
}
- }
-
- public void assertEqualsNoOrder(Object[] actual, Object[] expected, String msg) {
- try {
- Assert.assertEqualsNoOrder(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
+ if (actualCollection.size() != 0) {
+ failAssertNoEqual(actual, expected,
+ "Arrays not equal: " + Arrays.toString(expected) + " and " + Arrays.toString(actual), msg);
}
}
public void assertEquals(Object[] actual, Object[] expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ assertEquals(actual, expected, null);
}
public void assertEqualsNoOrder(Object[] actual, Object[] expected) {
- try {
- Assert.assertEqualsNoOrder(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(byte[] actual, byte[] expected) {
- try {
- Assert.assertEquals(actual, expected);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
- }
-
- public void assertEquals(byte[] actual, byte[] expected, String msg) {
- try {
- Assert.assertEquals(actual, expected, msg);
- } catch (AssertionError e) {
- throw new ScriptAssertionException(e);
- }
+ assertEqualsNoOrder(actual, expected, null);
}
public void assertExists(String identifier) {
- assertNotNull(scriptEngine.get(identifier), identifier + " is not defined");
+ Object value = scriptEngine.get(identifier);
+ assertNotNull(value, identifier + " is not defined");
}
/**
@@ -414,9 +325,12 @@ public class ScriptAssert {
* @param actual The actual value
* @param expected The expected value
* @param msg A useful, meaningful error message
+ *
+ * @deprecated - it is now possible to use assertEquals() with numbers from within javascript because we
+ * now only provide {@link #assertEquals(Object, Object)} to which the numbers convert to correctly.
*/
+ @Deprecated
public void assertNumberEqualsJS(double actual, double expected, String msg) {
assertEquals(actual, expected, msg);
}
-
}
diff --git a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssertionException.java b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssertionException.java
index f0305f3..a505b7a 100644
--- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssertionException.java
+++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptAssertionException.java
@@ -35,21 +35,23 @@ import javax.script.ScriptException;
*/
public class ScriptAssertionException extends RuntimeException {
-// public ScriptAssertionException() {
-// super();
-// }
-//
-// public ScriptAssertionException(String message) {
-// super(message);
-// }
-//
-// public ScriptAssertionException(String message, Throwable cause) {
-// super(message, cause);
-// }
-//
-// public ScriptAssertionException(Throwable cause) {
-// super(cause);
-// }
+ private static final long serialVersionUID = 1L;
+
+ public ScriptAssertionException() {
+ super();
+ }
+
+ public ScriptAssertionException(String message) {
+ super(message);
+ }
+
+ public ScriptAssertionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ScriptAssertionException(Throwable cause) {
+ super(cause);
+ }
public ScriptAssertionException(AssertionError error) {
super(new ScriptException(error.getMessage()));
diff --git a/modules/enterprise/binding/src/test/java/org/rhq/bindings/util/ScriptAssertTest.java b/modules/enterprise/binding/src/test/java/org/rhq/bindings/util/ScriptAssertTest.java
index cfd06b5..8fed153 100644
--- a/modules/enterprise/binding/src/test/java/org/rhq/bindings/util/ScriptAssertTest.java
+++ b/modules/enterprise/binding/src/test/java/org/rhq/bindings/util/ScriptAssertTest.java
@@ -23,70 +23,153 @@
package org.rhq.bindings.util;
-import static org.testng.Assert.*;
+import static org.testng.Assert.fail;
-import org.testng.annotations.Test;
-import org.testng.annotations.BeforeClass;
-
-import org.rhq.bindings.util.ScriptAssert;
+import java.io.File;
+import java.io.PrintWriter;
+import java.util.Collections;
import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import org.rhq.bindings.FakeRhqFacade;
+import org.rhq.bindings.ScriptEngineFactory;
+import org.rhq.bindings.StandardBindings;
public class ScriptAssertTest {
+ private ScriptEngine engine;
+
+ @BeforeTest
+ public void verifyScriptEngineIsAvailable() throws Exception {
+ StandardBindings bindings = new StandardBindings(new PrintWriter(System.out), new FakeRhqFacade());
+ engine =
+ ScriptEngineFactory.getScriptEngine("JavaScript", new PackageFinder(Collections.<File> emptyList()),
+ bindings);
+ }
+
@Test
- public void dummyTest() {
- // Dummy test while the other tests are disabled
+ public void testAssertExists() {
+ testWorks("var a = 1; assertExists('a');", "assertExists should succeed for a defined variable.");
+ testThrowsAssertion("assertExists('foo')", "assertExists should fail for an undefined variable.");
+ testWorks("function func() { return 42 }; assertExists('func');",
+ "assertExists should succeed for a defined function.");
}
- // @BeforeClass
- public void verifyScriptEngineIsAvailable() {
- assertNotNull(createScriptEngine(), "ScriptEngine is not available. Are the required libraries on the classpath?");
+ @Test
+ public void testAssertTrue() {
+ testWorks("var a = true; assertTrue(a);", "assertTrue of a true variable should succeed");
+ testWorks("assertTrue(1 == 1)", "assertTrue on a true boolean expression should succeed");
+ testThrowsAssertion("var a = false; assertTrue(a)", "assertTrue should fail on a false variable");
+ testThrowsAssertion("assertTrue(1 == 2)", "assertTrue should fail on a false boolean expression");
+ }
+
+ @Test
+ public void testAssertFalse() {
+ testWorks("var a = false; assertFalse(a);", "assertFalse of a false variable should succeed");
+ testWorks("assertFalse(1 == 2)", "assertFalse on a false boolean expression should succeed");
+ testThrowsAssertion("var a = true; assertFalse(a)", "assertFalse should fail on a true variable");
+ testThrowsAssertion("assertFalse(1 == 1)", "assertFalse should fail on a true boolean expression");
+ }
+
+ @Test
+ public void testAssertNull() {
+ testWorks("assertNull(foo)", "assertNull should succeed on an undefined variable");
+ testWorks("var foo = null; assertNull(foo);", "assertNull should succeed on a null variable");
+ testWorks("assertNull(null)", "assertNull should succeed on a null literal");
+ testThrowsAssertion("assertNull(1)", "assertNull should fail on a number");
+ testThrowsAssertion("var foo = '1'; assertNull(foo)", "assertNull should fail on a non-null variable");
+ }
+
+ @Test
+ public void testAssertNotNull() {
+ testWorks("assertNotNull(1)", "assertNotNull should succeed on a number");
+ testWorks("var foo = '1'; assertNotNull(foo)", "assertNotNull should succeed on a non-null variable");
+ testThrowsAssertion("assertNotNull(foo)", "assertNotNull should fail on an undefined variable");
+ testThrowsAssertion("var foo = null; assertNotNull(foo);", "assertNotNull should fail on a null variable");
+ testThrowsAssertion("assertNotNull(null)", "assertNotNull should fail on a null literal");
+ }
+
+ @Test
+ public void testAssertEquals_Numbers() {
+ testWorks("assertEquals(1, 1)", "1 == 1");
+ testWorks("assertEquals(1.0, 1)", "1.0 == 1");
+ testWorks("assertEquals(1.0, 1.0)", "1.0 == 1.0");
+ testThrowsAssertion("assertEquals(1, 2)", "1 == 2");
+ }
+
+ @Test
+ public void testAssertEquals_Arrays() {
+ testWorks("assertEquals(['a', 'b'], ['a', 'b'])", "native array comparison");
+ testThrowsAssertion("assertEquals(['a', 'b'], ['c', 'd'])", "native array comparison with difference");
}
- // @Test
- public void assertExistsShouldReturnTrueWhenVariableIsBound() {
- ScriptEngine scriptEngine = createScriptEngine();
- scriptEngine.put("foo", "bar");
+ @Test
+ public void testAssertEquals_Collections() {
+ testWorks("a = new java.util.ArrayList; " + "b = new java.util.ArrayList; " + "a.add('a'); " + "b.add('a'); "
+ + "assertEquals(a, b)", "ArrayList comparison");
+ testThrowsAssertion("a = new java.util.ArrayList; " + "b = new java.util.ArrayList; " + "a.add('a'); "
+ + "b.add('b'); " + "assertEquals(a, b)", "ArrayList comparison with difference");
+ }
- ScriptAssert scriptAssert = new ScriptAssert(scriptEngine);
+ @Test
+ public void testAssertEqualsNoOrder() {
+ testWorks("assertEqualsNoOrder(['a', 'b'], ['b', 'a'])", "native array comparison");
+ }
+ @Test
+ public void testAssertSame() {
+ testWorks("var a = '1'; assertSame(a, a)", "assertSame should succeed comparing one variable");
+ testWorks("var a = '1'; b = a; assertSame(a, b)", "asserSame should succeed comparing 2 references of the same object");
+ testWorks("assertSame(null, null);", "assertSame should succeed on null values");
+ testThrowsAssertion("var a = '1'; b = '2'; assertSame(a, b)", "assertSame should fail comparing 2 different variables");
+ testThrowsAssertion("var a = 1; assertSame(a, null)", "assertSame should fail comparing non-null variable with a null value");
+ }
+
+ @Test
+ public void testAssertNotSame() {
+ testThrowsAssertion("var a = '1'; assertNotSame(a, a)", "assertNotSame should fail comparing one variable");
+ testThrowsAssertion("var a = '1'; b = a; assertNotSame(a, b)", "asserNotSame should fail comparing 2 references of the same object");
+ testThrowsAssertion("assertNotSame(null, null);", "assertNotSame should fail on null values");
+ testWorks("var a = '1'; b = '2'; assertNotSame(a, b)", "assertNotSame should succeed comparing 2 different variables");
+ testWorks("var a = 1; assertNotSame(a, null)", "assertNotSame should succeed comparing non-null variable with a null value");
+ }
+
+ private void testWorks(String script, String message) {
try {
- scriptAssert.assertExists("foo");
- assert true;
- } catch (AssertionError ae) {
- assert false : "Expected isDefined() to return true when the variable is bound.";
+ engine.eval(script);
+ } catch (ScriptException e) {
+ fail(message, e);
}
}
- // @Test(expectedExceptions={ScriptAssertionException.class})
- public void assertExistsShouldReturnFalseWhenVariableIsNotBound() {
- ScriptEngine scriptEngine = createScriptEngine();
-
- ScriptAssert scriptAssert = new ScriptAssert(scriptEngine);
-
- scriptAssert.assertExists("foo");
- }
-
- // @Test
- public void assertExistsShouldReturnTrueWhenFunctionIsBound() {
- ScriptEngine scriptEngine = createScriptEngine();
- scriptEngine.put("func", "function func() { return 123; }");
-
- ScriptAssert scriptAssert = new ScriptAssert(scriptEngine);
-
+ private void testThrowsAssertion(String script, String message) {
try {
- scriptAssert.assertExists("func");
- assert true;
- } catch (AssertionError ae) {
- assert false : "Expected isDefined() to return true when function is bound.";
+ engine.eval(script);
+ } catch (ScriptException e) {
+ checkExpectedAssertionException(e, message);
}
}
- ScriptEngine createScriptEngine() {
- ScriptEngineManager scriptEngineMgr = new ScriptEngineManager();
- return scriptEngineMgr.getEngineByName("JavaScript");
- }
+ private static void checkExpectedAssertionException(Throwable t, String message) {
+ boolean ok = false;
+ while (t != null) {
+ if (t instanceof ScriptAssertionException) {
+ ok = true;
+ break;
+ } else if ((t instanceof ScriptException) && (t.getMessage().contains("ScriptAssertionException"))) {
+ ok = true;
+ break;
+ }
+
+ t = t.getCause();
+ }
+ if (!ok) {
+ fail((message == null ? "" : message) + " ScriptAssertException expected but wasn't found.", t);
+ }
+ }
}
diff --git a/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml b/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml
index b7dfe30..ecf304e 100644
--- a/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml
+++ b/modules/enterprise/remoting/cli/src/main/scripts/rhq-client.build.xml
@@ -65,7 +65,6 @@
<copy file="${settings.localRepository}/javax/persistence/persistence-api/${persistence-api.version}/persistence-api-${persistence-api.version}.jar" tofile="${lib.home}/persistence-api-${persistence-api.version}.jar" verbose="true" />
<copy file="${basedir}/target/${project.artifactId}-${project.version}.jar" tofile="${lib.home}/${project.artifactId}-${project.version}.jar" verbose="true" />
<copy file="${settings.localRepository}/net/sf/opencsv/opencsv/${opencsv.version}/opencsv-${opencsv.version}.jar" tofile="${lib.home}/opencsv-${opencsv.version}.jar" verbose="true" />
- <copy file="${settings.localRepository}/org/testng/testng/${testng.version}/testng-${testng.version}.jar" tofile="${lib.home}/testng-${testng.version}.jar" verbose="true" />
<copy file="${settings.localRepository}/org/rhq/rhq-script-bindings/${project.version}/rhq-script-bindings-${project.version}.jar" tofile="${lib.home}/rhq-script-bindings-${project.version}.jar" verbose="true" />
<copy file="${settings.localRepository}/hibernate-annotations/hibernate-annotations/${hibernate-annotations.version}/hibernate-annotations-${hibernate-annotations.version}.jar" todir="${lib.home}" verbose="true" />
</target>
12 years, 3 months
[rhq] Changes to 'BZ795833'
by mike thompson
New branch 'BZ795833' available with the following commits:
commit 67990f0dca2981320fe7ebb9f8d39cc51bb5df7f
Author: Mike Thompson <mithomps(a)redhat.com>
Date: Wed Feb 22 16:02:04 2012 -0800
[BZ795833] Searchbar upgrade pecularities
12 years, 3 months
[rhq] Branch 'bug/747925' - 9 commits - modules/core modules/enterprise
by mazz
modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java | 2 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java | 8 ++++----
2 files changed, 6 insertions(+), 4 deletions(-)
New commits:
commit 4fb7549098d4b8307bdbfc89110bee778adac9dd
Merge: b1401a0 d2fc9d3
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Feb 22 13:26:26 2012 -0500
Merge remote-tracking branch 'origin/master' into bug/747925
commit d2fc9d3481eaaae707b5556ec3c86571f2d5ba40
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Wed Feb 22 13:17:59 2012 -0500
fix recent regression where this.childResources wasn't getting initialized when certain constructors were used
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
index 2dd01e2..d0f49cd 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
@@ -1120,6 +1120,7 @@ public class Resource implements Comparable<Resource>, Serializable {
* @param id the Resource's id
*/
public Resource(int id) {
+ this();
this.id = id;
}
@@ -1127,6 +1128,7 @@ public class Resource implements Comparable<Resource>, Serializable {
@NotNull String resourceKey, //
String name, //
@NotNull ResourceType type) {
+ this();
this.resourceKey = resourceKey;
this.name = name;
this.resourceType = type;
commit f72e85045d942cda36f85a0594267b45c0c1f929
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Feb 22 12:24:57 2012 -0500
[BZ 796315] Adjust layout so search bar appears above list grid
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
index 222b5b2..f72d12e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
@@ -339,6 +339,10 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
contents.removeChild(child);
}
+ if (filterForm.hasContent()) {
+ contents.addMember(filterForm);
+ }
+
// add the listGrid defined in onInit
contents.addMember(listGrid);
@@ -353,10 +357,6 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
contents.addMember(titleLayout, 0);
}
- if (filterForm.hasContent()) {
- contents.addMember(filterForm);
- }
-
// Footer
// A second toolstrip that optionally appears before the main footer - it will contain extra widgets.
commit 3e149ee4fef7d33bfc93837032e834427407957c
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 17:55:20 2012 -0500
add a new Resource constructor that allows setting the childResources field (useful if caller wants to use a Set impl other than HashSet)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
index e920c51..2dd01e2 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
@@ -971,12 +971,12 @@ public class Resource implements Comparable<Resource>, Serializable {
@Summary(index = 4)
private ResourceType resourceType;
- // do not cascade remove - would take forever to delete a full platform hierarchy
- // we will manually delete the children ourselves
+ // do not cascade remove; it would take forever to delete a full platform hierarchy,
+ // so we will manually delete the children ourselves
@OneToMany(mappedBy = "parentResource", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST })
@OrderBy
// primary key
- private Set<Resource> childResources = new HashSet<Resource>();
+ private Set<Resource> childResources;
// LAZY fetch otherwise this will recursively call all parents until null is found
@JoinColumn(name = "PARENT_RESOURCE_ID", nullable = true)
@@ -1101,9 +1101,19 @@ public class Resource implements Comparable<Resource>, Serializable {
private Set<DriftDefinition> driftDefinitions = null;
public Resource() {
+ this(new HashSet<Resource>());
}
/**
+ * Constructor that allows the caller to choose what Set impl is used for the {@link #childResources} field.
+ *
+ * @param childResources the Set that will be used to hold this Resource's child Resources
+ */
+ public Resource(Set<Resource> childResources) {
+ setChildResources(childResources);
+ }
+
+ /**
* Primarily for deserialization and cases where the resource object is just a reference to the real one in the db.
* (Key is this avoids the irrelevant UUID generation that has contention problems.
*
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
index fad45b9..6f2d55e 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
@@ -840,7 +840,10 @@ public class InventoryManager extends AgentService implements ContainerService,
}
static Resource createNewResource(DiscoveredResourceDetails details) {
- Resource resource = new Resource();
+ // Use a ConcurrentHashMap-based Set for childResources to allow the field to be concurrently accessed safely
+ // (i.e. to avoid ConcurrentModificationExceptions).
+ Set<Resource> childResources = Collections.newSetFromMap(new ConcurrentHashMap<Resource, Boolean>());
+ Resource resource = new Resource(childResources);
resource.setUuid(UUID.randomUUID().toString());
resource.setResourceKey(details.getResourceKey());
@@ -854,10 +857,6 @@ public class InventoryManager extends AgentService implements ContainerService,
.getPluginConfigurationDefinition());
resource.setPluginConfiguration(pluginConfiguration);
- // Use a ConcurrentHashMap-based Set for childResources to allow the field to be concurrently accessed safely
- // (i.e. to avoid ConcurrentModificationExceptions).
- resource.setChildResources(Collections.newSetFromMap(new ConcurrentHashMap<Resource, Boolean>()));
-
return resource;
}
commit 50858043c711b85ab33a59f928936e0cabb040fd
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:48:36 2012 -0500
when an SQLException occurs in DBSetup.doSQL(), catch it, wrap it in an ExtendedSQLException that includes the SQL
which failed, and then rethrow it; add support to DbUtil.getSQLExceptionString() for including the SQL in the returned
string if passed an ExtendedSQLException; various minor improvements throughout dbutils
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java
index eb2f6a7..aea077d 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java
@@ -237,7 +237,7 @@ public abstract class DatabaseType {
*
* @return <code>true</code> if the column exists in the table, <code>false</code> otherwise
*
- * @exception SQLException
+ * @throws SQLException
*/
public boolean checkColumnExists(Connection conn, String table, String column) throws SQLException {
PreparedStatement ps = null;
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java
index 3188f07..d9617f0 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java
@@ -100,14 +100,17 @@ public class DbUtil {
/**
* Given an SQL exception, this will return a string that contains the error code and message for it and its causes.
*
- * @param e
+ * @param e the SQL exception
*
* @return error message containing all the SQL error codes and messages
*/
public static String getSQLExceptionString(SQLException e) {
- StringBuffer str = new StringBuffer();
+ StringBuilder str = new StringBuilder();
do {
+ if (e instanceof ExtendedSQLException) {
+ str.append("SQL=[" + ((ExtendedSQLException) e).getSQL() + "]; ");
+ }
str.append("ErrorCode=[" + e.getErrorCode() + "]; ");
str.append("SQLState=[" + e.getSQLState() + "]; ");
str.append("Message=[" + e.getMessage() + "]; ");
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ExtendedSQLException.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ExtendedSQLException.java
new file mode 100644
index 0000000..189869b
--- /dev/null
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ExtendedSQLException.java
@@ -0,0 +1,43 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program 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 version 2 of the License.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.core.db;
+
+import java.sql.SQLException;
+
+/**
+ * Wraps another SQLException, providing one additional field for specifying the SQL that caused the exception.
+ *
+ * @author Ian Springer
+ */
+public class ExtendedSQLException extends SQLException {
+
+ private String sql;
+
+ public ExtendedSQLException(SQLException sqlException, String sql) {
+ super(sqlException.getMessage(), sqlException.getSQLState(), sqlException.getErrorCode(), sqlException);
+ setNextException(sqlException.getNextException());
+ setStackTrace(sqlException.getStackTrace());
+ this.sql = sql;
+ }
+
+ public String getSQL() {
+ return sql;
+ }
+
+}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java
index 0d2661a..7ad3c9a 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java
@@ -18,7 +18,6 @@
*/
package org.rhq.core.db;
-import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
@@ -113,7 +112,8 @@ public class TypeMap {
/**
* Given a DOM node, this will ensure it is a valid <i>typemap</i> node and parses it. This constructor is private,
- * use {@link #loadTypeMapsFromFile(File)} to create instances of this object.
+ * use {@link #loadKnownTypeMaps()} TypeMapsFromFile(File)} or {@link #loadTypeMapsFromStream(java.io.InputStream)}
+ * to create instances of this object.
*
* @param typemap_node the top-level <i>typemap</i> DOM node
*
@@ -227,7 +227,7 @@ public class TypeMap {
*/
@Override
public String toString() {
- StringBuffer str = new StringBuffer(m_genericTypeName);
+ StringBuilder str = new StringBuilder(m_genericTypeName);
str.append('=');
str.append(m_databaseTypeMap);
return str.toString();
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java
index 2649226..3275f5f 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java
@@ -24,8 +24,8 @@ import mazz.i18n.LoggerLocale;
import mazz.i18n.Msg;
/**
- * Convienence utility that creates I18N {@link Logger loggers} and {@link Msg messages} for the ant tools. These
- * factory methods are used to create I18N objects that access the propery resource bundle for the ant tools.
+ * Convenience utility that creates I18N {@link Logger loggers} and {@link Msg messages} for the ant tools. These
+ * factory methods are used to create I18N objects that access the proper resource bundle for the ant tools.
*
* @author John Mazzitelli
*
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java
index a08f0da..824b777 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java
@@ -67,11 +67,11 @@ public class MD5Task extends Task {
md5 = Base64.encode(md5_bytes);
} else {
// put the md5 bytes in string form
- StringBuffer md5_string = new StringBuffer(md5_bytes.length * 2);
+ StringBuilder md5_string = new StringBuilder(md5_bytes.length * 2);
- for (int i = 0; i < md5_bytes.length; i++) {
- int hi = (md5_bytes[i] >> 4) & 0xf;
- int lo = md5_bytes[i] & 0xf;
+ for (byte md5_byte : md5_bytes) {
+ int hi = (md5_byte >> 4) & 0xf;
+ int lo = md5_byte & 0xf;
md5_string.append(Character.forDigit(hi, 16));
md5_string.append(Character.forDigit(lo, 16));
}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java
index 9a0c91b..5ad70e4 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java
@@ -355,6 +355,7 @@ public class DBUpgrader extends Task {
try {
fis.close();
} catch (IOException e) {
+ // ignore
}
}
}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java
index 456387d..1f9ed19 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java
@@ -70,7 +70,7 @@ class ConstraintImpl_PK implements ConstraintImpl {
}
private String listItems(List<String> list) {
- StringBuffer ret_items = new StringBuffer();
+ StringBuilder ret_items = new StringBuilder();
if (list != null) {
for (String string : list) {
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java
index f8d27a0..b426361 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java
@@ -39,6 +39,7 @@ import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import mazz.i18n.Logger;
import mazz.i18n.Msg;
+import org.rhq.core.db.ExtendedSQLException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
@@ -696,7 +697,7 @@ public class DBSetup {
}
}
- // our second pass - hopefully, we've cleared out data that caused contraint errors in the first pass
+ // our second pass - hopefully, we've cleared out data that caused constraint errors in the first pass
if (failed_tables.size() > 0) {
log(LogPriority.DEBUG, DbUtilsI18NResourceKeys.DBSETUP_CLEAR_SECOND_PASS, failed_tables.size());
@@ -989,8 +990,10 @@ public class DBSetup {
* just prepares it in a statement and expects the caller to execute the statement. The caller must close the
* returned prepared statement (which occurs if <code>returnPreparedStatement</code> is <code>true</code>)
*
- * @param sql
- * @param returnPreparedStatement if <code>true</code>, the SQL isn't executed, it is just prepared
+ * @param sql an SQL Data Manipulation Language (DML) statement, such as <code>INSERT</code>, <code>UPDATE</code>
+ * or <code>DELETE</code>; or an SQL statement that returns nothing,
+ * such as a DDL statement
+ * @param returnPreparedStatement if <code>true</code>, the SQL isn't executed; it is just prepared
*
* @return the statement (which may be a prepared statement or may be the statement that was executed)
*
@@ -1027,7 +1030,7 @@ public class DBSetup {
// Log this?
}
- throw e;
+ throw new ExtendedSQLException(e, sql);
} finally {
if (stmt != null) {
stmt.close();
@@ -1120,6 +1123,7 @@ public class DBSetup {
try {
m_connection.close();
} catch (Exception e) {
+ // ignore
} finally {
m_connection = null;
m_databaseType = null;
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java
index 32694c4..3b834f5 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java
@@ -18,7 +18,6 @@
*/
package org.rhq.core.db.setup;
-import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@@ -39,7 +38,6 @@ abstract class DataSet {
}
protected int create() throws SQLException {
- PreparedStatement stmt = null;
int rowcnt = 0;
try {
@@ -60,10 +58,6 @@ abstract class DataSet {
}
throw e;
- } finally {
- if (stmt != null) {
- stmt.close();
- }
}
return rowcnt; // The number of rows created.
@@ -103,7 +97,7 @@ abstract class DataSet {
protected String getInsertCommand() throws SQLException {
int iCols = this.getNumberColumns();
- StringBuffer strCmd = new StringBuffer("INSERT INTO ");
+ StringBuilder strCmd = new StringBuilder("INSERT INTO ");
strCmd.append(this.getTableName());
strCmd.append(" (");
@@ -154,7 +148,7 @@ abstract class DataSet {
protected String getUpdateCommand() throws SQLException {
int iCols = this.getNumberColumns();
- StringBuffer strCmd = new StringBuffer("UPDATE ");
+ StringBuilder strCmd = new StringBuilder("UPDATE ");
strCmd.append(this.getTableName());
strCmd.append(" SET ");
@@ -206,7 +200,7 @@ abstract class DataSet {
}
need_AND_keyword = true;
- strCmd.append(data.getActualColumnName() + " = ");
+ strCmd.append(data.getActualColumnName()).append(" = ");
String key_value = data.getValue();
if (key_value != null) {
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java
index cac0ef9..9455aea 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java
@@ -115,26 +115,23 @@ class Table {
List collCmds = new java.util.Vector();
this.getCreateCommands(collCmds, typemaps, m_parent.getDatabaseType());
- Iterator iter = collCmds.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
m_parent.doSQL(strCmd);
}
}
private void doCmd(List collCmds) throws SQLException {
- Iterator iter = collCmds.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
m_parent.doSQL(strCmd);
}
}
private void doCmdsWithoutAbortingOnErrors(List collCmds) throws SQLException {
SQLException sqlException = null;
- Iterator cmdsIter = collCmds.iterator();
- while (cmdsIter.hasNext()) {
- String strCmd = (String) cmdsIter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
try {
m_parent.doSQL(strCmd);
} catch (SQLException e) {
@@ -326,10 +323,8 @@ class Table {
String strCmd = "DROP TABLE " + this.getName();
cmds.add(strCmd);
- Iterator iter = this.getColumns().iterator();
-
- while (iter.hasNext()) {
- ((Column) iter.next()).getDropCommands(cmds);
+ for (Object o : this.getColumns()) {
+ ((Column) o).getDropCommands(cmds);
}
}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java
index 522cc05..031b25c 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java
@@ -21,7 +21,6 @@ package org.rhq.core.db.setup;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Iterator;
import java.util.List;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
@@ -78,17 +77,15 @@ class View {
protected void create(Collection typemaps) throws SQLException {
List commands = new java.util.Vector();
this.getCreateCommands(commands, typemaps, m_parent.getDatabaseType());
- Iterator iter = commands.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object command : commands) {
+ String strCmd = (String) command;
m_parent.doSQL(strCmd);
}
}
private void doCmd(List collCmds) throws SQLException {
- Iterator iter = collCmds.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
m_parent.doSQL(strCmd);
}
}
@@ -142,6 +139,7 @@ class View {
try {
colResult.add(new View(nodeView, dbtype, parent));
} catch (SAXException e) {
+ // ignore
}
}
}
commit 63e54e5f79177a00beb1bbbdc630701e1a29844a
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:04:23 2012 -0500
fix some javadoc typos
diff --git a/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java b/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java
index d21ab62..41eb9e3 100644
--- a/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java
+++ b/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java
@@ -23,8 +23,6 @@
package org.rhq.core.util.stream;
import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
@@ -60,7 +58,7 @@ public class StreamUtil {
/**
* Reads in the entire contents of the given input stream and returns the data in a byte array. Be careful - if the
- * stream has alot of data, you run the risk of an <code>OutOfMemoryError</code>.
+ * stream has a lot of data, you run the risk of an <code>OutOfMemoryError</code>.
*
* @param stream the stream to read
*
@@ -120,7 +118,7 @@ public class StreamUtil {
/**
* Copies data from the input stream to the output stream. Upon completion or on an exception, the streams will be
* closed but only if <code>closeStreams</code> is <code>true</code>. If <code>closeStreams</code> is <code>
- * false</code>, the streams are left open; the caller has the reponsibility to close them.
+ * false</code>, the streams are left open; the caller has the responsibility to close them.
*
* @param input the originating stream that contains the data to be copied
* @param output the destination stream where the data should be copied to
@@ -209,7 +207,7 @@ public class StreamUtil {
}
/**
- * Copies data from the input stream to the output stream. The caller has the reponsibility to close them. This
+ * Copies data from the input stream to the output stream. The caller has the responsibility to close them. This
* method allows you to copy a byte range from the input stream. The start byte is the index (where the first byte
* of the stream is index #0) that starts to be copied. <code>length</code> indicates how many bytes to copy, a
* negative length indicates copy everything up to the EOF of the input stream.
commit e3cf06eef81d67b8b026bc6d7c5c35169cf0c9b6
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:02:57 2012 -0500
use StreamUtil.copy() (from rhq-core-util.jar), rather than private copyStreamData()
diff --git a/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java b/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java
index 6162bdd..871c112 100644
--- a/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java
+++ b/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2012 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -18,7 +18,6 @@
*/
package org.rhq.enterprise.installer;
-import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -26,7 +25,6 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -62,6 +60,7 @@ import org.rhq.core.db.SQLServerDatabaseType;
import org.rhq.core.db.setup.DBSetup;
import org.rhq.core.util.PropertiesFileUpdate;
import org.rhq.core.util.jdbc.JDBCUtil;
+import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.communications.util.SecurityUtil;
/**
@@ -690,7 +689,7 @@ public class ServerInformation {
// first slurp the file contents in memory
InputStream resourceInStream = this.getClass().getClassLoader().getResourceAsStream(xmlFileName);
ByteArrayOutputStream contentOutStream = new ByteArrayOutputStream();
- copyStreamData(resourceInStream, contentOutStream);
+ StreamUtil.copy(resourceInStream, contentOutStream);
// now replace their replacement strings with values from the properties
String content = contentOutStream.toString();
@@ -716,33 +715,11 @@ public class ServerInformation {
File xmlFile = new File(getLogDirectory(), xmlFileName);
FileOutputStream xmlFileOutStream = new FileOutputStream(xmlFile);
ByteArrayInputStream contentInStream = new ByteArrayInputStream(content.getBytes());
- copyStreamData(contentInStream, xmlFileOutStream);
+ StreamUtil.copy(contentInStream, xmlFileOutStream);
return xmlFile.getAbsolutePath();
}
- private void copyStreamData(InputStream input, OutputStream output) throws IOException {
- int bufferSize = 32768;
-
- try {
- // make sure we buffer the input
- input = new BufferedInputStream(input, bufferSize);
-
- byte[] buffer = new byte[bufferSize];
-
- for (int bytesRead = input.read(buffer); bytesRead != -1; bytesRead = input.read(buffer)) {
- output.write(buffer, 0, bytesRead);
- }
-
- output.flush();
- } finally {
- JDBCUtil.safeClose(output);
- JDBCUtil.safeClose(input);
- }
-
- return;
- }
-
/**
* Launches ANT and runs the default target in the given build file.
*
commit 9a4e00af87aa3b90b3ffd5a848389bcb8ec41f86
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:01:37 2012 -0500
add tests that test overwriting and upgrading a JON 3.0 DB schema
diff --git a/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java b/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java
index e4fb711..a211e27 100644
--- a/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java
+++ b/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2012 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -20,21 +20,25 @@
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-
package org.rhq.enterprise.installer;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
+import org.rhq.core.util.stream.StreamUtil;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.rhq.core.db.reset.DBReset;
import org.rhq.core.db.setup.DBSetup;
-import org.rhq.enterprise.installer.ServerInformation;
-import org.rhq.enterprise.installer.ServerProperties;
/**
* The tests in this class exercise the dbsetup/dbupgrade code that is run in the installer. The tests currently only
@@ -110,6 +114,18 @@ public class DBInstallationTest {
installer.upgradeExistingDatabaseSchema(getInstallProperties());
}
+ @Test
+ public void overwriteJON300Schema() throws Exception {
+ installSchemaAndData("3.0.0");
+ installer.createNewDatabaseSchema(getInstallProperties());
+ }
+
+ @Test
+ public void upgradeJON300Schema() throws Exception {
+ installSchemaAndData("3.0.0");
+ installer.upgradeExistingDatabaseSchema(getInstallProperties());
+ }
+
private void initLogDirectory() {
File logDir = new File(LOG_DIRECTORY);
if (logDir.exists()) {
@@ -125,8 +141,10 @@ public class DBInstallationTest {
private void installSchemaAndData(String jonVersion) throws Exception {
DBSetup dbsetup = new DBSetup(DB_URL, USERNAME, PASSWORD);
- dbsetup.setup(getSchemaFile(jonVersion).getAbsolutePath());
- dbsetup.setup(getDataFile(jonVersion).getAbsolutePath());
+ File schemaFile = getSchemaFile(jonVersion);
+ dbsetup.setup(schemaFile.getAbsolutePath());
+ File dataFile = getDataFile(jonVersion);
+ dbsetup.setup(dataFile.getAbsolutePath());
}
private File getSchemaFile(String version) throws Exception {
@@ -136,7 +154,10 @@ public class DBInstallationTest {
throw new RuntimeException("Failed to find schema file for version " + version);
}
- return new File(url.toURI().getPath());
+ File file = new File(url.toURI().getPath());
+ File filteredFile = filterXmlFile(file, getInstallProperties());
+
+ return filteredFile;
}
private File getDataFile(String version) throws Exception {
@@ -146,7 +167,10 @@ public class DBInstallationTest {
throw new RuntimeException("Failed to find data file for version " + version);
}
- return new File(url.toURI().getPath());
+ File file = new File(url.toURI().getPath());
+ File filteredFile = filterXmlFile(file, getInstallProperties());
+
+ return filteredFile;
}
private Properties getInstallProperties() {
@@ -157,4 +181,40 @@ public class DBInstallationTest {
dbProperties.put(ServerProperties.PROP_EMAIL_FROM_ADDRESS, "rhqadmin(a)localhost.com");
return dbProperties;
}
+
+ private static File filterXmlFile(File xmlFile, Properties props) throws IOException {
+ // first slurp the file contents in memory
+ InputStream fileInStream = new FileInputStream(xmlFile);
+ ByteArrayOutputStream contentOutStream = new ByteArrayOutputStream();
+ StreamUtil.copy(fileInStream, contentOutStream);
+
+ // now replace their replacement strings with values from the properties
+ String content = contentOutStream.toString();
+ content = content.replaceAll("@@@LARGE_TABLESPACE_FOR_DATA@@@", "DEFAULT");
+ content = content.replaceAll("@@@LARGE_TABLESPACE_FOR_INDEX@@@", "DEFAULT");
+ content = content.replaceAll("@@@ADMINUSERNAME@@@", "rhqadmin");
+ content = content.replaceAll("@@@ADMINPASSWORD@@@", "x1XwrxKuPvYUILiOnOZTLg=="); // rhqadmin
+ content = content.replaceAll("@@@ADMINEMAIL@@@", props.getProperty(ServerProperties.PROP_EMAIL_FROM_ADDRESS));
+ content = content.replaceAll("@@@BASEURL@@@", "http://" + ServerProperties.getValidServerBindAddress(props)
+ + ":" + ServerProperties.getHttpPort(props) + "/");
+ content = content.replaceAll("@@@JAASPROVIDER@@@", "JDBC");
+ content = content.replaceAll("@@@LDAPURL@@@", "ldap://localhost/");
+ content = content.replaceAll("@@@LDAPPROTOCOL@@@", "");
+ content = content.replaceAll("@@@LDAPLOGINPROP@@@", "cn");
+ content = content.replaceAll("@@@LDAPBASEDN@@@", "o=JBoss,c=US");
+ content = content.replaceAll("@@@LDAPSEARCHFILTER@@@", "");
+ content = content.replaceAll("@@@LDAPBINDDN@@@", "");
+ content = content.replaceAll("@@@LDAPBINDPW@@@", "");
+ content = content.replaceAll("@@@MULTICAST_ADDR@@@", "");
+ content = content.replaceAll("@@@MULTICAST_PORT@@@", "");
+
+ // we now have the finished XML content - write out the file to the tmp directory
+ File filteredXmlFile = File.createTempFile("rhq", xmlFile.getName());
+ FileOutputStream xmlFileOutStream = new FileOutputStream(xmlFile);
+ ByteArrayInputStream contentInStream = new ByteArrayInputStream(content.getBytes());
+ StreamUtil.copy(contentInStream, xmlFileOutStream);
+
+ return xmlFile.getAbsoluteFile();
+ }
+
}
diff --git a/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-data-combined-3.0.0.xml b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-data-combined-3.0.0.xml
new file mode 100644
index 0000000..060f241
--- /dev/null
+++ b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-data-combined-3.0.0.xml
@@ -0,0 +1,690 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dbsetup name="data.xml">
+<!-- BEGIN: rhq-data.xml -->
+<!-- BEGIN: auth-data.xml -->
+
+
+ <table name="RHQ_PRINCIPAL">
+ <data id="2" PRINCIPAL="@@@ADMINUSERNAME@@@" PASSWORD="@@@ADMINPASSWORD@@@"/>
+ </table>
+
+<!-- END: auth-data.xml -->
+<!-- BEGIN: authz-data.xml -->
+
+
+ <!-- the overlord user -->
+ <table name="RHQ_SUBJECT">
+ <data ID="1"
+ NAME="admin"
+ FIRST_NAME="Super"
+ LAST_NAME="User"
+ FSYSTEM="TRUE"/>
+ </table>
+
+ <!-- the initial rhqadmin user -->
+ <table name="RHQ_SUBJECT">
+ <data ID="2"
+ NAME="@@@ADMINUSERNAME@@@"
+ FIRST_NAME="RHQ"
+ LAST_NAME="Administrator"
+ EMAIL_ADDRESS="@@@ADMINEMAIL@@@"
+ FSYSTEM="FALSE"/>
+ </table>
+
+ <!-- Define the system root role which includes our overlord and rhqadmin users -->
+ <table name="RHQ_ROLE">
+ <data ID="1"
+ NAME="Super User Role"
+ FSYSTEM="TRUE"
+ DESCRIPTION="System superuser role that provides full access to everything. This role cannot be modified."/>
+ <data ID="2"
+ NAME="All Resources Role"
+ FSYSTEM="FALSE"
+ DESCRIPTION="Provides full access to all resources in inventory. Cannot modify users, roles or server settings."/>
+ </table>
+
+ <!-- associate the root users with all security permissions -->
+ <table name="RHQ_SUBJECT_ROLE_MAP">
+ <!-- overlord user -->
+ <data SUBJECT_ID="1" ROLE_ID="1"/>
+ <!-- rhqadmin user -->
+ <data SUBJECT_ID="2" ROLE_ID="1"/>
+ </table>
+
+ <table name="RHQ_PERMISSION">
+ <!-- give super-user-role all permissions
+ (explicitly add resource perms, even though they are implied by MANAGE_INVENTORY) -->
+ <data ROLE_ID="1" OPERATION="0"/> <!-- Permission.MANAGE_SECURITY -->
+ <data ROLE_ID="1" OPERATION="1"/> <!-- Permission.MANAGE_INVENTORY -->
+ <data ROLE_ID="1" OPERATION="2"/> <!-- Permission.MANAGE_SETTINGS -->
+ <data ROLE_ID="1" OPERATION="12"/> <!-- Permission.MANAGE_BUNDLE -->
+ <data ROLE_ID="1" OPERATION="15"/> <!-- Permission.MANAGE_REPOSITORIES -->
+ <!-- resource permissions start here-->
+ <data ROLE_ID="1" OPERATION="3"/> <!-- Permission.VIEW_RESOURCE -->
+ <data ROLE_ID="1" OPERATION="4"/> <!-- Permission.MODIFY_RESOURCE -->
+ <data ROLE_ID="1" OPERATION="5"/> <!-- Permission.DELETE_RESOURCE -->
+ <data ROLE_ID="1" OPERATION="6"/> <!-- Permission.CREATE_CHILD_RESOURCES -->
+ <data ROLE_ID="1" OPERATION="7"/> <!-- Permission.MANAGE_ALERTS -->
+ <data ROLE_ID="1" OPERATION="8"/> <!-- Permission.MANAGE_MEASUREMENTS -->
+ <data ROLE_ID="1" OPERATION="9"/> <!-- Permission.MANAGE_CONTENT -->
+ <data ROLE_ID="1" OPERATION="10"/> <!-- Permission.CONTROL -->
+ <data ROLE_ID="1" OPERATION="11"/> <!-- Permission.CONFIGURE_WRITE -->
+ <data ROLE_ID="1" OPERATION="13"/> <!-- Permission.CONFIGURE_READ -->
+ <data ROLE_ID="1" OPERATION="14"/> <!-- Permission.MANAGE_EVENTS -->
+ <data ROLE_ID="1" OPERATION="16"/> <!-- Permission.MANAGE_DRIFT -->
+
+ <!-- give all-resources-role MANAGE_INVENTORY and MANAGE_BUNDLE permissions
+ (explicitly add resource perms as well, even though they are implied by MANAGE_INVENTORY) -->
+ <data ROLE_ID="2" OPERATION="1"/> <!-- Permission.MANAGE_INVENTORY -->
+ <data ROLE_ID="2" OPERATION="12"/> <!-- Permission.MANAGE_BUNDLE -->
+ <!-- resource permissions start here-->
+ <data ROLE_ID="2" OPERATION="3"/> <!-- Permission.VIEW_RESOURCE -->
+ <data ROLE_ID="2" OPERATION="4"/> <!-- Permission.MODIFY_RESOURCE -->
+ <data ROLE_ID="2" OPERATION="5"/> <!-- Permission.DELETE_RESOURCE -->
+ <data ROLE_ID="2" OPERATION="6"/> <!-- Permission.CREATE_CHILD_RESOURCES -->
+ <data ROLE_ID="2" OPERATION="7"/> <!-- Permission.MANAGE_ALERTS -->
+ <data ROLE_ID="2" OPERATION="8"/> <!-- Permission.MANAGE_MEASUREMENTS -->
+ <data ROLE_ID="2" OPERATION="9"/> <!-- Permission.MANAGE_CONTENT -->
+ <data ROLE_ID="2" OPERATION="10"/> <!-- Permission.CONTROL -->
+ <data ROLE_ID="2" OPERATION="11"/> <!-- Permission.CONFIGURE_WRITE -->
+ <data ROLE_ID="2" OPERATION="13"/> <!-- Permission.CONFIGURE_READ -->
+ <data ROLE_ID="2" OPERATION="14"/> <!-- Permission.MANAGE_EVENTS -->
+ <data ROLE_ID="2" OPERATION="16"/> <!-- Permission.MANAGE_DRIFT -->
+ </table>
+
+<!-- END: authz-data.xml -->
+<!-- BEGIN: search-data.xml -->
+
+
+ <!-- overlord-created, global, default saved searches -->
+ <table name="RHQ_SAVED_SEARCH">
+ <data ID="1"
+ CONTEXT="RESOURCE"
+ NAME="Downed Platforms"
+ DESCRIPTION="All downed machines across the entire enterprise"
+ PATTERN="availability=down category=platform"
+ LAST_COMPUTE_TIME="0"
+ SUBJECT_ID="1"
+ GLOBAL="TRUE" />
+ <data ID="2"
+ CONTEXT="RESOURCE"
+ NAME="Downed Servers"
+ DESCRIPTION="All downed servers across the entire enterprise"
+ PATTERN="availability=down category=server"
+ LAST_COMPUTE_TIME="0"
+ SUBJECT_ID="1"
+ GLOBAL="TRUE" />
+ </table>
+
+<!-- END: search-data.xml -->
+<!-- BEGIN: sysconfig-data.xml -->
+
+
+ <!--
+ This file contains the seed data for the configuration table.
+ All keys mentioned here should be referenced via the RHQConstants class
+ -->
+ <table name="RHQ_SYSTEM_CONFIG">
+ <data ID="1" PROPERTY_KEY="SERVER_VERSION" PROPERTY_VALUE="4.2.0.JON300.GA"
+ DEFAULT_PROPERTY_VALUE="4.2.0.JON300.GA" FREAD_ONLY="TRUE"/>
+ <data ID="2" PROPERTY_KEY="DB_SCHEMA_VERSION" PROPERTY_VALUE="2.116"
+ DEFAULT_PROPERTY_VALUE="2.116" FREAD_ONLY="TRUE"/>
+ <data ID="3" PROPERTY_KEY="CAM_JAAS_PROVIDER" PROPERTY_VALUE="@@@JAASPROVIDER@@@"
+ DEFAULT_PROPERTY_VALUE="JDBC" FREAD_ONLY="FALSE"/>
+ <data ID="4" PROPERTY_KEY="CAM_BASE_URL" PROPERTY_VALUE="@@@BASEURL@@@"
+ DEFAULT_PROPERTY_VALUE="@@@BASEURL@@@" FREAD_ONLY="FALSE"/>
+ <data ID="9" PROPERTY_KEY="CAM_HELP_USER" PROPERTY_VALUE="web"
+ DEFAULT_PROPERTY_VALUE="web" FREAD_ONLY="FALSE"/>
+ <data ID="10" PROPERTY_KEY="CAM_HELP_PASSWORD" PROPERTY_VALUE="user"
+ DEFAULT_PROPERTY_VALUE="user" FREAD_ONLY="FALSE"/>
+
+ <!-- default LDAP configuration options -->
+ <data ID="11" PROPERTY_KEY="CAM_LDAP_NAMING_FACTORY_INITIAL"
+ PROPERTY_VALUE="com.sun.jndi.ldap.LdapCtxFactory"
+ DEFAULT_PROPERTY_VALUE="com.sun.jndi.ldap.LdapCtxFactory"
+ FREAD_ONLY="FALSE"/>
+ <data ID="12" PROPERTY_KEY="CAM_LDAP_NAMING_PROVIDER_URL"
+ PROPERTY_VALUE="@@@LDAPURL@@@"
+ DEFAULT_PROPERTY_VALUE="ldap://localhost/"
+ FREAD_ONLY="FALSE"/>
+ <data ID="13" PROPERTY_KEY="CAM_LDAP_LOGIN_PROPERTY"
+ PROPERTY_VALUE="@@@LDAPLOGINPROP@@@"
+ DEFAULT_PROPERTY_VALUE="cn" FREAD_ONLY="FALSE"/>
+ <data ID="14" PROPERTY_KEY="CAM_LDAP_BASE_DN"
+ PROPERTY_VALUE="@@@LDAPBASEDN@@@"
+ DEFAULT_PROPERTY_VALUE="o=JBoss,c=US"
+ FREAD_ONLY="FALSE"/>
+ <data ID="15" PROPERTY_KEY="CAM_LDAP_BIND_DN"
+ PROPERTY_VALUE="@@@LDAPBINDDN@@@"
+ DEFAULT_PROPERTY_VALUE="" FREAD_ONLY="FALSE"/>
+ <data ID="16" PROPERTY_KEY="CAM_LDAP_BIND_PW"
+ PROPERTY_VALUE="@@@LDAPBINDPW@@@"
+ DEFAULT_PROPERTY_VALUE="" FREAD_ONLY="FALSE"/>
+ <data ID="17" PROPERTY_KEY="CAM_LDAP_PROTOCOL"
+ PROPERTY_VALUE="@@@LDAPPROTOCOL@@@" DEFAULT_PROPERTY_VALUE=""
+ FREAD_ONLY="FALSE"/>
+ <data ID="18" PROPERTY_KEY="CAM_LDAP_FILTER"
+ PROPERTY_VALUE="@@@LDAPSEARCHFILTER@@@" DEFAULT_PROPERTY_VALUE=""
+ FREAD_ONLY="FALSE"/>
+
+ <!-- Does this build support Syslog actions? -->
+ <data ID="21" PROPERTY_KEY="CAM_SYSLOG_ACTIONS_ENABLED"
+ PROPERTY_VALUE="false" DEFAULT_PROPERTY_VALUE="false"
+ FREAD_ONLY="FALSE"/>
+ <data ID="23" PROPERTY_KEY="CAM_GUIDE_ENABLED"
+ PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+ <data ID="24" PROPERTY_KEY="CAM_RT_COLLECT_IP_ADDRS"
+ PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+
+ <!-- Default data storage options -->
+ <!-- Default 14 days -->
+ <data ID="26" PROPERTY_KEY="CAM_DATA_PURGE_1H"
+ PROPERTY_VALUE="1209600000" DEFAULT_PROPERTY_VALUE="1209600000"
+ FREAD_ONLY="FALSE"/>
+ <!-- Default 31 days -->
+ <data ID="27" PROPERTY_KEY="CAM_DATA_PURGE_6H"
+ PROPERTY_VALUE="2678400000" DEFAULT_PROPERTY_VALUE="2678400000"
+ FREAD_ONLY="FALSE"/>
+ <!-- Default 1 year -->
+ <data ID="28" PROPERTY_KEY="CAM_DATA_PURGE_1D"
+ PROPERTY_VALUE="31536000000" DEFAULT_PROPERTY_VALUE="31536000000"
+ FREAD_ONLY="FALSE"/>
+
+ <!-- Baseline options -->
+ <!-- How often to calculate, default 3 days; if 0, never calculate them automatically -->
+ <data ID="29" PROPERTY_KEY="CAM_BASELINE_FREQUENCY"
+ PROPERTY_VALUE="259200000" DEFAULT_PROPERTY_VALUE="259200000"
+ FREAD_ONLY="FALSE"/>
+ <!-- How much data to include in the calulation, default 7 days -->
+ <data ID="30" PROPERTY_KEY="CAM_BASELINE_DATASET"
+ PROPERTY_VALUE="604800000" DEFAULT_PROPERTY_VALUE="604800000"
+ FREAD_ONLY="FALSE"/>
+
+ <!-- ID 31 has been deleted -->
+
+ <!-- How often to run database maintainence routines -->
+ <data ID="32" PROPERTY_KEY="CAM_DATA_MAINTENANCE"
+ PROPERTY_VALUE="3600000" DEFAULT_PROPERTY_VALUE="3600000" FREAD_ONLY="FALSE"/>
+
+ <!-- How long to keep RT data around -->
+ <data ID="34" PROPERTY_KEY="RT_DATA_PURGE" PROPERTY_VALUE="2678400000"
+ DEFAULT_PROPERTY_VALUE="2678400000" FREAD_ONLY="FALSE"/>
+
+ <!-- Whether to reindex the data tables nightly -->
+ <data ID="35" PROPERTY_KEY="DATA_REINDEX_NIGHTLY" PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+
+ <!-- How long to keep alerts around -->
+ <data ID="36" PROPERTY_KEY="ALERT_PURGE" PROPERTY_VALUE="2678400000"
+ DEFAULT_PROPERTY_VALUE="2678400000" FREAD_ONLY="FALSE"/>
+
+ <!-- How long to keep events around (1209600000 millis == 14 days) -->
+ <data ID="51" PROPERTY_KEY="EVENT_PURGE" PROPERTY_VALUE="1209600000"
+ DEFAULT_PROPERTY_VALUE="1209600000" FREAD_ONLY="FALSE"/>
+
+ <!-- How long an agent is allowed to be quiet before we consider it down and backfill it -->
+ <data ID="52" PROPERTY_KEY="AGENT_MAX_QUIET_TIME_ALLOWED" PROPERTY_VALUE="900000"
+ DEFAULT_PROPERTY_VALUE="900000" FREAD_ONLY="FALSE"/>
+
+ <!-- Will our server-cloud support agents auto-updating themselves? -->
+ <data ID="53" PROPERTY_KEY="ENABLE_AGENT_AUTO_UPDATE" PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+
+ <!-- How old does a trait have to be in order to get purged -->
+ <data ID="54" PROPERTY_KEY="TRAIT_PURGE" PROPERTY_VALUE="31536000000"
+ DEFAULT_PROPERTY_VALUE="31536000000" FREAD_ONLY="FALSE"/>
+
+ <!-- How old does availability have to be in order to get purged -->
+ <data ID="55" PROPERTY_KEY="AVAILABILITY_PURGE" PROPERTY_VALUE="31536000000"
+ DEFAULT_PROPERTY_VALUE="31536000000" FREAD_ONLY="FALSE"/>
+
+ <data ID="56" PROPERTY_KEY="RESOURCE_GENERIC_PROPERTIES_UPGRADE" PROPERTY_VALUE="false"
+ DEFAULT_PROPERTY_VALUE="false" FREAD_ONLY="FALSE"/>
+
+ <!-- default drift server plugin settings -->
+ <data ID="57" PROPERTY_KEY="ACTIVE_DRIFT_PLUGIN" PROPERTY_VALUE="drift-jpa"
+ DEFAULT_PROPERTY_VALUE="drift-jpa" FREAD_ONLY="FALSE"/>
+
+ <!-- purge drift files older than 31 days by default -->
+ <data ID="58" PROPERTY_KEY="DRIFT_FILE_PURGE" PROPERTY_VALUE="2678400000"
+ DEFAULT_PROPERTY_VALUE="2678400000" FREAD_ONLY="FALSE"/>
+
+ </table>
+
+<!-- END: sysconfig-data.xml -->
+<!-- BEGIN: measurement-data.xml -->
+
+ <table name="RHQ_NUMBERS">
+ <data i="0"/>
+ <data i="1"/>
+ <data i="2"/>
+ <data i="3"/>
+ <data i="4"/>
+ <data i="5"/>
+ <data i="6"/>
+ <data i="7"/>
+ <data i="8"/>
+ <data i="9"/>
+ <data i="10"/>
+ <data i="11"/>
+ <data i="12"/>
+ <data i="13"/>
+ <data i="14"/>
+ <data i="15"/>
+ <data i="16"/>
+ <data i="17"/>
+ <data i="18"/>
+ <data i="19"/>
+ <data i="20"/>
+ <data i="21"/>
+ <data i="22"/>
+ <data i="23"/>
+ <data i="24"/>
+ <data i="25"/>
+ <data i="26"/>
+ <data i="27"/>
+ <data i="28"/>
+ <data i="29"/>
+ <data i="30"/>
+ <data i="31"/>
+ <data i="32"/>
+ <data i="33"/>
+ <data i="34"/>
+ <data i="35"/>
+ <data i="36"/>
+ <data i="37"/>
+ <data i="38"/>
+ <data i="39"/>
+ <data i="40"/>
+ <data i="41"/>
+ <data i="42"/>
+ <data i="43"/>
+ <data i="44"/>
+ <data i="45"/>
+ <data i="46"/>
+ <data i="47"/>
+ <data i="48"/>
+ <data i="49"/>
+ <data i="50"/>
+ <data i="51"/>
+ <data i="52"/>
+ <data i="53"/>
+ <data i="54"/>
+ <data i="55"/>
+ <data i="56"/>
+ <data i="57"/>
+ <data i="58"/>
+ <data i="59"/>
+ </table>
+
+<!-- END: measurement-data.xml -->
+<!-- BEGIN: content-data.xml -->
+
+ <table name="RHQ_ARCHITECTURE">
+ <data id="1" name="noarch"/>
+ <data id="2" name="i386"/>
+ <data id="3" name="i486"/>
+ <data id="4" name="i586"/>
+ <data id="5" name="i686"/>
+ <data id="6" name="alpha"/>
+ <data id="7" name="alphaev6"/>
+ <data id="8" name="ia64"/>
+ <data id="9" name="sparc"/>
+ <data id="10" name="sparcv9"/>
+ <data id="11" name="sparc64"/>
+ <data id="12" name="src"/>
+ <data id="13" name="s390"/>
+ <data id="14" name="athlon"/>
+ <data id="15" name="s390x"/>
+ <data id="16" name="ppc"/>
+ <data id="17" name="ppc64"/>
+ <data id="18" name="pSeries"/>
+ <data id="19" name="iSeries"/>
+ <data id="20" name="x86_64"/>
+ <data id="21" name="ppc64iseries"/>
+ <data id="22" name="ppc64pseries"/>
+ <data id="23" name="sparc-solaris"/>
+ <data id="24" name="sparc.sun4u-solaris"/>
+ <data id="25" name="tar"/>
+ <data id="26" name="ia32e"/>
+ <data id="27" name="amd64"/>
+ <data id="28" name="i386-solaris"/>
+ <data id="29" name="nosrc"/>
+ <data id="30" name="sparc-solaris-patch"/>
+ <data id="31" name="i386-solaris-patch"/>
+ <data id="32" name="sparc-solaris-patch-cluster"/>
+ <data id="33" name="i386-solaris-patch-cluster"/>
+ <data id="34" name="noarch-solaris"/>
+ <data id="35" name="noarch-solaris-patch"/>
+ <data id="36" name="noarch-solaris-patch-cluster"/>
+ <data id="37" name="solaris-patch"/>
+ <data id="38" name="solaris-patch-cluster"/>
+ </table>
+
+ <table name="RHQ_REPO_GROUP_TYPE">
+ <data id="1" name="family"/>
+ </table>
+
+ <table name="RHQ_REPO_RELATION_TYPE">
+ <data id="1" name="parent"/>
+ <data id="2" name="clone"/>
+ </table>
+
+ <table name="RHQ_DISTRIBUTION_TYPE">
+ <data id="1" name="kickstart" description="Linux kickstart distribution"/>
+ <data id="2" name="jumpstart" description="solaris jumpstart distribution"/>
+ </table>
+
+<!-- END: content-data.xml -->
+<!-- BEGIN: jms-data.xml -->
+
+<!-- the schema matches that which would be automatically created by the JMS subsystem -->
+<!-- see deploy/jms/rhq-jdbc-state-service.xml and rhq-jdbc2-service.xml -->
+<!-- the data must match that which is expected in conf/login-config.xml -->
+
+
+ <table name="JMS_USERS">
+ <data USERID="guest" PASSWD="guest" />
+ </table>
+
+ <table name="JMS_ROLES">
+ <data ROLEID="guest" USERID="guest" />
+ </table>
+
+<!-- END: jms-data.xml -->
+<!-- END: rhq-data.xml -->
+<!-- BEGIN: jon-data.xml -->
+
+<!-- This dbsetup config file defines a content source and
+ associated repo for the JBoss CP RSS patch feed. -->
+
+
+ <!-- ********* metadata (the content source type and its config def) ********* -->
+
+ <table name="RHQ_CONFIG_DEF">
+ <data ID="101"
+ NAME="JBoss CP Patch Feed Content Source"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_DEF">
+ <data ID="101"
+ NAME="url"
+ DISPLAY_NAME="Feed URL"
+ DESCRIPTION="URL of the feed (e.g. https://access.redhat.com/jbossnetwork/restricted/feed/software.html?prod...)."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="0"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="102"
+ NAME="username"
+ DISPLAY_NAME="Username"
+ DESCRIPTION="Username used to access the feed URL."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="1"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="103"
+ NAME="password"
+ DISPLAY_NAME="Password"
+ DESCRIPTION="Password used to access the feed URL."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="2"
+ SIMPLE_TYPE="PASSWORD"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="104"
+ NAME="active"
+ DISPLAY_NAME="Active"
+ DESCRIPTION="Indicates if the feed should be checked for new patches."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="3"
+ SIMPLE_TYPE="BOOLEAN"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="105"
+ NAME="proxyUrl"
+ DISPLAY_NAME="Proxy URL"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="4"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="106"
+ NAME="proxyPort"
+ DISPLAY_NAME="Proxy Port"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="5"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="107"
+ NAME="proxyUsername"
+ DISPLAY_NAME="Proxy Username"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="6"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="108"
+ NAME="proxyPassword"
+ DISPLAY_NAME="Proxy Password"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="7"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ </table>
+
+ <!-- NOTE: The values of the NAME, PLUGIN_NAME, and API_CLASS columns must match what is
+ defined in RHQ/modules/enterprise/server/plugins/jboss-software/src/main/resources/META-INF/rhq-serverplugin.xml. -->
+ <!-- default sync chedule: 1st of every month at 12am -->
+ <table name="RHQ_CONTENT_SOURCE_TYPE">
+ <data ID="101"
+ NAME="JBossASPatchSource"
+ DISPLAY_NAME="JBoss Patch Content Source"
+ DESCRIPTION="a content source that retrieves package metadata from an RSS feed; the feed must be in the format used by the JBoss CP"
+ PLUGIN_NAME="JBossASPatchContentSourcePlugin"
+ DEFAULT_LAZY_LOAD="1"
+ DEFAULT_DOWNLOAD_MODE="DATABASE"
+ DEFAULT_SYNC_SCHEDULE="0 0 0 1 * ?"
+ API_CLASS="org.rhq.enterprise.server.plugins.jboss.software.JBossSoftwareContentSourceAdapter"
+ SOURCE_CONFIG_DEF_ID="101"/>
+ </table>
+
+
+ <!-- the default template -->
+ <table name="RHQ_CONFIG">
+ <data ID="101"
+ VERSION="0"
+ CTIME="1270066600000"
+ MTIME="1270066600000"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROPERTY">
+ <data ID="101"
+ NAME="url"
+ CONFIGURATION_ID="101"
+ STRING_VALUE=""
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="102"
+ NAME="username"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="103"
+ NAME="password"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="104"
+ NAME="proxyUrl"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="105"
+ NAME="proxyPort"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="106"
+ NAME="active"
+ CONFIGURATION_ID="101"
+ STRING_VALUE="true"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="107"
+ NAME="proxyUsername"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="108"
+ NAME="proxyPassword"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ </table>
+
+ <table name="RHQ_CONFIG_TEMPLATE">
+ <data ID="101"
+ NAME="default"
+ DESCRIPTION="the default initial values for the configuration of a JBossASPatchSource content source"
+ CONFIG_ID="101"
+ CONFIG_DEF_ID="101"
+ IS_DEFAULT="1"/>
+ </table>
+
+
+ <!-- ********* data (the content source and its config) ********* -->
+
+ <table name="RHQ_CONFIG">
+ <data ID="102"
+ VERSION="0"
+ CTIME="1270066600000"
+ MTIME="1270066600000"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROPERTY">
+ <data ID="111"
+ NAME="url"
+ CONFIGURATION_ID="102"
+ STRING_VALUE="https://access.redhat.com/jbossnetwork/restricted/feed/software.html?prod..."
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="112"
+ NAME="username"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="113"
+ NAME="password"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="114"
+ NAME="proxyUrl"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="115"
+ NAME="proxyPort"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="116"
+ NAME="active"
+ CONFIGURATION_ID="102"
+ STRING_VALUE="false"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="117"
+ NAME="proxyUsername"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="118"
+ NAME="proxyPassword"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ </table>
+
+ <!-- sync chedule: 1st of every month at 12am -->
+ <table name="RHQ_CONTENT_SOURCE">
+ <data ID="101"
+ NAME="JBoss CP Patch Feed"
+ DESCRIPTION="an RSS feed published by the JBoss Customer Portal (CP) website which provides a list of all JBoss product patches available for the subscription of a given CP user; the feed entries for most cumulative patches (CPs) include automated install instructions that can be used by JON to install those CPs to inventoried server Resources (e.g. JBoss EAP servers)"
+ LAZY_LOAD="1"
+ DOWNLOAD_MODE="DATABASE"
+ SYNC_SCHEDULE="0 0 0 1 * ?"
+ CREATION_TIME="1270066600000"
+ LAST_MODIFIED_TIME="1270066600000"
+ CONTENT_SOURCE_TYPE_ID="101"
+ CONFIGURATION_ID="102"/>
+ </table>
+
+ <!-- sync chedule: every Mon at 1am -->
+ <table name="RHQ_REPO">
+ <data ID="101"
+ NAME="JBoss Patches"
+ DESCRIPTION="the patches obtained from the JBoss CP patch feed"
+ SYNC_SCHEDULE="0 0 1 ? * 1"
+ CREATION_TIME="1270066600000"
+ LAST_MODIFIED_TIME="1270066600000"
+ IS_PRIVATE="0"
+ IS_CANDIDATE="0"/>
+ </table>
+
+ <table name="RHQ_REPO_CONTENT_SRC_MAP">
+ <data REPO_ID="101"
+ CONTENT_SRC_ID="101"
+ CTIME="1270066600000"/>
+ </table>
+
+
+<!-- END: jon-data.xml -->
+</dbsetup>
diff --git a/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-schema-combined-3.0.0.xml b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-schema-combined-3.0.0.xml
new file mode 100644
index 0000000..4c07e1a
--- /dev/null
+++ b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-schema-combined-3.0.0.xml
@@ -0,0 +1,2649 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dbsetup name="schema">
+<!-- BEGIN: config-schema.xml -->
+
+
+ <!-- Definition or Metadata tables -->
+
+ <table name="RHQ_CONFIG_DEF">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="250"/>
+ <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="CONFIG_FORMAT" type="VARCHAR2" required="false" size="32"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_GRP_DEF">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="250"/>
+ <column name="DEFAULT_HIDDEN" type="BOOLEAN" required="false"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_DEF">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="false" size="255"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="1000"/>
+ <column name="DEFAULT_VALUE" type="VARCHAR2" required="false" size="2000"/>
+ <column name="REQUIRED" type="BOOLEAN" required="false"/>
+ <column name="READONLY" type="BOOLEAN" required="false"/>
+ <column name="SUMMARY" type="BOOLEAN" required="false"/>
+ <column name="ACTIVATION_POLICY" type="VARCHAR2" required="false" size="20"/>
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_GRP_DEF"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="PARENT_MAP_DEFINITION_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ <column name="PARENT_LIST_DEFINITION_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ <column name="SIMPLE_TYPE" type="VARCHAR2" required="false" size="20"/>
+ <column name="ALLOW_CUSTOM_ENUM_VALUE" type="BOOLEAN" required="false"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ <column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF"/>
+
+ <!-- only simple properties (not lists and maps) have this -->
+ <column name="UNITS" type="SMALLINT" required="false"/>
+
+ <!-- only dynamic properties (not simple) have this -->
+ <column name="DYNAMIC_TYPE" type="VARCHAR2" size="20" required="false"/>
+ <column name="DYNAMIC_KEY" type="VARCHAR2" size="128" required="false"/>
+ </table>
+
+ <table name="RHQ_CONF_PROP_DEF_ENUM">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="STRING_VALUE" type="VARCHAR2" required="false" size="500"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ <column name="NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="PROPERTY_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PD_OSRC">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="LINK_TO_TARGET" type="BOOLEAN" required="false"/>
+ <column name="FILTER" type="VARCHAR2" required="false" size="40"/>
+ <column name="EXPRESSION" type="VARCHAR2" required="true" size="400"/>
+ <column name="TARGET_TYPE" type="VARCHAR2" required="true" size="20"/>
+ <column name="PROPERTY_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_CONSTR">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="15"/>
+ <column name="DETAILS" type="VARCHAR2" required="false" size="250"/>
+ <column name="CONFIG_PROP_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ </table>
+
+
+ <!-- Content or value tables -->
+
+ <table name="RHQ_CONFIG">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NOTES" type="VARCHAR2" required="false" size="512"/>
+ <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROPERTY">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG" ondelete="cascade"/>
+ <column name="STRING_VALUE" type="VARCHAR2" required="false" size="2000"/>
+ <column name="OVERRIDE" type="BOOLEAN" required="false"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="255"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ <!-- Recursive cascade path to RHQ_CONFIG_PROPERTY causes constraint creation errors on SQL Server, see
+ http://support.microsoft.com/kb/321843 -->
+ <column name="PARENT_LIST_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROPERTY" ondelete="cascade" />
+ <column name="PARENT_MAP_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROPERTY" ondelete="cascade" />
+ <column name="LIST_INDEX" type="INTEGER"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <index name="RHQ_CONFIG_PROP_idx_prop_key" unique="false">
+ <field ref="CONFIGURATION_ID"/>
+ <field ref="NAME"/>
+ </index>
+ <index name="RHQ_CONFIG_PROP_idx_map_key" unique="false">
+ <field ref="PARENT_MAP_ID"/>
+ <field ref="NAME"/>
+ </index>
+ <index name="RHQ_CONFIG_PROP_idx_list_key" unique="false">
+ <field ref="PARENT_LIST_ID"/>
+ </index>
+ <!-- List entries all have the same name -->
+ </table>
+
+ <table name="RHQ_CONFIG_TEMPLATE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="500"/>
+ <column name="CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF"/>
+ <column name="IS_DEFAULT" type="BOOLEAN" required="false"/>
+ </table>
+
+ <table name="RHQ_RAW_CONFIG">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG(ID)"/>
+ <column name="PATH" type="VARCHAR2" required="false" size="512"/>
+ <column name="CONTENTS" type="CLOB" required="true"/>
+ <column name="SHA256" type="VARCHAR2" size="64" required="true"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ </table>
+
+<!-- END: config-schema.xml -->
+<!-- BEGIN: cluster-schema.xml -->
+
+ <table name="RHQ_AFFINITY_GROUP">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="255" type="VARCHAR2"/>
+ </table>
+
+ <table name="RHQ_SERVER">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="255" type="VARCHAR2"/>
+ <column name="ADDRESS" required="true" size="255" type="VARCHAR2"/>
+ <column name="PORT" required="true" type="INTEGER"/>
+ <column name="SECURE_PORT" required="true" type="INTEGER"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="MTIME" required="true" type="LONG"/>
+ <column name="AFFINITY_GROUP_ID" type="INTEGER" references="RHQ_AFFINITY_GROUP" required="false"/>
+ <column name="COMPUTE_POWER" required="true" type="INTEGER"/>
+ <column name="OPERATION_MODE" required="true" size="32" type="VARCHAR2"/>
+ <column name="STATUS" type="INTEGER" required="false" default="0" />
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_SERVER_NAME_UNIQUE" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- new agent -->
+ <table name="RHQ_AGENT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="255" type="VARCHAR2"/>
+ <column name="ADDRESS" required="true" size="255" type="VARCHAR2"/>
+ <column name="PORT" required="true" type="INTEGER"/>
+ <column name="AGENTTOKEN" required="true" size="100" type="VARCHAR2"/>
+ <column name="REMOTE_ENDPOINT" required="false" size="4000" type="VARCHAR2"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="MTIME" required="true" type="LONG"/>
+ <column name="LAST_AVAILABILITY_REPORT" required="false" type="LONG"/>
+ <column name="AFFINITY_GROUP_ID" type="INTEGER" references="RHQ_AFFINITY_GROUP" required="false"/>
+ <column name="SERVER_ID" type="INTEGER" references="RHQ_SERVER" required="false"/>
+ <column name="STATUS" type="INTEGER" required="false" default="0" />
+ <column name="BACKFILLED" type="BOOLEAN" required="true" />
+
+ <index name="RHQ_AGENT_NAME_UNIQUE" unique="true">
+ <field ref="NAME"/>
+ </index>
+
+ <index name="RHQ_AGENT_ADDRESS_PORT" unique="true">
+ <field ref="ADDRESS"/>
+ <field ref="PORT"/>
+ </index>
+
+ <index name="RHQ_AGENT_TOKEN_UNIQUE" unique="true">
+ <field ref="AGENTTOKEN"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PARTITION_EVENT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="SUBJECT_NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="EVENT_TYPE" required="true" size="50" type="VARCHAR2"/>
+ <column name="EVENT_DETAIL" required="false" size="512" type="VARCHAR2"/>
+ <column name="EXECUTION_STATUS" required="true" size="32" type="VARCHAR2"/>
+ </table>
+
+ <table name="RHQ_PARTITION_DETAILS">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PARTITION_EVENT_ID" type="INTEGER" references="RHQ_PARTITION_EVENT" required="true"/>
+ <column name="AGENT_NAME" type="VARCHAR2" size="255" required="true"/>
+ <column name="SERVER_NAME" type="VARCHAR2" size="255" required="true"/>
+ </table>
+
+ <table name="RHQ_FAILOVER_LIST">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PARTITION_EVENT_ID" type="INTEGER" references="RHQ_PARTITION_EVENT" required="true"/>
+ <column name="AGENT_ID" type="INTEGER" references="RHQ_AGENT" required="true"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ </table>
+
+ <table name="RHQ_FAILOVER_DETAILS">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="FAILOVER_LIST_ID" type="INTEGER" references="RHQ_FAILOVER_LIST" required="true"/>
+ <column name="SERVER_ID" type="INTEGER" references="RHQ_SERVER" required="true"/>
+ <column name="ORDINAL" type = "INTEGER" required="true"/>
+ </table>
+
+<!-- END: cluster-schema.xml -->
+<!-- BEGIN: auth-schema.xml -->
+
+
+ <table name="RHQ_PRINCIPAL">
+
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PRINCIPAL" required="true" type="VARCHAR2" size="100"/>
+ <column name="PASSWORD" required="true" type="VARCHAR2" size="64"/>
+
+ <!-- ensure that principals are unique -->
+ <index name="RHQ_PRINCIPAL_PRINCIPAL_KEY" unique="true">
+ <field ref="PRINCIPAL"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_SUBJECT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
+ <column name="FIRST_NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="LAST_NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="EMAIL_ADDRESS" size="100" type="VARCHAR2"/>
+ <column name="SMS_ADDRESS" size="100" type="VARCHAR2"/>
+ <column name="PHONE_NUMBER" size="100" type="VARCHAR2"/>
+ <column name="DEPARTMENT" size="100" type="VARCHAR2"/>
+ <column name="FACTIVE" required="true" type="BOOLEAN" default="true"/>
+ <column name="FSYSTEM" required="true" type="BOOLEAN" default="false"/>
+
+ <index name="RHQ_SUBJECT_AUTH_KEY" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+<!-- END: auth-schema.xml -->
+<!-- BEGIN: inventory-schema.xml -->
+
+
+ <!-- NEW RESOURCE TYPES -->
+ <table name="RHQ_RESOURCE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="100" required="true"/>
+ <column name="CATEGORY" type="VARCHAR2" size="16" required="true"/>
+ <column name="CREATION_DATA_TYPE" type="VARCHAR2" size="16" required="true"/>
+ <column name="CREATE_DELETE_POLICY" type="VARCHAR2" size="16" required="true"/>
+ <column name="SINGLETON" type="BOOLEAN" required="true"/>
+ <column name="SUPPORTS_MANUAL_ADD" type="BOOLEAN" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+ <column name="PLUGIN" type="VARCHAR2" size="100"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="DELETED" type="BOOLEAN" default="FALSE" required="TRUE"/>
+ <column name="SUBCATEGORY_ID" type="INTEGER"/>
+ <!--
+ TODO add support to DB setup for tables with circular dependencies and then add back this RI
+ <column name="SUBCATEGORY_ID" type="INTEGER" references="RHQ_RESOURCE_SUBCAT" />
+ -->
+ <column name="PLUGIN_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="RES_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="BUNDLE_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG"/>
+
+ <index name="RHQ_RES_TYPE_IDX_PLG_NAME" unique="true">
+ <field ref="NAME"/>
+ <field ref="PLUGIN"/>
+ </index>
+ </table>
+
+ <!-- NEW RESOURCE SUBCATEGORIES -->
+ <table name="RHQ_RESOURCE_SUBCAT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="100"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="PARENT_SUBCATEGORY_ID" type="INTEGER" references="RHQ_RESOURCE_SUBCAT"/>
+ <!-- resourceTypeId is not required on child sub categories -->
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+ </table>
+
+ <!-- Many To Many mapping for resource type to its parents -->
+ <table name="RHQ_RESOURCE_TYPE_PARENTS">
+ <column name="RESOURCE_TYPE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+ <column name="PARENT_RESOURCE_TYPE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+
+ <!-- not using full words to fit index name length -->
+ <constraint name="RHQ_RES_TYPE_PARENTS_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="PARENT_RESOURCE_TYPE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_PROCESS_SCAN">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="QUERY" type="VARCHAR2" size="256" required="true"/>
+ <column name="NAME" type="VARCHAR2" size="100" required="false"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+
+ <index name="RHQ_PROCESS_SCAN_QUERY_INDEX" unique="true">
+ <field ref="QUERY"/>
+ <field ref="RESOURCE_TYPE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PRD_VER">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="VERSION" type="VARCHAR2" size="100" required="true"/>
+ <column name="RES_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ </table>
+
+ <table name="RHQ_RESOURCE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="UUID" type="CHAR" size="36" required="true"/>
+ <column name="NAME" type="VARCHAR2" size="500"/>
+ <!-- ancestry holds the full parental ancestry, used for disambiguation -->
+ <column name="ANCESTRY" type="VARCHAR2" required="false" size="4000"/>
+ <column name="RESOURCE_KEY" type="VARCHAR2" required="true" size="500"/>
+ <column name="AGENT_ID" required="false" type="INTEGER" references="RHQ_AGENT(id)"/>
+ <column name="INVENTORY_STATUS" type="VARCHAR2" size="20"/>
+ <column name="CONNECTED" type="BOOLEAN"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+ <column name="VERSION" type="VARCHAR2" size="100"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="ITIME" type="LONG"/>
+ <column name="RES_CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
+ <column name="PLUGIN_CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
+ <column name="MODIFIED_BY" required="false" size="100" type="VARCHAR2"/>
+ <column name="LOCATION" required="false" size="100" type="VARCHAR2"/>
+ <column name="PARENT_RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE"/>
+ <column name="PRODUCT_VERSION_ID" type="INTEGER" references="RHQ_PRD_VER"/>
+
+ <index name="RHQ_RESOURCE_idx_key">
+ <field ref="RESOURCE_KEY"/>
+ </index>
+
+ <index name="RHQ_RESOURCE_idx_type">
+ <field ref="RESOURCE_TYPE_ID"/>
+ </index>
+
+ <index name="RHQ_RESOURCE_idx_agent">
+ <field ref="AGENT_ID"/>
+ </index>
+
+ <index name="RHQ_RESOURCE_idx_parent">
+ <field ref="PARENT_RESOURCE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_RESOURCE_ERROR">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="TIME_OCCURRED" type="LONG" required="true"/>
+ <column name="ERROR_TYPE" type="VARCHAR2" required="true" size="32"/>
+ <column name="SUMMARY" type="VARCHAR2" required="true" size="1000"/>
+ <column name="DETAIL" type="LONGVARCHAR" required="false"/>
+
+ <index name="RHQ_RES_ERROR_IDX_RES_ID">
+ <field ref="RESOURCE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_GROUP_DEF">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="DESCRIPTION" size="100" type="VARCHAR2"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="CALC_TIME" type="LONG"/>
+ <column name="CALC_INTERVAL" type="LONG"/>
+ <column name="RECURSIVE" type="BOOLEAN"/>
+ <column name="EXPRESSION" type="VARCHAR2" size="1000"/>
+
+ <index name="RHQ_GROUP_DEF_NAME" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_RESOURCE_GROUP">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <!-- this name can be longer than the size of the GROUP_BY column, which is used to uniquely identify it -->
+ <!-- Max bytes for Oracle Varchar2 to accommodate large cluster keys -->
+ <column name="NAME" required="true" size="4000" type="VARCHAR2"/>
+ <column name="DESCRIPTION" size="100" type="VARCHAR2"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+ <!-- Compatible groups only -->
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="MODIFIED_BY" required="false" size="100" type="VARCHAR2"/>
+ <column name="RECURSIVE" type="BOOLEAN"/>
+
+ <column name="GROUP_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_GROUP_DEF"/>
+ <column name="GROUP_BY" size="500" type="VARCHAR2"/>
+
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+
+ <!-- This is only set if this is a subject-owned group (like an autogroup) -->
+ <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT"/>
+
+ <!-- These two only set if this is a backing group for a resource auto-cluster -->
+ <column name="CLUSTER_KEY" type="VARCHAR2" size="4000" required="false"/>
+ <column name="CLUSTER_RESOURCE_GROUP_ID" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <!-- This is only set if this is a backing group for a resource auto-group -->
+ <column name="AUTO_GROUP_PARENT_RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE"/>
+
+ <column name="VISIBLE" type="BOOLEAN"/>
+
+ <index name="RHQ_RES_GROUP_NAME" unique="false">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- Many To Many mapping for groups to implicit resources -->
+ <table name="RHQ_RESOURCE_GROUP_RES_IMP_MAP">
+ <column name="RESOURCE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE"/>
+ <column name="RESOURCE_GROUP_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <!-- not using full words to fit index name length -->
+ <constraint name="RHQ_RES_GROUP_RES_IMP_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_ID"/>
+ <field ref="RESOURCE_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- Many To Many mapping for groups to explicit resources -->
+ <table name="RHQ_RESOURCE_GROUP_RES_EXP_MAP">
+ <column name="RESOURCE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE"/>
+ <column name="RESOURCE_GROUP_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <!-- not using full words to fit index name length -->
+ <constraint name="RHQ_RES_GROUP_RES_EXP_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_ID"/>
+ <field ref="RESOURCE_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_CONFIG_GROUP_UPDATE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="GROUP_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_GROUP"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ </table>
+
+ <table name="RHQ_CONFIG_UPDATE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="true" references="RHQ_CONFIG" ondelete="cascade"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="CONFIG_RES_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="PLUGIN_CONFIG_RES_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="AGG_RES_UPDATE_ID" type="INTEGER" required="false" references="RHQ_CONFIG_GROUP_UPDATE"/>
+ <column name="AGG_PLUGIN_UPDATE_ID" type="INTEGER" required="false" references="RHQ_CONFIG_GROUP_UPDATE"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ </table>
+
+
+ <table name="RHQ_TAGGING">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAMESPACE" type="VARCHAR2" required="false" size="20"/>
+ <column name="SEMANTIC" type="VARCHAR2" required="false" size="50"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+ </table>
+
+ <table name="RHQ_TAGGING_RESOURCE_MAP">
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_RESOURCE_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_RES_GROUP_MAP">
+ <column name="RESOURCE_GROUP_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_GROUP"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_RES_GROUP_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_GROUP_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+<!-- END: inventory-schema.xml -->
+<!-- BEGIN: authz-schema.xml -->
+
+
+ <table name="RHQ_ROLE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="DESCRIPTION" size="100" type="VARCHAR2"/>
+ <column name="FSYSTEM" type="BOOLEAN" default="false"/>
+
+ <index name="RHQ_ROLE_NAME_KEY" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ROLE_RESOURCE_GROUP_MAP">
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+ <column name="RESOURCE_GROUP_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <constraint name="RHQ_ROLE_RES_GROUP_MAP_KEY">
+ <primaryKey>
+ <field ref="ROLE_ID"/>
+ <field ref="RESOURCE_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_ROLE_LDAP_GROUP">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+ <column name="LDAP_GROUP_NAME" size="128" required="true" type="VARCHAR2"/>
+
+ <index name="RHQ_ROLE_LDAP_GROUP_IDX" unique="true">
+ <field ref="ROLE_ID"/>
+ <field ref="LDAP_GROUP_NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PERMISSION">
+ <column name="ROLE_ID" type="INTEGER" references="RHQ_ROLE" required="true"/>
+ <column name="OPERATION" type="INTEGER" required="true"/>
+ <constraint name="RHQ_PERMISSION_PK">
+ <primaryKey>
+ <field ref="ROLE_ID"/>
+ <field ref="OPERATION"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_SUBJECT_ROLE_MAP">
+ <column name="SUBJECT_ID" required="true" type="INTEGER" references="RHQ_SUBJECT"/>
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+
+ <constraint name="RHQ_SUBJECT_ROLE_MAPPING_KEY">
+ <primaryKey>
+ <field ref="SUBJECT_ID"/>
+ <field ref="ROLE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_SUBJECT_ROLE_LDAP_MAP">
+ <column name="SUBJECT_ID" required="true" type="INTEGER" references="RHQ_SUBJECT"/>
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+ <constraint name="RHQ_SUBJECT_ROLE_LDAP_MAP_PK">
+ <primaryKey>
+ <field ref="SUBJECT_ID" />
+ <field ref="ROLE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+<!-- END: authz-schema.xml -->
+<!-- BEGIN: search-schema.xml -->
+
+
+ <table name="RHQ_SAVED_SEARCH">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CONTEXT" type="VARCHAR2" size="25" required="true"/>
+
+ <column name="NAME" type="VARCHAR2" size="200" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="500" required="false"/>
+ <column name="PATTERN" type="VARCHAR2" size="1000" required="true"/>
+
+ <column name="LAST_COMPUTE_TIME" type="LONG" required="true"/>
+ <column name="RESULT_COUNT" type="LONG" required="false"/>
+
+ <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT" required="true"/>
+ <column name="GLOBAL" type="BOOLEAN" required="true"/>
+ </table>
+
+<!-- END: search-schema.xml -->
+<!-- BEGIN: dashboard-schema.xml -->
+
+
+
+ <table name="RHQ_DASHBOARD">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="200" required="true"/>
+ <column name="SUBJECT_ID" type="INTEGER" required="true" references="RHQ_SUBJECT"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_RESOURCE_GROUP"/>
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <column name="SHARED" type="BOOLEAN" required="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ </table>
+
+
+ <table name="RHQ_DASHBOARD_PORTLET">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="200" required="true"/>
+ <column name="PORTLET_KEY" type="VARCHAR2" size="200" required="true"/>
+ <column name="COL" type="INTEGER" required="true"/>
+ <column name="COL_INDEX" type="INTEGER" required="true"/>
+ <column name="HEIGHT" type="INTEGER" required="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="DASHBOARD_ID" type="INTEGER" required="false" references="RHQ_DASHBOARD"/>
+ </table>
+
+<!-- END: dashboard-schema.xml -->
+<!-- BEGIN: operation-schema.xml -->
+
+
+ <table name="RHQ_OPERATION_DEF">
+
+ <!-- === required columns === -->
+
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE(ID)"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+
+ <!-- === optional columns === -->
+
+ <!-- an OSGI version range - if null, the operation def applies to all versions of the associated resource type -->
+ <column name="RESOURCE_VERSION_RANGE" type="VARCHAR2" size="100"/>
+
+ <!-- A parameter config definition is only required for operations that have parameters. -->
+ <!-- A results config definition is only required for operations that return data. -->
+ <column name="PARAMETER_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="RESULTS_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="4000"/>
+ <column name="TIMEOUT" type="INTEGER"/>
+
+ <!-- === business key (RESOURCE_TYPE_ID + NAME) === -->
+ <index name="RHQ_OPERATION_DEF_KEY_IDX" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_OPERATION_HISTORY">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="8"/>
+ <column name="JOB_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="JOB_GROUP" type="VARCHAR2" required="true" size="100"/>
+ <column name="OPERATION_DEF_ID" type="INTEGER" required="true" references="RHQ_OPERATION_DEF"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="STIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="PARAMETERS_CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+
+ <!-- for resource history -->
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="RESULTS_CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="GROUP_HISTORY_ID" type="INTEGER" required="false" references="RHQ_OPERATION_HISTORY"/>
+
+ <!-- for group history -->
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_RESOURCE_GROUP"/>
+
+ <index name="RHQ_OPERATION_HISTORY_JOB_IDX" unique="true">
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ <field ref="CTIME"/>
+ </index>
+
+ </table>
+
+ <!--
+ This table is really just to support some specific use-cases.
+ Specifically, to be able to get a list of histories for a specific schedule (aka quartz job)
+ and to be able to query a list of all schedules along with their associated resource/group IDs
+ possibly sorted by their next fire time.
+ Note that a NULL next fire time means it won't fire again and the row is probaby about to be deleted;
+ we can probably not even insert rows with NULL and make it a non-nullable field. But rather than
+ code special conditions into the session bean, we'll allow a short-lived NULL next fire time row.
+ -->
+ <table name="RHQ_OPERATION_SCHEDULE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+
+ <column name="JOB_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="JOB_GROUP" type="VARCHAR2" required="true" size="100"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="8"/>
+ <column name="NEXT_FIRE_TIME" type="LONG" required="false"/>
+
+ <!-- for resource history -->
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+
+ <!-- for group history -->
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_RESOURCE_GROUP"/>
+
+ <!--
+ Note, this is the same as the primary key that Quartz uses for its schedules (RHQ_QRTZ_JOB_DETAILS).
+ We do not need to add DTYPE to the key, because we ensure the name/group are unique across resource/group
+ schedules
+ -->
+ <!-- === business key (JOB_NAME + JOB_GROUP) === -->
+ <index name="RHQ_OPERATION_SCHEDULE_KEY_IDX" unique="true">
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ </index>
+ </table>
+
+<!-- END: operation-schema.xml -->
+<!-- BEGIN: event-schema.xml -->
+
+
+ <!-- metadata -->
+
+ <table name="RHQ_EVENT_DEF">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE(ID)"/>
+
+ <column name="NAME" type="VARCHAR2" size="100" required="true"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+
+ <index name="RHQ_EVENT_DEF_IDX" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- instance data -->
+
+ <table name="RHQ_EVENT_SOURCE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="EVENT_DEF_ID" type="INTEGER" required="true" references="RHQ_EVENT_DEF(ID)"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE(ID)"/>
+
+ <column name="LOCATION" required="true" size="2000" type="VARCHAR2"/>
+
+ <index name="RHQ_EVENT_SOURCE_IDX" unique="true">
+ <field ref="EVENT_DEF_ID"/>
+ <field ref="RESOURCE_ID"/>
+ <field ref="LOCATION"/>
+ </index>
+ </table>
+
+ <table name="RHQ_EVENT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="EVENT_SOURCE_ID" type="INTEGER" required="true" references="RHQ_EVENT_SOURCE(ID)"/>
+
+ <column name="TIMESTAMP" required="true" type="LONG"/>
+ <column name="SEVERITY" required="true" size="20" type="VARCHAR2"/>
+ <column name="DETAIL" required="true" size="4000" type="VARCHAR2"/>
+ <index name="RHQ_EVENT_IDX" unique="false">
+ <field ref="EVENT_SOURCE_ID"/>
+ <field ref="TIMESTAMP"/>
+ </index>
+ </table>
+
+<!-- END: event-schema.xml -->
+<!-- BEGIN: alert-schema.xml -->
+
+
+ <table name="RHQ_ALERT_DEFINITION">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="PARENT_ID" type="INTEGER" required="false"/>
+ <column name="GROUP_ALERT_DEF_ID" type="INTEGER" required="false"/>
+ <column name="DESCRIPTION" required="false" size="250" type="VARCHAR2"/>
+ <column name="PRIORITY" type="VARCHAR2" size="15" required="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE" required="false"/>
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE" required="false"/>
+ <column name="RESOURCE_GROUP_ID" type="INTEGER" references="RHQ_RESOURCE_GROUP" required="false"/>
+ <column name="ENABLED" required="true" default="TRUE" type="BOOLEAN"/>
+
+ <column name="REQUIRED" required="true" type="SMALLINT"/>
+
+ <column name="RECOVERY_ID" type="INTEGER" required="true"/>
+ <!-- required, but 0 effectively means null -->
+ <column name="WILL_RECOVER" required="true" default="false" type="BOOLEAN"/>
+ <column name="NOTIFY_FILTERED" required="true" default="false" type="BOOLEAN"/>
+ <column name="CONTROL_FILTERED" required="true" default="FALSE" type="BOOLEAN"/>
+
+ <column name="DELETED" required="true" default="FALSE" type="BOOLEAN"/>
+ <column name="READ_ONLY" required="true" default="FALSE" type="BOOLEAN"/>
+
+ <column name="DAMPENING_CATEGORY" type="SMALLINT" required="true"/>
+ <column name="DAMPENING_VALUE" type="INTEGER"/>
+ <column name="DAMPENING_VALUE_UNITS" type="SMALLINT"/>
+ <column name="DAMPENING_PERIOD" type="INTEGER"/>
+ <column name="DAMPENING_PERIOD_UNITS" type="SMALLINT"/>
+ </table>
+
+ <table name="RHQ_ALERT_DAMPEN_EVENT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="EVENT_TYPE" required="true" type="SMALLINT"/>
+ <column name="EVENT_TIMESTAMP" required="true" type="LONG"/>
+
+ <index name="RHQ_DAMPENING_EVENT_TYPE_IDX">
+ <field ref="EVENT_TYPE"/>
+ </index>
+ <index name="RHQ_DAMPENING_EVENT_TS_IDX">
+ <field ref="EVENT_TIMESTAMP"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ALERT_CONDITION">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="TYPE" required="true" type="VARCHAR2" size="15"/>
+ <!--
+ <column name="REQUIRED" required="true" type="BOOLEAN"/>
+ -->
+ <column name="MEASUREMENT_DEFINITION_ID" required="false" type="INTEGER"/>
+ <column name="NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="COMPARATOR" required="false" size="2" type="VARCHAR2"/>
+ <column name="THRESHOLD" required="false" type="DOUBLE"/>
+ <!-- event-based conditions use OPTION_STATUS for the string match, so should be a decent length -->
+ <column name="OPTION_STATUS" required="false" size="256" type="VARCHAR2"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="TRIGGER_ID" required="false" type="INTEGER"/>
+ </table>
+
+ <table name="RHQ_ALERT" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="RECOVERY_ID" type="INTEGER" required="true"/>
+ <!-- required, but 0 effectively means null -->
+ <column name="WILL_RECOVER" required="true" default="false" type="BOOLEAN"/>
+ <column name="ACK_TIME" required="false" type="LONG"/>
+ <column name="ACK_SUBJECT" required="false" size="100" type="VARCHAR2"/>
+ <index name="RHQ_ALERT_IDX_TIME" unique="false">
+ <field ref="CTIME"/>
+ </index>
+ <index name="RHQ_ALERT_IDX_ALERTDEF" unique="false">
+ <field ref="ALERT_DEFINITION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ALERT_NOTIF_LOG" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_ID" required="true" type="INTEGER" references="RHQ_ALERT(ID)"/>
+ <index name="RHQ_ALERT_IDX_ALERT" unique="false">
+ <field ref="ALERT_ID"/>
+ </index>
+ <column name="SENDER" required="false" size="100" type="VARCHAR2"/>
+ <column name="RESULT_STATE" required="false" size="20" type="VARCHAR2"/>
+ <column name="MESSAGE" required="false" size="4000" type="VARCHAR2"/>
+ </table>
+
+ <table name="RHQ_ALERT_CONDITION_LOG" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="ALERT_ID" required="false" type="INTEGER" references="RHQ_ALERT(ID)"/>
+ <column name="CONDITION_ID" required="true" type="INTEGER" references="RHQ_ALERT_CONDITION(ID)"/>
+ <column name="VALUE" required="true" size="250" type="VARCHAR2"/>
+ <index name="RHQ_ALERT_COND_LOG_IDX_TIME">
+ <field ref="CTIME" />
+ </index>
+ <index name="RHQ_ALERT_COND_LOG_IDX_ALERT">
+ <field ref="ALERT_ID"/>
+ </index>
+ <index name="RHQ_ALERT_COND_LOG_COND_IDX">
+ <field ref="CONDITION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ALERT_NOTIFICATION" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="SENDER_CONFIG_ID" required="false" type="INTEGER" references="RHQ_CONFIG(ID)"/>
+ <column name="EXTRA_CONFIG_ID" required="false" type="INTEGER" references="RHQ_CONFIG(ID)"/>
+ <column name="SENDER_NAME" required="true" size="100" type="VARCHAR2" />
+ </table>
+
+<!-- END: alert-schema.xml -->
+<!-- BEGIN: sysconfig-schema.xml -->
+
+
+ <table name="RHQ_SYSTEM_CONFIG">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PROPERTY_KEY" type="VARCHAR2" size="80"/>
+ <column name="PROPERTY_VALUE" type="VARCHAR2" size="300"/>
+ <column name="DEFAULT_PROPERTY_VALUE" type="VARCHAR2" size="300"/>
+ <column name="FREAD_ONLY" type="BOOLEAN" default="FALSE"/>
+
+ <index name="RHQ_SYSTEM_CONFIG_KEY_INDX" unique="true">
+ <field ref="PROPERTY_KEY"/>
+ </index>
+ </table>
+
+<!-- END: sysconfig-schema.xml -->
+<!-- BEGIN: scheduler-schema.xml -->
+
+
+ <table name="RHQ_QRTZ_JOB_DETAILS">
+ <column name="JOB_NAME" required="true" type="VARCHAR2" size="80"/>
+ <column name="JOB_GROUP" required="true" type="VARCHAR2" size="80"/>
+ <column name="DESCRIPTION" required="false" type="VARCHAR2" size="120"/>
+ <column name="JOB_CLASS_NAME" required="true" type="VARCHAR2" size="128"/>
+ <column name="IS_DURABLE" required="true" type="BOOLEAN" default="FALSE"/>
+ <column name="IS_VOLATILE" required="true" type="BOOLEAN"/>
+ <column name="IS_STATEFUL" required="true" type="BOOLEAN" default="FALSE"/>
+ <column name="REQUESTS_RECOVERY" required="true" type="BOOLEAN" default="FALSE"/>
+ <column name="JOB_DATA" required="false" type="BLOB"/>
+
+ <constraint name="RHQ_PK_QRTZ_JOB_DETAILS">
+ <primaryKey>
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_QRTZ_JOB_LISTENERS">
+ <column name="JOB_NAME" required="true" type="VARCHAR2" size="80"/>
+ <column name="JOB_GROUP" required="true" type="VARCHAR2" size="80"/>
+ <column name="JOB_LISTENER" required="true" type="VARCHAR2" size="80"/>
+
+ <constraint name="RHQ_PK_QRTZ_JOB_LISTENERS">
+ <primaryKey>
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ <field ref="JOB_LISTENER"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_JOB_LSTNRS_JN_JG">
+ <foreignKey local="JOB_NAME,JOB_GROUP"
+ references="RHQ_QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+ </table>
+
+ <table name="RHQ_QRTZ_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" required="true" size="80"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" required="true" size="80"/>
+ <column name="JOB_NAME" type="VARCHAR2" required="true" size="80"/>
+ <column name="JOB_GROUP" type="VARCHAR2" required="true" size="80"/>
+ <column name="IS_VOLATILE" type="BOOLEAN" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="120"/>
+ <column name="NEXT_FIRE_TIME" type="LONG" required="false"/>
+ <column name="PREV_FIRE_TIME" type="LONG" required="false"/>
+ <column name="PRIORITY" type="INTEGER" required="false"/>
+ <column name="TRIGGER_STATE" type="VARCHAR" required="true" size="16"/>
+ <column name="TRIGGER_TYPE" type="VARCHAR" required="true" size="8"/>
+ <column name="START_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="false"/>
+ <column name="CALENDAR_NAME" type="VARCHAR2" required="false" size="80"/>
+ <column name="MISFIRE_INSTR" type="INTEGER" required="false"/>
+ <column name="JOB_DATA" type="BLOB" required="false"/>
+
+ <constraint name="RHQ_PK_QRTZ_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_TRIGGERS_JN_JG">
+ <foreignKey local="JOB_NAME,JOB_GROUP"
+ references="RHQ_QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend these indexes. -->
+ <index name="RHQ_QRTZ_TRIGGERS_JN_JG_IDX">
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ </index>
+ <index name="RHQ_QRTZ_TRIGGERS_NFT_IDX">
+ <field ref="NEXT_FIRE_TIME"/>
+ </index>
+ <index name="RHQ_QRTZ_TRIGGERS_TS_IDX">
+ <field ref="TRIGGER_STATE"/>
+ </index>
+ <index name="RHQ_QRTZ_TRIGGERS_TS_NFT_IDX">
+ <field ref="TRIGGER_STATE"/>
+ <field ref="NEXT_FIRE_TIME"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_QRTZ_SIMPLE_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" required="true" size="80"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" required="true" size="80"/>
+ <column name="REPEAT_COUNT" type="LONG" required="true"/>
+ <column name="REPEAT_INTERVAL" type="LONG" required="true"/>
+ <column name="TIMES_TRIGGERED" type="LONG" required="true"/>
+
+ <constraint name="RHQ_PK_QRTZ_SIMPLE_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_SIMPLE_TRGRS_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <!-- Commenting out, because Oracle auto-creates an index for the
+ primary key column(s) and fails if you try to create another
+ index for the same column(s) (ips, 03/29/07).
+ -->
+ <!--
+ <index name="RHQ_QRTZ_SIMPLE_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ -->
+ </table>
+
+ <table name="RHQ_QRTZ_CRON_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="CRON_EXPRESSION" type="VARCHAR2" size="80" required="true"/>
+ <column name="TIME_ZONE_ID" type="VARCHAR2" size="80" required="false"/>
+
+ <constraint name="RHQ_PK_QRTZ_CRON_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_CRON_TRIG_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <!-- Commenting out, because Oracle auto-creates an index for the
+ primary key column(s) and fails if you try to create another
+ index for the same column(s) (ips, 03/29/07).
+ -->
+ <!--
+ <index name="RHQ_QRTZ_CRON_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ -->
+ </table>
+
+ <table name="RHQ_QRTZ_BLOB_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="BLOB_DATA" type="BLOB" required="false"/>
+
+ <constraint name="RHQ_PK_QRTZ_BLOB_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_BLOB_TRIGG_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <!-- Commenting out, because Oracle auto-creates an index for the
+ primary key column(s) and fails if you try to create another
+ index for the same column(s) (ips, 03/29/07).
+ -->
+ <!--
+ <index name="RHQ_QRTZ_BLOB_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ -->
+ </table>
+
+ <table name="RHQ_QRTZ_TRIGGER_LISTENERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_LISTENER" type="VARCHAR2" size="80" required="true"/>
+
+ <constraint name="RHQ_PK_QRTZ_TRIGGER_LISTENERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ <field ref="TRIGGER_LISTENER"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_TRGR_LSTNRS_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <index name="RHQ_QRTZ_TRGR_LSTNRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_QRTZ_FIRED_TRIGGERS">
+ <column name="ENTRY_ID" primarykey="true" type="VARCHAR2" size="95" required="true"/>
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="INSTANCE_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="FIRED_TIME" type="LONG" required="true"/>
+ <column name="PRIORITY" type="INTEGER" required="false"/>
+ <column name="STATE" type="VARCHAR2" size="16" required="true"/>
+ <column name="IS_VOLATILE" type="BOOLEAN" required="true"/>
+ <column name="JOB_NAME" type="VARCHAR2" size="80" required="false"/>
+ <column name="JOB_GROUP" type="VARCHAR2" size="80" required="false"/>
+ <column name="IS_STATEFUL" type="BOOLEAN" required="false"/>
+ <column name="REQUESTS_RECOVERY" type="BOOLEAN" required="false"/>
+
+ <!-- Quartz docs recommend these indexes. -->
+ <index name="RHQ_QRTZ_FIRED_TRGRS_TN_IDX">
+ <field ref="TRIGGER_NAME"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_TG_IDX">
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_IN_IDX">
+ <field ref="INSTANCE_NAME"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_JN_IDX">
+ <field ref="JOB_NAME"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_JG_IDX">
+ <field ref="JOB_GROUP"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_QRTZ_CALENDARS">
+ <column name="CALENDAR_NAME" primarykey="true" type="VARCHAR2" size="80" required="true"/>
+ <column name="CALENDAR" type="BLOB" required="true"/>
+ </table>
+
+ <table name="RHQ_QRTZ_PAUSED_TRIGGER_GRPS">
+ <column name="TRIGGER_GROUP" primarykey="true" type="VARCHAR2" size="80" required="true"/>
+ </table>
+
+ <table name="RHQ_QRTZ_SCHEDULER_STATE">
+ <column name="INSTANCE_NAME" primarykey="true" type="VARCHAR2" size="80" required="true"/>
+ <column name="LAST_CHECKIN_TIME" type="LONG" required="true"/>
+ <column name="CHECKIN_INTERVAL" type="LONG" required="true"/>
+ <column name="RECOVERER" type="VARCHAR2" size="80" required="false"/>
+ </table>
+
+ <table name="RHQ_QRTZ_LOCKS">
+ <column name="LOCK_NAME" primarykey="true" type="VARCHAR2" size="40" required="true"/>
+ <data LOCK_NAME="TRIGGER_ACCESS"/>
+ <data LOCK_NAME="JOB_ACCESS"/>
+ <data LOCK_NAME="CALENDAR_ACCESS"/>
+ <data LOCK_NAME="STATE_ACCESS"/>
+ <data LOCK_NAME="MISFIRE_ACCESS"/>
+ </table>
+
+<!-- END: scheduler-schema.xml -->
+<!-- BEGIN: amps-schema.xml -->
+
+
+ <table name="RHQ_PLUGIN">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="4000" type="VARCHAR2" required="false"/>
+ <column name="VERSION" size="200" type="VARCHAR2" required="false"/>
+ <column name="AMPS_VERSION" size="16" type="VARCHAR2" required="false"/>
+ <column name="ENABLED" type="BOOLEAN" required="true"/>
+ <column name="STATUS" size="16" type="VARCHAR2" required="true"/>
+ <column name="HELP" type="CLOB" required="false"/>
+ <column name="PATH" size="500" type="VARCHAR2" required="true"/>
+ <column name="MD5" size="100" type="VARCHAR2" required="true"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="DEPLOYMENT" size="8" type="VARCHAR2" required="true"/>
+ <column name="PTYPE" size="200" type="VARCHAR2" required="false"/>
+ <column name="PLUGIN_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="JOBS_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="CONTENT" type="BLOB" required="false"/>
+
+ <index name="RHQ_PLUGIN_NAME_DEPLOY_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="DEPLOYMENT"/>
+ </index>
+ </table>
+
+<!-- END: amps-schema.xml -->
+<!-- BEGIN: measurement-schema.xml -->
+
+ <table name="RHQ_MEASUREMENT_DEF">
+
+ <!-- === required columns === -->
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE(ID)"/>
+ <column name="NAME" type="VARCHAR2" size="100" required="true"/>
+
+ <!-- === optional columns === -->
+ <!-- an OSGI version range - if null, the metric def applies to all versions of the associated resource type -->
+ <column name="RESOURCE_VERSION_RANGE" type="VARCHAR2" size="100"/>
+ <column name="CATEGORY" type="SMALLINT"/>
+ <column name="UNITS" type="SMALLINT"/>
+ <column name="NUMERIC_TYPE" type="SMALLINT"/>
+ <column name="DISPLAY_TYPE" type="SMALLINT"/>
+ <column name="DATA_TYPE" type="SMALLINT"/>
+ <column name="RAW_NUMERIC_TYPE" type="SMALLINT"/>
+ <column name="DEFAULT_ON" type="BOOLEAN" default="false"/>
+ <column name="DEFAULT_INTERVAL" type="LONG" />
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DISPLAY_ORDER" type="INTEGER" default="1000"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="500"/>
+ <column name="DESTINATION_TYPE" type="VARCHAR2" size="100"/>
+
+ <column name="VERSION" type="INTEGER"/>
+ <!-- for optimistic locking -->
+
+ <!-- === business key (RESOURCE_TYPE_ID + NAME + RAW_NUMERIC_TYPE) === -->
+ <index name="RHQ_METRIC_DEF_KEY_IDX" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ <field ref="RAW_NUMERIC_TYPE"/>
+ </index>
+ <index name="RHQ_METRIC_DEF_NT_IDX">
+ <field ref="NUMERIC_TYPE"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_SCHED">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+
+ <column name="ENABLED" type="BOOLEAN" default="false"/>
+ <column name="MTIME" type="LONG" />
+ <column name="DEFINITION" type="INTEGER" references="RHQ_MEASUREMENT_DEF(ID)"/>
+ <column name="VERSION" type="INTEGER" />
+ <column name="COLL_INTERVAL" type="LONG" />
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE(ID)"/>
+ <index name="RHQ_MEAS_SCHED_UNIQ" unique="true">
+ <field ref="RESOURCE_ID"/>
+ <field ref="DEFINITION"/>
+ </index>
+ <index name="RHQ_MEAS_SCHED_RESID_IDX">
+ <field ref="RESOURCE_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_BLINE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+
+ <column name="BL_USER_ENTERED" type="BOOLEAN" default="false" required="true"/>
+ <column name="BL_MIN" type="DOUBLE" required="true"/>
+ <column name="BL_MAX" type="DOUBLE" required="true"/>
+ <column name="BL_MEAN" type="DOUBLE" required="true"/>
+ <column name="BL_COMPUTE_TIME" type="LONG" required="true"/>
+ <column name="SCHEDULE_ID" type="INTEGER" required="true" references="RHQ_MEASUREMENT_SCHED(ID)"/>
+ <index name="RHQ_MEAS_BASELINE_CTIME_IDX">
+ <field ref="BL_COMPUTE_TIME"/>
+ </index>
+ <index name="RHQ_MEAS_BASELINE_SID_IDX">
+ <field ref="SCHEDULE_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_NUM_1H" logging="false" cache="true"
+ tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@" storage-options="freelists 20">
+
+ <column name="TIME_STAMP" required="true" type="LONG"/>
+ <column name="SCHEDULE_ID" required="true" type="INTEGER"/>
+ <column name="VALUE" required="false" type="DOUBLE"/>
+ <column name="MINVALUE" required="false" type="DOUBLE"/>
+ <column name="MAXVALUE" required="false" type="DOUBLE"/>
+
+ <constraint name="RHQ_MEAS_DATA_1H_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="RHQ_MEAS_DATA_1H_TIME_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_NUM_6H" logging="false" cache="true"
+ tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@" storage-options="freelists 20">
+
+ <column name="TIME_STAMP" required="true" type="LONG"/>
+ <column name="SCHEDULE_ID" required="true" type="INTEGER"/>
+ <column name="VALUE" required="false" type="DOUBLE"/>
+ <column name="MINVALUE" required="false" type="DOUBLE"/>
+ <column name="MAXVALUE" required="false" type="DOUBLE"/>
+
+ <constraint name="RHQ_MEAS_DATA_6H_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="RHQ_MEAS_DATA_6H_TIME_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_NUM_1D" logging="false" cache="true"
+ tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@" storage-options="freelists 20">
+
+ <column name="TIME_STAMP" required="true" type="LONG"/>
+ <column name="SCHEDULE_ID" required="true" type="INTEGER"/>
+ <column name="VALUE" required="false" type="DOUBLE"/>
+ <column name="MINVALUE" required="false" type="DOUBLE"/>
+ <column name="MAXVALUE" required="false" type="DOUBLE"/>
+
+ <constraint name="RHQ_MEAS_DATA_1D_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="RHQ_MEAS_DATA_1D_TIME_IDX">
+ <field ref="TIME_STAMP" />
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_TRAIT">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER" />
+ <column name="VALUE" type="VARCHAR2" size="4000" />
+ <constraint name="RHQ_MEAS_DATA_TRAIT_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+ <table name="RHQ_CALLTIME_DATA_KEY">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="SCHEDULE_ID" type="INTEGER" required="true"/>
+ <column name="CALL_DESTINATION" type="VARCHAR2" size="4000" required="true"/>
+ <index name="RHQ_CALLTIME_DATA_KEY_IDX" unique="true">
+ <field ref="SCHEDULE_ID"/>
+ <field ref="CALL_DESTINATION"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_CALLTIME_DATA_VALUE">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="KEY_ID" type="INTEGER" references="RHQ_CALLTIME_DATA_KEY" required="true"/>
+ <column name="BEGIN_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="true"/>
+ <column name="MINIMUM" type="DOUBLE" required="true"/>
+ <column name="MAXIMUM" type="DOUBLE" required="true"/>
+ <column name="TOTAL" type="DOUBLE" required="true"/>
+ <column name="COUNT" type="LONG" required="true"/>
+ <index name="RHQ_CT_DA_VA_END_TIM_IDX">
+ <field ref="END_TIME"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_AVAILABILITY">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE(ID)"/>
+ <column name="START_TIME" type="LONG" required="true" />
+ <column name="END_TIME" type="LONG" required="false" />
+ <column name="AVAILABILITY_TYPE" type="SMALLINT" required="false" />
+ <index name="RHQ_AVAIL_RESOURCE_START_IDX">
+ <field ref="RESOURCE_ID"/>
+ <field ref="START_TIME"/>
+ </index>
+ <!-- only one null row can exist for any resource -->
+ <index name="RHQ_AVAIL_RESOURCE_END_IDX" condition="END_TIME IS NULL">
+ <field ref="RESOURCE_ID"/>
+ <field ref="END_TIME" />
+ </index>
+ </table>
+
+ <table name="RHQ_RESOURCE_AVAIL">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE(ID)" ondelete="cascade"/>
+ <column name="AVAILABILITY_TYPE" type="SMALLINT" required="false" />
+ <index name="RHQ_RESOURCE_AVAIL_IDX">
+ <field ref="RESOURCE_ID" />
+ </index>
+ </table>
+
+ <table name="RHQ_MEASUREMENT_OOB">
+ <column name="SCHEDULE_ID" type="INTEGER" references="RHQ_MEASUREMENT_SCHED(ID)" required="true"/>
+ <column name="TIME_STAMP" type="LONG" required="true"/>
+ <column name="OOB_FACTOR" type="INTEGER" required="true" />
+ <constraint name="RHQ_MEAS_OOB_ID_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_MEASUREMENT_OOB_TMP">
+ <column name="SCHEDULE_ID" type="INTEGER" required="true"/>
+ <column name="TIME_STAMP" type="LONG" required="true"/>
+ <column name="OOB_FACTOR" type="INTEGER" required="true" />
+ <constraint name="RHQ_MEAS_OOB_TMP_ID_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_NUMBERS">
+ <column name="i" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true" />
+ </table>
+
+
+ <table name="RHQ_MEAS_DATA_NUM_R00">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R00_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R00_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R01">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R01_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R01_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R02">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R02_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R02_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R03">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R03_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R03_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R04">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R04_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R04_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R05">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R05_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R05_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R06">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R06_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R06_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R07">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R07_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R07_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R08">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R08_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R08_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R09">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R09_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R09_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R10">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R10_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R10_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R11">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R11_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R11_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R12">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R12_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R12_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R13">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R13_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R13_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R14">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R14_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R14_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+<!-- END: measurement-schema.xml -->
+<!-- BEGIN: content-schema.xml -->
+
+
+ <table name="RHQ_ARCHITECTURE">
+ <column name="ID" default="sequence-only" initial="100" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="50" type="VARCHAR2" required="true"/>
+ <index name="RHQ_ARCHITECTURE_NAME_IDX" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_REPO_GROUP_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ </table>
+
+
+ <table name="RHQ_REPO_GROUP">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+
+ <column name="REPO_GROUP_TYPE_ID" type="INTEGER" references="RHQ_REPO_GROUP_TYPE" required="true"/>
+
+ <index name="RHQ_REPO_GROUP_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="REPO_GROUP_TYPE_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_CONTENT_SOURCE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="false"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="PLUGIN_NAME" size="100" type="VARCHAR2" required="false"/>
+ <!-- we might want this as part of natural key -->
+ <column name="DEFAULT_LAZY_LOAD" type="BOOLEAN" required="true"/>
+ <column name="DEFAULT_DOWNLOAD_MODE" size="16" type="VARCHAR2" required="true"/>
+ <column name="DEFAULT_SYNC_SCHEDULE" size="64" type="VARCHAR2" required="false"/>
+ <column name="API_CLASS" size="100" type="VARCHAR2" required="true"/>
+
+ <column name="SOURCE_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF" required="false"/>
+
+ <index name="RHQ_CONTENT_SOURCE_TYPE_IDX" unique="true">
+ <field ref="NAME"/>
+ <!-- <field ref="PLUGIN_NAME"/> -->
+ </index>
+ </table>
+
+ <table name="RHQ_CONTENT_SOURCE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="LAZY_LOAD" type="BOOLEAN" required="true"/>
+ <column name="DOWNLOAD_MODE" size="16" type="VARCHAR2" required="true"/>
+ <column name="SYNC_SCHEDULE" size="64" type="VARCHAR2" required="false"/>
+ <column name="LOAD_ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="CREATION_TIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED_TIME" type="LONG" required="true"/>
+
+ <column name="CONTENT_SOURCE_TYPE_ID" type="INTEGER" references="RHQ_CONTENT_SOURCE_TYPE" required="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+
+ <index name="RHQ_CONTENT_SOURCE_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="CONTENT_SOURCE_TYPE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_REPO">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CREATION_TIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED_TIME" type="LONG" required="true"/>
+ <column name="IS_CANDIDATE" type="BOOLEAN" required="true"/>
+ <column name="SYNC_SCHEDULE" size="64" type="VARCHAR2" required="false"/>
+ <column name="OWNER_ID" type="INTEGER" required="false" references="RHQ_SUBJECT" />
+ <column name="IS_PRIVATE" type="BOOLEAN" required="true" />
+
+ <index name="RHQ_REPO_IDX" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_REPO_RELATION_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ </table>
+
+
+ <table name="RHQ_REPO_RELATION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="RELATED_REPO_ID" type="INTEGER" references="RHQ_REPO" required="true"/>
+ <column name="REPO_RELATION_TYPE_ID" type="INTEGER" references="RHQ_REPO_RELATION_TYPE" required="true"/>
+ </table>
+
+
+
+ <table name="RHQ_PACKAGE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="false"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CATEGORY" size="50" type="VARCHAR2" required="false"/>
+ <column name="DISCOVERY_INTERVAL" type="INTEGER" required="false"/>
+ <column name="IS_CREATION_DATA" type="BOOLEAN" required="true"/>
+ <column name="SUPPORTS_ARCHITECTURE" type="BOOLEAN" required="true"/>
+
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE" required="false"/>
+ <column name="DEPLOYMENT_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF" required="false"/>
+ <column name="PACKAGE_EXTRA_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG_DEF" required="false"/>
+
+ <index name="RHQ_PACKAGE_TYPE_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="RESOURCE_TYPE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_PACKAGE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="CLASSIFICATION" size="200" type="VARCHAR2" required="false"/>
+
+ <column name="PACKAGE_TYPE_ID" type="INTEGER" references="RHQ_PACKAGE_TYPE" required="true"/>
+
+ <index name="RHQ_PACKAGE_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="PACKAGE_TYPE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PACKAGE_BITS">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BITS" type="LARGEOBJECT" required="false"/>
+ </table>
+
+ <table name="RHQ_PACKAGE_VERSION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="false"/>
+ <column name="SHORT_DESCRIPTION" size="10000" type="CLOB" required="false"/>
+ <column name="LONG_DESCRIPTION" size="50000" type="CLOB" required="false"/>
+ <column name="VERSION" size="500" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_VERSION" size="500" type="VARCHAR2" required="false"/>
+ <column name="FILE_NAME" size="255" type="VARCHAR2" required="false"/>
+ <column name="FILE_SIZE" type="LONG" required="false"/>
+ <column name="FILE_MD5" size="32" type="VARCHAR2" required="false"/>
+ <column name="FILE_SHA256" size="64" type="VARCHAR2" required="false"/>
+ <column name="FILE_CREATION_TIME" type="LONG" required="false"/>
+ <column name="LICENSE_NAME" size="255" type="VARCHAR2" required="false"/>
+ <column name="LICENSE_VERSION" size="20" type="VARCHAR2" required="false"/>
+ <column name="METADATA" type="BLOB" required="false"/>
+
+ <column name="PACKAGE_ID" type="INTEGER" references="RHQ_PACKAGE" required="true"/>
+ <column name="ARCHITECTURE_ID" type="INTEGER" references="RHQ_ARCHITECTURE" required="true"/>
+ <column name="CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="PACKAGE_BITS_ID" type="INTEGER" references="RHQ_PACKAGE_BITS" required="false"/>
+
+ <index name="RHQ_PACKAGE_VERSION_IDX" unique="true">
+ <field ref="PACKAGE_ID"/>
+ <field ref="VERSION"/>
+ <field ref="ARCHITECTURE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_CONTENT_REQ">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="REQUEST_TYPE" type="VARCHAR2" required="true" size="20"/>
+ <column name="NOTES" type="VARCHAR2" required="false" size="512"/>
+ </table>
+
+ <table name="RHQ_INSTALLED_PACKAGE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="INSTALLATION_TIME" type="LONG" required="false"/>
+
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE" required="true"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" references="RHQ_PACKAGE_VERSION" required="true"/>
+ <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT" required="false"/>
+ </table>
+
+ <table name="RHQ_INSTALLED_PKG_HIST">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STATUS" type="VARCHAR2" size="24" required="true"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="HISTORY_TIMESTAMP" type="LONG" required="false"/>
+
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" references="RHQ_PACKAGE_VERSION" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE" required="true"/>
+ <column name="DEPLOYMENT_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="CONTENT_SERVICE_REQUEST_ID" type="INTEGER" references="RHQ_CONTENT_REQ" required="false"/>
+ </table>
+
+ <table name="RHQ_CONTENT_SRC_SYNC">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STATUS" type="VARCHAR2" size="16" required="true"/>
+ <column name="START_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="false"/>
+ <column name="RESULTS" type="LONGVARCHAR" required="false"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ </table>
+
+ <table name="RHQ_REPO_SYNC">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STATUS" type="VARCHAR2" size="16" required="true"/>
+ <column name="START_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="false"/>
+ <column name="RESULTS" type="LONGVARCHAR" required="false"/>
+ <column name="PERCENT_COMPLETE" type="LONG" required="false"/>
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ </table>
+
+
+ <table name="RHQ_PACKAGE_INST_STEP">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STEP_KEY" type="VARCHAR2" size="500" required="true"/>
+ <column name="STEP_ORDER" type="INTEGER" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="4000" required="true"/>
+ <column name="ERROR_MSG" type="LONGVARCHAR" required="false"/>
+ <column name="RESULT" type="VARCHAR2" size="25" required="true"/>
+
+ <column name="INSTALLED_PKG_HIST_ID" type="INTEGER" references="RHQ_INSTALLED_PKG_HIST"/>
+ </table>
+
+ <table name="RHQ_REPO_RESOURCE_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_RESOURCE_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="RESOURCE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_REPO_CONTENT_SRC_MAP"> 1
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_CONTENT_SRC_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="CONTENT_SRC_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_REPO_REPO_GROUP_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="REPO_GROUP_ID" type="INTEGER" required="true" references="RHQ_REPO_GROUP"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_REPO_GROUP_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="REPO_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_REPO_REPO_RELATION_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="REPO_RELATION_ID" type="INTEGER" required="true" references="RHQ_REPO_RELATION"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_REPO_RELATION_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="REPO_RELATION_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+ <table name="RHQ_REPO_PKG_VERSION_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_PKG_VER_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="PACKAGE_VERSION_ID"/>
+ </primaryKey>
+ </constraint>
+ <index name="RHQ_REPO_PKG_VER_MAP_IDX" unique="false">
+ <field ref="PACKAGE_VERSION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PKG_VER_CONTENT_SRC_MAP">
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ <column name="LOCATION" type="VARCHAR2" size="4000" required="true"/>
+
+ <constraint name="RHQ_PKG_VER_CONTENT_SRC_KEY">
+ <primaryKey>
+ <field ref="PACKAGE_VERSION_ID"/>
+ <field ref="CONTENT_SRC_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_PKG_PRD_MAP">
+ <column name="PKG_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="PRD_ID" type="INTEGER" required="true" references="RHQ_PRD_VER"/>
+
+ <constraint name="RHQ_PKG_PRD_KEY">
+ <primaryKey>
+ <field ref="PKG_ID"/>
+ <field ref="PRD_ID"/>
+ </primaryKey>
+ </constraint>
+
+ </table>
+
+ <table name="RHQ_DISTRIBUTION_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+
+ </table>
+
+ <table name="RHQ_DISTRIBUTION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DISTRIBUTION_TYPE_ID" type="INTEGER" required="true" references="RHQ_DISTRIBUTION_TYPE"/>
+ <column name="LABEL" size="64" type="VARCHAR2" required="true"/>
+ <column name="BASE_PATH" size="256" type="VARCHAR2" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_DISTRIBUTION_IDX" unique="true">
+ <field ref="LABEL"/>
+ <field ref="BASE_PATH"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_REPO_DISTRIBUTION">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="DISTRIBUTION_ID" type="INTEGER" required="true" references="RHQ_DISTRIBUTION"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_DIST_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="DISTRIBUTION_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+
+ <table name="RHQ_DISTRIBUTION_FILE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DISTRIBUTION_ID" type="INTEGER" required="true" references="RHQ_DISTRIBUTION"/>
+ <column name="RELATIVE_FILENAME" size="256" type="VARCHAR2" required="true"/>
+ <!--<column name="FILE_SIZE" type="NUMBER" required="true"/>-->
+ <column name="MD5SUM" size="64" type="VARCHAR2" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+ <!--<column name="CTIME" type="LONG" required="true"/>-->
+
+ <index name="RHQ_DISTRIBUTION_FILE_IDX" unique="true">
+ <field ref="DISTRIBUTION_ID"/>
+ <field ref="RELATIVE_FILENAME"/>
+ </index>
+ </table>
+
+
+
+
+ <table name="RHQ_ADVISORY">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY" size="64" type="VARCHAR2" required="true"/>
+ <column name="ADVISORY_TYPE" size="64" type="VARCHAR2" required="true" />
+ <column name="ADVISORY_REL" size="64" type="VARCHAR2" required="false"/>
+ <column name="ADVISORY_NAME" size="64" type="VARCHAR2" required="false"/>
+ <column name="DESCRIPTION" size="4000" type="VARCHAR2" required="false"/>
+ <column name="SYNOPSIS" size="4000" type="VARCHAR2" required="true"/>
+ <column name="TOPIC" size="4000" type="VARCHAR2" required="false"/>
+ <column name="SOLUTION" size="4000" type="VARCHAR2" required="false"/>
+ <column name="SEVERITY" size="64" type="VARCHAR2" required="false"/>
+ <column name="ISSUE_DATE" type="LONG" required="false"/>
+ <column name="UPDATE_DATE" type="LONG" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_NAME_UQ" unique="true">
+ <field ref="ADVISORY_NAME"/>
+ </index>
+
+ <index name="RHQ_ADVISORY_UQ" unique="true">
+ <field ref="ADVISORY"/>
+ </index>
+
+ <index name="RHQ_ADVISORY_UDATE_IDX" unique="false">
+ <field ref="UPDATE_DATE"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ADVISORY_PACKAGE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_PKG_IDX" unique="true">
+ <field ref="ADVISORY_ID"/>
+ <field ref="PACKAGE_VERSION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_CVE">
+ <column name="ID" default="sequence-only" initial="101" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="64" type="VARCHAR2" required="true"/>
+ </table>
+
+ <table name="RHQ_ADVISORY_CVE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="CVE_ID" type="INTEGER" required="true" references="RHQ_CVE"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_CVE_IDX" unique="true">
+ <field ref="ADVISORY_ID"/>
+ <field ref="CVE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_ADVISORY_BUGLIST">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="BUG_ID" size="256" type="VARCHAR2" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_BUG_IDX" unique="true">
+ <field ref="ADVISORY_ID"/>
+ <field ref="BUG_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_REPO_ADVISORY">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_ADV_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="ADVISORY_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- BUNDLE_TYPE is things like "Cobbler profile" or "file-based bundle" or "puppet recipe" -->
+ <table name="RHQ_BUNDLE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_TYPE_UNIQUE" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- BUNDLE is a named piece of content that can be versioned and installed somewhere -->
+ <table name="RHQ_BUNDLE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="BUNDLE_TYPE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_TYPE"/>
+ <column name="PACKAGE_TYPE_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_TYPE"/>
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_UNIQUE" unique="true">
+ <field ref="BUNDLE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- BUNDLE_VERSION represents an actual piece of content that needs to be installed somewhere -->
+ <table name="RHQ_BUNDLE_VERSION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="VERSION" size="500" type="VARCHAR2" required="true"/>
+ <column name="VERSION_ORDER" type="INTEGER" required="true"/>
+ <column name="ACTION" type="CLOB" required="true"/>
+ <column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF" />
+ <column name="BUNDLE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_VERSION_UNIQUE" unique="true">
+ <field ref="BUNDLE_ID"/>
+ <field ref="NAME"/>
+ <field ref="VERSION"/>
+ </index>
+ </table>
+
+ <!-- Many-to-many table that links many repos to a particular bundle version. destination platforms -->
+ <!-- would be required to have associations to the specified repos (to access required content -->
+ <table name="RHQ_BUNDLE_VERSION_REPO">
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+
+ <constraint name="RHQ_BUNDLE_VERSION_REPO_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_VERSION_ID"/>
+ <field ref="REPO_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- BUNDLE_FILE represents a file that is associated with (possibly bundled inside) a bundle version -->
+ <table name="RHQ_BUNDLE_FILE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ </table>
+
+ <!-- A logical destination for a bundle deployment. Defines the platforms and directory on those targets. -->
+ <table name="RHQ_BUNDLE_DESTINATION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="BUNDLE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE"/>
+ <column name="GROUP_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_GROUP"/>
+ <column name="DEPLOY_DIR" size="256" type="VARCHAR2" required="true"/>
+ <column name="DEST_BASE_DIR_NAME" size="200" type="VARCHAR2" required="true"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_DESTINATION_UNIQUE" unique="true">
+ <field ref="BUNDLE_ID"/>
+ <field ref="GROUP_ID"/>
+ <field ref="DEPLOY_DIR"/>
+ </index>
+ </table>
+
+ <!-- An actual deployment of a bundle version to a destination, with a specific config. Bundle deployments
+ can differ only on ctime, which is assumed to be different -->
+ <table name="RHQ_BUNDLE_DEPLOYMENT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="BUNDLE_DESTINATION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DESTINATION"/>
+ <column name="CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG" />
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="false" size="255"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="IS_LIVE" type="BOOLEAN" required="true"/>
+ <column name="REPLACED_BUNDLE_DEPLOYMENT_ID" type="INTEGER" required="false" references="RHQ_BUNDLE_DEPLOYMENT"/>
+ </table>
+
+ <!-- Represents a bundle version that is deployed on a platform resource -->
+ <table name="RHQ_BUNDLE_RES_DEPLOY">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BUNDLE_DEPLOYMENT_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DEPLOYMENT" />
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE" />
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <index name="RHQ_BUNDLE_RES_DEPLOY_IDX" unique="true">
+ <field ref="BUNDLE_DEPLOYMENT_ID"/>
+ <field ref="RESOURCE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_BUNDLE_RES_DEP_HIST">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BUNDLE_RES_DEPLOY_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_RES_DEPLOY" />
+ <column name="SUBJECT_NAME" required="false" size="255" type="VARCHAR2"/>
+ <column name="AUDIT_TIME" required="true" type="LONG"/>
+ <column name="ACTION" required="true" size="128" type="VARCHAR2"/>
+ <column name="INFO" required="true" size="512" type="VARCHAR2"/>
+ <column name="CATEGORY" required="false" size="32" type="VARCHAR2"/>
+ <column name="STATUS" required="true" type="VARCHAR2" size="16"/>
+ <column name="MESSAGE" required="false" type="LONGVARCHAR"/>
+ <column name="ATTACHMENT" required="false" type="LONGVARCHAR"/>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_MAP">
+ <column name="BUNDLE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_VERSION_MAP">
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_VER_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_VERSION_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_DEPLOY_MAP">
+ <column name="BUNDLE_DEPLOYMENT_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DEPLOYMENT"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_DEP_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_DEPLOYMENT_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_DEST_MAP">
+ <column name="BUNDLE_DESTINATION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DESTINATION"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_DES_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_DESTINATION_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- Drift Management Tables -->
+ <table name="RHQ_DRIFT_DEF_TEMPLATE">
+ <column name="ID" default="sequence-only" initial="1001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="NAME" type="VARCHAR2" size="128" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="512" required="false"/>
+ <!-- true if defined by user, false if provided by plugin -->
+ <column name="IS_USER_DEFINED" type="BOOLEAN" required="true"/>
+ <!--
+ Change sets are managed by the drift server plugins; therefore, we cannot maintain
+ a FK constraint on the change set id. And the type cannot be integer because
+ other back ends like MongoDB use other types that are basically variants of a
+ UUID
+
+ jsanda
+ -->
+ <column name="DRIFT_CHANGE_SET_ID" type="VARCHAR2" size="64" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <index name="RHQ_DRIFT_DEF_TEMPLATE_UNIQUE" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- Content of a file being managed for drift. Used for diff and/or remediation -->
+ <table name="RHQ_DRIFT_FILE">
+ <column name="HASH_ID" type="VARCHAR2" size="64" primarykey="true" required="true"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="DATA" type="LARGEOBJECT" required="false"/>
+ <column name="DATA_SIZE" type="LONG" required="false"/>
+ <column name="STATUS" type="VARCHAR2" size="20" required="true"/>
+ </table>
+
+ <!-- A single drift definition defining file tracking
+ Note: A resource or group (todo: group, other?) can have zero or more drift configurations.
+ Note: The name, interval and is_enabled values are also stored withing the referenced config.
+ This allows us to use the config editor to manipulate all fields.
+ Note: Name is read-only
+ Note: Interval unit is millis
+ -->
+ <table name="RHQ_DRIFT_DEFINITION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="DRIFT_DEF_TEMPLATE_ID" type="INTEGER" required="false" references="RHQ_DRIFT_DEF_TEMPLATE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="NAME" type="VARCHAR2" size="512" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="512" required="false"/>
+ <column name="INTERVAL" type="LONG" required="true"/>
+ <column name="IS_ENABLED" type="BOOLEAN" required="true"/>
+ <column name="DRIFT_HANDLING_MODE" type="VARCHAR2" size="20" required="true"/>
+ <column name="IS_PINNED" type="BOOLEAN" required="true"/>
+ <column name="IS_ATTACHED" type="BOOLEAN" required="true"/>
+ <column name="COMPLIANCE_STATUS" type="INTEGER" required="true"/>
+ </table>
+
+ <!-- A set of drift records (note, this is for the JPA server plugin impl only) -->
+ <table name="RHQ_DRIFT_SET">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ </table>
+
+ <!-- A drift change-set report for a resource (note, this is for the JPA server plugin impl only) -->
+ <table name="RHQ_DRIFT_CHANGE_SET">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DRIFT_SET_ID" type="INTEGER" required="false" references="RHQ_DRIFT_SET"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <!-- Version 0 is initial change-set -->
+ <column name="VERSION" type="INTEGER" required="true"/>
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="DRIFT_DEFINITION_ID" type="INTEGER" required="false" references="RHQ_DRIFT_DEFINITION"/>
+ <!-- the drift handling mode at changeset creation time -->
+ <column name="DRIFT_HANDLING_MODE" type="VARCHAR2" size="20" required="true"/>
+ </table>
+
+ <!-- A single occurence of drift for a resource (note, this is for the JPA server plugin impl only) -->
+ <table name="RHQ_DRIFT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <column name="DRIFT_SET_ID" type="INTEGER" required="false" references="RHQ_DRIFT_SET"/>
+ <column name="DRIFT_CHANGE_SET_ID" type="INTEGER" required="true" references="RHQ_DRIFT_CHANGE_SET"/>
+ <!-- the file path not including the base directory -->
+ <column name="PATH" type="VARCHAR2" size="1024" required="true"/>
+ <!-- the same as PATH less [/]filename.ext. Redundant storage for the purpose of strict directory search.
+ this field can be considered transient for serialization purposes -->
+ <column name="PATH_DIRECTORY" type="VARCHAR2" size="1024" required="true"/>
+ <column name="OLD_DRIFT_FILE" type="VARCHAR2" size="64" required="false" references="RHQ_DRIFT_FILE"/>
+ <column name="NEW_DRIFT_FILE" type="VARCHAR2" size="64" required="false" references="RHQ_DRIFT_FILE"/>
+ </table>
+
+
+<!-- END: content-schema.xml -->
+<!-- BEGIN: resource-request-schema.xml -->
+
+
+ <table name="RHQ_CREATE_RES_HIST">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="PARENT_RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="CREATED_RESOURCE_NAME" type="VARCHAR2" size="500" required="false"/>
+ <column name="NEW_RESOURCE_KEY" type="VARCHAR2" required="false" size="500"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="INSTALLED_PACKAGE_ID" type="INTEGER" required="false" references="RHQ_INSTALLED_PACKAGE"/>
+ </table>
+
+ <table name="RHQ_DELETE_RES_HIST">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ </table>
+
+<!-- END: resource-request-schema.xml -->
+<!-- BEGIN: jms-schema.xml -->
+
+<!-- the schema matches that which would be automatically created by the JMS subsystem -->
+<!-- see deploy/jms/rhq-jdbc-state-service.xml and rhq-jdbc2-service.xml -->
+
+
+ <table name="JMS_MESSAGES">
+ <column name="MESSAGEID" required="true" type="INTEGER" />
+ <column name="DESTINATION" required="true" type="VARCHAR2" size="255" />
+ <column name="TXID" required="false" type="INTEGER" />
+ <column name="TXOP" required="false" type="CHAR" size="1" />
+ <column name="MESSAGEBLOB" required="false" type="BLOB" />
+
+ <constraint name="JMS_MESSAGES_PKEY">
+ <primaryKey>
+ <field ref="MESSAGEID"/>
+ <field ref="DESTINATION"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="JMS_MESSAGES_TXOP_TXID">
+ <field ref="TXOP"/>
+ <field ref="TXID"/>
+ </index>
+ <index name="JMS_MESSAGES_DESTINATION">
+ <field ref="DESTINATION"/>
+ </index>
+ </table>
+
+ <table name="JMS_TRANSACTIONS">
+ <column name="TXID" required="true" type="INTEGER" primarykey="true" />
+ </table>
+
+ <table name="JMS_USERS">
+ <column name="USERID" required="true" type="VARCHAR2" size="32" primarykey="true" />
+ <column name="PASSWD" required="true" type="VARCHAR2" size="32" />
+ <column name="CLIENTID" required="false" type="VARCHAR2" size="128" />
+ </table>
+
+ <table name="JMS_ROLES">
+ <column name="ROLEID" required="true" type="VARCHAR2" size="32" />
+ <column name="USERID" required="true" type="VARCHAR2" size="32" />
+
+ <constraint name="JMS_ROLES_PKEY">
+ <primaryKey>
+ <field ref="USERID"/>
+ <field ref="ROLEID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="JMS_SUBSCRIPTIONS">
+ <column name="CLIENTID" required="true" type="VARCHAR2" size="128" />
+ <column name="SUBNAME" required="true" type="VARCHAR2" size="128" />
+ <column name="TOPIC" required="true" type="VARCHAR2" size="255" />
+ <column name="SELECTOR" required="false" type="VARCHAR2" size="255" />
+
+ <constraint name="JMS_SUBSCRIPTIONS_PKEY">
+ <primaryKey>
+ <field ref="CLIENTID"/>
+ <field ref="SUBNAME"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+<!-- END: jms-schema.xml -->
+<!-- BEGIN: obsolete-schema.xml -->
+
+
+ <!-- NOTE: The tables will be dropped in the *** REVERSE ORDER *** as listed in this file! -->
+ <!-- NOTE: So, put the table you want dropped first at the bottom, and so on... -->
+
+
+ <!-- !!! REMOVED FROM CONTENT-SCHEMA !!!! -->
+
+ <table name="RHQ_DRIFT_TEMPLATE_MAP">
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="CONFIG_TEMPLATE_ID" type="INTEGER" required="true" references="RHQ_CONFIG_TEMPLATE"/>
+ </table>
+
+ <table name="RHQ_BUNDLE_CONFIG" obsolete="true">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG" />
+ <!-- this probably needs a DTYPE discriminator so we know if its a bundle or a specific bundle version -->
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="false" references="RHQ_BUNDLE_VERSION"/>
+ <column name="BUNDLE_ID" type="INTEGER" required="false" references="RHQ_BUNDLE"/>
+ </table>
+
+ <table name="RHQ_CHANNEL" obsolete="true">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CREATION_TIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED_TIME" type="LONG" required="true"/>
+
+ <index name="RHQ_CHANNEL_IDX" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_CHANNEL_RESOURCE_MAP" obsolete="true">
+ <column name="CHANNEL_ID" type="INTEGER" required="true" references="RHQ_CHANNEL"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_CHANNEL_RESOURCE_MAP_KEY">
+ <primaryKey>
+ <field ref="CHANNEL_ID"/>
+ <field ref="RESOURCE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_CHANNEL_CONTENT_SRC_MAP" obsolete="true">
+ <column name="CHANNEL_ID" type="INTEGER" required="true" references="RHQ_CHANNEL"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_CHAN_CONTENT_SRC_MAP_KEY">
+ <primaryKey>
+ <field ref="CHANNEL_ID"/>
+ <field ref="CONTENT_SRC_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_CHANNEL_PKG_VERSION_MAP" obsolete="true">
+ <column name="CHANNEL_ID" type="INTEGER" required="true" references="RHQ_CHANNEL"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_CHANNEL_PKG_VER_MAP_KEY">
+ <primaryKey>
+ <field ref="CHANNEL_ID"/>
+ <field ref="PACKAGE_VERSION_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- !!! REMOVED FROM MEASUREMENT-SCHEMA !!!! -->
+
+ <table name="RHQ_MEASUREMENT_OOB" obsolete="true">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="SCHEDULE_ID" type="INTEGER" references="RHQ_MEASUREMENT_SCHED(ID)" required="true"/>
+ <column name="OCCURRED" type="LONG" required="true"/>
+ <column name="DIFF" type="DOUBLE" required="true"/>
+
+ <index name="RHQ_MEASUREMENT_OOB_IDX" unique="true">
+ <field ref="SCHEDULE_ID" />
+ <field ref="OCCURRED" />
+ </index>
+ </table>
+
+
+ <table name="RHQ_TAG" obsolete="true">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ </table>
+
+ <table name="RHQ_REPO_TAG_MAP" obsolete="true">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAG"/>
+
+ <constraint name="RHQ_REPO_TAG_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+<!-- END: obsolete-schema.xml -->
+</dbsetup>
commit 40218867d9e9cee5202462c1ac87ca3962fcf590
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Feb 21 14:36:37 2012 -0500
remove erroneous import
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
index 9a41142..f0a4ac8 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
@@ -131,7 +131,6 @@ import org.rhq.enterprise.server.system.ServerVersion;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
import org.rhq.enterprise.server.util.QuartzUtil;
-import sun.management.resources.agent;
/**
* The manager responsible for working with Resource and plugin configurations.
12 years, 3 months
[rhq] modules/core
by ips
modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java | 2 ++
1 file changed, 2 insertions(+)
New commits:
commit d2fc9d3481eaaae707b5556ec3c86571f2d5ba40
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Wed Feb 22 13:17:59 2012 -0500
fix recent regression where this.childResources wasn't getting initialized when certain constructors were used
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
index 2dd01e2..d0f49cd 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
@@ -1120,6 +1120,7 @@ public class Resource implements Comparable<Resource>, Serializable {
* @param id the Resource's id
*/
public Resource(int id) {
+ this();
this.id = id;
}
@@ -1127,6 +1128,7 @@ public class Resource implements Comparable<Resource>, Serializable {
@NotNull String resourceKey, //
String name, //
@NotNull ResourceType type) {
+ this();
this.resourceKey = resourceKey;
this.name = name;
this.resourceType = type;
12 years, 3 months
[rhq] modules/enterprise
by John Sanda
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
New commits:
commit f72e85045d942cda36f85a0594267b45c0c1f929
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Feb 22 12:24:57 2012 -0500
[BZ 796315] Adjust layout so search bar appears above list grid
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
index 222b5b2..f72d12e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
@@ -339,6 +339,10 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
contents.removeChild(child);
}
+ if (filterForm.hasContent()) {
+ contents.addMember(filterForm);
+ }
+
// add the listGrid defined in onInit
contents.addMember(listGrid);
@@ -353,10 +357,6 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
contents.addMember(titleLayout, 0);
}
- if (filterForm.hasContent()) {
- contents.addMember(filterForm);
- }
-
// Footer
// A second toolstrip that optionally appears before the main footer - it will contain extra widgets.
12 years, 3 months
[rhq] Branch 'bug/747925' - 7 commits - modules/core modules/enterprise
by mazz
modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/metadata/PluginMetadataManager.java | 68
modules/core/client-api/src/test/java/org/rhq/core/clientapi/agent/metadata/test/ExtensionModelTest.java | 28
modules/core/client-api/src/test/resources/test-extension.xml | 21
modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java | 2
modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java | 7
modules/core/dbutils/src/main/java/org/rhq/core/db/ExtendedSQLException.java | 43
modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java | 6
modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java | 4
modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java | 8
modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java | 1
modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java | 2
modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java | 12
modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java | 12
modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java | 21
modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java | 12
modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java | 16
modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java | 9
modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java | 8
modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java | 31
modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java | 76
modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-data-combined-3.0.0.xml | 690 ++
modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-schema-combined-3.0.0.xml | 2649 ++++++++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java | 1
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerBean.java | 29
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerLocal.java | 4
25 files changed, 3649 insertions(+), 111 deletions(-)
New commits:
commit b1401a0d177209d46ea81ded9d5bce3f6f64d001
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Feb 22 12:02:49 2012 -0500
[BZ 747925] change plugin metadata manager to return map of extension plugins (with tests) and have plugin manager use that information to update those extended plugin types. preliminary unit testing seems to show this works.
diff --git a/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/metadata/PluginMetadataManager.java b/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/metadata/PluginMetadataManager.java
index 0c5e0b6..e35be2d 100644
--- a/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/metadata/PluginMetadataManager.java
+++ b/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/metadata/PluginMetadataManager.java
@@ -25,6 +25,7 @@ package org.rhq.core.clientapi.agent.metadata;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -34,6 +35,8 @@ import org.jetbrains.annotations.Nullable;
import org.rhq.core.clientapi.descriptor.AgentPluginDescriptorUtil;
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
+import org.rhq.core.clientapi.descriptor.plugin.ServerDescriptor;
+import org.rhq.core.clientapi.descriptor.plugin.ServiceDescriptor;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
@@ -55,7 +58,7 @@ public class PluginMetadataManager {
private Object typesLock = new Object();
private Map<String, PluginMetadataParser> parsersByPlugin = new HashMap<String, PluginMetadataParser>();
-
+
public PluginMetadataManager() {
}
@@ -225,4 +228,67 @@ public class PluginMetadataManager {
return dependencyGraph;
}
+ /**
+ * Returns a map of plugins and their descriptors where those plugins are child extensions of the given
+ * parent plugin. The child extensions are those that used the "embedded" plugin extension model (that is,
+ * those whose types used sourcePlugin attribute in their type metedata).
+ *
+ * @param parentPlugin the parent plugin
+ * @return a map of child plugin info where the children are those that extended the given parent plugin.
+ * If the given parent plugin was not extended by any other plugin, the map will be empty.
+ */
+ public Map<String, PluginDescriptor> getEmbeddedExtensions(String parentPlugin) {
+ Map<String, PluginDescriptor> map = new HashMap<String, PluginDescriptor>();
+ for (Map.Entry<String, PluginMetadataParser> entry : parsersByPlugin.entrySet()) {
+ String pluginName = entry.getKey();
+ PluginMetadataParser parser = entry.getValue();
+ PluginDescriptor descriptor = parser.getDescriptor();
+
+ // let's see if any servers extend the parent plugin...
+ if (doServersExtendParent(descriptor.getServers(), parentPlugin)) {
+ map.put(pluginName, descriptor);
+ continue; // no need to keep checking this plugin, go on to the next
+ }
+
+ // if no servers extended the parent plugin, let's check to see if any services do...
+ if (!map.containsKey(pluginName)) {
+ if (doServicesExtendParent(descriptor.getServices(), parentPlugin)) {
+ map.put(pluginName, descriptor);
+ continue; // no need to keep checking this plugin, go on to the next
+ }
+ }
+ }
+ return map;
+ }
+
+ private boolean doServersExtendParent(List<ServerDescriptor> servers, String parentPlugin) {
+ if (servers != null && !servers.isEmpty()) {
+ for (ServerDescriptor serverDescriptor : servers) {
+ if (doServersExtendParent(serverDescriptor.getServers(), parentPlugin)) {
+ return true;
+ }
+ if (doServicesExtendParent(serverDescriptor.getServices(), parentPlugin)) {
+ return true;
+ }
+ if (parentPlugin.equals(serverDescriptor.getSourcePlugin())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean doServicesExtendParent(List<ServiceDescriptor> services, String parentPlugin) {
+ if (services != null && !services.isEmpty()) {
+ for (ServiceDescriptor serviceDescriptor : services) {
+ if (doServicesExtendParent(serviceDescriptor.getServices(), parentPlugin)) {
+ return true;
+ }
+ if (parentPlugin.equals(serviceDescriptor.getSourcePlugin())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
}
\ No newline at end of file
diff --git a/modules/core/client-api/src/test/java/org/rhq/core/clientapi/agent/metadata/test/ExtensionModelTest.java b/modules/core/client-api/src/test/java/org/rhq/core/clientapi/agent/metadata/test/ExtensionModelTest.java
index 01a79e7..20e1aa9 100644
--- a/modules/core/client-api/src/test/java/org/rhq/core/clientapi/agent/metadata/test/ExtensionModelTest.java
+++ b/modules/core/client-api/src/test/java/org/rhq/core/clientapi/agent/metadata/test/ExtensionModelTest.java
@@ -25,17 +25,12 @@ package org.rhq.core.clientapi.agent.metadata.test;
import java.net.URL;
import java.util.Set;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.util.ValidationEventCollector;
-
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.rhq.core.clientapi.agent.metadata.PluginDependencyGraph;
import org.rhq.core.clientapi.agent.metadata.PluginMetadataManager;
import org.rhq.core.clientapi.descriptor.AgentPluginDescriptorUtil;
-import org.rhq.core.clientapi.descriptor.DescriptorPackages;
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
@@ -59,6 +54,7 @@ public class ExtensionModelTest {
private static final String DESCRIPTOR_JBOSSAS = "test-jbossas.xml";
private static final String DESCRIPTOR_HIBERNATE = "test-hibernate.xml";
private static final String DESCRIPTOR_CUSTOMJMX = "test-custom-jmx.xml"; // what the custom-jmx plugin wants to look like
+ private static final String DESCRIPTOR_CUSTOM_EXT = "test-extension.xml";
private PluginMetadataManager metadataManager;
@@ -80,6 +76,7 @@ public class ExtensionModelTest {
assertJmxTypes();
PluginDescriptor descriptor_tomcat = loadPluginDescriptor(DESCRIPTOR_TOMCAT);
+ assert this.metadataManager.getEmbeddedExtensions(descriptor_tomcat.getName()).isEmpty(); // jbossas not yet registered
assertTomcatTypes();
PluginDescriptor descriptor_jbossas = loadPluginDescriptor(DESCRIPTOR_JBOSSAS);
@@ -100,6 +97,24 @@ public class ExtensionModelTest {
AgentPluginDescriptorUtil.addPluginToDependencyGraph(graph, descriptor_hibernate);
AgentPluginDescriptorUtil.addPluginToDependencyGraph(graph, descriptor_customjmx);
assert graph.isComplete(null);
+
+ // these are not extended via embedded extension model
+ assert this.metadataManager.getEmbeddedExtensions(descriptor_jmx.getName()).isEmpty();
+ assert this.metadataManager.getEmbeddedExtensions(descriptor_jbossas.getName()).isEmpty();
+ assert this.metadataManager.getEmbeddedExtensions(descriptor_hibernate.getName()).isEmpty();
+ assert this.metadataManager.getEmbeddedExtensions(descriptor_customjmx.getName()).isEmpty();
+ // tomcat plugin is extended by the jbossas plugin via the embedded extension model
+ assert this.metadataManager.getEmbeddedExtensions(descriptor_tomcat.getName()).size() == 1;
+ assert this.metadataManager.getEmbeddedExtensions(descriptor_tomcat.getName()).containsKey(
+ descriptor_jbossas.getName());
+
+ // deploy another plugin that extends the tomcat plugin so we can see multiple extensions returned
+ PluginDescriptor descriptor_customext = loadPluginDescriptor(DESCRIPTOR_CUSTOM_EXT);
+ assert this.metadataManager.getEmbeddedExtensions(descriptor_tomcat.getName()).size() == 2;
+ assert this.metadataManager.getEmbeddedExtensions(descriptor_tomcat.getName()).containsKey(
+ descriptor_jbossas.getName());
+ assert this.metadataManager.getEmbeddedExtensions(descriptor_tomcat.getName()).containsKey(
+ descriptor_customext.getName());
}
@Test(dependsOnMethods = "loadPluginDescriptors")
@@ -316,7 +331,8 @@ public class ExtensionModelTest {
URL descriptorUrl = this.getClass().getClassLoader().getResource(file);
System.out.println("Loading plugin descriptor at: " + descriptorUrl);
- pluginDescriptor = (PluginDescriptor) AgentPluginDescriptorUtil.parsePluginDescriptor(descriptorUrl.openStream());
+ pluginDescriptor = (PluginDescriptor) AgentPluginDescriptorUtil.parsePluginDescriptor(descriptorUrl
+ .openStream());
this.metadataManager.loadPlugin(pluginDescriptor);
diff --git a/modules/core/client-api/src/test/resources/test-extension.xml b/modules/core/client-api/src/test/resources/test-extension.xml
new file mode 100644
index 0000000..33390f7
--- /dev/null
+++ b/modules/core/client-api/src/test/resources/test-extension.xml
@@ -0,0 +1,21 @@
+<plugin name="CustomExtension"
+ displayName="CustomExtension"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <depends plugin="Tomcat" />
+
+ <server name="CustomServer"
+ discovery="CustomDiscoveryComponent"
+ class="CustomServerComponent">
+
+ <server name="CustomEmbeddedTomcatServer"
+ sourcePlugin="Tomcat"
+ sourceType="TomcatServer"
+ discovery="CustomTomcatDiscoveryComponent"
+ class="CustomTomcatServerComponent">
+ </server>
+
+ </server>
+</plugin>
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerBean.java
index 4f3a4ed..c7202ba 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerBean.java
@@ -10,6 +10,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import javax.ejb.EJB;
@@ -347,12 +348,27 @@ public class PluginManagerBean implements PluginManagerLocal {
log.debug("Registering " + plugin);
long startTime = System.currentTimeMillis();
- // boolean typesUpdated = pluginMgr.registerPluginTypes(subject, plugin, pluginDescriptor,
- // pluginFile, forceUpdate);
boolean newOrUpdated = pluginMgr.installPluginJar(subject, plugin, pluginDescriptor, pluginFile);
- boolean typesUpdated = pluginMgr.registerPluginTypes(plugin, pluginDescriptor, newOrUpdated, forceUpdate);
+ boolean typesUpdated = pluginMgr.registerPluginTypes(plugin.getName(), pluginDescriptor, newOrUpdated,
+ forceUpdate);
if (typesUpdated) {
+ // There may be other types in other plugins that extended from this plugin (the "embedded" extension mechanism).
+ // In this case, we have to re-deploy those plugins so those types get recreated with the new metadata.
+ // We do the same thing with the extended plugins that we will do with our passed-in "parent" plugin, that is,
+ // we register the extended plugins' types (we'll force it to update types since we know something changed in the parent)
+ // and then we'll remove any obsoleted types from the extended plugins.
+ Map<String, PluginDescriptor> extensions = PLUGIN_METADATA_MANAGER.getEmbeddedExtensions(plugin.getName());
+ if (extensions != null && extensions.size() > 0) {
+ for (Map.Entry<String, PluginDescriptor> entry : extensions.entrySet()) {
+ String extPluginName = entry.getKey();
+ PluginDescriptor extPluginDescriptor = entry.getValue();
+ pluginMgr.registerPluginTypes(extPluginName, extPluginDescriptor, false, true);
+ resourceMetadataManager.removeObsoleteTypes(subject, extPluginName, PLUGIN_METADATA_MANAGER);
+ }
+ }
+
+ // now remove any obsolete types from the newly registered plugin
resourceMetadataManager.removeObsoleteTypes(subject, plugin.getName(), PLUGIN_METADATA_MANAGER);
}
@@ -398,14 +414,15 @@ public class PluginManagerBean implements PluginManagerLocal {
return newOrUpdated;
}
- public boolean registerPluginTypes(Plugin newPlugin, PluginDescriptor pluginDescriptor, boolean newOrUpdated,
+ @Override
+ public boolean registerPluginTypes(String newPluginName, PluginDescriptor pluginDescriptor, boolean newOrUpdated,
boolean forceUpdate) throws Exception {
boolean typesUpdated = false;
- if (newOrUpdated || forceUpdate || !PLUGIN_METADATA_MANAGER.getPluginNames().contains(newPlugin.getName())) {
+ if (newOrUpdated || forceUpdate || !PLUGIN_METADATA_MANAGER.getPluginNames().contains(newPluginName)) {
Set<ResourceType> rootResourceTypes = PLUGIN_METADATA_MANAGER.loadPlugin(pluginDescriptor);
if (rootResourceTypes == null) {
- throw new Exception("Failed to load plugin [" + newPlugin.getName() + "].");
+ throw new Exception("Failed to load plugin [" + newPluginName + "].");
}
if (newOrUpdated || forceUpdate) {
// Only merge the plugin's ResourceTypes into the DB if the plugin is new or updated or we were forced to
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerLocal.java
index d30caa2..3ee593e 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerLocal.java
@@ -128,9 +128,7 @@ public interface PluginManagerLocal {
throws Exception;
/** Exists only to for transactional boundary reasons. Not for general consumption. */
- // boolean registerPluginTypes(Subject subject, Plugin plugin, PluginDescriptor pluginDescriptor, File pluginFile,
- // boolean forceUpdate) throws Exception;
- boolean registerPluginTypes(Plugin newPlugin, PluginDescriptor pluginDescriptor, boolean newOrUpdated,
+ boolean registerPluginTypes(String newPluginName, PluginDescriptor pluginDescriptor, boolean newOrUpdated,
boolean forceUpdate) throws Exception;
/** Exists only for transactional boundary reasons. Not for general consumption. */
commit d30c5ba49ebae7df01ebb0d65849af2e54c195ea
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 17:55:20 2012 -0500
add a new Resource constructor that allows setting the childResources field (useful if caller wants to use a Set impl other than HashSet)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
index e920c51..2dd01e2 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
@@ -971,12 +971,12 @@ public class Resource implements Comparable<Resource>, Serializable {
@Summary(index = 4)
private ResourceType resourceType;
- // do not cascade remove - would take forever to delete a full platform hierarchy
- // we will manually delete the children ourselves
+ // do not cascade remove; it would take forever to delete a full platform hierarchy,
+ // so we will manually delete the children ourselves
@OneToMany(mappedBy = "parentResource", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST })
@OrderBy
// primary key
- private Set<Resource> childResources = new HashSet<Resource>();
+ private Set<Resource> childResources;
// LAZY fetch otherwise this will recursively call all parents until null is found
@JoinColumn(name = "PARENT_RESOURCE_ID", nullable = true)
@@ -1101,9 +1101,19 @@ public class Resource implements Comparable<Resource>, Serializable {
private Set<DriftDefinition> driftDefinitions = null;
public Resource() {
+ this(new HashSet<Resource>());
}
/**
+ * Constructor that allows the caller to choose what Set impl is used for the {@link #childResources} field.
+ *
+ * @param childResources the Set that will be used to hold this Resource's child Resources
+ */
+ public Resource(Set<Resource> childResources) {
+ setChildResources(childResources);
+ }
+
+ /**
* Primarily for deserialization and cases where the resource object is just a reference to the real one in the db.
* (Key is this avoids the irrelevant UUID generation that has contention problems.
*
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
index fad45b9..6f2d55e 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
@@ -840,7 +840,10 @@ public class InventoryManager extends AgentService implements ContainerService,
}
static Resource createNewResource(DiscoveredResourceDetails details) {
- Resource resource = new Resource();
+ // Use a ConcurrentHashMap-based Set for childResources to allow the field to be concurrently accessed safely
+ // (i.e. to avoid ConcurrentModificationExceptions).
+ Set<Resource> childResources = Collections.newSetFromMap(new ConcurrentHashMap<Resource, Boolean>());
+ Resource resource = new Resource(childResources);
resource.setUuid(UUID.randomUUID().toString());
resource.setResourceKey(details.getResourceKey());
@@ -854,10 +857,6 @@ public class InventoryManager extends AgentService implements ContainerService,
.getPluginConfigurationDefinition());
resource.setPluginConfiguration(pluginConfiguration);
- // Use a ConcurrentHashMap-based Set for childResources to allow the field to be concurrently accessed safely
- // (i.e. to avoid ConcurrentModificationExceptions).
- resource.setChildResources(Collections.newSetFromMap(new ConcurrentHashMap<Resource, Boolean>()));
-
return resource;
}
commit bd40407f1500ad113f75b6aa39af5e02079c893c
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:48:36 2012 -0500
when an SQLException occurs in DBSetup.doSQL(), catch it, wrap it in an ExtendedSQLException that includes the SQL
which failed, and then rethrow it; add support to DbUtil.getSQLExceptionString() for including the SQL in the returned
string if passed an ExtendedSQLException; various minor improvements throughout dbutils
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java
index eb2f6a7..aea077d 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java
@@ -237,7 +237,7 @@ public abstract class DatabaseType {
*
* @return <code>true</code> if the column exists in the table, <code>false</code> otherwise
*
- * @exception SQLException
+ * @throws SQLException
*/
public boolean checkColumnExists(Connection conn, String table, String column) throws SQLException {
PreparedStatement ps = null;
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java
index 3188f07..d9617f0 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java
@@ -100,14 +100,17 @@ public class DbUtil {
/**
* Given an SQL exception, this will return a string that contains the error code and message for it and its causes.
*
- * @param e
+ * @param e the SQL exception
*
* @return error message containing all the SQL error codes and messages
*/
public static String getSQLExceptionString(SQLException e) {
- StringBuffer str = new StringBuffer();
+ StringBuilder str = new StringBuilder();
do {
+ if (e instanceof ExtendedSQLException) {
+ str.append("SQL=[" + ((ExtendedSQLException) e).getSQL() + "]; ");
+ }
str.append("ErrorCode=[" + e.getErrorCode() + "]; ");
str.append("SQLState=[" + e.getSQLState() + "]; ");
str.append("Message=[" + e.getMessage() + "]; ");
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ExtendedSQLException.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ExtendedSQLException.java
new file mode 100644
index 0000000..189869b
--- /dev/null
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ExtendedSQLException.java
@@ -0,0 +1,43 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program 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 version 2 of the License.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.core.db;
+
+import java.sql.SQLException;
+
+/**
+ * Wraps another SQLException, providing one additional field for specifying the SQL that caused the exception.
+ *
+ * @author Ian Springer
+ */
+public class ExtendedSQLException extends SQLException {
+
+ private String sql;
+
+ public ExtendedSQLException(SQLException sqlException, String sql) {
+ super(sqlException.getMessage(), sqlException.getSQLState(), sqlException.getErrorCode(), sqlException);
+ setNextException(sqlException.getNextException());
+ setStackTrace(sqlException.getStackTrace());
+ this.sql = sql;
+ }
+
+ public String getSQL() {
+ return sql;
+ }
+
+}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java
index 0d2661a..7ad3c9a 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java
@@ -18,7 +18,6 @@
*/
package org.rhq.core.db;
-import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
@@ -113,7 +112,8 @@ public class TypeMap {
/**
* Given a DOM node, this will ensure it is a valid <i>typemap</i> node and parses it. This constructor is private,
- * use {@link #loadTypeMapsFromFile(File)} to create instances of this object.
+ * use {@link #loadKnownTypeMaps()} TypeMapsFromFile(File)} or {@link #loadTypeMapsFromStream(java.io.InputStream)}
+ * to create instances of this object.
*
* @param typemap_node the top-level <i>typemap</i> DOM node
*
@@ -227,7 +227,7 @@ public class TypeMap {
*/
@Override
public String toString() {
- StringBuffer str = new StringBuffer(m_genericTypeName);
+ StringBuilder str = new StringBuilder(m_genericTypeName);
str.append('=');
str.append(m_databaseTypeMap);
return str.toString();
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java
index 2649226..3275f5f 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java
@@ -24,8 +24,8 @@ import mazz.i18n.LoggerLocale;
import mazz.i18n.Msg;
/**
- * Convienence utility that creates I18N {@link Logger loggers} and {@link Msg messages} for the ant tools. These
- * factory methods are used to create I18N objects that access the propery resource bundle for the ant tools.
+ * Convenience utility that creates I18N {@link Logger loggers} and {@link Msg messages} for the ant tools. These
+ * factory methods are used to create I18N objects that access the proper resource bundle for the ant tools.
*
* @author John Mazzitelli
*
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java
index a08f0da..824b777 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java
@@ -67,11 +67,11 @@ public class MD5Task extends Task {
md5 = Base64.encode(md5_bytes);
} else {
// put the md5 bytes in string form
- StringBuffer md5_string = new StringBuffer(md5_bytes.length * 2);
+ StringBuilder md5_string = new StringBuilder(md5_bytes.length * 2);
- for (int i = 0; i < md5_bytes.length; i++) {
- int hi = (md5_bytes[i] >> 4) & 0xf;
- int lo = md5_bytes[i] & 0xf;
+ for (byte md5_byte : md5_bytes) {
+ int hi = (md5_byte >> 4) & 0xf;
+ int lo = md5_byte & 0xf;
md5_string.append(Character.forDigit(hi, 16));
md5_string.append(Character.forDigit(lo, 16));
}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java
index 9a0c91b..5ad70e4 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java
@@ -355,6 +355,7 @@ public class DBUpgrader extends Task {
try {
fis.close();
} catch (IOException e) {
+ // ignore
}
}
}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java
index 456387d..1f9ed19 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java
@@ -70,7 +70,7 @@ class ConstraintImpl_PK implements ConstraintImpl {
}
private String listItems(List<String> list) {
- StringBuffer ret_items = new StringBuffer();
+ StringBuilder ret_items = new StringBuilder();
if (list != null) {
for (String string : list) {
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java
index f8d27a0..b426361 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java
@@ -39,6 +39,7 @@ import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import mazz.i18n.Logger;
import mazz.i18n.Msg;
+import org.rhq.core.db.ExtendedSQLException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
@@ -696,7 +697,7 @@ public class DBSetup {
}
}
- // our second pass - hopefully, we've cleared out data that caused contraint errors in the first pass
+ // our second pass - hopefully, we've cleared out data that caused constraint errors in the first pass
if (failed_tables.size() > 0) {
log(LogPriority.DEBUG, DbUtilsI18NResourceKeys.DBSETUP_CLEAR_SECOND_PASS, failed_tables.size());
@@ -989,8 +990,10 @@ public class DBSetup {
* just prepares it in a statement and expects the caller to execute the statement. The caller must close the
* returned prepared statement (which occurs if <code>returnPreparedStatement</code> is <code>true</code>)
*
- * @param sql
- * @param returnPreparedStatement if <code>true</code>, the SQL isn't executed, it is just prepared
+ * @param sql an SQL Data Manipulation Language (DML) statement, such as <code>INSERT</code>, <code>UPDATE</code>
+ * or <code>DELETE</code>; or an SQL statement that returns nothing,
+ * such as a DDL statement
+ * @param returnPreparedStatement if <code>true</code>, the SQL isn't executed; it is just prepared
*
* @return the statement (which may be a prepared statement or may be the statement that was executed)
*
@@ -1027,7 +1030,7 @@ public class DBSetup {
// Log this?
}
- throw e;
+ throw new ExtendedSQLException(e, sql);
} finally {
if (stmt != null) {
stmt.close();
@@ -1120,6 +1123,7 @@ public class DBSetup {
try {
m_connection.close();
} catch (Exception e) {
+ // ignore
} finally {
m_connection = null;
m_databaseType = null;
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java
index 32694c4..3b834f5 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java
@@ -18,7 +18,6 @@
*/
package org.rhq.core.db.setup;
-import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@@ -39,7 +38,6 @@ abstract class DataSet {
}
protected int create() throws SQLException {
- PreparedStatement stmt = null;
int rowcnt = 0;
try {
@@ -60,10 +58,6 @@ abstract class DataSet {
}
throw e;
- } finally {
- if (stmt != null) {
- stmt.close();
- }
}
return rowcnt; // The number of rows created.
@@ -103,7 +97,7 @@ abstract class DataSet {
protected String getInsertCommand() throws SQLException {
int iCols = this.getNumberColumns();
- StringBuffer strCmd = new StringBuffer("INSERT INTO ");
+ StringBuilder strCmd = new StringBuilder("INSERT INTO ");
strCmd.append(this.getTableName());
strCmd.append(" (");
@@ -154,7 +148,7 @@ abstract class DataSet {
protected String getUpdateCommand() throws SQLException {
int iCols = this.getNumberColumns();
- StringBuffer strCmd = new StringBuffer("UPDATE ");
+ StringBuilder strCmd = new StringBuilder("UPDATE ");
strCmd.append(this.getTableName());
strCmd.append(" SET ");
@@ -206,7 +200,7 @@ abstract class DataSet {
}
need_AND_keyword = true;
- strCmd.append(data.getActualColumnName() + " = ");
+ strCmd.append(data.getActualColumnName()).append(" = ");
String key_value = data.getValue();
if (key_value != null) {
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java
index cac0ef9..9455aea 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java
@@ -115,26 +115,23 @@ class Table {
List collCmds = new java.util.Vector();
this.getCreateCommands(collCmds, typemaps, m_parent.getDatabaseType());
- Iterator iter = collCmds.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
m_parent.doSQL(strCmd);
}
}
private void doCmd(List collCmds) throws SQLException {
- Iterator iter = collCmds.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
m_parent.doSQL(strCmd);
}
}
private void doCmdsWithoutAbortingOnErrors(List collCmds) throws SQLException {
SQLException sqlException = null;
- Iterator cmdsIter = collCmds.iterator();
- while (cmdsIter.hasNext()) {
- String strCmd = (String) cmdsIter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
try {
m_parent.doSQL(strCmd);
} catch (SQLException e) {
@@ -326,10 +323,8 @@ class Table {
String strCmd = "DROP TABLE " + this.getName();
cmds.add(strCmd);
- Iterator iter = this.getColumns().iterator();
-
- while (iter.hasNext()) {
- ((Column) iter.next()).getDropCommands(cmds);
+ for (Object o : this.getColumns()) {
+ ((Column) o).getDropCommands(cmds);
}
}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java
index 522cc05..031b25c 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java
@@ -21,7 +21,6 @@ package org.rhq.core.db.setup;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Iterator;
import java.util.List;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
@@ -78,17 +77,15 @@ class View {
protected void create(Collection typemaps) throws SQLException {
List commands = new java.util.Vector();
this.getCreateCommands(commands, typemaps, m_parent.getDatabaseType());
- Iterator iter = commands.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object command : commands) {
+ String strCmd = (String) command;
m_parent.doSQL(strCmd);
}
}
private void doCmd(List collCmds) throws SQLException {
- Iterator iter = collCmds.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
m_parent.doSQL(strCmd);
}
}
@@ -142,6 +139,7 @@ class View {
try {
colResult.add(new View(nodeView, dbtype, parent));
} catch (SAXException e) {
+ // ignore
}
}
}
commit 825afbaadf741b738d898b325766d0447c1eefdb
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:04:23 2012 -0500
fix some javadoc typos
diff --git a/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java b/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java
index d21ab62..41eb9e3 100644
--- a/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java
+++ b/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java
@@ -23,8 +23,6 @@
package org.rhq.core.util.stream;
import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
@@ -60,7 +58,7 @@ public class StreamUtil {
/**
* Reads in the entire contents of the given input stream and returns the data in a byte array. Be careful - if the
- * stream has alot of data, you run the risk of an <code>OutOfMemoryError</code>.
+ * stream has a lot of data, you run the risk of an <code>OutOfMemoryError</code>.
*
* @param stream the stream to read
*
@@ -120,7 +118,7 @@ public class StreamUtil {
/**
* Copies data from the input stream to the output stream. Upon completion or on an exception, the streams will be
* closed but only if <code>closeStreams</code> is <code>true</code>. If <code>closeStreams</code> is <code>
- * false</code>, the streams are left open; the caller has the reponsibility to close them.
+ * false</code>, the streams are left open; the caller has the responsibility to close them.
*
* @param input the originating stream that contains the data to be copied
* @param output the destination stream where the data should be copied to
@@ -209,7 +207,7 @@ public class StreamUtil {
}
/**
- * Copies data from the input stream to the output stream. The caller has the reponsibility to close them. This
+ * Copies data from the input stream to the output stream. The caller has the responsibility to close them. This
* method allows you to copy a byte range from the input stream. The start byte is the index (where the first byte
* of the stream is index #0) that starts to be copied. <code>length</code> indicates how many bytes to copy, a
* negative length indicates copy everything up to the EOF of the input stream.
commit 300f00a266ae52f2f476e999c7ec9450d665baec
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:02:57 2012 -0500
use StreamUtil.copy() (from rhq-core-util.jar), rather than private copyStreamData()
diff --git a/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java b/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java
index 6162bdd..871c112 100644
--- a/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java
+++ b/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2012 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -18,7 +18,6 @@
*/
package org.rhq.enterprise.installer;
-import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -26,7 +25,6 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -62,6 +60,7 @@ import org.rhq.core.db.SQLServerDatabaseType;
import org.rhq.core.db.setup.DBSetup;
import org.rhq.core.util.PropertiesFileUpdate;
import org.rhq.core.util.jdbc.JDBCUtil;
+import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.communications.util.SecurityUtil;
/**
@@ -690,7 +689,7 @@ public class ServerInformation {
// first slurp the file contents in memory
InputStream resourceInStream = this.getClass().getClassLoader().getResourceAsStream(xmlFileName);
ByteArrayOutputStream contentOutStream = new ByteArrayOutputStream();
- copyStreamData(resourceInStream, contentOutStream);
+ StreamUtil.copy(resourceInStream, contentOutStream);
// now replace their replacement strings with values from the properties
String content = contentOutStream.toString();
@@ -716,33 +715,11 @@ public class ServerInformation {
File xmlFile = new File(getLogDirectory(), xmlFileName);
FileOutputStream xmlFileOutStream = new FileOutputStream(xmlFile);
ByteArrayInputStream contentInStream = new ByteArrayInputStream(content.getBytes());
- copyStreamData(contentInStream, xmlFileOutStream);
+ StreamUtil.copy(contentInStream, xmlFileOutStream);
return xmlFile.getAbsolutePath();
}
- private void copyStreamData(InputStream input, OutputStream output) throws IOException {
- int bufferSize = 32768;
-
- try {
- // make sure we buffer the input
- input = new BufferedInputStream(input, bufferSize);
-
- byte[] buffer = new byte[bufferSize];
-
- for (int bytesRead = input.read(buffer); bytesRead != -1; bytesRead = input.read(buffer)) {
- output.write(buffer, 0, bytesRead);
- }
-
- output.flush();
- } finally {
- JDBCUtil.safeClose(output);
- JDBCUtil.safeClose(input);
- }
-
- return;
- }
-
/**
* Launches ANT and runs the default target in the given build file.
*
commit 86721f5f77f5c3c6391d73e42f02b800c2558f28
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:01:37 2012 -0500
add tests that test overwriting and upgrading a JON 3.0 DB schema
diff --git a/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java b/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java
index e4fb711..a211e27 100644
--- a/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java
+++ b/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2012 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -20,21 +20,25 @@
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-
package org.rhq.enterprise.installer;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
+import org.rhq.core.util.stream.StreamUtil;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.rhq.core.db.reset.DBReset;
import org.rhq.core.db.setup.DBSetup;
-import org.rhq.enterprise.installer.ServerInformation;
-import org.rhq.enterprise.installer.ServerProperties;
/**
* The tests in this class exercise the dbsetup/dbupgrade code that is run in the installer. The tests currently only
@@ -110,6 +114,18 @@ public class DBInstallationTest {
installer.upgradeExistingDatabaseSchema(getInstallProperties());
}
+ @Test
+ public void overwriteJON300Schema() throws Exception {
+ installSchemaAndData("3.0.0");
+ installer.createNewDatabaseSchema(getInstallProperties());
+ }
+
+ @Test
+ public void upgradeJON300Schema() throws Exception {
+ installSchemaAndData("3.0.0");
+ installer.upgradeExistingDatabaseSchema(getInstallProperties());
+ }
+
private void initLogDirectory() {
File logDir = new File(LOG_DIRECTORY);
if (logDir.exists()) {
@@ -125,8 +141,10 @@ public class DBInstallationTest {
private void installSchemaAndData(String jonVersion) throws Exception {
DBSetup dbsetup = new DBSetup(DB_URL, USERNAME, PASSWORD);
- dbsetup.setup(getSchemaFile(jonVersion).getAbsolutePath());
- dbsetup.setup(getDataFile(jonVersion).getAbsolutePath());
+ File schemaFile = getSchemaFile(jonVersion);
+ dbsetup.setup(schemaFile.getAbsolutePath());
+ File dataFile = getDataFile(jonVersion);
+ dbsetup.setup(dataFile.getAbsolutePath());
}
private File getSchemaFile(String version) throws Exception {
@@ -136,7 +154,10 @@ public class DBInstallationTest {
throw new RuntimeException("Failed to find schema file for version " + version);
}
- return new File(url.toURI().getPath());
+ File file = new File(url.toURI().getPath());
+ File filteredFile = filterXmlFile(file, getInstallProperties());
+
+ return filteredFile;
}
private File getDataFile(String version) throws Exception {
@@ -146,7 +167,10 @@ public class DBInstallationTest {
throw new RuntimeException("Failed to find data file for version " + version);
}
- return new File(url.toURI().getPath());
+ File file = new File(url.toURI().getPath());
+ File filteredFile = filterXmlFile(file, getInstallProperties());
+
+ return filteredFile;
}
private Properties getInstallProperties() {
@@ -157,4 +181,40 @@ public class DBInstallationTest {
dbProperties.put(ServerProperties.PROP_EMAIL_FROM_ADDRESS, "rhqadmin(a)localhost.com");
return dbProperties;
}
+
+ private static File filterXmlFile(File xmlFile, Properties props) throws IOException {
+ // first slurp the file contents in memory
+ InputStream fileInStream = new FileInputStream(xmlFile);
+ ByteArrayOutputStream contentOutStream = new ByteArrayOutputStream();
+ StreamUtil.copy(fileInStream, contentOutStream);
+
+ // now replace their replacement strings with values from the properties
+ String content = contentOutStream.toString();
+ content = content.replaceAll("@@@LARGE_TABLESPACE_FOR_DATA@@@", "DEFAULT");
+ content = content.replaceAll("@@@LARGE_TABLESPACE_FOR_INDEX@@@", "DEFAULT");
+ content = content.replaceAll("@@@ADMINUSERNAME@@@", "rhqadmin");
+ content = content.replaceAll("@@@ADMINPASSWORD@@@", "x1XwrxKuPvYUILiOnOZTLg=="); // rhqadmin
+ content = content.replaceAll("@@@ADMINEMAIL@@@", props.getProperty(ServerProperties.PROP_EMAIL_FROM_ADDRESS));
+ content = content.replaceAll("@@@BASEURL@@@", "http://" + ServerProperties.getValidServerBindAddress(props)
+ + ":" + ServerProperties.getHttpPort(props) + "/");
+ content = content.replaceAll("@@@JAASPROVIDER@@@", "JDBC");
+ content = content.replaceAll("@@@LDAPURL@@@", "ldap://localhost/");
+ content = content.replaceAll("@@@LDAPPROTOCOL@@@", "");
+ content = content.replaceAll("@@@LDAPLOGINPROP@@@", "cn");
+ content = content.replaceAll("@@@LDAPBASEDN@@@", "o=JBoss,c=US");
+ content = content.replaceAll("@@@LDAPSEARCHFILTER@@@", "");
+ content = content.replaceAll("@@@LDAPBINDDN@@@", "");
+ content = content.replaceAll("@@@LDAPBINDPW@@@", "");
+ content = content.replaceAll("@@@MULTICAST_ADDR@@@", "");
+ content = content.replaceAll("@@@MULTICAST_PORT@@@", "");
+
+ // we now have the finished XML content - write out the file to the tmp directory
+ File filteredXmlFile = File.createTempFile("rhq", xmlFile.getName());
+ FileOutputStream xmlFileOutStream = new FileOutputStream(xmlFile);
+ ByteArrayInputStream contentInStream = new ByteArrayInputStream(content.getBytes());
+ StreamUtil.copy(contentInStream, xmlFileOutStream);
+
+ return xmlFile.getAbsoluteFile();
+ }
+
}
diff --git a/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-data-combined-3.0.0.xml b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-data-combined-3.0.0.xml
new file mode 100644
index 0000000..060f241
--- /dev/null
+++ b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-data-combined-3.0.0.xml
@@ -0,0 +1,690 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dbsetup name="data.xml">
+<!-- BEGIN: rhq-data.xml -->
+<!-- BEGIN: auth-data.xml -->
+
+
+ <table name="RHQ_PRINCIPAL">
+ <data id="2" PRINCIPAL="@@@ADMINUSERNAME@@@" PASSWORD="@@@ADMINPASSWORD@@@"/>
+ </table>
+
+<!-- END: auth-data.xml -->
+<!-- BEGIN: authz-data.xml -->
+
+
+ <!-- the overlord user -->
+ <table name="RHQ_SUBJECT">
+ <data ID="1"
+ NAME="admin"
+ FIRST_NAME="Super"
+ LAST_NAME="User"
+ FSYSTEM="TRUE"/>
+ </table>
+
+ <!-- the initial rhqadmin user -->
+ <table name="RHQ_SUBJECT">
+ <data ID="2"
+ NAME="@@@ADMINUSERNAME@@@"
+ FIRST_NAME="RHQ"
+ LAST_NAME="Administrator"
+ EMAIL_ADDRESS="@@@ADMINEMAIL@@@"
+ FSYSTEM="FALSE"/>
+ </table>
+
+ <!-- Define the system root role which includes our overlord and rhqadmin users -->
+ <table name="RHQ_ROLE">
+ <data ID="1"
+ NAME="Super User Role"
+ FSYSTEM="TRUE"
+ DESCRIPTION="System superuser role that provides full access to everything. This role cannot be modified."/>
+ <data ID="2"
+ NAME="All Resources Role"
+ FSYSTEM="FALSE"
+ DESCRIPTION="Provides full access to all resources in inventory. Cannot modify users, roles or server settings."/>
+ </table>
+
+ <!-- associate the root users with all security permissions -->
+ <table name="RHQ_SUBJECT_ROLE_MAP">
+ <!-- overlord user -->
+ <data SUBJECT_ID="1" ROLE_ID="1"/>
+ <!-- rhqadmin user -->
+ <data SUBJECT_ID="2" ROLE_ID="1"/>
+ </table>
+
+ <table name="RHQ_PERMISSION">
+ <!-- give super-user-role all permissions
+ (explicitly add resource perms, even though they are implied by MANAGE_INVENTORY) -->
+ <data ROLE_ID="1" OPERATION="0"/> <!-- Permission.MANAGE_SECURITY -->
+ <data ROLE_ID="1" OPERATION="1"/> <!-- Permission.MANAGE_INVENTORY -->
+ <data ROLE_ID="1" OPERATION="2"/> <!-- Permission.MANAGE_SETTINGS -->
+ <data ROLE_ID="1" OPERATION="12"/> <!-- Permission.MANAGE_BUNDLE -->
+ <data ROLE_ID="1" OPERATION="15"/> <!-- Permission.MANAGE_REPOSITORIES -->
+ <!-- resource permissions start here-->
+ <data ROLE_ID="1" OPERATION="3"/> <!-- Permission.VIEW_RESOURCE -->
+ <data ROLE_ID="1" OPERATION="4"/> <!-- Permission.MODIFY_RESOURCE -->
+ <data ROLE_ID="1" OPERATION="5"/> <!-- Permission.DELETE_RESOURCE -->
+ <data ROLE_ID="1" OPERATION="6"/> <!-- Permission.CREATE_CHILD_RESOURCES -->
+ <data ROLE_ID="1" OPERATION="7"/> <!-- Permission.MANAGE_ALERTS -->
+ <data ROLE_ID="1" OPERATION="8"/> <!-- Permission.MANAGE_MEASUREMENTS -->
+ <data ROLE_ID="1" OPERATION="9"/> <!-- Permission.MANAGE_CONTENT -->
+ <data ROLE_ID="1" OPERATION="10"/> <!-- Permission.CONTROL -->
+ <data ROLE_ID="1" OPERATION="11"/> <!-- Permission.CONFIGURE_WRITE -->
+ <data ROLE_ID="1" OPERATION="13"/> <!-- Permission.CONFIGURE_READ -->
+ <data ROLE_ID="1" OPERATION="14"/> <!-- Permission.MANAGE_EVENTS -->
+ <data ROLE_ID="1" OPERATION="16"/> <!-- Permission.MANAGE_DRIFT -->
+
+ <!-- give all-resources-role MANAGE_INVENTORY and MANAGE_BUNDLE permissions
+ (explicitly add resource perms as well, even though they are implied by MANAGE_INVENTORY) -->
+ <data ROLE_ID="2" OPERATION="1"/> <!-- Permission.MANAGE_INVENTORY -->
+ <data ROLE_ID="2" OPERATION="12"/> <!-- Permission.MANAGE_BUNDLE -->
+ <!-- resource permissions start here-->
+ <data ROLE_ID="2" OPERATION="3"/> <!-- Permission.VIEW_RESOURCE -->
+ <data ROLE_ID="2" OPERATION="4"/> <!-- Permission.MODIFY_RESOURCE -->
+ <data ROLE_ID="2" OPERATION="5"/> <!-- Permission.DELETE_RESOURCE -->
+ <data ROLE_ID="2" OPERATION="6"/> <!-- Permission.CREATE_CHILD_RESOURCES -->
+ <data ROLE_ID="2" OPERATION="7"/> <!-- Permission.MANAGE_ALERTS -->
+ <data ROLE_ID="2" OPERATION="8"/> <!-- Permission.MANAGE_MEASUREMENTS -->
+ <data ROLE_ID="2" OPERATION="9"/> <!-- Permission.MANAGE_CONTENT -->
+ <data ROLE_ID="2" OPERATION="10"/> <!-- Permission.CONTROL -->
+ <data ROLE_ID="2" OPERATION="11"/> <!-- Permission.CONFIGURE_WRITE -->
+ <data ROLE_ID="2" OPERATION="13"/> <!-- Permission.CONFIGURE_READ -->
+ <data ROLE_ID="2" OPERATION="14"/> <!-- Permission.MANAGE_EVENTS -->
+ <data ROLE_ID="2" OPERATION="16"/> <!-- Permission.MANAGE_DRIFT -->
+ </table>
+
+<!-- END: authz-data.xml -->
+<!-- BEGIN: search-data.xml -->
+
+
+ <!-- overlord-created, global, default saved searches -->
+ <table name="RHQ_SAVED_SEARCH">
+ <data ID="1"
+ CONTEXT="RESOURCE"
+ NAME="Downed Platforms"
+ DESCRIPTION="All downed machines across the entire enterprise"
+ PATTERN="availability=down category=platform"
+ LAST_COMPUTE_TIME="0"
+ SUBJECT_ID="1"
+ GLOBAL="TRUE" />
+ <data ID="2"
+ CONTEXT="RESOURCE"
+ NAME="Downed Servers"
+ DESCRIPTION="All downed servers across the entire enterprise"
+ PATTERN="availability=down category=server"
+ LAST_COMPUTE_TIME="0"
+ SUBJECT_ID="1"
+ GLOBAL="TRUE" />
+ </table>
+
+<!-- END: search-data.xml -->
+<!-- BEGIN: sysconfig-data.xml -->
+
+
+ <!--
+ This file contains the seed data for the configuration table.
+ All keys mentioned here should be referenced via the RHQConstants class
+ -->
+ <table name="RHQ_SYSTEM_CONFIG">
+ <data ID="1" PROPERTY_KEY="SERVER_VERSION" PROPERTY_VALUE="4.2.0.JON300.GA"
+ DEFAULT_PROPERTY_VALUE="4.2.0.JON300.GA" FREAD_ONLY="TRUE"/>
+ <data ID="2" PROPERTY_KEY="DB_SCHEMA_VERSION" PROPERTY_VALUE="2.116"
+ DEFAULT_PROPERTY_VALUE="2.116" FREAD_ONLY="TRUE"/>
+ <data ID="3" PROPERTY_KEY="CAM_JAAS_PROVIDER" PROPERTY_VALUE="@@@JAASPROVIDER@@@"
+ DEFAULT_PROPERTY_VALUE="JDBC" FREAD_ONLY="FALSE"/>
+ <data ID="4" PROPERTY_KEY="CAM_BASE_URL" PROPERTY_VALUE="@@@BASEURL@@@"
+ DEFAULT_PROPERTY_VALUE="@@@BASEURL@@@" FREAD_ONLY="FALSE"/>
+ <data ID="9" PROPERTY_KEY="CAM_HELP_USER" PROPERTY_VALUE="web"
+ DEFAULT_PROPERTY_VALUE="web" FREAD_ONLY="FALSE"/>
+ <data ID="10" PROPERTY_KEY="CAM_HELP_PASSWORD" PROPERTY_VALUE="user"
+ DEFAULT_PROPERTY_VALUE="user" FREAD_ONLY="FALSE"/>
+
+ <!-- default LDAP configuration options -->
+ <data ID="11" PROPERTY_KEY="CAM_LDAP_NAMING_FACTORY_INITIAL"
+ PROPERTY_VALUE="com.sun.jndi.ldap.LdapCtxFactory"
+ DEFAULT_PROPERTY_VALUE="com.sun.jndi.ldap.LdapCtxFactory"
+ FREAD_ONLY="FALSE"/>
+ <data ID="12" PROPERTY_KEY="CAM_LDAP_NAMING_PROVIDER_URL"
+ PROPERTY_VALUE="@@@LDAPURL@@@"
+ DEFAULT_PROPERTY_VALUE="ldap://localhost/"
+ FREAD_ONLY="FALSE"/>
+ <data ID="13" PROPERTY_KEY="CAM_LDAP_LOGIN_PROPERTY"
+ PROPERTY_VALUE="@@@LDAPLOGINPROP@@@"
+ DEFAULT_PROPERTY_VALUE="cn" FREAD_ONLY="FALSE"/>
+ <data ID="14" PROPERTY_KEY="CAM_LDAP_BASE_DN"
+ PROPERTY_VALUE="@@@LDAPBASEDN@@@"
+ DEFAULT_PROPERTY_VALUE="o=JBoss,c=US"
+ FREAD_ONLY="FALSE"/>
+ <data ID="15" PROPERTY_KEY="CAM_LDAP_BIND_DN"
+ PROPERTY_VALUE="@@@LDAPBINDDN@@@"
+ DEFAULT_PROPERTY_VALUE="" FREAD_ONLY="FALSE"/>
+ <data ID="16" PROPERTY_KEY="CAM_LDAP_BIND_PW"
+ PROPERTY_VALUE="@@@LDAPBINDPW@@@"
+ DEFAULT_PROPERTY_VALUE="" FREAD_ONLY="FALSE"/>
+ <data ID="17" PROPERTY_KEY="CAM_LDAP_PROTOCOL"
+ PROPERTY_VALUE="@@@LDAPPROTOCOL@@@" DEFAULT_PROPERTY_VALUE=""
+ FREAD_ONLY="FALSE"/>
+ <data ID="18" PROPERTY_KEY="CAM_LDAP_FILTER"
+ PROPERTY_VALUE="@@@LDAPSEARCHFILTER@@@" DEFAULT_PROPERTY_VALUE=""
+ FREAD_ONLY="FALSE"/>
+
+ <!-- Does this build support Syslog actions? -->
+ <data ID="21" PROPERTY_KEY="CAM_SYSLOG_ACTIONS_ENABLED"
+ PROPERTY_VALUE="false" DEFAULT_PROPERTY_VALUE="false"
+ FREAD_ONLY="FALSE"/>
+ <data ID="23" PROPERTY_KEY="CAM_GUIDE_ENABLED"
+ PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+ <data ID="24" PROPERTY_KEY="CAM_RT_COLLECT_IP_ADDRS"
+ PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+
+ <!-- Default data storage options -->
+ <!-- Default 14 days -->
+ <data ID="26" PROPERTY_KEY="CAM_DATA_PURGE_1H"
+ PROPERTY_VALUE="1209600000" DEFAULT_PROPERTY_VALUE="1209600000"
+ FREAD_ONLY="FALSE"/>
+ <!-- Default 31 days -->
+ <data ID="27" PROPERTY_KEY="CAM_DATA_PURGE_6H"
+ PROPERTY_VALUE="2678400000" DEFAULT_PROPERTY_VALUE="2678400000"
+ FREAD_ONLY="FALSE"/>
+ <!-- Default 1 year -->
+ <data ID="28" PROPERTY_KEY="CAM_DATA_PURGE_1D"
+ PROPERTY_VALUE="31536000000" DEFAULT_PROPERTY_VALUE="31536000000"
+ FREAD_ONLY="FALSE"/>
+
+ <!-- Baseline options -->
+ <!-- How often to calculate, default 3 days; if 0, never calculate them automatically -->
+ <data ID="29" PROPERTY_KEY="CAM_BASELINE_FREQUENCY"
+ PROPERTY_VALUE="259200000" DEFAULT_PROPERTY_VALUE="259200000"
+ FREAD_ONLY="FALSE"/>
+ <!-- How much data to include in the calulation, default 7 days -->
+ <data ID="30" PROPERTY_KEY="CAM_BASELINE_DATASET"
+ PROPERTY_VALUE="604800000" DEFAULT_PROPERTY_VALUE="604800000"
+ FREAD_ONLY="FALSE"/>
+
+ <!-- ID 31 has been deleted -->
+
+ <!-- How often to run database maintainence routines -->
+ <data ID="32" PROPERTY_KEY="CAM_DATA_MAINTENANCE"
+ PROPERTY_VALUE="3600000" DEFAULT_PROPERTY_VALUE="3600000" FREAD_ONLY="FALSE"/>
+
+ <!-- How long to keep RT data around -->
+ <data ID="34" PROPERTY_KEY="RT_DATA_PURGE" PROPERTY_VALUE="2678400000"
+ DEFAULT_PROPERTY_VALUE="2678400000" FREAD_ONLY="FALSE"/>
+
+ <!-- Whether to reindex the data tables nightly -->
+ <data ID="35" PROPERTY_KEY="DATA_REINDEX_NIGHTLY" PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+
+ <!-- How long to keep alerts around -->
+ <data ID="36" PROPERTY_KEY="ALERT_PURGE" PROPERTY_VALUE="2678400000"
+ DEFAULT_PROPERTY_VALUE="2678400000" FREAD_ONLY="FALSE"/>
+
+ <!-- How long to keep events around (1209600000 millis == 14 days) -->
+ <data ID="51" PROPERTY_KEY="EVENT_PURGE" PROPERTY_VALUE="1209600000"
+ DEFAULT_PROPERTY_VALUE="1209600000" FREAD_ONLY="FALSE"/>
+
+ <!-- How long an agent is allowed to be quiet before we consider it down and backfill it -->
+ <data ID="52" PROPERTY_KEY="AGENT_MAX_QUIET_TIME_ALLOWED" PROPERTY_VALUE="900000"
+ DEFAULT_PROPERTY_VALUE="900000" FREAD_ONLY="FALSE"/>
+
+ <!-- Will our server-cloud support agents auto-updating themselves? -->
+ <data ID="53" PROPERTY_KEY="ENABLE_AGENT_AUTO_UPDATE" PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+
+ <!-- How old does a trait have to be in order to get purged -->
+ <data ID="54" PROPERTY_KEY="TRAIT_PURGE" PROPERTY_VALUE="31536000000"
+ DEFAULT_PROPERTY_VALUE="31536000000" FREAD_ONLY="FALSE"/>
+
+ <!-- How old does availability have to be in order to get purged -->
+ <data ID="55" PROPERTY_KEY="AVAILABILITY_PURGE" PROPERTY_VALUE="31536000000"
+ DEFAULT_PROPERTY_VALUE="31536000000" FREAD_ONLY="FALSE"/>
+
+ <data ID="56" PROPERTY_KEY="RESOURCE_GENERIC_PROPERTIES_UPGRADE" PROPERTY_VALUE="false"
+ DEFAULT_PROPERTY_VALUE="false" FREAD_ONLY="FALSE"/>
+
+ <!-- default drift server plugin settings -->
+ <data ID="57" PROPERTY_KEY="ACTIVE_DRIFT_PLUGIN" PROPERTY_VALUE="drift-jpa"
+ DEFAULT_PROPERTY_VALUE="drift-jpa" FREAD_ONLY="FALSE"/>
+
+ <!-- purge drift files older than 31 days by default -->
+ <data ID="58" PROPERTY_KEY="DRIFT_FILE_PURGE" PROPERTY_VALUE="2678400000"
+ DEFAULT_PROPERTY_VALUE="2678400000" FREAD_ONLY="FALSE"/>
+
+ </table>
+
+<!-- END: sysconfig-data.xml -->
+<!-- BEGIN: measurement-data.xml -->
+
+ <table name="RHQ_NUMBERS">
+ <data i="0"/>
+ <data i="1"/>
+ <data i="2"/>
+ <data i="3"/>
+ <data i="4"/>
+ <data i="5"/>
+ <data i="6"/>
+ <data i="7"/>
+ <data i="8"/>
+ <data i="9"/>
+ <data i="10"/>
+ <data i="11"/>
+ <data i="12"/>
+ <data i="13"/>
+ <data i="14"/>
+ <data i="15"/>
+ <data i="16"/>
+ <data i="17"/>
+ <data i="18"/>
+ <data i="19"/>
+ <data i="20"/>
+ <data i="21"/>
+ <data i="22"/>
+ <data i="23"/>
+ <data i="24"/>
+ <data i="25"/>
+ <data i="26"/>
+ <data i="27"/>
+ <data i="28"/>
+ <data i="29"/>
+ <data i="30"/>
+ <data i="31"/>
+ <data i="32"/>
+ <data i="33"/>
+ <data i="34"/>
+ <data i="35"/>
+ <data i="36"/>
+ <data i="37"/>
+ <data i="38"/>
+ <data i="39"/>
+ <data i="40"/>
+ <data i="41"/>
+ <data i="42"/>
+ <data i="43"/>
+ <data i="44"/>
+ <data i="45"/>
+ <data i="46"/>
+ <data i="47"/>
+ <data i="48"/>
+ <data i="49"/>
+ <data i="50"/>
+ <data i="51"/>
+ <data i="52"/>
+ <data i="53"/>
+ <data i="54"/>
+ <data i="55"/>
+ <data i="56"/>
+ <data i="57"/>
+ <data i="58"/>
+ <data i="59"/>
+ </table>
+
+<!-- END: measurement-data.xml -->
+<!-- BEGIN: content-data.xml -->
+
+ <table name="RHQ_ARCHITECTURE">
+ <data id="1" name="noarch"/>
+ <data id="2" name="i386"/>
+ <data id="3" name="i486"/>
+ <data id="4" name="i586"/>
+ <data id="5" name="i686"/>
+ <data id="6" name="alpha"/>
+ <data id="7" name="alphaev6"/>
+ <data id="8" name="ia64"/>
+ <data id="9" name="sparc"/>
+ <data id="10" name="sparcv9"/>
+ <data id="11" name="sparc64"/>
+ <data id="12" name="src"/>
+ <data id="13" name="s390"/>
+ <data id="14" name="athlon"/>
+ <data id="15" name="s390x"/>
+ <data id="16" name="ppc"/>
+ <data id="17" name="ppc64"/>
+ <data id="18" name="pSeries"/>
+ <data id="19" name="iSeries"/>
+ <data id="20" name="x86_64"/>
+ <data id="21" name="ppc64iseries"/>
+ <data id="22" name="ppc64pseries"/>
+ <data id="23" name="sparc-solaris"/>
+ <data id="24" name="sparc.sun4u-solaris"/>
+ <data id="25" name="tar"/>
+ <data id="26" name="ia32e"/>
+ <data id="27" name="amd64"/>
+ <data id="28" name="i386-solaris"/>
+ <data id="29" name="nosrc"/>
+ <data id="30" name="sparc-solaris-patch"/>
+ <data id="31" name="i386-solaris-patch"/>
+ <data id="32" name="sparc-solaris-patch-cluster"/>
+ <data id="33" name="i386-solaris-patch-cluster"/>
+ <data id="34" name="noarch-solaris"/>
+ <data id="35" name="noarch-solaris-patch"/>
+ <data id="36" name="noarch-solaris-patch-cluster"/>
+ <data id="37" name="solaris-patch"/>
+ <data id="38" name="solaris-patch-cluster"/>
+ </table>
+
+ <table name="RHQ_REPO_GROUP_TYPE">
+ <data id="1" name="family"/>
+ </table>
+
+ <table name="RHQ_REPO_RELATION_TYPE">
+ <data id="1" name="parent"/>
+ <data id="2" name="clone"/>
+ </table>
+
+ <table name="RHQ_DISTRIBUTION_TYPE">
+ <data id="1" name="kickstart" description="Linux kickstart distribution"/>
+ <data id="2" name="jumpstart" description="solaris jumpstart distribution"/>
+ </table>
+
+<!-- END: content-data.xml -->
+<!-- BEGIN: jms-data.xml -->
+
+<!-- the schema matches that which would be automatically created by the JMS subsystem -->
+<!-- see deploy/jms/rhq-jdbc-state-service.xml and rhq-jdbc2-service.xml -->
+<!-- the data must match that which is expected in conf/login-config.xml -->
+
+
+ <table name="JMS_USERS">
+ <data USERID="guest" PASSWD="guest" />
+ </table>
+
+ <table name="JMS_ROLES">
+ <data ROLEID="guest" USERID="guest" />
+ </table>
+
+<!-- END: jms-data.xml -->
+<!-- END: rhq-data.xml -->
+<!-- BEGIN: jon-data.xml -->
+
+<!-- This dbsetup config file defines a content source and
+ associated repo for the JBoss CP RSS patch feed. -->
+
+
+ <!-- ********* metadata (the content source type and its config def) ********* -->
+
+ <table name="RHQ_CONFIG_DEF">
+ <data ID="101"
+ NAME="JBoss CP Patch Feed Content Source"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_DEF">
+ <data ID="101"
+ NAME="url"
+ DISPLAY_NAME="Feed URL"
+ DESCRIPTION="URL of the feed (e.g. https://access.redhat.com/jbossnetwork/restricted/feed/software.html?prod...)."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="0"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="102"
+ NAME="username"
+ DISPLAY_NAME="Username"
+ DESCRIPTION="Username used to access the feed URL."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="1"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="103"
+ NAME="password"
+ DISPLAY_NAME="Password"
+ DESCRIPTION="Password used to access the feed URL."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="2"
+ SIMPLE_TYPE="PASSWORD"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="104"
+ NAME="active"
+ DISPLAY_NAME="Active"
+ DESCRIPTION="Indicates if the feed should be checked for new patches."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="3"
+ SIMPLE_TYPE="BOOLEAN"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="105"
+ NAME="proxyUrl"
+ DISPLAY_NAME="Proxy URL"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="4"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="106"
+ NAME="proxyPort"
+ DISPLAY_NAME="Proxy Port"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="5"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="107"
+ NAME="proxyUsername"
+ DISPLAY_NAME="Proxy Username"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="6"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="108"
+ NAME="proxyPassword"
+ DISPLAY_NAME="Proxy Password"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="7"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ </table>
+
+ <!-- NOTE: The values of the NAME, PLUGIN_NAME, and API_CLASS columns must match what is
+ defined in RHQ/modules/enterprise/server/plugins/jboss-software/src/main/resources/META-INF/rhq-serverplugin.xml. -->
+ <!-- default sync chedule: 1st of every month at 12am -->
+ <table name="RHQ_CONTENT_SOURCE_TYPE">
+ <data ID="101"
+ NAME="JBossASPatchSource"
+ DISPLAY_NAME="JBoss Patch Content Source"
+ DESCRIPTION="a content source that retrieves package metadata from an RSS feed; the feed must be in the format used by the JBoss CP"
+ PLUGIN_NAME="JBossASPatchContentSourcePlugin"
+ DEFAULT_LAZY_LOAD="1"
+ DEFAULT_DOWNLOAD_MODE="DATABASE"
+ DEFAULT_SYNC_SCHEDULE="0 0 0 1 * ?"
+ API_CLASS="org.rhq.enterprise.server.plugins.jboss.software.JBossSoftwareContentSourceAdapter"
+ SOURCE_CONFIG_DEF_ID="101"/>
+ </table>
+
+
+ <!-- the default template -->
+ <table name="RHQ_CONFIG">
+ <data ID="101"
+ VERSION="0"
+ CTIME="1270066600000"
+ MTIME="1270066600000"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROPERTY">
+ <data ID="101"
+ NAME="url"
+ CONFIGURATION_ID="101"
+ STRING_VALUE=""
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="102"
+ NAME="username"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="103"
+ NAME="password"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="104"
+ NAME="proxyUrl"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="105"
+ NAME="proxyPort"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="106"
+ NAME="active"
+ CONFIGURATION_ID="101"
+ STRING_VALUE="true"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="107"
+ NAME="proxyUsername"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="108"
+ NAME="proxyPassword"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ </table>
+
+ <table name="RHQ_CONFIG_TEMPLATE">
+ <data ID="101"
+ NAME="default"
+ DESCRIPTION="the default initial values for the configuration of a JBossASPatchSource content source"
+ CONFIG_ID="101"
+ CONFIG_DEF_ID="101"
+ IS_DEFAULT="1"/>
+ </table>
+
+
+ <!-- ********* data (the content source and its config) ********* -->
+
+ <table name="RHQ_CONFIG">
+ <data ID="102"
+ VERSION="0"
+ CTIME="1270066600000"
+ MTIME="1270066600000"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROPERTY">
+ <data ID="111"
+ NAME="url"
+ CONFIGURATION_ID="102"
+ STRING_VALUE="https://access.redhat.com/jbossnetwork/restricted/feed/software.html?prod..."
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="112"
+ NAME="username"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="113"
+ NAME="password"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="114"
+ NAME="proxyUrl"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="115"
+ NAME="proxyPort"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="116"
+ NAME="active"
+ CONFIGURATION_ID="102"
+ STRING_VALUE="false"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="117"
+ NAME="proxyUsername"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="118"
+ NAME="proxyPassword"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ </table>
+
+ <!-- sync chedule: 1st of every month at 12am -->
+ <table name="RHQ_CONTENT_SOURCE">
+ <data ID="101"
+ NAME="JBoss CP Patch Feed"
+ DESCRIPTION="an RSS feed published by the JBoss Customer Portal (CP) website which provides a list of all JBoss product patches available for the subscription of a given CP user; the feed entries for most cumulative patches (CPs) include automated install instructions that can be used by JON to install those CPs to inventoried server Resources (e.g. JBoss EAP servers)"
+ LAZY_LOAD="1"
+ DOWNLOAD_MODE="DATABASE"
+ SYNC_SCHEDULE="0 0 0 1 * ?"
+ CREATION_TIME="1270066600000"
+ LAST_MODIFIED_TIME="1270066600000"
+ CONTENT_SOURCE_TYPE_ID="101"
+ CONFIGURATION_ID="102"/>
+ </table>
+
+ <!-- sync chedule: every Mon at 1am -->
+ <table name="RHQ_REPO">
+ <data ID="101"
+ NAME="JBoss Patches"
+ DESCRIPTION="the patches obtained from the JBoss CP patch feed"
+ SYNC_SCHEDULE="0 0 1 ? * 1"
+ CREATION_TIME="1270066600000"
+ LAST_MODIFIED_TIME="1270066600000"
+ IS_PRIVATE="0"
+ IS_CANDIDATE="0"/>
+ </table>
+
+ <table name="RHQ_REPO_CONTENT_SRC_MAP">
+ <data REPO_ID="101"
+ CONTENT_SRC_ID="101"
+ CTIME="1270066600000"/>
+ </table>
+
+
+<!-- END: jon-data.xml -->
+</dbsetup>
diff --git a/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-schema-combined-3.0.0.xml b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-schema-combined-3.0.0.xml
new file mode 100644
index 0000000..4c07e1a
--- /dev/null
+++ b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-schema-combined-3.0.0.xml
@@ -0,0 +1,2649 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dbsetup name="schema">
+<!-- BEGIN: config-schema.xml -->
+
+
+ <!-- Definition or Metadata tables -->
+
+ <table name="RHQ_CONFIG_DEF">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="250"/>
+ <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="CONFIG_FORMAT" type="VARCHAR2" required="false" size="32"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_GRP_DEF">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="250"/>
+ <column name="DEFAULT_HIDDEN" type="BOOLEAN" required="false"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_DEF">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="false" size="255"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="1000"/>
+ <column name="DEFAULT_VALUE" type="VARCHAR2" required="false" size="2000"/>
+ <column name="REQUIRED" type="BOOLEAN" required="false"/>
+ <column name="READONLY" type="BOOLEAN" required="false"/>
+ <column name="SUMMARY" type="BOOLEAN" required="false"/>
+ <column name="ACTIVATION_POLICY" type="VARCHAR2" required="false" size="20"/>
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_GRP_DEF"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="PARENT_MAP_DEFINITION_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ <column name="PARENT_LIST_DEFINITION_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ <column name="SIMPLE_TYPE" type="VARCHAR2" required="false" size="20"/>
+ <column name="ALLOW_CUSTOM_ENUM_VALUE" type="BOOLEAN" required="false"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ <column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF"/>
+
+ <!-- only simple properties (not lists and maps) have this -->
+ <column name="UNITS" type="SMALLINT" required="false"/>
+
+ <!-- only dynamic properties (not simple) have this -->
+ <column name="DYNAMIC_TYPE" type="VARCHAR2" size="20" required="false"/>
+ <column name="DYNAMIC_KEY" type="VARCHAR2" size="128" required="false"/>
+ </table>
+
+ <table name="RHQ_CONF_PROP_DEF_ENUM">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="STRING_VALUE" type="VARCHAR2" required="false" size="500"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ <column name="NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="PROPERTY_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PD_OSRC">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="LINK_TO_TARGET" type="BOOLEAN" required="false"/>
+ <column name="FILTER" type="VARCHAR2" required="false" size="40"/>
+ <column name="EXPRESSION" type="VARCHAR2" required="true" size="400"/>
+ <column name="TARGET_TYPE" type="VARCHAR2" required="true" size="20"/>
+ <column name="PROPERTY_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_CONSTR">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="15"/>
+ <column name="DETAILS" type="VARCHAR2" required="false" size="250"/>
+ <column name="CONFIG_PROP_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ </table>
+
+
+ <!-- Content or value tables -->
+
+ <table name="RHQ_CONFIG">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NOTES" type="VARCHAR2" required="false" size="512"/>
+ <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROPERTY">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG" ondelete="cascade"/>
+ <column name="STRING_VALUE" type="VARCHAR2" required="false" size="2000"/>
+ <column name="OVERRIDE" type="BOOLEAN" required="false"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="255"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ <!-- Recursive cascade path to RHQ_CONFIG_PROPERTY causes constraint creation errors on SQL Server, see
+ http://support.microsoft.com/kb/321843 -->
+ <column name="PARENT_LIST_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROPERTY" ondelete="cascade" />
+ <column name="PARENT_MAP_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROPERTY" ondelete="cascade" />
+ <column name="LIST_INDEX" type="INTEGER"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <index name="RHQ_CONFIG_PROP_idx_prop_key" unique="false">
+ <field ref="CONFIGURATION_ID"/>
+ <field ref="NAME"/>
+ </index>
+ <index name="RHQ_CONFIG_PROP_idx_map_key" unique="false">
+ <field ref="PARENT_MAP_ID"/>
+ <field ref="NAME"/>
+ </index>
+ <index name="RHQ_CONFIG_PROP_idx_list_key" unique="false">
+ <field ref="PARENT_LIST_ID"/>
+ </index>
+ <!-- List entries all have the same name -->
+ </table>
+
+ <table name="RHQ_CONFIG_TEMPLATE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="500"/>
+ <column name="CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF"/>
+ <column name="IS_DEFAULT" type="BOOLEAN" required="false"/>
+ </table>
+
+ <table name="RHQ_RAW_CONFIG">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG(ID)"/>
+ <column name="PATH" type="VARCHAR2" required="false" size="512"/>
+ <column name="CONTENTS" type="CLOB" required="true"/>
+ <column name="SHA256" type="VARCHAR2" size="64" required="true"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ </table>
+
+<!-- END: config-schema.xml -->
+<!-- BEGIN: cluster-schema.xml -->
+
+ <table name="RHQ_AFFINITY_GROUP">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="255" type="VARCHAR2"/>
+ </table>
+
+ <table name="RHQ_SERVER">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="255" type="VARCHAR2"/>
+ <column name="ADDRESS" required="true" size="255" type="VARCHAR2"/>
+ <column name="PORT" required="true" type="INTEGER"/>
+ <column name="SECURE_PORT" required="true" type="INTEGER"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="MTIME" required="true" type="LONG"/>
+ <column name="AFFINITY_GROUP_ID" type="INTEGER" references="RHQ_AFFINITY_GROUP" required="false"/>
+ <column name="COMPUTE_POWER" required="true" type="INTEGER"/>
+ <column name="OPERATION_MODE" required="true" size="32" type="VARCHAR2"/>
+ <column name="STATUS" type="INTEGER" required="false" default="0" />
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_SERVER_NAME_UNIQUE" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- new agent -->
+ <table name="RHQ_AGENT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="255" type="VARCHAR2"/>
+ <column name="ADDRESS" required="true" size="255" type="VARCHAR2"/>
+ <column name="PORT" required="true" type="INTEGER"/>
+ <column name="AGENTTOKEN" required="true" size="100" type="VARCHAR2"/>
+ <column name="REMOTE_ENDPOINT" required="false" size="4000" type="VARCHAR2"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="MTIME" required="true" type="LONG"/>
+ <column name="LAST_AVAILABILITY_REPORT" required="false" type="LONG"/>
+ <column name="AFFINITY_GROUP_ID" type="INTEGER" references="RHQ_AFFINITY_GROUP" required="false"/>
+ <column name="SERVER_ID" type="INTEGER" references="RHQ_SERVER" required="false"/>
+ <column name="STATUS" type="INTEGER" required="false" default="0" />
+ <column name="BACKFILLED" type="BOOLEAN" required="true" />
+
+ <index name="RHQ_AGENT_NAME_UNIQUE" unique="true">
+ <field ref="NAME"/>
+ </index>
+
+ <index name="RHQ_AGENT_ADDRESS_PORT" unique="true">
+ <field ref="ADDRESS"/>
+ <field ref="PORT"/>
+ </index>
+
+ <index name="RHQ_AGENT_TOKEN_UNIQUE" unique="true">
+ <field ref="AGENTTOKEN"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PARTITION_EVENT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="SUBJECT_NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="EVENT_TYPE" required="true" size="50" type="VARCHAR2"/>
+ <column name="EVENT_DETAIL" required="false" size="512" type="VARCHAR2"/>
+ <column name="EXECUTION_STATUS" required="true" size="32" type="VARCHAR2"/>
+ </table>
+
+ <table name="RHQ_PARTITION_DETAILS">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PARTITION_EVENT_ID" type="INTEGER" references="RHQ_PARTITION_EVENT" required="true"/>
+ <column name="AGENT_NAME" type="VARCHAR2" size="255" required="true"/>
+ <column name="SERVER_NAME" type="VARCHAR2" size="255" required="true"/>
+ </table>
+
+ <table name="RHQ_FAILOVER_LIST">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PARTITION_EVENT_ID" type="INTEGER" references="RHQ_PARTITION_EVENT" required="true"/>
+ <column name="AGENT_ID" type="INTEGER" references="RHQ_AGENT" required="true"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ </table>
+
+ <table name="RHQ_FAILOVER_DETAILS">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="FAILOVER_LIST_ID" type="INTEGER" references="RHQ_FAILOVER_LIST" required="true"/>
+ <column name="SERVER_ID" type="INTEGER" references="RHQ_SERVER" required="true"/>
+ <column name="ORDINAL" type = "INTEGER" required="true"/>
+ </table>
+
+<!-- END: cluster-schema.xml -->
+<!-- BEGIN: auth-schema.xml -->
+
+
+ <table name="RHQ_PRINCIPAL">
+
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PRINCIPAL" required="true" type="VARCHAR2" size="100"/>
+ <column name="PASSWORD" required="true" type="VARCHAR2" size="64"/>
+
+ <!-- ensure that principals are unique -->
+ <index name="RHQ_PRINCIPAL_PRINCIPAL_KEY" unique="true">
+ <field ref="PRINCIPAL"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_SUBJECT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
+ <column name="FIRST_NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="LAST_NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="EMAIL_ADDRESS" size="100" type="VARCHAR2"/>
+ <column name="SMS_ADDRESS" size="100" type="VARCHAR2"/>
+ <column name="PHONE_NUMBER" size="100" type="VARCHAR2"/>
+ <column name="DEPARTMENT" size="100" type="VARCHAR2"/>
+ <column name="FACTIVE" required="true" type="BOOLEAN" default="true"/>
+ <column name="FSYSTEM" required="true" type="BOOLEAN" default="false"/>
+
+ <index name="RHQ_SUBJECT_AUTH_KEY" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+<!-- END: auth-schema.xml -->
+<!-- BEGIN: inventory-schema.xml -->
+
+
+ <!-- NEW RESOURCE TYPES -->
+ <table name="RHQ_RESOURCE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="100" required="true"/>
+ <column name="CATEGORY" type="VARCHAR2" size="16" required="true"/>
+ <column name="CREATION_DATA_TYPE" type="VARCHAR2" size="16" required="true"/>
+ <column name="CREATE_DELETE_POLICY" type="VARCHAR2" size="16" required="true"/>
+ <column name="SINGLETON" type="BOOLEAN" required="true"/>
+ <column name="SUPPORTS_MANUAL_ADD" type="BOOLEAN" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+ <column name="PLUGIN" type="VARCHAR2" size="100"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="DELETED" type="BOOLEAN" default="FALSE" required="TRUE"/>
+ <column name="SUBCATEGORY_ID" type="INTEGER"/>
+ <!--
+ TODO add support to DB setup for tables with circular dependencies and then add back this RI
+ <column name="SUBCATEGORY_ID" type="INTEGER" references="RHQ_RESOURCE_SUBCAT" />
+ -->
+ <column name="PLUGIN_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="RES_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="BUNDLE_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG"/>
+
+ <index name="RHQ_RES_TYPE_IDX_PLG_NAME" unique="true">
+ <field ref="NAME"/>
+ <field ref="PLUGIN"/>
+ </index>
+ </table>
+
+ <!-- NEW RESOURCE SUBCATEGORIES -->
+ <table name="RHQ_RESOURCE_SUBCAT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="100"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="PARENT_SUBCATEGORY_ID" type="INTEGER" references="RHQ_RESOURCE_SUBCAT"/>
+ <!-- resourceTypeId is not required on child sub categories -->
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+ </table>
+
+ <!-- Many To Many mapping for resource type to its parents -->
+ <table name="RHQ_RESOURCE_TYPE_PARENTS">
+ <column name="RESOURCE_TYPE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+ <column name="PARENT_RESOURCE_TYPE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+
+ <!-- not using full words to fit index name length -->
+ <constraint name="RHQ_RES_TYPE_PARENTS_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="PARENT_RESOURCE_TYPE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_PROCESS_SCAN">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="QUERY" type="VARCHAR2" size="256" required="true"/>
+ <column name="NAME" type="VARCHAR2" size="100" required="false"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+
+ <index name="RHQ_PROCESS_SCAN_QUERY_INDEX" unique="true">
+ <field ref="QUERY"/>
+ <field ref="RESOURCE_TYPE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PRD_VER">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="VERSION" type="VARCHAR2" size="100" required="true"/>
+ <column name="RES_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ </table>
+
+ <table name="RHQ_RESOURCE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="UUID" type="CHAR" size="36" required="true"/>
+ <column name="NAME" type="VARCHAR2" size="500"/>
+ <!-- ancestry holds the full parental ancestry, used for disambiguation -->
+ <column name="ANCESTRY" type="VARCHAR2" required="false" size="4000"/>
+ <column name="RESOURCE_KEY" type="VARCHAR2" required="true" size="500"/>
+ <column name="AGENT_ID" required="false" type="INTEGER" references="RHQ_AGENT(id)"/>
+ <column name="INVENTORY_STATUS" type="VARCHAR2" size="20"/>
+ <column name="CONNECTED" type="BOOLEAN"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+ <column name="VERSION" type="VARCHAR2" size="100"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="ITIME" type="LONG"/>
+ <column name="RES_CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
+ <column name="PLUGIN_CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
+ <column name="MODIFIED_BY" required="false" size="100" type="VARCHAR2"/>
+ <column name="LOCATION" required="false" size="100" type="VARCHAR2"/>
+ <column name="PARENT_RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE"/>
+ <column name="PRODUCT_VERSION_ID" type="INTEGER" references="RHQ_PRD_VER"/>
+
+ <index name="RHQ_RESOURCE_idx_key">
+ <field ref="RESOURCE_KEY"/>
+ </index>
+
+ <index name="RHQ_RESOURCE_idx_type">
+ <field ref="RESOURCE_TYPE_ID"/>
+ </index>
+
+ <index name="RHQ_RESOURCE_idx_agent">
+ <field ref="AGENT_ID"/>
+ </index>
+
+ <index name="RHQ_RESOURCE_idx_parent">
+ <field ref="PARENT_RESOURCE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_RESOURCE_ERROR">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="TIME_OCCURRED" type="LONG" required="true"/>
+ <column name="ERROR_TYPE" type="VARCHAR2" required="true" size="32"/>
+ <column name="SUMMARY" type="VARCHAR2" required="true" size="1000"/>
+ <column name="DETAIL" type="LONGVARCHAR" required="false"/>
+
+ <index name="RHQ_RES_ERROR_IDX_RES_ID">
+ <field ref="RESOURCE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_GROUP_DEF">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="DESCRIPTION" size="100" type="VARCHAR2"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="CALC_TIME" type="LONG"/>
+ <column name="CALC_INTERVAL" type="LONG"/>
+ <column name="RECURSIVE" type="BOOLEAN"/>
+ <column name="EXPRESSION" type="VARCHAR2" size="1000"/>
+
+ <index name="RHQ_GROUP_DEF_NAME" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_RESOURCE_GROUP">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <!-- this name can be longer than the size of the GROUP_BY column, which is used to uniquely identify it -->
+ <!-- Max bytes for Oracle Varchar2 to accommodate large cluster keys -->
+ <column name="NAME" required="true" size="4000" type="VARCHAR2"/>
+ <column name="DESCRIPTION" size="100" type="VARCHAR2"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+ <!-- Compatible groups only -->
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="MODIFIED_BY" required="false" size="100" type="VARCHAR2"/>
+ <column name="RECURSIVE" type="BOOLEAN"/>
+
+ <column name="GROUP_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_GROUP_DEF"/>
+ <column name="GROUP_BY" size="500" type="VARCHAR2"/>
+
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+
+ <!-- This is only set if this is a subject-owned group (like an autogroup) -->
+ <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT"/>
+
+ <!-- These two only set if this is a backing group for a resource auto-cluster -->
+ <column name="CLUSTER_KEY" type="VARCHAR2" size="4000" required="false"/>
+ <column name="CLUSTER_RESOURCE_GROUP_ID" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <!-- This is only set if this is a backing group for a resource auto-group -->
+ <column name="AUTO_GROUP_PARENT_RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE"/>
+
+ <column name="VISIBLE" type="BOOLEAN"/>
+
+ <index name="RHQ_RES_GROUP_NAME" unique="false">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- Many To Many mapping for groups to implicit resources -->
+ <table name="RHQ_RESOURCE_GROUP_RES_IMP_MAP">
+ <column name="RESOURCE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE"/>
+ <column name="RESOURCE_GROUP_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <!-- not using full words to fit index name length -->
+ <constraint name="RHQ_RES_GROUP_RES_IMP_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_ID"/>
+ <field ref="RESOURCE_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- Many To Many mapping for groups to explicit resources -->
+ <table name="RHQ_RESOURCE_GROUP_RES_EXP_MAP">
+ <column name="RESOURCE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE"/>
+ <column name="RESOURCE_GROUP_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <!-- not using full words to fit index name length -->
+ <constraint name="RHQ_RES_GROUP_RES_EXP_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_ID"/>
+ <field ref="RESOURCE_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_CONFIG_GROUP_UPDATE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="GROUP_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_GROUP"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ </table>
+
+ <table name="RHQ_CONFIG_UPDATE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="true" references="RHQ_CONFIG" ondelete="cascade"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="CONFIG_RES_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="PLUGIN_CONFIG_RES_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="AGG_RES_UPDATE_ID" type="INTEGER" required="false" references="RHQ_CONFIG_GROUP_UPDATE"/>
+ <column name="AGG_PLUGIN_UPDATE_ID" type="INTEGER" required="false" references="RHQ_CONFIG_GROUP_UPDATE"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ </table>
+
+
+ <table name="RHQ_TAGGING">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAMESPACE" type="VARCHAR2" required="false" size="20"/>
+ <column name="SEMANTIC" type="VARCHAR2" required="false" size="50"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+ </table>
+
+ <table name="RHQ_TAGGING_RESOURCE_MAP">
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_RESOURCE_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_RES_GROUP_MAP">
+ <column name="RESOURCE_GROUP_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_GROUP"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_RES_GROUP_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_GROUP_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+<!-- END: inventory-schema.xml -->
+<!-- BEGIN: authz-schema.xml -->
+
+
+ <table name="RHQ_ROLE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="DESCRIPTION" size="100" type="VARCHAR2"/>
+ <column name="FSYSTEM" type="BOOLEAN" default="false"/>
+
+ <index name="RHQ_ROLE_NAME_KEY" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ROLE_RESOURCE_GROUP_MAP">
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+ <column name="RESOURCE_GROUP_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <constraint name="RHQ_ROLE_RES_GROUP_MAP_KEY">
+ <primaryKey>
+ <field ref="ROLE_ID"/>
+ <field ref="RESOURCE_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_ROLE_LDAP_GROUP">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+ <column name="LDAP_GROUP_NAME" size="128" required="true" type="VARCHAR2"/>
+
+ <index name="RHQ_ROLE_LDAP_GROUP_IDX" unique="true">
+ <field ref="ROLE_ID"/>
+ <field ref="LDAP_GROUP_NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PERMISSION">
+ <column name="ROLE_ID" type="INTEGER" references="RHQ_ROLE" required="true"/>
+ <column name="OPERATION" type="INTEGER" required="true"/>
+ <constraint name="RHQ_PERMISSION_PK">
+ <primaryKey>
+ <field ref="ROLE_ID"/>
+ <field ref="OPERATION"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_SUBJECT_ROLE_MAP">
+ <column name="SUBJECT_ID" required="true" type="INTEGER" references="RHQ_SUBJECT"/>
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+
+ <constraint name="RHQ_SUBJECT_ROLE_MAPPING_KEY">
+ <primaryKey>
+ <field ref="SUBJECT_ID"/>
+ <field ref="ROLE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_SUBJECT_ROLE_LDAP_MAP">
+ <column name="SUBJECT_ID" required="true" type="INTEGER" references="RHQ_SUBJECT"/>
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+ <constraint name="RHQ_SUBJECT_ROLE_LDAP_MAP_PK">
+ <primaryKey>
+ <field ref="SUBJECT_ID" />
+ <field ref="ROLE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+<!-- END: authz-schema.xml -->
+<!-- BEGIN: search-schema.xml -->
+
+
+ <table name="RHQ_SAVED_SEARCH">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CONTEXT" type="VARCHAR2" size="25" required="true"/>
+
+ <column name="NAME" type="VARCHAR2" size="200" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="500" required="false"/>
+ <column name="PATTERN" type="VARCHAR2" size="1000" required="true"/>
+
+ <column name="LAST_COMPUTE_TIME" type="LONG" required="true"/>
+ <column name="RESULT_COUNT" type="LONG" required="false"/>
+
+ <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT" required="true"/>
+ <column name="GLOBAL" type="BOOLEAN" required="true"/>
+ </table>
+
+<!-- END: search-schema.xml -->
+<!-- BEGIN: dashboard-schema.xml -->
+
+
+
+ <table name="RHQ_DASHBOARD">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="200" required="true"/>
+ <column name="SUBJECT_ID" type="INTEGER" required="true" references="RHQ_SUBJECT"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_RESOURCE_GROUP"/>
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <column name="SHARED" type="BOOLEAN" required="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ </table>
+
+
+ <table name="RHQ_DASHBOARD_PORTLET">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="200" required="true"/>
+ <column name="PORTLET_KEY" type="VARCHAR2" size="200" required="true"/>
+ <column name="COL" type="INTEGER" required="true"/>
+ <column name="COL_INDEX" type="INTEGER" required="true"/>
+ <column name="HEIGHT" type="INTEGER" required="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="DASHBOARD_ID" type="INTEGER" required="false" references="RHQ_DASHBOARD"/>
+ </table>
+
+<!-- END: dashboard-schema.xml -->
+<!-- BEGIN: operation-schema.xml -->
+
+
+ <table name="RHQ_OPERATION_DEF">
+
+ <!-- === required columns === -->
+
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE(ID)"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+
+ <!-- === optional columns === -->
+
+ <!-- an OSGI version range - if null, the operation def applies to all versions of the associated resource type -->
+ <column name="RESOURCE_VERSION_RANGE" type="VARCHAR2" size="100"/>
+
+ <!-- A parameter config definition is only required for operations that have parameters. -->
+ <!-- A results config definition is only required for operations that return data. -->
+ <column name="PARAMETER_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="RESULTS_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="4000"/>
+ <column name="TIMEOUT" type="INTEGER"/>
+
+ <!-- === business key (RESOURCE_TYPE_ID + NAME) === -->
+ <index name="RHQ_OPERATION_DEF_KEY_IDX" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_OPERATION_HISTORY">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="8"/>
+ <column name="JOB_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="JOB_GROUP" type="VARCHAR2" required="true" size="100"/>
+ <column name="OPERATION_DEF_ID" type="INTEGER" required="true" references="RHQ_OPERATION_DEF"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="STIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="PARAMETERS_CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+
+ <!-- for resource history -->
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="RESULTS_CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="GROUP_HISTORY_ID" type="INTEGER" required="false" references="RHQ_OPERATION_HISTORY"/>
+
+ <!-- for group history -->
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_RESOURCE_GROUP"/>
+
+ <index name="RHQ_OPERATION_HISTORY_JOB_IDX" unique="true">
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ <field ref="CTIME"/>
+ </index>
+
+ </table>
+
+ <!--
+ This table is really just to support some specific use-cases.
+ Specifically, to be able to get a list of histories for a specific schedule (aka quartz job)
+ and to be able to query a list of all schedules along with their associated resource/group IDs
+ possibly sorted by their next fire time.
+ Note that a NULL next fire time means it won't fire again and the row is probaby about to be deleted;
+ we can probably not even insert rows with NULL and make it a non-nullable field. But rather than
+ code special conditions into the session bean, we'll allow a short-lived NULL next fire time row.
+ -->
+ <table name="RHQ_OPERATION_SCHEDULE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+
+ <column name="JOB_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="JOB_GROUP" type="VARCHAR2" required="true" size="100"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="8"/>
+ <column name="NEXT_FIRE_TIME" type="LONG" required="false"/>
+
+ <!-- for resource history -->
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+
+ <!-- for group history -->
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_RESOURCE_GROUP"/>
+
+ <!--
+ Note, this is the same as the primary key that Quartz uses for its schedules (RHQ_QRTZ_JOB_DETAILS).
+ We do not need to add DTYPE to the key, because we ensure the name/group are unique across resource/group
+ schedules
+ -->
+ <!-- === business key (JOB_NAME + JOB_GROUP) === -->
+ <index name="RHQ_OPERATION_SCHEDULE_KEY_IDX" unique="true">
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ </index>
+ </table>
+
+<!-- END: operation-schema.xml -->
+<!-- BEGIN: event-schema.xml -->
+
+
+ <!-- metadata -->
+
+ <table name="RHQ_EVENT_DEF">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE(ID)"/>
+
+ <column name="NAME" type="VARCHAR2" size="100" required="true"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+
+ <index name="RHQ_EVENT_DEF_IDX" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- instance data -->
+
+ <table name="RHQ_EVENT_SOURCE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="EVENT_DEF_ID" type="INTEGER" required="true" references="RHQ_EVENT_DEF(ID)"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE(ID)"/>
+
+ <column name="LOCATION" required="true" size="2000" type="VARCHAR2"/>
+
+ <index name="RHQ_EVENT_SOURCE_IDX" unique="true">
+ <field ref="EVENT_DEF_ID"/>
+ <field ref="RESOURCE_ID"/>
+ <field ref="LOCATION"/>
+ </index>
+ </table>
+
+ <table name="RHQ_EVENT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="EVENT_SOURCE_ID" type="INTEGER" required="true" references="RHQ_EVENT_SOURCE(ID)"/>
+
+ <column name="TIMESTAMP" required="true" type="LONG"/>
+ <column name="SEVERITY" required="true" size="20" type="VARCHAR2"/>
+ <column name="DETAIL" required="true" size="4000" type="VARCHAR2"/>
+ <index name="RHQ_EVENT_IDX" unique="false">
+ <field ref="EVENT_SOURCE_ID"/>
+ <field ref="TIMESTAMP"/>
+ </index>
+ </table>
+
+<!-- END: event-schema.xml -->
+<!-- BEGIN: alert-schema.xml -->
+
+
+ <table name="RHQ_ALERT_DEFINITION">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="PARENT_ID" type="INTEGER" required="false"/>
+ <column name="GROUP_ALERT_DEF_ID" type="INTEGER" required="false"/>
+ <column name="DESCRIPTION" required="false" size="250" type="VARCHAR2"/>
+ <column name="PRIORITY" type="VARCHAR2" size="15" required="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE" required="false"/>
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE" required="false"/>
+ <column name="RESOURCE_GROUP_ID" type="INTEGER" references="RHQ_RESOURCE_GROUP" required="false"/>
+ <column name="ENABLED" required="true" default="TRUE" type="BOOLEAN"/>
+
+ <column name="REQUIRED" required="true" type="SMALLINT"/>
+
+ <column name="RECOVERY_ID" type="INTEGER" required="true"/>
+ <!-- required, but 0 effectively means null -->
+ <column name="WILL_RECOVER" required="true" default="false" type="BOOLEAN"/>
+ <column name="NOTIFY_FILTERED" required="true" default="false" type="BOOLEAN"/>
+ <column name="CONTROL_FILTERED" required="true" default="FALSE" type="BOOLEAN"/>
+
+ <column name="DELETED" required="true" default="FALSE" type="BOOLEAN"/>
+ <column name="READ_ONLY" required="true" default="FALSE" type="BOOLEAN"/>
+
+ <column name="DAMPENING_CATEGORY" type="SMALLINT" required="true"/>
+ <column name="DAMPENING_VALUE" type="INTEGER"/>
+ <column name="DAMPENING_VALUE_UNITS" type="SMALLINT"/>
+ <column name="DAMPENING_PERIOD" type="INTEGER"/>
+ <column name="DAMPENING_PERIOD_UNITS" type="SMALLINT"/>
+ </table>
+
+ <table name="RHQ_ALERT_DAMPEN_EVENT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="EVENT_TYPE" required="true" type="SMALLINT"/>
+ <column name="EVENT_TIMESTAMP" required="true" type="LONG"/>
+
+ <index name="RHQ_DAMPENING_EVENT_TYPE_IDX">
+ <field ref="EVENT_TYPE"/>
+ </index>
+ <index name="RHQ_DAMPENING_EVENT_TS_IDX">
+ <field ref="EVENT_TIMESTAMP"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ALERT_CONDITION">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="TYPE" required="true" type="VARCHAR2" size="15"/>
+ <!--
+ <column name="REQUIRED" required="true" type="BOOLEAN"/>
+ -->
+ <column name="MEASUREMENT_DEFINITION_ID" required="false" type="INTEGER"/>
+ <column name="NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="COMPARATOR" required="false" size="2" type="VARCHAR2"/>
+ <column name="THRESHOLD" required="false" type="DOUBLE"/>
+ <!-- event-based conditions use OPTION_STATUS for the string match, so should be a decent length -->
+ <column name="OPTION_STATUS" required="false" size="256" type="VARCHAR2"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="TRIGGER_ID" required="false" type="INTEGER"/>
+ </table>
+
+ <table name="RHQ_ALERT" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="RECOVERY_ID" type="INTEGER" required="true"/>
+ <!-- required, but 0 effectively means null -->
+ <column name="WILL_RECOVER" required="true" default="false" type="BOOLEAN"/>
+ <column name="ACK_TIME" required="false" type="LONG"/>
+ <column name="ACK_SUBJECT" required="false" size="100" type="VARCHAR2"/>
+ <index name="RHQ_ALERT_IDX_TIME" unique="false">
+ <field ref="CTIME"/>
+ </index>
+ <index name="RHQ_ALERT_IDX_ALERTDEF" unique="false">
+ <field ref="ALERT_DEFINITION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ALERT_NOTIF_LOG" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_ID" required="true" type="INTEGER" references="RHQ_ALERT(ID)"/>
+ <index name="RHQ_ALERT_IDX_ALERT" unique="false">
+ <field ref="ALERT_ID"/>
+ </index>
+ <column name="SENDER" required="false" size="100" type="VARCHAR2"/>
+ <column name="RESULT_STATE" required="false" size="20" type="VARCHAR2"/>
+ <column name="MESSAGE" required="false" size="4000" type="VARCHAR2"/>
+ </table>
+
+ <table name="RHQ_ALERT_CONDITION_LOG" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="ALERT_ID" required="false" type="INTEGER" references="RHQ_ALERT(ID)"/>
+ <column name="CONDITION_ID" required="true" type="INTEGER" references="RHQ_ALERT_CONDITION(ID)"/>
+ <column name="VALUE" required="true" size="250" type="VARCHAR2"/>
+ <index name="RHQ_ALERT_COND_LOG_IDX_TIME">
+ <field ref="CTIME" />
+ </index>
+ <index name="RHQ_ALERT_COND_LOG_IDX_ALERT">
+ <field ref="ALERT_ID"/>
+ </index>
+ <index name="RHQ_ALERT_COND_LOG_COND_IDX">
+ <field ref="CONDITION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ALERT_NOTIFICATION" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="SENDER_CONFIG_ID" required="false" type="INTEGER" references="RHQ_CONFIG(ID)"/>
+ <column name="EXTRA_CONFIG_ID" required="false" type="INTEGER" references="RHQ_CONFIG(ID)"/>
+ <column name="SENDER_NAME" required="true" size="100" type="VARCHAR2" />
+ </table>
+
+<!-- END: alert-schema.xml -->
+<!-- BEGIN: sysconfig-schema.xml -->
+
+
+ <table name="RHQ_SYSTEM_CONFIG">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PROPERTY_KEY" type="VARCHAR2" size="80"/>
+ <column name="PROPERTY_VALUE" type="VARCHAR2" size="300"/>
+ <column name="DEFAULT_PROPERTY_VALUE" type="VARCHAR2" size="300"/>
+ <column name="FREAD_ONLY" type="BOOLEAN" default="FALSE"/>
+
+ <index name="RHQ_SYSTEM_CONFIG_KEY_INDX" unique="true">
+ <field ref="PROPERTY_KEY"/>
+ </index>
+ </table>
+
+<!-- END: sysconfig-schema.xml -->
+<!-- BEGIN: scheduler-schema.xml -->
+
+
+ <table name="RHQ_QRTZ_JOB_DETAILS">
+ <column name="JOB_NAME" required="true" type="VARCHAR2" size="80"/>
+ <column name="JOB_GROUP" required="true" type="VARCHAR2" size="80"/>
+ <column name="DESCRIPTION" required="false" type="VARCHAR2" size="120"/>
+ <column name="JOB_CLASS_NAME" required="true" type="VARCHAR2" size="128"/>
+ <column name="IS_DURABLE" required="true" type="BOOLEAN" default="FALSE"/>
+ <column name="IS_VOLATILE" required="true" type="BOOLEAN"/>
+ <column name="IS_STATEFUL" required="true" type="BOOLEAN" default="FALSE"/>
+ <column name="REQUESTS_RECOVERY" required="true" type="BOOLEAN" default="FALSE"/>
+ <column name="JOB_DATA" required="false" type="BLOB"/>
+
+ <constraint name="RHQ_PK_QRTZ_JOB_DETAILS">
+ <primaryKey>
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_QRTZ_JOB_LISTENERS">
+ <column name="JOB_NAME" required="true" type="VARCHAR2" size="80"/>
+ <column name="JOB_GROUP" required="true" type="VARCHAR2" size="80"/>
+ <column name="JOB_LISTENER" required="true" type="VARCHAR2" size="80"/>
+
+ <constraint name="RHQ_PK_QRTZ_JOB_LISTENERS">
+ <primaryKey>
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ <field ref="JOB_LISTENER"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_JOB_LSTNRS_JN_JG">
+ <foreignKey local="JOB_NAME,JOB_GROUP"
+ references="RHQ_QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+ </table>
+
+ <table name="RHQ_QRTZ_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" required="true" size="80"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" required="true" size="80"/>
+ <column name="JOB_NAME" type="VARCHAR2" required="true" size="80"/>
+ <column name="JOB_GROUP" type="VARCHAR2" required="true" size="80"/>
+ <column name="IS_VOLATILE" type="BOOLEAN" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="120"/>
+ <column name="NEXT_FIRE_TIME" type="LONG" required="false"/>
+ <column name="PREV_FIRE_TIME" type="LONG" required="false"/>
+ <column name="PRIORITY" type="INTEGER" required="false"/>
+ <column name="TRIGGER_STATE" type="VARCHAR" required="true" size="16"/>
+ <column name="TRIGGER_TYPE" type="VARCHAR" required="true" size="8"/>
+ <column name="START_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="false"/>
+ <column name="CALENDAR_NAME" type="VARCHAR2" required="false" size="80"/>
+ <column name="MISFIRE_INSTR" type="INTEGER" required="false"/>
+ <column name="JOB_DATA" type="BLOB" required="false"/>
+
+ <constraint name="RHQ_PK_QRTZ_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_TRIGGERS_JN_JG">
+ <foreignKey local="JOB_NAME,JOB_GROUP"
+ references="RHQ_QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend these indexes. -->
+ <index name="RHQ_QRTZ_TRIGGERS_JN_JG_IDX">
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ </index>
+ <index name="RHQ_QRTZ_TRIGGERS_NFT_IDX">
+ <field ref="NEXT_FIRE_TIME"/>
+ </index>
+ <index name="RHQ_QRTZ_TRIGGERS_TS_IDX">
+ <field ref="TRIGGER_STATE"/>
+ </index>
+ <index name="RHQ_QRTZ_TRIGGERS_TS_NFT_IDX">
+ <field ref="TRIGGER_STATE"/>
+ <field ref="NEXT_FIRE_TIME"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_QRTZ_SIMPLE_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" required="true" size="80"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" required="true" size="80"/>
+ <column name="REPEAT_COUNT" type="LONG" required="true"/>
+ <column name="REPEAT_INTERVAL" type="LONG" required="true"/>
+ <column name="TIMES_TRIGGERED" type="LONG" required="true"/>
+
+ <constraint name="RHQ_PK_QRTZ_SIMPLE_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_SIMPLE_TRGRS_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <!-- Commenting out, because Oracle auto-creates an index for the
+ primary key column(s) and fails if you try to create another
+ index for the same column(s) (ips, 03/29/07).
+ -->
+ <!--
+ <index name="RHQ_QRTZ_SIMPLE_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ -->
+ </table>
+
+ <table name="RHQ_QRTZ_CRON_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="CRON_EXPRESSION" type="VARCHAR2" size="80" required="true"/>
+ <column name="TIME_ZONE_ID" type="VARCHAR2" size="80" required="false"/>
+
+ <constraint name="RHQ_PK_QRTZ_CRON_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_CRON_TRIG_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <!-- Commenting out, because Oracle auto-creates an index for the
+ primary key column(s) and fails if you try to create another
+ index for the same column(s) (ips, 03/29/07).
+ -->
+ <!--
+ <index name="RHQ_QRTZ_CRON_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ -->
+ </table>
+
+ <table name="RHQ_QRTZ_BLOB_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="BLOB_DATA" type="BLOB" required="false"/>
+
+ <constraint name="RHQ_PK_QRTZ_BLOB_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_BLOB_TRIGG_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <!-- Commenting out, because Oracle auto-creates an index for the
+ primary key column(s) and fails if you try to create another
+ index for the same column(s) (ips, 03/29/07).
+ -->
+ <!--
+ <index name="RHQ_QRTZ_BLOB_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ -->
+ </table>
+
+ <table name="RHQ_QRTZ_TRIGGER_LISTENERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_LISTENER" type="VARCHAR2" size="80" required="true"/>
+
+ <constraint name="RHQ_PK_QRTZ_TRIGGER_LISTENERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ <field ref="TRIGGER_LISTENER"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_TRGR_LSTNRS_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <index name="RHQ_QRTZ_TRGR_LSTNRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_QRTZ_FIRED_TRIGGERS">
+ <column name="ENTRY_ID" primarykey="true" type="VARCHAR2" size="95" required="true"/>
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="INSTANCE_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="FIRED_TIME" type="LONG" required="true"/>
+ <column name="PRIORITY" type="INTEGER" required="false"/>
+ <column name="STATE" type="VARCHAR2" size="16" required="true"/>
+ <column name="IS_VOLATILE" type="BOOLEAN" required="true"/>
+ <column name="JOB_NAME" type="VARCHAR2" size="80" required="false"/>
+ <column name="JOB_GROUP" type="VARCHAR2" size="80" required="false"/>
+ <column name="IS_STATEFUL" type="BOOLEAN" required="false"/>
+ <column name="REQUESTS_RECOVERY" type="BOOLEAN" required="false"/>
+
+ <!-- Quartz docs recommend these indexes. -->
+ <index name="RHQ_QRTZ_FIRED_TRGRS_TN_IDX">
+ <field ref="TRIGGER_NAME"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_TG_IDX">
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_IN_IDX">
+ <field ref="INSTANCE_NAME"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_JN_IDX">
+ <field ref="JOB_NAME"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_JG_IDX">
+ <field ref="JOB_GROUP"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_QRTZ_CALENDARS">
+ <column name="CALENDAR_NAME" primarykey="true" type="VARCHAR2" size="80" required="true"/>
+ <column name="CALENDAR" type="BLOB" required="true"/>
+ </table>
+
+ <table name="RHQ_QRTZ_PAUSED_TRIGGER_GRPS">
+ <column name="TRIGGER_GROUP" primarykey="true" type="VARCHAR2" size="80" required="true"/>
+ </table>
+
+ <table name="RHQ_QRTZ_SCHEDULER_STATE">
+ <column name="INSTANCE_NAME" primarykey="true" type="VARCHAR2" size="80" required="true"/>
+ <column name="LAST_CHECKIN_TIME" type="LONG" required="true"/>
+ <column name="CHECKIN_INTERVAL" type="LONG" required="true"/>
+ <column name="RECOVERER" type="VARCHAR2" size="80" required="false"/>
+ </table>
+
+ <table name="RHQ_QRTZ_LOCKS">
+ <column name="LOCK_NAME" primarykey="true" type="VARCHAR2" size="40" required="true"/>
+ <data LOCK_NAME="TRIGGER_ACCESS"/>
+ <data LOCK_NAME="JOB_ACCESS"/>
+ <data LOCK_NAME="CALENDAR_ACCESS"/>
+ <data LOCK_NAME="STATE_ACCESS"/>
+ <data LOCK_NAME="MISFIRE_ACCESS"/>
+ </table>
+
+<!-- END: scheduler-schema.xml -->
+<!-- BEGIN: amps-schema.xml -->
+
+
+ <table name="RHQ_PLUGIN">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="4000" type="VARCHAR2" required="false"/>
+ <column name="VERSION" size="200" type="VARCHAR2" required="false"/>
+ <column name="AMPS_VERSION" size="16" type="VARCHAR2" required="false"/>
+ <column name="ENABLED" type="BOOLEAN" required="true"/>
+ <column name="STATUS" size="16" type="VARCHAR2" required="true"/>
+ <column name="HELP" type="CLOB" required="false"/>
+ <column name="PATH" size="500" type="VARCHAR2" required="true"/>
+ <column name="MD5" size="100" type="VARCHAR2" required="true"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="DEPLOYMENT" size="8" type="VARCHAR2" required="true"/>
+ <column name="PTYPE" size="200" type="VARCHAR2" required="false"/>
+ <column name="PLUGIN_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="JOBS_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="CONTENT" type="BLOB" required="false"/>
+
+ <index name="RHQ_PLUGIN_NAME_DEPLOY_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="DEPLOYMENT"/>
+ </index>
+ </table>
+
+<!-- END: amps-schema.xml -->
+<!-- BEGIN: measurement-schema.xml -->
+
+ <table name="RHQ_MEASUREMENT_DEF">
+
+ <!-- === required columns === -->
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE(ID)"/>
+ <column name="NAME" type="VARCHAR2" size="100" required="true"/>
+
+ <!-- === optional columns === -->
+ <!-- an OSGI version range - if null, the metric def applies to all versions of the associated resource type -->
+ <column name="RESOURCE_VERSION_RANGE" type="VARCHAR2" size="100"/>
+ <column name="CATEGORY" type="SMALLINT"/>
+ <column name="UNITS" type="SMALLINT"/>
+ <column name="NUMERIC_TYPE" type="SMALLINT"/>
+ <column name="DISPLAY_TYPE" type="SMALLINT"/>
+ <column name="DATA_TYPE" type="SMALLINT"/>
+ <column name="RAW_NUMERIC_TYPE" type="SMALLINT"/>
+ <column name="DEFAULT_ON" type="BOOLEAN" default="false"/>
+ <column name="DEFAULT_INTERVAL" type="LONG" />
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DISPLAY_ORDER" type="INTEGER" default="1000"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="500"/>
+ <column name="DESTINATION_TYPE" type="VARCHAR2" size="100"/>
+
+ <column name="VERSION" type="INTEGER"/>
+ <!-- for optimistic locking -->
+
+ <!-- === business key (RESOURCE_TYPE_ID + NAME + RAW_NUMERIC_TYPE) === -->
+ <index name="RHQ_METRIC_DEF_KEY_IDX" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ <field ref="RAW_NUMERIC_TYPE"/>
+ </index>
+ <index name="RHQ_METRIC_DEF_NT_IDX">
+ <field ref="NUMERIC_TYPE"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_SCHED">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+
+ <column name="ENABLED" type="BOOLEAN" default="false"/>
+ <column name="MTIME" type="LONG" />
+ <column name="DEFINITION" type="INTEGER" references="RHQ_MEASUREMENT_DEF(ID)"/>
+ <column name="VERSION" type="INTEGER" />
+ <column name="COLL_INTERVAL" type="LONG" />
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE(ID)"/>
+ <index name="RHQ_MEAS_SCHED_UNIQ" unique="true">
+ <field ref="RESOURCE_ID"/>
+ <field ref="DEFINITION"/>
+ </index>
+ <index name="RHQ_MEAS_SCHED_RESID_IDX">
+ <field ref="RESOURCE_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_BLINE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+
+ <column name="BL_USER_ENTERED" type="BOOLEAN" default="false" required="true"/>
+ <column name="BL_MIN" type="DOUBLE" required="true"/>
+ <column name="BL_MAX" type="DOUBLE" required="true"/>
+ <column name="BL_MEAN" type="DOUBLE" required="true"/>
+ <column name="BL_COMPUTE_TIME" type="LONG" required="true"/>
+ <column name="SCHEDULE_ID" type="INTEGER" required="true" references="RHQ_MEASUREMENT_SCHED(ID)"/>
+ <index name="RHQ_MEAS_BASELINE_CTIME_IDX">
+ <field ref="BL_COMPUTE_TIME"/>
+ </index>
+ <index name="RHQ_MEAS_BASELINE_SID_IDX">
+ <field ref="SCHEDULE_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_NUM_1H" logging="false" cache="true"
+ tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@" storage-options="freelists 20">
+
+ <column name="TIME_STAMP" required="true" type="LONG"/>
+ <column name="SCHEDULE_ID" required="true" type="INTEGER"/>
+ <column name="VALUE" required="false" type="DOUBLE"/>
+ <column name="MINVALUE" required="false" type="DOUBLE"/>
+ <column name="MAXVALUE" required="false" type="DOUBLE"/>
+
+ <constraint name="RHQ_MEAS_DATA_1H_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="RHQ_MEAS_DATA_1H_TIME_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_NUM_6H" logging="false" cache="true"
+ tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@" storage-options="freelists 20">
+
+ <column name="TIME_STAMP" required="true" type="LONG"/>
+ <column name="SCHEDULE_ID" required="true" type="INTEGER"/>
+ <column name="VALUE" required="false" type="DOUBLE"/>
+ <column name="MINVALUE" required="false" type="DOUBLE"/>
+ <column name="MAXVALUE" required="false" type="DOUBLE"/>
+
+ <constraint name="RHQ_MEAS_DATA_6H_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="RHQ_MEAS_DATA_6H_TIME_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_NUM_1D" logging="false" cache="true"
+ tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@" storage-options="freelists 20">
+
+ <column name="TIME_STAMP" required="true" type="LONG"/>
+ <column name="SCHEDULE_ID" required="true" type="INTEGER"/>
+ <column name="VALUE" required="false" type="DOUBLE"/>
+ <column name="MINVALUE" required="false" type="DOUBLE"/>
+ <column name="MAXVALUE" required="false" type="DOUBLE"/>
+
+ <constraint name="RHQ_MEAS_DATA_1D_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="RHQ_MEAS_DATA_1D_TIME_IDX">
+ <field ref="TIME_STAMP" />
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_TRAIT">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER" />
+ <column name="VALUE" type="VARCHAR2" size="4000" />
+ <constraint name="RHQ_MEAS_DATA_TRAIT_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+ <table name="RHQ_CALLTIME_DATA_KEY">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="SCHEDULE_ID" type="INTEGER" required="true"/>
+ <column name="CALL_DESTINATION" type="VARCHAR2" size="4000" required="true"/>
+ <index name="RHQ_CALLTIME_DATA_KEY_IDX" unique="true">
+ <field ref="SCHEDULE_ID"/>
+ <field ref="CALL_DESTINATION"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_CALLTIME_DATA_VALUE">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="KEY_ID" type="INTEGER" references="RHQ_CALLTIME_DATA_KEY" required="true"/>
+ <column name="BEGIN_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="true"/>
+ <column name="MINIMUM" type="DOUBLE" required="true"/>
+ <column name="MAXIMUM" type="DOUBLE" required="true"/>
+ <column name="TOTAL" type="DOUBLE" required="true"/>
+ <column name="COUNT" type="LONG" required="true"/>
+ <index name="RHQ_CT_DA_VA_END_TIM_IDX">
+ <field ref="END_TIME"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_AVAILABILITY">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE(ID)"/>
+ <column name="START_TIME" type="LONG" required="true" />
+ <column name="END_TIME" type="LONG" required="false" />
+ <column name="AVAILABILITY_TYPE" type="SMALLINT" required="false" />
+ <index name="RHQ_AVAIL_RESOURCE_START_IDX">
+ <field ref="RESOURCE_ID"/>
+ <field ref="START_TIME"/>
+ </index>
+ <!-- only one null row can exist for any resource -->
+ <index name="RHQ_AVAIL_RESOURCE_END_IDX" condition="END_TIME IS NULL">
+ <field ref="RESOURCE_ID"/>
+ <field ref="END_TIME" />
+ </index>
+ </table>
+
+ <table name="RHQ_RESOURCE_AVAIL">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE(ID)" ondelete="cascade"/>
+ <column name="AVAILABILITY_TYPE" type="SMALLINT" required="false" />
+ <index name="RHQ_RESOURCE_AVAIL_IDX">
+ <field ref="RESOURCE_ID" />
+ </index>
+ </table>
+
+ <table name="RHQ_MEASUREMENT_OOB">
+ <column name="SCHEDULE_ID" type="INTEGER" references="RHQ_MEASUREMENT_SCHED(ID)" required="true"/>
+ <column name="TIME_STAMP" type="LONG" required="true"/>
+ <column name="OOB_FACTOR" type="INTEGER" required="true" />
+ <constraint name="RHQ_MEAS_OOB_ID_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_MEASUREMENT_OOB_TMP">
+ <column name="SCHEDULE_ID" type="INTEGER" required="true"/>
+ <column name="TIME_STAMP" type="LONG" required="true"/>
+ <column name="OOB_FACTOR" type="INTEGER" required="true" />
+ <constraint name="RHQ_MEAS_OOB_TMP_ID_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_NUMBERS">
+ <column name="i" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true" />
+ </table>
+
+
+ <table name="RHQ_MEAS_DATA_NUM_R00">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R00_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R00_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R01">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R01_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R01_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R02">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R02_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R02_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R03">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R03_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R03_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R04">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R04_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R04_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R05">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R05_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R05_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R06">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R06_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R06_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R07">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R07_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R07_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R08">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R08_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R08_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R09">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R09_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R09_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R10">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R10_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R10_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R11">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R11_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R11_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R12">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R12_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R12_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R13">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R13_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R13_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R14">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R14_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R14_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+<!-- END: measurement-schema.xml -->
+<!-- BEGIN: content-schema.xml -->
+
+
+ <table name="RHQ_ARCHITECTURE">
+ <column name="ID" default="sequence-only" initial="100" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="50" type="VARCHAR2" required="true"/>
+ <index name="RHQ_ARCHITECTURE_NAME_IDX" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_REPO_GROUP_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ </table>
+
+
+ <table name="RHQ_REPO_GROUP">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+
+ <column name="REPO_GROUP_TYPE_ID" type="INTEGER" references="RHQ_REPO_GROUP_TYPE" required="true"/>
+
+ <index name="RHQ_REPO_GROUP_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="REPO_GROUP_TYPE_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_CONTENT_SOURCE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="false"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="PLUGIN_NAME" size="100" type="VARCHAR2" required="false"/>
+ <!-- we might want this as part of natural key -->
+ <column name="DEFAULT_LAZY_LOAD" type="BOOLEAN" required="true"/>
+ <column name="DEFAULT_DOWNLOAD_MODE" size="16" type="VARCHAR2" required="true"/>
+ <column name="DEFAULT_SYNC_SCHEDULE" size="64" type="VARCHAR2" required="false"/>
+ <column name="API_CLASS" size="100" type="VARCHAR2" required="true"/>
+
+ <column name="SOURCE_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF" required="false"/>
+
+ <index name="RHQ_CONTENT_SOURCE_TYPE_IDX" unique="true">
+ <field ref="NAME"/>
+ <!-- <field ref="PLUGIN_NAME"/> -->
+ </index>
+ </table>
+
+ <table name="RHQ_CONTENT_SOURCE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="LAZY_LOAD" type="BOOLEAN" required="true"/>
+ <column name="DOWNLOAD_MODE" size="16" type="VARCHAR2" required="true"/>
+ <column name="SYNC_SCHEDULE" size="64" type="VARCHAR2" required="false"/>
+ <column name="LOAD_ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="CREATION_TIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED_TIME" type="LONG" required="true"/>
+
+ <column name="CONTENT_SOURCE_TYPE_ID" type="INTEGER" references="RHQ_CONTENT_SOURCE_TYPE" required="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+
+ <index name="RHQ_CONTENT_SOURCE_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="CONTENT_SOURCE_TYPE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_REPO">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CREATION_TIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED_TIME" type="LONG" required="true"/>
+ <column name="IS_CANDIDATE" type="BOOLEAN" required="true"/>
+ <column name="SYNC_SCHEDULE" size="64" type="VARCHAR2" required="false"/>
+ <column name="OWNER_ID" type="INTEGER" required="false" references="RHQ_SUBJECT" />
+ <column name="IS_PRIVATE" type="BOOLEAN" required="true" />
+
+ <index name="RHQ_REPO_IDX" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_REPO_RELATION_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ </table>
+
+
+ <table name="RHQ_REPO_RELATION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="RELATED_REPO_ID" type="INTEGER" references="RHQ_REPO" required="true"/>
+ <column name="REPO_RELATION_TYPE_ID" type="INTEGER" references="RHQ_REPO_RELATION_TYPE" required="true"/>
+ </table>
+
+
+
+ <table name="RHQ_PACKAGE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="false"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CATEGORY" size="50" type="VARCHAR2" required="false"/>
+ <column name="DISCOVERY_INTERVAL" type="INTEGER" required="false"/>
+ <column name="IS_CREATION_DATA" type="BOOLEAN" required="true"/>
+ <column name="SUPPORTS_ARCHITECTURE" type="BOOLEAN" required="true"/>
+
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE" required="false"/>
+ <column name="DEPLOYMENT_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF" required="false"/>
+ <column name="PACKAGE_EXTRA_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG_DEF" required="false"/>
+
+ <index name="RHQ_PACKAGE_TYPE_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="RESOURCE_TYPE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_PACKAGE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="CLASSIFICATION" size="200" type="VARCHAR2" required="false"/>
+
+ <column name="PACKAGE_TYPE_ID" type="INTEGER" references="RHQ_PACKAGE_TYPE" required="true"/>
+
+ <index name="RHQ_PACKAGE_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="PACKAGE_TYPE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PACKAGE_BITS">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BITS" type="LARGEOBJECT" required="false"/>
+ </table>
+
+ <table name="RHQ_PACKAGE_VERSION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="false"/>
+ <column name="SHORT_DESCRIPTION" size="10000" type="CLOB" required="false"/>
+ <column name="LONG_DESCRIPTION" size="50000" type="CLOB" required="false"/>
+ <column name="VERSION" size="500" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_VERSION" size="500" type="VARCHAR2" required="false"/>
+ <column name="FILE_NAME" size="255" type="VARCHAR2" required="false"/>
+ <column name="FILE_SIZE" type="LONG" required="false"/>
+ <column name="FILE_MD5" size="32" type="VARCHAR2" required="false"/>
+ <column name="FILE_SHA256" size="64" type="VARCHAR2" required="false"/>
+ <column name="FILE_CREATION_TIME" type="LONG" required="false"/>
+ <column name="LICENSE_NAME" size="255" type="VARCHAR2" required="false"/>
+ <column name="LICENSE_VERSION" size="20" type="VARCHAR2" required="false"/>
+ <column name="METADATA" type="BLOB" required="false"/>
+
+ <column name="PACKAGE_ID" type="INTEGER" references="RHQ_PACKAGE" required="true"/>
+ <column name="ARCHITECTURE_ID" type="INTEGER" references="RHQ_ARCHITECTURE" required="true"/>
+ <column name="CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="PACKAGE_BITS_ID" type="INTEGER" references="RHQ_PACKAGE_BITS" required="false"/>
+
+ <index name="RHQ_PACKAGE_VERSION_IDX" unique="true">
+ <field ref="PACKAGE_ID"/>
+ <field ref="VERSION"/>
+ <field ref="ARCHITECTURE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_CONTENT_REQ">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="REQUEST_TYPE" type="VARCHAR2" required="true" size="20"/>
+ <column name="NOTES" type="VARCHAR2" required="false" size="512"/>
+ </table>
+
+ <table name="RHQ_INSTALLED_PACKAGE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="INSTALLATION_TIME" type="LONG" required="false"/>
+
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE" required="true"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" references="RHQ_PACKAGE_VERSION" required="true"/>
+ <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT" required="false"/>
+ </table>
+
+ <table name="RHQ_INSTALLED_PKG_HIST">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STATUS" type="VARCHAR2" size="24" required="true"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="HISTORY_TIMESTAMP" type="LONG" required="false"/>
+
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" references="RHQ_PACKAGE_VERSION" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE" required="true"/>
+ <column name="DEPLOYMENT_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="CONTENT_SERVICE_REQUEST_ID" type="INTEGER" references="RHQ_CONTENT_REQ" required="false"/>
+ </table>
+
+ <table name="RHQ_CONTENT_SRC_SYNC">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STATUS" type="VARCHAR2" size="16" required="true"/>
+ <column name="START_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="false"/>
+ <column name="RESULTS" type="LONGVARCHAR" required="false"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ </table>
+
+ <table name="RHQ_REPO_SYNC">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STATUS" type="VARCHAR2" size="16" required="true"/>
+ <column name="START_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="false"/>
+ <column name="RESULTS" type="LONGVARCHAR" required="false"/>
+ <column name="PERCENT_COMPLETE" type="LONG" required="false"/>
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ </table>
+
+
+ <table name="RHQ_PACKAGE_INST_STEP">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STEP_KEY" type="VARCHAR2" size="500" required="true"/>
+ <column name="STEP_ORDER" type="INTEGER" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="4000" required="true"/>
+ <column name="ERROR_MSG" type="LONGVARCHAR" required="false"/>
+ <column name="RESULT" type="VARCHAR2" size="25" required="true"/>
+
+ <column name="INSTALLED_PKG_HIST_ID" type="INTEGER" references="RHQ_INSTALLED_PKG_HIST"/>
+ </table>
+
+ <table name="RHQ_REPO_RESOURCE_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_RESOURCE_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="RESOURCE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_REPO_CONTENT_SRC_MAP"> 1
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_CONTENT_SRC_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="CONTENT_SRC_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_REPO_REPO_GROUP_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="REPO_GROUP_ID" type="INTEGER" required="true" references="RHQ_REPO_GROUP"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_REPO_GROUP_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="REPO_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_REPO_REPO_RELATION_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="REPO_RELATION_ID" type="INTEGER" required="true" references="RHQ_REPO_RELATION"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_REPO_RELATION_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="REPO_RELATION_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+ <table name="RHQ_REPO_PKG_VERSION_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_PKG_VER_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="PACKAGE_VERSION_ID"/>
+ </primaryKey>
+ </constraint>
+ <index name="RHQ_REPO_PKG_VER_MAP_IDX" unique="false">
+ <field ref="PACKAGE_VERSION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PKG_VER_CONTENT_SRC_MAP">
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ <column name="LOCATION" type="VARCHAR2" size="4000" required="true"/>
+
+ <constraint name="RHQ_PKG_VER_CONTENT_SRC_KEY">
+ <primaryKey>
+ <field ref="PACKAGE_VERSION_ID"/>
+ <field ref="CONTENT_SRC_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_PKG_PRD_MAP">
+ <column name="PKG_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="PRD_ID" type="INTEGER" required="true" references="RHQ_PRD_VER"/>
+
+ <constraint name="RHQ_PKG_PRD_KEY">
+ <primaryKey>
+ <field ref="PKG_ID"/>
+ <field ref="PRD_ID"/>
+ </primaryKey>
+ </constraint>
+
+ </table>
+
+ <table name="RHQ_DISTRIBUTION_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+
+ </table>
+
+ <table name="RHQ_DISTRIBUTION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DISTRIBUTION_TYPE_ID" type="INTEGER" required="true" references="RHQ_DISTRIBUTION_TYPE"/>
+ <column name="LABEL" size="64" type="VARCHAR2" required="true"/>
+ <column name="BASE_PATH" size="256" type="VARCHAR2" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_DISTRIBUTION_IDX" unique="true">
+ <field ref="LABEL"/>
+ <field ref="BASE_PATH"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_REPO_DISTRIBUTION">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="DISTRIBUTION_ID" type="INTEGER" required="true" references="RHQ_DISTRIBUTION"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_DIST_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="DISTRIBUTION_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+
+ <table name="RHQ_DISTRIBUTION_FILE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DISTRIBUTION_ID" type="INTEGER" required="true" references="RHQ_DISTRIBUTION"/>
+ <column name="RELATIVE_FILENAME" size="256" type="VARCHAR2" required="true"/>
+ <!--<column name="FILE_SIZE" type="NUMBER" required="true"/>-->
+ <column name="MD5SUM" size="64" type="VARCHAR2" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+ <!--<column name="CTIME" type="LONG" required="true"/>-->
+
+ <index name="RHQ_DISTRIBUTION_FILE_IDX" unique="true">
+ <field ref="DISTRIBUTION_ID"/>
+ <field ref="RELATIVE_FILENAME"/>
+ </index>
+ </table>
+
+
+
+
+ <table name="RHQ_ADVISORY">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY" size="64" type="VARCHAR2" required="true"/>
+ <column name="ADVISORY_TYPE" size="64" type="VARCHAR2" required="true" />
+ <column name="ADVISORY_REL" size="64" type="VARCHAR2" required="false"/>
+ <column name="ADVISORY_NAME" size="64" type="VARCHAR2" required="false"/>
+ <column name="DESCRIPTION" size="4000" type="VARCHAR2" required="false"/>
+ <column name="SYNOPSIS" size="4000" type="VARCHAR2" required="true"/>
+ <column name="TOPIC" size="4000" type="VARCHAR2" required="false"/>
+ <column name="SOLUTION" size="4000" type="VARCHAR2" required="false"/>
+ <column name="SEVERITY" size="64" type="VARCHAR2" required="false"/>
+ <column name="ISSUE_DATE" type="LONG" required="false"/>
+ <column name="UPDATE_DATE" type="LONG" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_NAME_UQ" unique="true">
+ <field ref="ADVISORY_NAME"/>
+ </index>
+
+ <index name="RHQ_ADVISORY_UQ" unique="true">
+ <field ref="ADVISORY"/>
+ </index>
+
+ <index name="RHQ_ADVISORY_UDATE_IDX" unique="false">
+ <field ref="UPDATE_DATE"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ADVISORY_PACKAGE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_PKG_IDX" unique="true">
+ <field ref="ADVISORY_ID"/>
+ <field ref="PACKAGE_VERSION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_CVE">
+ <column name="ID" default="sequence-only" initial="101" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="64" type="VARCHAR2" required="true"/>
+ </table>
+
+ <table name="RHQ_ADVISORY_CVE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="CVE_ID" type="INTEGER" required="true" references="RHQ_CVE"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_CVE_IDX" unique="true">
+ <field ref="ADVISORY_ID"/>
+ <field ref="CVE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_ADVISORY_BUGLIST">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="BUG_ID" size="256" type="VARCHAR2" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_BUG_IDX" unique="true">
+ <field ref="ADVISORY_ID"/>
+ <field ref="BUG_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_REPO_ADVISORY">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_ADV_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="ADVISORY_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- BUNDLE_TYPE is things like "Cobbler profile" or "file-based bundle" or "puppet recipe" -->
+ <table name="RHQ_BUNDLE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_TYPE_UNIQUE" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- BUNDLE is a named piece of content that can be versioned and installed somewhere -->
+ <table name="RHQ_BUNDLE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="BUNDLE_TYPE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_TYPE"/>
+ <column name="PACKAGE_TYPE_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_TYPE"/>
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_UNIQUE" unique="true">
+ <field ref="BUNDLE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- BUNDLE_VERSION represents an actual piece of content that needs to be installed somewhere -->
+ <table name="RHQ_BUNDLE_VERSION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="VERSION" size="500" type="VARCHAR2" required="true"/>
+ <column name="VERSION_ORDER" type="INTEGER" required="true"/>
+ <column name="ACTION" type="CLOB" required="true"/>
+ <column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF" />
+ <column name="BUNDLE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_VERSION_UNIQUE" unique="true">
+ <field ref="BUNDLE_ID"/>
+ <field ref="NAME"/>
+ <field ref="VERSION"/>
+ </index>
+ </table>
+
+ <!-- Many-to-many table that links many repos to a particular bundle version. destination platforms -->
+ <!-- would be required to have associations to the specified repos (to access required content -->
+ <table name="RHQ_BUNDLE_VERSION_REPO">
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+
+ <constraint name="RHQ_BUNDLE_VERSION_REPO_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_VERSION_ID"/>
+ <field ref="REPO_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- BUNDLE_FILE represents a file that is associated with (possibly bundled inside) a bundle version -->
+ <table name="RHQ_BUNDLE_FILE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ </table>
+
+ <!-- A logical destination for a bundle deployment. Defines the platforms and directory on those targets. -->
+ <table name="RHQ_BUNDLE_DESTINATION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="BUNDLE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE"/>
+ <column name="GROUP_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_GROUP"/>
+ <column name="DEPLOY_DIR" size="256" type="VARCHAR2" required="true"/>
+ <column name="DEST_BASE_DIR_NAME" size="200" type="VARCHAR2" required="true"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_DESTINATION_UNIQUE" unique="true">
+ <field ref="BUNDLE_ID"/>
+ <field ref="GROUP_ID"/>
+ <field ref="DEPLOY_DIR"/>
+ </index>
+ </table>
+
+ <!-- An actual deployment of a bundle version to a destination, with a specific config. Bundle deployments
+ can differ only on ctime, which is assumed to be different -->
+ <table name="RHQ_BUNDLE_DEPLOYMENT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="BUNDLE_DESTINATION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DESTINATION"/>
+ <column name="CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG" />
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="false" size="255"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="IS_LIVE" type="BOOLEAN" required="true"/>
+ <column name="REPLACED_BUNDLE_DEPLOYMENT_ID" type="INTEGER" required="false" references="RHQ_BUNDLE_DEPLOYMENT"/>
+ </table>
+
+ <!-- Represents a bundle version that is deployed on a platform resource -->
+ <table name="RHQ_BUNDLE_RES_DEPLOY">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BUNDLE_DEPLOYMENT_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DEPLOYMENT" />
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE" />
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <index name="RHQ_BUNDLE_RES_DEPLOY_IDX" unique="true">
+ <field ref="BUNDLE_DEPLOYMENT_ID"/>
+ <field ref="RESOURCE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_BUNDLE_RES_DEP_HIST">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BUNDLE_RES_DEPLOY_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_RES_DEPLOY" />
+ <column name="SUBJECT_NAME" required="false" size="255" type="VARCHAR2"/>
+ <column name="AUDIT_TIME" required="true" type="LONG"/>
+ <column name="ACTION" required="true" size="128" type="VARCHAR2"/>
+ <column name="INFO" required="true" size="512" type="VARCHAR2"/>
+ <column name="CATEGORY" required="false" size="32" type="VARCHAR2"/>
+ <column name="STATUS" required="true" type="VARCHAR2" size="16"/>
+ <column name="MESSAGE" required="false" type="LONGVARCHAR"/>
+ <column name="ATTACHMENT" required="false" type="LONGVARCHAR"/>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_MAP">
+ <column name="BUNDLE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_VERSION_MAP">
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_VER_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_VERSION_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_DEPLOY_MAP">
+ <column name="BUNDLE_DEPLOYMENT_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DEPLOYMENT"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_DEP_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_DEPLOYMENT_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_DEST_MAP">
+ <column name="BUNDLE_DESTINATION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DESTINATION"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_DES_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_DESTINATION_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- Drift Management Tables -->
+ <table name="RHQ_DRIFT_DEF_TEMPLATE">
+ <column name="ID" default="sequence-only" initial="1001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="NAME" type="VARCHAR2" size="128" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="512" required="false"/>
+ <!-- true if defined by user, false if provided by plugin -->
+ <column name="IS_USER_DEFINED" type="BOOLEAN" required="true"/>
+ <!--
+ Change sets are managed by the drift server plugins; therefore, we cannot maintain
+ a FK constraint on the change set id. And the type cannot be integer because
+ other back ends like MongoDB use other types that are basically variants of a
+ UUID
+
+ jsanda
+ -->
+ <column name="DRIFT_CHANGE_SET_ID" type="VARCHAR2" size="64" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <index name="RHQ_DRIFT_DEF_TEMPLATE_UNIQUE" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- Content of a file being managed for drift. Used for diff and/or remediation -->
+ <table name="RHQ_DRIFT_FILE">
+ <column name="HASH_ID" type="VARCHAR2" size="64" primarykey="true" required="true"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="DATA" type="LARGEOBJECT" required="false"/>
+ <column name="DATA_SIZE" type="LONG" required="false"/>
+ <column name="STATUS" type="VARCHAR2" size="20" required="true"/>
+ </table>
+
+ <!-- A single drift definition defining file tracking
+ Note: A resource or group (todo: group, other?) can have zero or more drift configurations.
+ Note: The name, interval and is_enabled values are also stored withing the referenced config.
+ This allows us to use the config editor to manipulate all fields.
+ Note: Name is read-only
+ Note: Interval unit is millis
+ -->
+ <table name="RHQ_DRIFT_DEFINITION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="DRIFT_DEF_TEMPLATE_ID" type="INTEGER" required="false" references="RHQ_DRIFT_DEF_TEMPLATE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="NAME" type="VARCHAR2" size="512" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="512" required="false"/>
+ <column name="INTERVAL" type="LONG" required="true"/>
+ <column name="IS_ENABLED" type="BOOLEAN" required="true"/>
+ <column name="DRIFT_HANDLING_MODE" type="VARCHAR2" size="20" required="true"/>
+ <column name="IS_PINNED" type="BOOLEAN" required="true"/>
+ <column name="IS_ATTACHED" type="BOOLEAN" required="true"/>
+ <column name="COMPLIANCE_STATUS" type="INTEGER" required="true"/>
+ </table>
+
+ <!-- A set of drift records (note, this is for the JPA server plugin impl only) -->
+ <table name="RHQ_DRIFT_SET">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ </table>
+
+ <!-- A drift change-set report for a resource (note, this is for the JPA server plugin impl only) -->
+ <table name="RHQ_DRIFT_CHANGE_SET">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DRIFT_SET_ID" type="INTEGER" required="false" references="RHQ_DRIFT_SET"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <!-- Version 0 is initial change-set -->
+ <column name="VERSION" type="INTEGER" required="true"/>
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="DRIFT_DEFINITION_ID" type="INTEGER" required="false" references="RHQ_DRIFT_DEFINITION"/>
+ <!-- the drift handling mode at changeset creation time -->
+ <column name="DRIFT_HANDLING_MODE" type="VARCHAR2" size="20" required="true"/>
+ </table>
+
+ <!-- A single occurence of drift for a resource (note, this is for the JPA server plugin impl only) -->
+ <table name="RHQ_DRIFT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <column name="DRIFT_SET_ID" type="INTEGER" required="false" references="RHQ_DRIFT_SET"/>
+ <column name="DRIFT_CHANGE_SET_ID" type="INTEGER" required="true" references="RHQ_DRIFT_CHANGE_SET"/>
+ <!-- the file path not including the base directory -->
+ <column name="PATH" type="VARCHAR2" size="1024" required="true"/>
+ <!-- the same as PATH less [/]filename.ext. Redundant storage for the purpose of strict directory search.
+ this field can be considered transient for serialization purposes -->
+ <column name="PATH_DIRECTORY" type="VARCHAR2" size="1024" required="true"/>
+ <column name="OLD_DRIFT_FILE" type="VARCHAR2" size="64" required="false" references="RHQ_DRIFT_FILE"/>
+ <column name="NEW_DRIFT_FILE" type="VARCHAR2" size="64" required="false" references="RHQ_DRIFT_FILE"/>
+ </table>
+
+
+<!-- END: content-schema.xml -->
+<!-- BEGIN: resource-request-schema.xml -->
+
+
+ <table name="RHQ_CREATE_RES_HIST">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="PARENT_RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="CREATED_RESOURCE_NAME" type="VARCHAR2" size="500" required="false"/>
+ <column name="NEW_RESOURCE_KEY" type="VARCHAR2" required="false" size="500"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="INSTALLED_PACKAGE_ID" type="INTEGER" required="false" references="RHQ_INSTALLED_PACKAGE"/>
+ </table>
+
+ <table name="RHQ_DELETE_RES_HIST">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ </table>
+
+<!-- END: resource-request-schema.xml -->
+<!-- BEGIN: jms-schema.xml -->
+
+<!-- the schema matches that which would be automatically created by the JMS subsystem -->
+<!-- see deploy/jms/rhq-jdbc-state-service.xml and rhq-jdbc2-service.xml -->
+
+
+ <table name="JMS_MESSAGES">
+ <column name="MESSAGEID" required="true" type="INTEGER" />
+ <column name="DESTINATION" required="true" type="VARCHAR2" size="255" />
+ <column name="TXID" required="false" type="INTEGER" />
+ <column name="TXOP" required="false" type="CHAR" size="1" />
+ <column name="MESSAGEBLOB" required="false" type="BLOB" />
+
+ <constraint name="JMS_MESSAGES_PKEY">
+ <primaryKey>
+ <field ref="MESSAGEID"/>
+ <field ref="DESTINATION"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="JMS_MESSAGES_TXOP_TXID">
+ <field ref="TXOP"/>
+ <field ref="TXID"/>
+ </index>
+ <index name="JMS_MESSAGES_DESTINATION">
+ <field ref="DESTINATION"/>
+ </index>
+ </table>
+
+ <table name="JMS_TRANSACTIONS">
+ <column name="TXID" required="true" type="INTEGER" primarykey="true" />
+ </table>
+
+ <table name="JMS_USERS">
+ <column name="USERID" required="true" type="VARCHAR2" size="32" primarykey="true" />
+ <column name="PASSWD" required="true" type="VARCHAR2" size="32" />
+ <column name="CLIENTID" required="false" type="VARCHAR2" size="128" />
+ </table>
+
+ <table name="JMS_ROLES">
+ <column name="ROLEID" required="true" type="VARCHAR2" size="32" />
+ <column name="USERID" required="true" type="VARCHAR2" size="32" />
+
+ <constraint name="JMS_ROLES_PKEY">
+ <primaryKey>
+ <field ref="USERID"/>
+ <field ref="ROLEID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="JMS_SUBSCRIPTIONS">
+ <column name="CLIENTID" required="true" type="VARCHAR2" size="128" />
+ <column name="SUBNAME" required="true" type="VARCHAR2" size="128" />
+ <column name="TOPIC" required="true" type="VARCHAR2" size="255" />
+ <column name="SELECTOR" required="false" type="VARCHAR2" size="255" />
+
+ <constraint name="JMS_SUBSCRIPTIONS_PKEY">
+ <primaryKey>
+ <field ref="CLIENTID"/>
+ <field ref="SUBNAME"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+<!-- END: jms-schema.xml -->
+<!-- BEGIN: obsolete-schema.xml -->
+
+
+ <!-- NOTE: The tables will be dropped in the *** REVERSE ORDER *** as listed in this file! -->
+ <!-- NOTE: So, put the table you want dropped first at the bottom, and so on... -->
+
+
+ <!-- !!! REMOVED FROM CONTENT-SCHEMA !!!! -->
+
+ <table name="RHQ_DRIFT_TEMPLATE_MAP">
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="CONFIG_TEMPLATE_ID" type="INTEGER" required="true" references="RHQ_CONFIG_TEMPLATE"/>
+ </table>
+
+ <table name="RHQ_BUNDLE_CONFIG" obsolete="true">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG" />
+ <!-- this probably needs a DTYPE discriminator so we know if its a bundle or a specific bundle version -->
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="false" references="RHQ_BUNDLE_VERSION"/>
+ <column name="BUNDLE_ID" type="INTEGER" required="false" references="RHQ_BUNDLE"/>
+ </table>
+
+ <table name="RHQ_CHANNEL" obsolete="true">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CREATION_TIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED_TIME" type="LONG" required="true"/>
+
+ <index name="RHQ_CHANNEL_IDX" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_CHANNEL_RESOURCE_MAP" obsolete="true">
+ <column name="CHANNEL_ID" type="INTEGER" required="true" references="RHQ_CHANNEL"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_CHANNEL_RESOURCE_MAP_KEY">
+ <primaryKey>
+ <field ref="CHANNEL_ID"/>
+ <field ref="RESOURCE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_CHANNEL_CONTENT_SRC_MAP" obsolete="true">
+ <column name="CHANNEL_ID" type="INTEGER" required="true" references="RHQ_CHANNEL"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_CHAN_CONTENT_SRC_MAP_KEY">
+ <primaryKey>
+ <field ref="CHANNEL_ID"/>
+ <field ref="CONTENT_SRC_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_CHANNEL_PKG_VERSION_MAP" obsolete="true">
+ <column name="CHANNEL_ID" type="INTEGER" required="true" references="RHQ_CHANNEL"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_CHANNEL_PKG_VER_MAP_KEY">
+ <primaryKey>
+ <field ref="CHANNEL_ID"/>
+ <field ref="PACKAGE_VERSION_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- !!! REMOVED FROM MEASUREMENT-SCHEMA !!!! -->
+
+ <table name="RHQ_MEASUREMENT_OOB" obsolete="true">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="SCHEDULE_ID" type="INTEGER" references="RHQ_MEASUREMENT_SCHED(ID)" required="true"/>
+ <column name="OCCURRED" type="LONG" required="true"/>
+ <column name="DIFF" type="DOUBLE" required="true"/>
+
+ <index name="RHQ_MEASUREMENT_OOB_IDX" unique="true">
+ <field ref="SCHEDULE_ID" />
+ <field ref="OCCURRED" />
+ </index>
+ </table>
+
+
+ <table name="RHQ_TAG" obsolete="true">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ </table>
+
+ <table name="RHQ_REPO_TAG_MAP" obsolete="true">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAG"/>
+
+ <constraint name="RHQ_REPO_TAG_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+<!-- END: obsolete-schema.xml -->
+</dbsetup>
commit c0ef6d8088368c2ce55a1be5c3758af364cffa92
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Feb 21 14:36:37 2012 -0500
remove erroneous import
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
index 9a41142..f0a4ac8 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
@@ -131,7 +131,6 @@ import org.rhq.enterprise.server.system.ServerVersion;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
import org.rhq.enterprise.server.util.QuartzUtil;
-import sun.management.resources.agent;
/**
* The manager responsible for working with Resource and plugin configurations.
12 years, 3 months
[rhq] modules/core
by ips
modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java | 16 ++++++++--
modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java | 9 ++---
2 files changed, 17 insertions(+), 8 deletions(-)
New commits:
commit 3e149ee4fef7d33bfc93837032e834427407957c
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 17:55:20 2012 -0500
add a new Resource constructor that allows setting the childResources field (useful if caller wants to use a Set impl other than HashSet)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
index e920c51..2dd01e2 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java
@@ -971,12 +971,12 @@ public class Resource implements Comparable<Resource>, Serializable {
@Summary(index = 4)
private ResourceType resourceType;
- // do not cascade remove - would take forever to delete a full platform hierarchy
- // we will manually delete the children ourselves
+ // do not cascade remove; it would take forever to delete a full platform hierarchy,
+ // so we will manually delete the children ourselves
@OneToMany(mappedBy = "parentResource", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST })
@OrderBy
// primary key
- private Set<Resource> childResources = new HashSet<Resource>();
+ private Set<Resource> childResources;
// LAZY fetch otherwise this will recursively call all parents until null is found
@JoinColumn(name = "PARENT_RESOURCE_ID", nullable = true)
@@ -1101,9 +1101,19 @@ public class Resource implements Comparable<Resource>, Serializable {
private Set<DriftDefinition> driftDefinitions = null;
public Resource() {
+ this(new HashSet<Resource>());
}
/**
+ * Constructor that allows the caller to choose what Set impl is used for the {@link #childResources} field.
+ *
+ * @param childResources the Set that will be used to hold this Resource's child Resources
+ */
+ public Resource(Set<Resource> childResources) {
+ setChildResources(childResources);
+ }
+
+ /**
* Primarily for deserialization and cases where the resource object is just a reference to the real one in the db.
* (Key is this avoids the irrelevant UUID generation that has contention problems.
*
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
index fad45b9..6f2d55e 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
@@ -840,7 +840,10 @@ public class InventoryManager extends AgentService implements ContainerService,
}
static Resource createNewResource(DiscoveredResourceDetails details) {
- Resource resource = new Resource();
+ // Use a ConcurrentHashMap-based Set for childResources to allow the field to be concurrently accessed safely
+ // (i.e. to avoid ConcurrentModificationExceptions).
+ Set<Resource> childResources = Collections.newSetFromMap(new ConcurrentHashMap<Resource, Boolean>());
+ Resource resource = new Resource(childResources);
resource.setUuid(UUID.randomUUID().toString());
resource.setResourceKey(details.getResourceKey());
@@ -854,10 +857,6 @@ public class InventoryManager extends AgentService implements ContainerService,
.getPluginConfigurationDefinition());
resource.setPluginConfiguration(pluginConfiguration);
- // Use a ConcurrentHashMap-based Set for childResources to allow the field to be concurrently accessed safely
- // (i.e. to avoid ConcurrentModificationExceptions).
- resource.setChildResources(Collections.newSetFromMap(new ConcurrentHashMap<Resource, Boolean>()));
-
return resource;
}
12 years, 3 months
[rhq] 4 commits - modules/core modules/enterprise
by ips
modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java | 2
modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java | 7
modules/core/dbutils/src/main/java/org/rhq/core/db/ExtendedSQLException.java | 43
modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java | 6
modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java | 4
modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java | 8
modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java | 1
modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java | 2
modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java | 12
modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java | 12
modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java | 21
modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java | 12
modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java | 8
modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java | 31
modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java | 76
modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-data-combined-3.0.0.xml | 690 ++
modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-schema-combined-3.0.0.xml | 2649 ++++++++++
17 files changed, 3498 insertions(+), 86 deletions(-)
New commits:
commit 50858043c711b85ab33a59f928936e0cabb040fd
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:48:36 2012 -0500
when an SQLException occurs in DBSetup.doSQL(), catch it, wrap it in an ExtendedSQLException that includes the SQL
which failed, and then rethrow it; add support to DbUtil.getSQLExceptionString() for including the SQL in the returned
string if passed an ExtendedSQLException; various minor improvements throughout dbutils
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java
index eb2f6a7..aea077d 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/DatabaseType.java
@@ -237,7 +237,7 @@ public abstract class DatabaseType {
*
* @return <code>true</code> if the column exists in the table, <code>false</code> otherwise
*
- * @exception SQLException
+ * @throws SQLException
*/
public boolean checkColumnExists(Connection conn, String table, String column) throws SQLException {
PreparedStatement ps = null;
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java
index 3188f07..d9617f0 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/DbUtil.java
@@ -100,14 +100,17 @@ public class DbUtil {
/**
* Given an SQL exception, this will return a string that contains the error code and message for it and its causes.
*
- * @param e
+ * @param e the SQL exception
*
* @return error message containing all the SQL error codes and messages
*/
public static String getSQLExceptionString(SQLException e) {
- StringBuffer str = new StringBuffer();
+ StringBuilder str = new StringBuilder();
do {
+ if (e instanceof ExtendedSQLException) {
+ str.append("SQL=[" + ((ExtendedSQLException) e).getSQL() + "]; ");
+ }
str.append("ErrorCode=[" + e.getErrorCode() + "]; ");
str.append("SQLState=[" + e.getSQLState() + "]; ");
str.append("Message=[" + e.getMessage() + "]; ");
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ExtendedSQLException.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ExtendedSQLException.java
new file mode 100644
index 0000000..189869b
--- /dev/null
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ExtendedSQLException.java
@@ -0,0 +1,43 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program 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 version 2 of the License.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.core.db;
+
+import java.sql.SQLException;
+
+/**
+ * Wraps another SQLException, providing one additional field for specifying the SQL that caused the exception.
+ *
+ * @author Ian Springer
+ */
+public class ExtendedSQLException extends SQLException {
+
+ private String sql;
+
+ public ExtendedSQLException(SQLException sqlException, String sql) {
+ super(sqlException.getMessage(), sqlException.getSQLState(), sqlException.getErrorCode(), sqlException);
+ setNextException(sqlException.getNextException());
+ setStackTrace(sqlException.getStackTrace());
+ this.sql = sql;
+ }
+
+ public String getSQL() {
+ return sql;
+ }
+
+}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java
index 0d2661a..7ad3c9a 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/TypeMap.java
@@ -18,7 +18,6 @@
*/
package org.rhq.core.db;
-import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
@@ -113,7 +112,8 @@ public class TypeMap {
/**
* Given a DOM node, this will ensure it is a valid <i>typemap</i> node and parses it. This constructor is private,
- * use {@link #loadTypeMapsFromFile(File)} to create instances of this object.
+ * use {@link #loadKnownTypeMaps()} TypeMapsFromFile(File)} or {@link #loadTypeMapsFromStream(java.io.InputStream)}
+ * to create instances of this object.
*
* @param typemap_node the top-level <i>typemap</i> DOM node
*
@@ -227,7 +227,7 @@ public class TypeMap {
*/
@Override
public String toString() {
- StringBuffer str = new StringBuffer(m_genericTypeName);
+ StringBuilder str = new StringBuilder(m_genericTypeName);
str.append('=');
str.append(m_databaseTypeMap);
return str.toString();
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java
index 2649226..3275f5f 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/DbAntI18NFactory.java
@@ -24,8 +24,8 @@ import mazz.i18n.LoggerLocale;
import mazz.i18n.Msg;
/**
- * Convienence utility that creates I18N {@link Logger loggers} and {@link Msg messages} for the ant tools. These
- * factory methods are used to create I18N objects that access the propery resource bundle for the ant tools.
+ * Convenience utility that creates I18N {@link Logger loggers} and {@link Msg messages} for the ant tools. These
+ * factory methods are used to create I18N objects that access the proper resource bundle for the ant tools.
*
* @author John Mazzitelli
*
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java
index a08f0da..824b777 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/MD5Task.java
@@ -67,11 +67,11 @@ public class MD5Task extends Task {
md5 = Base64.encode(md5_bytes);
} else {
// put the md5 bytes in string form
- StringBuffer md5_string = new StringBuffer(md5_bytes.length * 2);
+ StringBuilder md5_string = new StringBuilder(md5_bytes.length * 2);
- for (int i = 0; i < md5_bytes.length; i++) {
- int hi = (md5_bytes[i] >> 4) & 0xf;
- int lo = md5_bytes[i] & 0xf;
+ for (byte md5_byte : md5_bytes) {
+ int hi = (md5_byte >> 4) & 0xf;
+ int lo = md5_byte & 0xf;
md5_string.append(Character.forDigit(hi, 16));
md5_string.append(Character.forDigit(lo, 16));
}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java
index 9a0c91b..5ad70e4 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/ant/dbupgrade/DBUpgrader.java
@@ -355,6 +355,7 @@ public class DBUpgrader extends Task {
try {
fis.close();
} catch (IOException e) {
+ // ignore
}
}
}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java
index 456387d..1f9ed19 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/ConstraintImpl_PK.java
@@ -70,7 +70,7 @@ class ConstraintImpl_PK implements ConstraintImpl {
}
private String listItems(List<String> list) {
- StringBuffer ret_items = new StringBuffer();
+ StringBuilder ret_items = new StringBuilder();
if (list != null) {
for (String string : list) {
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java
index f8d27a0..b426361 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DBSetup.java
@@ -39,6 +39,7 @@ import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import mazz.i18n.Logger;
import mazz.i18n.Msg;
+import org.rhq.core.db.ExtendedSQLException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
@@ -696,7 +697,7 @@ public class DBSetup {
}
}
- // our second pass - hopefully, we've cleared out data that caused contraint errors in the first pass
+ // our second pass - hopefully, we've cleared out data that caused constraint errors in the first pass
if (failed_tables.size() > 0) {
log(LogPriority.DEBUG, DbUtilsI18NResourceKeys.DBSETUP_CLEAR_SECOND_PASS, failed_tables.size());
@@ -989,8 +990,10 @@ public class DBSetup {
* just prepares it in a statement and expects the caller to execute the statement. The caller must close the
* returned prepared statement (which occurs if <code>returnPreparedStatement</code> is <code>true</code>)
*
- * @param sql
- * @param returnPreparedStatement if <code>true</code>, the SQL isn't executed, it is just prepared
+ * @param sql an SQL Data Manipulation Language (DML) statement, such as <code>INSERT</code>, <code>UPDATE</code>
+ * or <code>DELETE</code>; or an SQL statement that returns nothing,
+ * such as a DDL statement
+ * @param returnPreparedStatement if <code>true</code>, the SQL isn't executed; it is just prepared
*
* @return the statement (which may be a prepared statement or may be the statement that was executed)
*
@@ -1027,7 +1030,7 @@ public class DBSetup {
// Log this?
}
- throw e;
+ throw new ExtendedSQLException(e, sql);
} finally {
if (stmt != null) {
stmt.close();
@@ -1120,6 +1123,7 @@ public class DBSetup {
try {
m_connection.close();
} catch (Exception e) {
+ // ignore
} finally {
m_connection = null;
m_databaseType = null;
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java
index 32694c4..3b834f5 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/DataSet.java
@@ -18,7 +18,6 @@
*/
package org.rhq.core.db.setup;
-import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@@ -39,7 +38,6 @@ abstract class DataSet {
}
protected int create() throws SQLException {
- PreparedStatement stmt = null;
int rowcnt = 0;
try {
@@ -60,10 +58,6 @@ abstract class DataSet {
}
throw e;
- } finally {
- if (stmt != null) {
- stmt.close();
- }
}
return rowcnt; // The number of rows created.
@@ -103,7 +97,7 @@ abstract class DataSet {
protected String getInsertCommand() throws SQLException {
int iCols = this.getNumberColumns();
- StringBuffer strCmd = new StringBuffer("INSERT INTO ");
+ StringBuilder strCmd = new StringBuilder("INSERT INTO ");
strCmd.append(this.getTableName());
strCmd.append(" (");
@@ -154,7 +148,7 @@ abstract class DataSet {
protected String getUpdateCommand() throws SQLException {
int iCols = this.getNumberColumns();
- StringBuffer strCmd = new StringBuffer("UPDATE ");
+ StringBuilder strCmd = new StringBuilder("UPDATE ");
strCmd.append(this.getTableName());
strCmd.append(" SET ");
@@ -206,7 +200,7 @@ abstract class DataSet {
}
need_AND_keyword = true;
- strCmd.append(data.getActualColumnName() + " = ");
+ strCmd.append(data.getActualColumnName()).append(" = ");
String key_value = data.getValue();
if (key_value != null) {
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java
index cac0ef9..9455aea 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/Table.java
@@ -115,26 +115,23 @@ class Table {
List collCmds = new java.util.Vector();
this.getCreateCommands(collCmds, typemaps, m_parent.getDatabaseType());
- Iterator iter = collCmds.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
m_parent.doSQL(strCmd);
}
}
private void doCmd(List collCmds) throws SQLException {
- Iterator iter = collCmds.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
m_parent.doSQL(strCmd);
}
}
private void doCmdsWithoutAbortingOnErrors(List collCmds) throws SQLException {
SQLException sqlException = null;
- Iterator cmdsIter = collCmds.iterator();
- while (cmdsIter.hasNext()) {
- String strCmd = (String) cmdsIter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
try {
m_parent.doSQL(strCmd);
} catch (SQLException e) {
@@ -326,10 +323,8 @@ class Table {
String strCmd = "DROP TABLE " + this.getName();
cmds.add(strCmd);
- Iterator iter = this.getColumns().iterator();
-
- while (iter.hasNext()) {
- ((Column) iter.next()).getDropCommands(cmds);
+ for (Object o : this.getColumns()) {
+ ((Column) o).getDropCommands(cmds);
}
}
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java
index 522cc05..031b25c 100644
--- a/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java
+++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/setup/View.java
@@ -21,7 +21,6 @@ package org.rhq.core.db.setup;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Iterator;
import java.util.List;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
@@ -78,17 +77,15 @@ class View {
protected void create(Collection typemaps) throws SQLException {
List commands = new java.util.Vector();
this.getCreateCommands(commands, typemaps, m_parent.getDatabaseType());
- Iterator iter = commands.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object command : commands) {
+ String strCmd = (String) command;
m_parent.doSQL(strCmd);
}
}
private void doCmd(List collCmds) throws SQLException {
- Iterator iter = collCmds.iterator();
- while (iter.hasNext()) {
- String strCmd = (String) iter.next();
+ for (Object collCmd : collCmds) {
+ String strCmd = (String) collCmd;
m_parent.doSQL(strCmd);
}
}
@@ -142,6 +139,7 @@ class View {
try {
colResult.add(new View(nodeView, dbtype, parent));
} catch (SAXException e) {
+ // ignore
}
}
}
commit 63e54e5f79177a00beb1bbbdc630701e1a29844a
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:04:23 2012 -0500
fix some javadoc typos
diff --git a/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java b/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java
index d21ab62..41eb9e3 100644
--- a/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java
+++ b/modules/core/util/src/main/java/org/rhq/core/util/stream/StreamUtil.java
@@ -23,8 +23,6 @@
package org.rhq.core.util.stream;
import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
@@ -60,7 +58,7 @@ public class StreamUtil {
/**
* Reads in the entire contents of the given input stream and returns the data in a byte array. Be careful - if the
- * stream has alot of data, you run the risk of an <code>OutOfMemoryError</code>.
+ * stream has a lot of data, you run the risk of an <code>OutOfMemoryError</code>.
*
* @param stream the stream to read
*
@@ -120,7 +118,7 @@ public class StreamUtil {
/**
* Copies data from the input stream to the output stream. Upon completion or on an exception, the streams will be
* closed but only if <code>closeStreams</code> is <code>true</code>. If <code>closeStreams</code> is <code>
- * false</code>, the streams are left open; the caller has the reponsibility to close them.
+ * false</code>, the streams are left open; the caller has the responsibility to close them.
*
* @param input the originating stream that contains the data to be copied
* @param output the destination stream where the data should be copied to
@@ -209,7 +207,7 @@ public class StreamUtil {
}
/**
- * Copies data from the input stream to the output stream. The caller has the reponsibility to close them. This
+ * Copies data from the input stream to the output stream. The caller has the responsibility to close them. This
* method allows you to copy a byte range from the input stream. The start byte is the index (where the first byte
* of the stream is index #0) that starts to be copied. <code>length</code> indicates how many bytes to copy, a
* negative length indicates copy everything up to the EOF of the input stream.
commit e3cf06eef81d67b8b026bc6d7c5c35169cf0c9b6
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:02:57 2012 -0500
use StreamUtil.copy() (from rhq-core-util.jar), rather than private copyStreamData()
diff --git a/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java b/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java
index 6162bdd..871c112 100644
--- a/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java
+++ b/modules/enterprise/gui/installer-war/src/main/java/org/rhq/enterprise/installer/ServerInformation.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2012 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -18,7 +18,6 @@
*/
package org.rhq.enterprise.installer;
-import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -26,7 +25,6 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -62,6 +60,7 @@ import org.rhq.core.db.SQLServerDatabaseType;
import org.rhq.core.db.setup.DBSetup;
import org.rhq.core.util.PropertiesFileUpdate;
import org.rhq.core.util.jdbc.JDBCUtil;
+import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.communications.util.SecurityUtil;
/**
@@ -690,7 +689,7 @@ public class ServerInformation {
// first slurp the file contents in memory
InputStream resourceInStream = this.getClass().getClassLoader().getResourceAsStream(xmlFileName);
ByteArrayOutputStream contentOutStream = new ByteArrayOutputStream();
- copyStreamData(resourceInStream, contentOutStream);
+ StreamUtil.copy(resourceInStream, contentOutStream);
// now replace their replacement strings with values from the properties
String content = contentOutStream.toString();
@@ -716,33 +715,11 @@ public class ServerInformation {
File xmlFile = new File(getLogDirectory(), xmlFileName);
FileOutputStream xmlFileOutStream = new FileOutputStream(xmlFile);
ByteArrayInputStream contentInStream = new ByteArrayInputStream(content.getBytes());
- copyStreamData(contentInStream, xmlFileOutStream);
+ StreamUtil.copy(contentInStream, xmlFileOutStream);
return xmlFile.getAbsolutePath();
}
- private void copyStreamData(InputStream input, OutputStream output) throws IOException {
- int bufferSize = 32768;
-
- try {
- // make sure we buffer the input
- input = new BufferedInputStream(input, bufferSize);
-
- byte[] buffer = new byte[bufferSize];
-
- for (int bytesRead = input.read(buffer); bytesRead != -1; bytesRead = input.read(buffer)) {
- output.write(buffer, 0, bytesRead);
- }
-
- output.flush();
- } finally {
- JDBCUtil.safeClose(output);
- JDBCUtil.safeClose(input);
- }
-
- return;
- }
-
/**
* Launches ANT and runs the default target in the given build file.
*
commit 9a4e00af87aa3b90b3ffd5a848389bcb8ec41f86
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Tue Feb 21 16:01:37 2012 -0500
add tests that test overwriting and upgrading a JON 3.0 DB schema
diff --git a/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java b/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java
index e4fb711..a211e27 100644
--- a/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java
+++ b/modules/enterprise/gui/installer-war/src/test/java/org/rhq/enterprise/installer/DBInstallationTest.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2012 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -20,21 +20,25 @@
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-
package org.rhq.enterprise.installer;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
+import org.rhq.core.util.stream.StreamUtil;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.rhq.core.db.reset.DBReset;
import org.rhq.core.db.setup.DBSetup;
-import org.rhq.enterprise.installer.ServerInformation;
-import org.rhq.enterprise.installer.ServerProperties;
/**
* The tests in this class exercise the dbsetup/dbupgrade code that is run in the installer. The tests currently only
@@ -110,6 +114,18 @@ public class DBInstallationTest {
installer.upgradeExistingDatabaseSchema(getInstallProperties());
}
+ @Test
+ public void overwriteJON300Schema() throws Exception {
+ installSchemaAndData("3.0.0");
+ installer.createNewDatabaseSchema(getInstallProperties());
+ }
+
+ @Test
+ public void upgradeJON300Schema() throws Exception {
+ installSchemaAndData("3.0.0");
+ installer.upgradeExistingDatabaseSchema(getInstallProperties());
+ }
+
private void initLogDirectory() {
File logDir = new File(LOG_DIRECTORY);
if (logDir.exists()) {
@@ -125,8 +141,10 @@ public class DBInstallationTest {
private void installSchemaAndData(String jonVersion) throws Exception {
DBSetup dbsetup = new DBSetup(DB_URL, USERNAME, PASSWORD);
- dbsetup.setup(getSchemaFile(jonVersion).getAbsolutePath());
- dbsetup.setup(getDataFile(jonVersion).getAbsolutePath());
+ File schemaFile = getSchemaFile(jonVersion);
+ dbsetup.setup(schemaFile.getAbsolutePath());
+ File dataFile = getDataFile(jonVersion);
+ dbsetup.setup(dataFile.getAbsolutePath());
}
private File getSchemaFile(String version) throws Exception {
@@ -136,7 +154,10 @@ public class DBInstallationTest {
throw new RuntimeException("Failed to find schema file for version " + version);
}
- return new File(url.toURI().getPath());
+ File file = new File(url.toURI().getPath());
+ File filteredFile = filterXmlFile(file, getInstallProperties());
+
+ return filteredFile;
}
private File getDataFile(String version) throws Exception {
@@ -146,7 +167,10 @@ public class DBInstallationTest {
throw new RuntimeException("Failed to find data file for version " + version);
}
- return new File(url.toURI().getPath());
+ File file = new File(url.toURI().getPath());
+ File filteredFile = filterXmlFile(file, getInstallProperties());
+
+ return filteredFile;
}
private Properties getInstallProperties() {
@@ -157,4 +181,40 @@ public class DBInstallationTest {
dbProperties.put(ServerProperties.PROP_EMAIL_FROM_ADDRESS, "rhqadmin(a)localhost.com");
return dbProperties;
}
+
+ private static File filterXmlFile(File xmlFile, Properties props) throws IOException {
+ // first slurp the file contents in memory
+ InputStream fileInStream = new FileInputStream(xmlFile);
+ ByteArrayOutputStream contentOutStream = new ByteArrayOutputStream();
+ StreamUtil.copy(fileInStream, contentOutStream);
+
+ // now replace their replacement strings with values from the properties
+ String content = contentOutStream.toString();
+ content = content.replaceAll("@@@LARGE_TABLESPACE_FOR_DATA@@@", "DEFAULT");
+ content = content.replaceAll("@@@LARGE_TABLESPACE_FOR_INDEX@@@", "DEFAULT");
+ content = content.replaceAll("@@@ADMINUSERNAME@@@", "rhqadmin");
+ content = content.replaceAll("@@@ADMINPASSWORD@@@", "x1XwrxKuPvYUILiOnOZTLg=="); // rhqadmin
+ content = content.replaceAll("@@@ADMINEMAIL@@@", props.getProperty(ServerProperties.PROP_EMAIL_FROM_ADDRESS));
+ content = content.replaceAll("@@@BASEURL@@@", "http://" + ServerProperties.getValidServerBindAddress(props)
+ + ":" + ServerProperties.getHttpPort(props) + "/");
+ content = content.replaceAll("@@@JAASPROVIDER@@@", "JDBC");
+ content = content.replaceAll("@@@LDAPURL@@@", "ldap://localhost/");
+ content = content.replaceAll("@@@LDAPPROTOCOL@@@", "");
+ content = content.replaceAll("@@@LDAPLOGINPROP@@@", "cn");
+ content = content.replaceAll("@@@LDAPBASEDN@@@", "o=JBoss,c=US");
+ content = content.replaceAll("@@@LDAPSEARCHFILTER@@@", "");
+ content = content.replaceAll("@@@LDAPBINDDN@@@", "");
+ content = content.replaceAll("@@@LDAPBINDPW@@@", "");
+ content = content.replaceAll("@@@MULTICAST_ADDR@@@", "");
+ content = content.replaceAll("@@@MULTICAST_PORT@@@", "");
+
+ // we now have the finished XML content - write out the file to the tmp directory
+ File filteredXmlFile = File.createTempFile("rhq", xmlFile.getName());
+ FileOutputStream xmlFileOutStream = new FileOutputStream(xmlFile);
+ ByteArrayInputStream contentInStream = new ByteArrayInputStream(content.getBytes());
+ StreamUtil.copy(contentInStream, xmlFileOutStream);
+
+ return xmlFile.getAbsoluteFile();
+ }
+
}
diff --git a/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-data-combined-3.0.0.xml b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-data-combined-3.0.0.xml
new file mode 100644
index 0000000..060f241
--- /dev/null
+++ b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-data-combined-3.0.0.xml
@@ -0,0 +1,690 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dbsetup name="data.xml">
+<!-- BEGIN: rhq-data.xml -->
+<!-- BEGIN: auth-data.xml -->
+
+
+ <table name="RHQ_PRINCIPAL">
+ <data id="2" PRINCIPAL="@@@ADMINUSERNAME@@@" PASSWORD="@@@ADMINPASSWORD@@@"/>
+ </table>
+
+<!-- END: auth-data.xml -->
+<!-- BEGIN: authz-data.xml -->
+
+
+ <!-- the overlord user -->
+ <table name="RHQ_SUBJECT">
+ <data ID="1"
+ NAME="admin"
+ FIRST_NAME="Super"
+ LAST_NAME="User"
+ FSYSTEM="TRUE"/>
+ </table>
+
+ <!-- the initial rhqadmin user -->
+ <table name="RHQ_SUBJECT">
+ <data ID="2"
+ NAME="@@@ADMINUSERNAME@@@"
+ FIRST_NAME="RHQ"
+ LAST_NAME="Administrator"
+ EMAIL_ADDRESS="@@@ADMINEMAIL@@@"
+ FSYSTEM="FALSE"/>
+ </table>
+
+ <!-- Define the system root role which includes our overlord and rhqadmin users -->
+ <table name="RHQ_ROLE">
+ <data ID="1"
+ NAME="Super User Role"
+ FSYSTEM="TRUE"
+ DESCRIPTION="System superuser role that provides full access to everything. This role cannot be modified."/>
+ <data ID="2"
+ NAME="All Resources Role"
+ FSYSTEM="FALSE"
+ DESCRIPTION="Provides full access to all resources in inventory. Cannot modify users, roles or server settings."/>
+ </table>
+
+ <!-- associate the root users with all security permissions -->
+ <table name="RHQ_SUBJECT_ROLE_MAP">
+ <!-- overlord user -->
+ <data SUBJECT_ID="1" ROLE_ID="1"/>
+ <!-- rhqadmin user -->
+ <data SUBJECT_ID="2" ROLE_ID="1"/>
+ </table>
+
+ <table name="RHQ_PERMISSION">
+ <!-- give super-user-role all permissions
+ (explicitly add resource perms, even though they are implied by MANAGE_INVENTORY) -->
+ <data ROLE_ID="1" OPERATION="0"/> <!-- Permission.MANAGE_SECURITY -->
+ <data ROLE_ID="1" OPERATION="1"/> <!-- Permission.MANAGE_INVENTORY -->
+ <data ROLE_ID="1" OPERATION="2"/> <!-- Permission.MANAGE_SETTINGS -->
+ <data ROLE_ID="1" OPERATION="12"/> <!-- Permission.MANAGE_BUNDLE -->
+ <data ROLE_ID="1" OPERATION="15"/> <!-- Permission.MANAGE_REPOSITORIES -->
+ <!-- resource permissions start here-->
+ <data ROLE_ID="1" OPERATION="3"/> <!-- Permission.VIEW_RESOURCE -->
+ <data ROLE_ID="1" OPERATION="4"/> <!-- Permission.MODIFY_RESOURCE -->
+ <data ROLE_ID="1" OPERATION="5"/> <!-- Permission.DELETE_RESOURCE -->
+ <data ROLE_ID="1" OPERATION="6"/> <!-- Permission.CREATE_CHILD_RESOURCES -->
+ <data ROLE_ID="1" OPERATION="7"/> <!-- Permission.MANAGE_ALERTS -->
+ <data ROLE_ID="1" OPERATION="8"/> <!-- Permission.MANAGE_MEASUREMENTS -->
+ <data ROLE_ID="1" OPERATION="9"/> <!-- Permission.MANAGE_CONTENT -->
+ <data ROLE_ID="1" OPERATION="10"/> <!-- Permission.CONTROL -->
+ <data ROLE_ID="1" OPERATION="11"/> <!-- Permission.CONFIGURE_WRITE -->
+ <data ROLE_ID="1" OPERATION="13"/> <!-- Permission.CONFIGURE_READ -->
+ <data ROLE_ID="1" OPERATION="14"/> <!-- Permission.MANAGE_EVENTS -->
+ <data ROLE_ID="1" OPERATION="16"/> <!-- Permission.MANAGE_DRIFT -->
+
+ <!-- give all-resources-role MANAGE_INVENTORY and MANAGE_BUNDLE permissions
+ (explicitly add resource perms as well, even though they are implied by MANAGE_INVENTORY) -->
+ <data ROLE_ID="2" OPERATION="1"/> <!-- Permission.MANAGE_INVENTORY -->
+ <data ROLE_ID="2" OPERATION="12"/> <!-- Permission.MANAGE_BUNDLE -->
+ <!-- resource permissions start here-->
+ <data ROLE_ID="2" OPERATION="3"/> <!-- Permission.VIEW_RESOURCE -->
+ <data ROLE_ID="2" OPERATION="4"/> <!-- Permission.MODIFY_RESOURCE -->
+ <data ROLE_ID="2" OPERATION="5"/> <!-- Permission.DELETE_RESOURCE -->
+ <data ROLE_ID="2" OPERATION="6"/> <!-- Permission.CREATE_CHILD_RESOURCES -->
+ <data ROLE_ID="2" OPERATION="7"/> <!-- Permission.MANAGE_ALERTS -->
+ <data ROLE_ID="2" OPERATION="8"/> <!-- Permission.MANAGE_MEASUREMENTS -->
+ <data ROLE_ID="2" OPERATION="9"/> <!-- Permission.MANAGE_CONTENT -->
+ <data ROLE_ID="2" OPERATION="10"/> <!-- Permission.CONTROL -->
+ <data ROLE_ID="2" OPERATION="11"/> <!-- Permission.CONFIGURE_WRITE -->
+ <data ROLE_ID="2" OPERATION="13"/> <!-- Permission.CONFIGURE_READ -->
+ <data ROLE_ID="2" OPERATION="14"/> <!-- Permission.MANAGE_EVENTS -->
+ <data ROLE_ID="2" OPERATION="16"/> <!-- Permission.MANAGE_DRIFT -->
+ </table>
+
+<!-- END: authz-data.xml -->
+<!-- BEGIN: search-data.xml -->
+
+
+ <!-- overlord-created, global, default saved searches -->
+ <table name="RHQ_SAVED_SEARCH">
+ <data ID="1"
+ CONTEXT="RESOURCE"
+ NAME="Downed Platforms"
+ DESCRIPTION="All downed machines across the entire enterprise"
+ PATTERN="availability=down category=platform"
+ LAST_COMPUTE_TIME="0"
+ SUBJECT_ID="1"
+ GLOBAL="TRUE" />
+ <data ID="2"
+ CONTEXT="RESOURCE"
+ NAME="Downed Servers"
+ DESCRIPTION="All downed servers across the entire enterprise"
+ PATTERN="availability=down category=server"
+ LAST_COMPUTE_TIME="0"
+ SUBJECT_ID="1"
+ GLOBAL="TRUE" />
+ </table>
+
+<!-- END: search-data.xml -->
+<!-- BEGIN: sysconfig-data.xml -->
+
+
+ <!--
+ This file contains the seed data for the configuration table.
+ All keys mentioned here should be referenced via the RHQConstants class
+ -->
+ <table name="RHQ_SYSTEM_CONFIG">
+ <data ID="1" PROPERTY_KEY="SERVER_VERSION" PROPERTY_VALUE="4.2.0.JON300.GA"
+ DEFAULT_PROPERTY_VALUE="4.2.0.JON300.GA" FREAD_ONLY="TRUE"/>
+ <data ID="2" PROPERTY_KEY="DB_SCHEMA_VERSION" PROPERTY_VALUE="2.116"
+ DEFAULT_PROPERTY_VALUE="2.116" FREAD_ONLY="TRUE"/>
+ <data ID="3" PROPERTY_KEY="CAM_JAAS_PROVIDER" PROPERTY_VALUE="@@@JAASPROVIDER@@@"
+ DEFAULT_PROPERTY_VALUE="JDBC" FREAD_ONLY="FALSE"/>
+ <data ID="4" PROPERTY_KEY="CAM_BASE_URL" PROPERTY_VALUE="@@@BASEURL@@@"
+ DEFAULT_PROPERTY_VALUE="@@@BASEURL@@@" FREAD_ONLY="FALSE"/>
+ <data ID="9" PROPERTY_KEY="CAM_HELP_USER" PROPERTY_VALUE="web"
+ DEFAULT_PROPERTY_VALUE="web" FREAD_ONLY="FALSE"/>
+ <data ID="10" PROPERTY_KEY="CAM_HELP_PASSWORD" PROPERTY_VALUE="user"
+ DEFAULT_PROPERTY_VALUE="user" FREAD_ONLY="FALSE"/>
+
+ <!-- default LDAP configuration options -->
+ <data ID="11" PROPERTY_KEY="CAM_LDAP_NAMING_FACTORY_INITIAL"
+ PROPERTY_VALUE="com.sun.jndi.ldap.LdapCtxFactory"
+ DEFAULT_PROPERTY_VALUE="com.sun.jndi.ldap.LdapCtxFactory"
+ FREAD_ONLY="FALSE"/>
+ <data ID="12" PROPERTY_KEY="CAM_LDAP_NAMING_PROVIDER_URL"
+ PROPERTY_VALUE="@@@LDAPURL@@@"
+ DEFAULT_PROPERTY_VALUE="ldap://localhost/"
+ FREAD_ONLY="FALSE"/>
+ <data ID="13" PROPERTY_KEY="CAM_LDAP_LOGIN_PROPERTY"
+ PROPERTY_VALUE="@@@LDAPLOGINPROP@@@"
+ DEFAULT_PROPERTY_VALUE="cn" FREAD_ONLY="FALSE"/>
+ <data ID="14" PROPERTY_KEY="CAM_LDAP_BASE_DN"
+ PROPERTY_VALUE="@@@LDAPBASEDN@@@"
+ DEFAULT_PROPERTY_VALUE="o=JBoss,c=US"
+ FREAD_ONLY="FALSE"/>
+ <data ID="15" PROPERTY_KEY="CAM_LDAP_BIND_DN"
+ PROPERTY_VALUE="@@@LDAPBINDDN@@@"
+ DEFAULT_PROPERTY_VALUE="" FREAD_ONLY="FALSE"/>
+ <data ID="16" PROPERTY_KEY="CAM_LDAP_BIND_PW"
+ PROPERTY_VALUE="@@@LDAPBINDPW@@@"
+ DEFAULT_PROPERTY_VALUE="" FREAD_ONLY="FALSE"/>
+ <data ID="17" PROPERTY_KEY="CAM_LDAP_PROTOCOL"
+ PROPERTY_VALUE="@@@LDAPPROTOCOL@@@" DEFAULT_PROPERTY_VALUE=""
+ FREAD_ONLY="FALSE"/>
+ <data ID="18" PROPERTY_KEY="CAM_LDAP_FILTER"
+ PROPERTY_VALUE="@@@LDAPSEARCHFILTER@@@" DEFAULT_PROPERTY_VALUE=""
+ FREAD_ONLY="FALSE"/>
+
+ <!-- Does this build support Syslog actions? -->
+ <data ID="21" PROPERTY_KEY="CAM_SYSLOG_ACTIONS_ENABLED"
+ PROPERTY_VALUE="false" DEFAULT_PROPERTY_VALUE="false"
+ FREAD_ONLY="FALSE"/>
+ <data ID="23" PROPERTY_KEY="CAM_GUIDE_ENABLED"
+ PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+ <data ID="24" PROPERTY_KEY="CAM_RT_COLLECT_IP_ADDRS"
+ PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+
+ <!-- Default data storage options -->
+ <!-- Default 14 days -->
+ <data ID="26" PROPERTY_KEY="CAM_DATA_PURGE_1H"
+ PROPERTY_VALUE="1209600000" DEFAULT_PROPERTY_VALUE="1209600000"
+ FREAD_ONLY="FALSE"/>
+ <!-- Default 31 days -->
+ <data ID="27" PROPERTY_KEY="CAM_DATA_PURGE_6H"
+ PROPERTY_VALUE="2678400000" DEFAULT_PROPERTY_VALUE="2678400000"
+ FREAD_ONLY="FALSE"/>
+ <!-- Default 1 year -->
+ <data ID="28" PROPERTY_KEY="CAM_DATA_PURGE_1D"
+ PROPERTY_VALUE="31536000000" DEFAULT_PROPERTY_VALUE="31536000000"
+ FREAD_ONLY="FALSE"/>
+
+ <!-- Baseline options -->
+ <!-- How often to calculate, default 3 days; if 0, never calculate them automatically -->
+ <data ID="29" PROPERTY_KEY="CAM_BASELINE_FREQUENCY"
+ PROPERTY_VALUE="259200000" DEFAULT_PROPERTY_VALUE="259200000"
+ FREAD_ONLY="FALSE"/>
+ <!-- How much data to include in the calulation, default 7 days -->
+ <data ID="30" PROPERTY_KEY="CAM_BASELINE_DATASET"
+ PROPERTY_VALUE="604800000" DEFAULT_PROPERTY_VALUE="604800000"
+ FREAD_ONLY="FALSE"/>
+
+ <!-- ID 31 has been deleted -->
+
+ <!-- How often to run database maintainence routines -->
+ <data ID="32" PROPERTY_KEY="CAM_DATA_MAINTENANCE"
+ PROPERTY_VALUE="3600000" DEFAULT_PROPERTY_VALUE="3600000" FREAD_ONLY="FALSE"/>
+
+ <!-- How long to keep RT data around -->
+ <data ID="34" PROPERTY_KEY="RT_DATA_PURGE" PROPERTY_VALUE="2678400000"
+ DEFAULT_PROPERTY_VALUE="2678400000" FREAD_ONLY="FALSE"/>
+
+ <!-- Whether to reindex the data tables nightly -->
+ <data ID="35" PROPERTY_KEY="DATA_REINDEX_NIGHTLY" PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+
+ <!-- How long to keep alerts around -->
+ <data ID="36" PROPERTY_KEY="ALERT_PURGE" PROPERTY_VALUE="2678400000"
+ DEFAULT_PROPERTY_VALUE="2678400000" FREAD_ONLY="FALSE"/>
+
+ <!-- How long to keep events around (1209600000 millis == 14 days) -->
+ <data ID="51" PROPERTY_KEY="EVENT_PURGE" PROPERTY_VALUE="1209600000"
+ DEFAULT_PROPERTY_VALUE="1209600000" FREAD_ONLY="FALSE"/>
+
+ <!-- How long an agent is allowed to be quiet before we consider it down and backfill it -->
+ <data ID="52" PROPERTY_KEY="AGENT_MAX_QUIET_TIME_ALLOWED" PROPERTY_VALUE="900000"
+ DEFAULT_PROPERTY_VALUE="900000" FREAD_ONLY="FALSE"/>
+
+ <!-- Will our server-cloud support agents auto-updating themselves? -->
+ <data ID="53" PROPERTY_KEY="ENABLE_AGENT_AUTO_UPDATE" PROPERTY_VALUE="true"
+ DEFAULT_PROPERTY_VALUE="true" FREAD_ONLY="FALSE"/>
+
+ <!-- How old does a trait have to be in order to get purged -->
+ <data ID="54" PROPERTY_KEY="TRAIT_PURGE" PROPERTY_VALUE="31536000000"
+ DEFAULT_PROPERTY_VALUE="31536000000" FREAD_ONLY="FALSE"/>
+
+ <!-- How old does availability have to be in order to get purged -->
+ <data ID="55" PROPERTY_KEY="AVAILABILITY_PURGE" PROPERTY_VALUE="31536000000"
+ DEFAULT_PROPERTY_VALUE="31536000000" FREAD_ONLY="FALSE"/>
+
+ <data ID="56" PROPERTY_KEY="RESOURCE_GENERIC_PROPERTIES_UPGRADE" PROPERTY_VALUE="false"
+ DEFAULT_PROPERTY_VALUE="false" FREAD_ONLY="FALSE"/>
+
+ <!-- default drift server plugin settings -->
+ <data ID="57" PROPERTY_KEY="ACTIVE_DRIFT_PLUGIN" PROPERTY_VALUE="drift-jpa"
+ DEFAULT_PROPERTY_VALUE="drift-jpa" FREAD_ONLY="FALSE"/>
+
+ <!-- purge drift files older than 31 days by default -->
+ <data ID="58" PROPERTY_KEY="DRIFT_FILE_PURGE" PROPERTY_VALUE="2678400000"
+ DEFAULT_PROPERTY_VALUE="2678400000" FREAD_ONLY="FALSE"/>
+
+ </table>
+
+<!-- END: sysconfig-data.xml -->
+<!-- BEGIN: measurement-data.xml -->
+
+ <table name="RHQ_NUMBERS">
+ <data i="0"/>
+ <data i="1"/>
+ <data i="2"/>
+ <data i="3"/>
+ <data i="4"/>
+ <data i="5"/>
+ <data i="6"/>
+ <data i="7"/>
+ <data i="8"/>
+ <data i="9"/>
+ <data i="10"/>
+ <data i="11"/>
+ <data i="12"/>
+ <data i="13"/>
+ <data i="14"/>
+ <data i="15"/>
+ <data i="16"/>
+ <data i="17"/>
+ <data i="18"/>
+ <data i="19"/>
+ <data i="20"/>
+ <data i="21"/>
+ <data i="22"/>
+ <data i="23"/>
+ <data i="24"/>
+ <data i="25"/>
+ <data i="26"/>
+ <data i="27"/>
+ <data i="28"/>
+ <data i="29"/>
+ <data i="30"/>
+ <data i="31"/>
+ <data i="32"/>
+ <data i="33"/>
+ <data i="34"/>
+ <data i="35"/>
+ <data i="36"/>
+ <data i="37"/>
+ <data i="38"/>
+ <data i="39"/>
+ <data i="40"/>
+ <data i="41"/>
+ <data i="42"/>
+ <data i="43"/>
+ <data i="44"/>
+ <data i="45"/>
+ <data i="46"/>
+ <data i="47"/>
+ <data i="48"/>
+ <data i="49"/>
+ <data i="50"/>
+ <data i="51"/>
+ <data i="52"/>
+ <data i="53"/>
+ <data i="54"/>
+ <data i="55"/>
+ <data i="56"/>
+ <data i="57"/>
+ <data i="58"/>
+ <data i="59"/>
+ </table>
+
+<!-- END: measurement-data.xml -->
+<!-- BEGIN: content-data.xml -->
+
+ <table name="RHQ_ARCHITECTURE">
+ <data id="1" name="noarch"/>
+ <data id="2" name="i386"/>
+ <data id="3" name="i486"/>
+ <data id="4" name="i586"/>
+ <data id="5" name="i686"/>
+ <data id="6" name="alpha"/>
+ <data id="7" name="alphaev6"/>
+ <data id="8" name="ia64"/>
+ <data id="9" name="sparc"/>
+ <data id="10" name="sparcv9"/>
+ <data id="11" name="sparc64"/>
+ <data id="12" name="src"/>
+ <data id="13" name="s390"/>
+ <data id="14" name="athlon"/>
+ <data id="15" name="s390x"/>
+ <data id="16" name="ppc"/>
+ <data id="17" name="ppc64"/>
+ <data id="18" name="pSeries"/>
+ <data id="19" name="iSeries"/>
+ <data id="20" name="x86_64"/>
+ <data id="21" name="ppc64iseries"/>
+ <data id="22" name="ppc64pseries"/>
+ <data id="23" name="sparc-solaris"/>
+ <data id="24" name="sparc.sun4u-solaris"/>
+ <data id="25" name="tar"/>
+ <data id="26" name="ia32e"/>
+ <data id="27" name="amd64"/>
+ <data id="28" name="i386-solaris"/>
+ <data id="29" name="nosrc"/>
+ <data id="30" name="sparc-solaris-patch"/>
+ <data id="31" name="i386-solaris-patch"/>
+ <data id="32" name="sparc-solaris-patch-cluster"/>
+ <data id="33" name="i386-solaris-patch-cluster"/>
+ <data id="34" name="noarch-solaris"/>
+ <data id="35" name="noarch-solaris-patch"/>
+ <data id="36" name="noarch-solaris-patch-cluster"/>
+ <data id="37" name="solaris-patch"/>
+ <data id="38" name="solaris-patch-cluster"/>
+ </table>
+
+ <table name="RHQ_REPO_GROUP_TYPE">
+ <data id="1" name="family"/>
+ </table>
+
+ <table name="RHQ_REPO_RELATION_TYPE">
+ <data id="1" name="parent"/>
+ <data id="2" name="clone"/>
+ </table>
+
+ <table name="RHQ_DISTRIBUTION_TYPE">
+ <data id="1" name="kickstart" description="Linux kickstart distribution"/>
+ <data id="2" name="jumpstart" description="solaris jumpstart distribution"/>
+ </table>
+
+<!-- END: content-data.xml -->
+<!-- BEGIN: jms-data.xml -->
+
+<!-- the schema matches that which would be automatically created by the JMS subsystem -->
+<!-- see deploy/jms/rhq-jdbc-state-service.xml and rhq-jdbc2-service.xml -->
+<!-- the data must match that which is expected in conf/login-config.xml -->
+
+
+ <table name="JMS_USERS">
+ <data USERID="guest" PASSWD="guest" />
+ </table>
+
+ <table name="JMS_ROLES">
+ <data ROLEID="guest" USERID="guest" />
+ </table>
+
+<!-- END: jms-data.xml -->
+<!-- END: rhq-data.xml -->
+<!-- BEGIN: jon-data.xml -->
+
+<!-- This dbsetup config file defines a content source and
+ associated repo for the JBoss CP RSS patch feed. -->
+
+
+ <!-- ********* metadata (the content source type and its config def) ********* -->
+
+ <table name="RHQ_CONFIG_DEF">
+ <data ID="101"
+ NAME="JBoss CP Patch Feed Content Source"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_DEF">
+ <data ID="101"
+ NAME="url"
+ DISPLAY_NAME="Feed URL"
+ DESCRIPTION="URL of the feed (e.g. https://access.redhat.com/jbossnetwork/restricted/feed/software.html?prod...)."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="0"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="102"
+ NAME="username"
+ DISPLAY_NAME="Username"
+ DESCRIPTION="Username used to access the feed URL."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="1"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="103"
+ NAME="password"
+ DISPLAY_NAME="Password"
+ DESCRIPTION="Password used to access the feed URL."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="2"
+ SIMPLE_TYPE="PASSWORD"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="104"
+ NAME="active"
+ DISPLAY_NAME="Active"
+ DESCRIPTION="Indicates if the feed should be checked for new patches."
+ REQUIRED="1"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="3"
+ SIMPLE_TYPE="BOOLEAN"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="105"
+ NAME="proxyUrl"
+ DISPLAY_NAME="Proxy URL"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="4"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="106"
+ NAME="proxyPort"
+ DISPLAY_NAME="Proxy Port"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="5"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="107"
+ NAME="proxyUsername"
+ DISPLAY_NAME="Proxy Username"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="6"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ <data ID="108"
+ NAME="proxyPassword"
+ DISPLAY_NAME="Proxy Password"
+ REQUIRED="0"
+ READONLY="0"
+ SUMMARY="0"
+ ACTIVATION_POLICY="IMMEDIATE"
+ ORDER_INDEX="7"
+ SIMPLE_TYPE="STRING"
+ ALLOW_CUSTOM_ENUM_VALUE="0"
+ DTYPE="property"
+ CONFIG_DEF_ID="101"
+ UNITS="0"/>
+ </table>
+
+ <!-- NOTE: The values of the NAME, PLUGIN_NAME, and API_CLASS columns must match what is
+ defined in RHQ/modules/enterprise/server/plugins/jboss-software/src/main/resources/META-INF/rhq-serverplugin.xml. -->
+ <!-- default sync chedule: 1st of every month at 12am -->
+ <table name="RHQ_CONTENT_SOURCE_TYPE">
+ <data ID="101"
+ NAME="JBossASPatchSource"
+ DISPLAY_NAME="JBoss Patch Content Source"
+ DESCRIPTION="a content source that retrieves package metadata from an RSS feed; the feed must be in the format used by the JBoss CP"
+ PLUGIN_NAME="JBossASPatchContentSourcePlugin"
+ DEFAULT_LAZY_LOAD="1"
+ DEFAULT_DOWNLOAD_MODE="DATABASE"
+ DEFAULT_SYNC_SCHEDULE="0 0 0 1 * ?"
+ API_CLASS="org.rhq.enterprise.server.plugins.jboss.software.JBossSoftwareContentSourceAdapter"
+ SOURCE_CONFIG_DEF_ID="101"/>
+ </table>
+
+
+ <!-- the default template -->
+ <table name="RHQ_CONFIG">
+ <data ID="101"
+ VERSION="0"
+ CTIME="1270066600000"
+ MTIME="1270066600000"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROPERTY">
+ <data ID="101"
+ NAME="url"
+ CONFIGURATION_ID="101"
+ STRING_VALUE=""
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="102"
+ NAME="username"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="103"
+ NAME="password"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="104"
+ NAME="proxyUrl"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="105"
+ NAME="proxyPort"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="106"
+ NAME="active"
+ CONFIGURATION_ID="101"
+ STRING_VALUE="true"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="107"
+ NAME="proxyUsername"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="108"
+ NAME="proxyPassword"
+ CONFIGURATION_ID="101"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ </table>
+
+ <table name="RHQ_CONFIG_TEMPLATE">
+ <data ID="101"
+ NAME="default"
+ DESCRIPTION="the default initial values for the configuration of a JBossASPatchSource content source"
+ CONFIG_ID="101"
+ CONFIG_DEF_ID="101"
+ IS_DEFAULT="1"/>
+ </table>
+
+
+ <!-- ********* data (the content source and its config) ********* -->
+
+ <table name="RHQ_CONFIG">
+ <data ID="102"
+ VERSION="0"
+ CTIME="1270066600000"
+ MTIME="1270066600000"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROPERTY">
+ <data ID="111"
+ NAME="url"
+ CONFIGURATION_ID="102"
+ STRING_VALUE="https://access.redhat.com/jbossnetwork/restricted/feed/software.html?prod..."
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="112"
+ NAME="username"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="113"
+ NAME="password"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="114"
+ NAME="proxyUrl"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="115"
+ NAME="proxyPort"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="116"
+ NAME="active"
+ CONFIGURATION_ID="102"
+ STRING_VALUE="false"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="117"
+ NAME="proxyUsername"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ <data ID="118"
+ NAME="proxyPassword"
+ CONFIGURATION_ID="102"
+ OVERRIDE="0"
+ DTYPE="property"/>
+ </table>
+
+ <!-- sync chedule: 1st of every month at 12am -->
+ <table name="RHQ_CONTENT_SOURCE">
+ <data ID="101"
+ NAME="JBoss CP Patch Feed"
+ DESCRIPTION="an RSS feed published by the JBoss Customer Portal (CP) website which provides a list of all JBoss product patches available for the subscription of a given CP user; the feed entries for most cumulative patches (CPs) include automated install instructions that can be used by JON to install those CPs to inventoried server Resources (e.g. JBoss EAP servers)"
+ LAZY_LOAD="1"
+ DOWNLOAD_MODE="DATABASE"
+ SYNC_SCHEDULE="0 0 0 1 * ?"
+ CREATION_TIME="1270066600000"
+ LAST_MODIFIED_TIME="1270066600000"
+ CONTENT_SOURCE_TYPE_ID="101"
+ CONFIGURATION_ID="102"/>
+ </table>
+
+ <!-- sync chedule: every Mon at 1am -->
+ <table name="RHQ_REPO">
+ <data ID="101"
+ NAME="JBoss Patches"
+ DESCRIPTION="the patches obtained from the JBoss CP patch feed"
+ SYNC_SCHEDULE="0 0 1 ? * 1"
+ CREATION_TIME="1270066600000"
+ LAST_MODIFIED_TIME="1270066600000"
+ IS_PRIVATE="0"
+ IS_CANDIDATE="0"/>
+ </table>
+
+ <table name="RHQ_REPO_CONTENT_SRC_MAP">
+ <data REPO_ID="101"
+ CONTENT_SRC_ID="101"
+ CTIME="1270066600000"/>
+ </table>
+
+
+<!-- END: jon-data.xml -->
+</dbsetup>
diff --git a/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-schema-combined-3.0.0.xml b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-schema-combined-3.0.0.xml
new file mode 100644
index 0000000..4c07e1a
--- /dev/null
+++ b/modules/enterprise/gui/installer-war/src/test/resources/org/rhq/enterprise/installer/db-schema-combined-3.0.0.xml
@@ -0,0 +1,2649 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dbsetup name="schema">
+<!-- BEGIN: config-schema.xml -->
+
+
+ <!-- Definition or Metadata tables -->
+
+ <table name="RHQ_CONFIG_DEF">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="250"/>
+ <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="CONFIG_FORMAT" type="VARCHAR2" required="false" size="32"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_GRP_DEF">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="250"/>
+ <column name="DEFAULT_HIDDEN" type="BOOLEAN" required="false"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_DEF">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="false" size="255"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="1000"/>
+ <column name="DEFAULT_VALUE" type="VARCHAR2" required="false" size="2000"/>
+ <column name="REQUIRED" type="BOOLEAN" required="false"/>
+ <column name="READONLY" type="BOOLEAN" required="false"/>
+ <column name="SUMMARY" type="BOOLEAN" required="false"/>
+ <column name="ACTIVATION_POLICY" type="VARCHAR2" required="false" size="20"/>
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_GRP_DEF"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="PARENT_MAP_DEFINITION_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ <column name="PARENT_LIST_DEFINITION_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ <column name="SIMPLE_TYPE" type="VARCHAR2" required="false" size="20"/>
+ <column name="ALLOW_CUSTOM_ENUM_VALUE" type="BOOLEAN" required="false"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ <column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF"/>
+
+ <!-- only simple properties (not lists and maps) have this -->
+ <column name="UNITS" type="SMALLINT" required="false"/>
+
+ <!-- only dynamic properties (not simple) have this -->
+ <column name="DYNAMIC_TYPE" type="VARCHAR2" size="20" required="false"/>
+ <column name="DYNAMIC_KEY" type="VARCHAR2" size="128" required="false"/>
+ </table>
+
+ <table name="RHQ_CONF_PROP_DEF_ENUM">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="STRING_VALUE" type="VARCHAR2" required="false" size="500"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ <column name="NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="PROPERTY_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PD_OSRC">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="LINK_TO_TARGET" type="BOOLEAN" required="false"/>
+ <column name="FILTER" type="VARCHAR2" required="false" size="40"/>
+ <column name="EXPRESSION" type="VARCHAR2" required="true" size="400"/>
+ <column name="TARGET_TYPE" type="VARCHAR2" required="true" size="20"/>
+ <column name="PROPERTY_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROP_CONSTR">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="15"/>
+ <column name="DETAILS" type="VARCHAR2" required="false" size="250"/>
+ <column name="CONFIG_PROP_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROP_DEF"/>
+ <column name="ORDER_INDEX" type="INTEGER" required="false"/>
+ </table>
+
+
+ <!-- Content or value tables -->
+
+ <table name="RHQ_CONFIG">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NOTES" type="VARCHAR2" required="false" size="512"/>
+ <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ </table>
+
+ <table name="RHQ_CONFIG_PROPERTY">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG" ondelete="cascade"/>
+ <column name="STRING_VALUE" type="VARCHAR2" required="false" size="2000"/>
+ <column name="OVERRIDE" type="BOOLEAN" required="false"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="255"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ <!-- Recursive cascade path to RHQ_CONFIG_PROPERTY causes constraint creation errors on SQL Server, see
+ http://support.microsoft.com/kb/321843 -->
+ <column name="PARENT_LIST_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROPERTY" ondelete="cascade" />
+ <column name="PARENT_MAP_ID" type="INTEGER" required="false" references="RHQ_CONFIG_PROPERTY" ondelete="cascade" />
+ <column name="LIST_INDEX" type="INTEGER"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <index name="RHQ_CONFIG_PROP_idx_prop_key" unique="false">
+ <field ref="CONFIGURATION_ID"/>
+ <field ref="NAME"/>
+ </index>
+ <index name="RHQ_CONFIG_PROP_idx_map_key" unique="false">
+ <field ref="PARENT_MAP_ID"/>
+ <field ref="NAME"/>
+ </index>
+ <index name="RHQ_CONFIG_PROP_idx_list_key" unique="false">
+ <field ref="PARENT_LIST_ID"/>
+ </index>
+ <!-- List entries all have the same name -->
+ </table>
+
+ <table name="RHQ_CONFIG_TEMPLATE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="500"/>
+ <column name="CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF"/>
+ <column name="IS_DEFAULT" type="BOOLEAN" required="false"/>
+ </table>
+
+ <table name="RHQ_RAW_CONFIG">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG(ID)"/>
+ <column name="PATH" type="VARCHAR2" required="false" size="512"/>
+ <column name="CONTENTS" type="CLOB" required="true"/>
+ <column name="SHA256" type="VARCHAR2" size="64" required="true"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ </table>
+
+<!-- END: config-schema.xml -->
+<!-- BEGIN: cluster-schema.xml -->
+
+ <table name="RHQ_AFFINITY_GROUP">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="255" type="VARCHAR2"/>
+ </table>
+
+ <table name="RHQ_SERVER">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="255" type="VARCHAR2"/>
+ <column name="ADDRESS" required="true" size="255" type="VARCHAR2"/>
+ <column name="PORT" required="true" type="INTEGER"/>
+ <column name="SECURE_PORT" required="true" type="INTEGER"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="MTIME" required="true" type="LONG"/>
+ <column name="AFFINITY_GROUP_ID" type="INTEGER" references="RHQ_AFFINITY_GROUP" required="false"/>
+ <column name="COMPUTE_POWER" required="true" type="INTEGER"/>
+ <column name="OPERATION_MODE" required="true" size="32" type="VARCHAR2"/>
+ <column name="STATUS" type="INTEGER" required="false" default="0" />
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_SERVER_NAME_UNIQUE" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- new agent -->
+ <table name="RHQ_AGENT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="255" type="VARCHAR2"/>
+ <column name="ADDRESS" required="true" size="255" type="VARCHAR2"/>
+ <column name="PORT" required="true" type="INTEGER"/>
+ <column name="AGENTTOKEN" required="true" size="100" type="VARCHAR2"/>
+ <column name="REMOTE_ENDPOINT" required="false" size="4000" type="VARCHAR2"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="MTIME" required="true" type="LONG"/>
+ <column name="LAST_AVAILABILITY_REPORT" required="false" type="LONG"/>
+ <column name="AFFINITY_GROUP_ID" type="INTEGER" references="RHQ_AFFINITY_GROUP" required="false"/>
+ <column name="SERVER_ID" type="INTEGER" references="RHQ_SERVER" required="false"/>
+ <column name="STATUS" type="INTEGER" required="false" default="0" />
+ <column name="BACKFILLED" type="BOOLEAN" required="true" />
+
+ <index name="RHQ_AGENT_NAME_UNIQUE" unique="true">
+ <field ref="NAME"/>
+ </index>
+
+ <index name="RHQ_AGENT_ADDRESS_PORT" unique="true">
+ <field ref="ADDRESS"/>
+ <field ref="PORT"/>
+ </index>
+
+ <index name="RHQ_AGENT_TOKEN_UNIQUE" unique="true">
+ <field ref="AGENTTOKEN"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PARTITION_EVENT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="SUBJECT_NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="EVENT_TYPE" required="true" size="50" type="VARCHAR2"/>
+ <column name="EVENT_DETAIL" required="false" size="512" type="VARCHAR2"/>
+ <column name="EXECUTION_STATUS" required="true" size="32" type="VARCHAR2"/>
+ </table>
+
+ <table name="RHQ_PARTITION_DETAILS">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PARTITION_EVENT_ID" type="INTEGER" references="RHQ_PARTITION_EVENT" required="true"/>
+ <column name="AGENT_NAME" type="VARCHAR2" size="255" required="true"/>
+ <column name="SERVER_NAME" type="VARCHAR2" size="255" required="true"/>
+ </table>
+
+ <table name="RHQ_FAILOVER_LIST">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PARTITION_EVENT_ID" type="INTEGER" references="RHQ_PARTITION_EVENT" required="true"/>
+ <column name="AGENT_ID" type="INTEGER" references="RHQ_AGENT" required="true"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ </table>
+
+ <table name="RHQ_FAILOVER_DETAILS">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="FAILOVER_LIST_ID" type="INTEGER" references="RHQ_FAILOVER_LIST" required="true"/>
+ <column name="SERVER_ID" type="INTEGER" references="RHQ_SERVER" required="true"/>
+ <column name="ORDINAL" type = "INTEGER" required="true"/>
+ </table>
+
+<!-- END: cluster-schema.xml -->
+<!-- BEGIN: auth-schema.xml -->
+
+
+ <table name="RHQ_PRINCIPAL">
+
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PRINCIPAL" required="true" type="VARCHAR2" size="100"/>
+ <column name="PASSWORD" required="true" type="VARCHAR2" size="64"/>
+
+ <!-- ensure that principals are unique -->
+ <index name="RHQ_PRINCIPAL_PRINCIPAL_KEY" unique="true">
+ <field ref="PRINCIPAL"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_SUBJECT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
+ <column name="FIRST_NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="LAST_NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="EMAIL_ADDRESS" size="100" type="VARCHAR2"/>
+ <column name="SMS_ADDRESS" size="100" type="VARCHAR2"/>
+ <column name="PHONE_NUMBER" size="100" type="VARCHAR2"/>
+ <column name="DEPARTMENT" size="100" type="VARCHAR2"/>
+ <column name="FACTIVE" required="true" type="BOOLEAN" default="true"/>
+ <column name="FSYSTEM" required="true" type="BOOLEAN" default="false"/>
+
+ <index name="RHQ_SUBJECT_AUTH_KEY" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+<!-- END: auth-schema.xml -->
+<!-- BEGIN: inventory-schema.xml -->
+
+
+ <!-- NEW RESOURCE TYPES -->
+ <table name="RHQ_RESOURCE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="100" required="true"/>
+ <column name="CATEGORY" type="VARCHAR2" size="16" required="true"/>
+ <column name="CREATION_DATA_TYPE" type="VARCHAR2" size="16" required="true"/>
+ <column name="CREATE_DELETE_POLICY" type="VARCHAR2" size="16" required="true"/>
+ <column name="SINGLETON" type="BOOLEAN" required="true"/>
+ <column name="SUPPORTS_MANUAL_ADD" type="BOOLEAN" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+ <column name="PLUGIN" type="VARCHAR2" size="100"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="DELETED" type="BOOLEAN" default="FALSE" required="TRUE"/>
+ <column name="SUBCATEGORY_ID" type="INTEGER"/>
+ <!--
+ TODO add support to DB setup for tables with circular dependencies and then add back this RI
+ <column name="SUBCATEGORY_ID" type="INTEGER" references="RHQ_RESOURCE_SUBCAT" />
+ -->
+ <column name="PLUGIN_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="RES_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="BUNDLE_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG"/>
+
+ <index name="RHQ_RES_TYPE_IDX_PLG_NAME" unique="true">
+ <field ref="NAME"/>
+ <field ref="PLUGIN"/>
+ </index>
+ </table>
+
+ <!-- NEW RESOURCE SUBCATEGORIES -->
+ <table name="RHQ_RESOURCE_SUBCAT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="100"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="PARENT_SUBCATEGORY_ID" type="INTEGER" references="RHQ_RESOURCE_SUBCAT"/>
+ <!-- resourceTypeId is not required on child sub categories -->
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+ </table>
+
+ <!-- Many To Many mapping for resource type to its parents -->
+ <table name="RHQ_RESOURCE_TYPE_PARENTS">
+ <column name="RESOURCE_TYPE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+ <column name="PARENT_RESOURCE_TYPE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+
+ <!-- not using full words to fit index name length -->
+ <constraint name="RHQ_RES_TYPE_PARENTS_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="PARENT_RESOURCE_TYPE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_PROCESS_SCAN">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="QUERY" type="VARCHAR2" size="256" required="true"/>
+ <column name="NAME" type="VARCHAR2" size="100" required="false"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+
+ <index name="RHQ_PROCESS_SCAN_QUERY_INDEX" unique="true">
+ <field ref="QUERY"/>
+ <field ref="RESOURCE_TYPE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PRD_VER">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="VERSION" type="VARCHAR2" size="100" required="true"/>
+ <column name="RES_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ </table>
+
+ <table name="RHQ_RESOURCE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="UUID" type="CHAR" size="36" required="true"/>
+ <column name="NAME" type="VARCHAR2" size="500"/>
+ <!-- ancestry holds the full parental ancestry, used for disambiguation -->
+ <column name="ANCESTRY" type="VARCHAR2" required="false" size="4000"/>
+ <column name="RESOURCE_KEY" type="VARCHAR2" required="true" size="500"/>
+ <column name="AGENT_ID" required="false" type="INTEGER" references="RHQ_AGENT(id)"/>
+ <column name="INVENTORY_STATUS" type="VARCHAR2" size="20"/>
+ <column name="CONNECTED" type="BOOLEAN"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+ <column name="VERSION" type="VARCHAR2" size="100"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="ITIME" type="LONG"/>
+ <column name="RES_CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
+ <column name="PLUGIN_CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
+ <column name="MODIFIED_BY" required="false" size="100" type="VARCHAR2"/>
+ <column name="LOCATION" required="false" size="100" type="VARCHAR2"/>
+ <column name="PARENT_RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE"/>
+ <column name="PRODUCT_VERSION_ID" type="INTEGER" references="RHQ_PRD_VER"/>
+
+ <index name="RHQ_RESOURCE_idx_key">
+ <field ref="RESOURCE_KEY"/>
+ </index>
+
+ <index name="RHQ_RESOURCE_idx_type">
+ <field ref="RESOURCE_TYPE_ID"/>
+ </index>
+
+ <index name="RHQ_RESOURCE_idx_agent">
+ <field ref="AGENT_ID"/>
+ </index>
+
+ <index name="RHQ_RESOURCE_idx_parent">
+ <field ref="PARENT_RESOURCE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_RESOURCE_ERROR">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="TIME_OCCURRED" type="LONG" required="true"/>
+ <column name="ERROR_TYPE" type="VARCHAR2" required="true" size="32"/>
+ <column name="SUMMARY" type="VARCHAR2" required="true" size="1000"/>
+ <column name="DETAIL" type="LONGVARCHAR" required="false"/>
+
+ <index name="RHQ_RES_ERROR_IDX_RES_ID">
+ <field ref="RESOURCE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_GROUP_DEF">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="DESCRIPTION" size="100" type="VARCHAR2"/>
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="CALC_TIME" type="LONG"/>
+ <column name="CALC_INTERVAL" type="LONG"/>
+ <column name="RECURSIVE" type="BOOLEAN"/>
+ <column name="EXPRESSION" type="VARCHAR2" size="1000"/>
+
+ <index name="RHQ_GROUP_DEF_NAME" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_RESOURCE_GROUP">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <!-- this name can be longer than the size of the GROUP_BY column, which is used to uniquely identify it -->
+ <!-- Max bytes for Oracle Varchar2 to accommodate large cluster keys -->
+ <column name="NAME" required="true" size="4000" type="VARCHAR2"/>
+ <column name="DESCRIPTION" size="100" type="VARCHAR2"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE"/>
+ <!-- Compatible groups only -->
+ <column name="CTIME" type="LONG"/>
+ <column name="MTIME" type="LONG"/>
+ <column name="MODIFIED_BY" required="false" size="100" type="VARCHAR2"/>
+ <column name="RECURSIVE" type="BOOLEAN"/>
+
+ <column name="GROUP_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_GROUP_DEF"/>
+ <column name="GROUP_BY" size="500" type="VARCHAR2"/>
+
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+
+ <!-- This is only set if this is a subject-owned group (like an autogroup) -->
+ <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT"/>
+
+ <!-- These two only set if this is a backing group for a resource auto-cluster -->
+ <column name="CLUSTER_KEY" type="VARCHAR2" size="4000" required="false"/>
+ <column name="CLUSTER_RESOURCE_GROUP_ID" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <!-- This is only set if this is a backing group for a resource auto-group -->
+ <column name="AUTO_GROUP_PARENT_RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE"/>
+
+ <column name="VISIBLE" type="BOOLEAN"/>
+
+ <index name="RHQ_RES_GROUP_NAME" unique="false">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- Many To Many mapping for groups to implicit resources -->
+ <table name="RHQ_RESOURCE_GROUP_RES_IMP_MAP">
+ <column name="RESOURCE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE"/>
+ <column name="RESOURCE_GROUP_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <!-- not using full words to fit index name length -->
+ <constraint name="RHQ_RES_GROUP_RES_IMP_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_ID"/>
+ <field ref="RESOURCE_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- Many To Many mapping for groups to explicit resources -->
+ <table name="RHQ_RESOURCE_GROUP_RES_EXP_MAP">
+ <column name="RESOURCE_ID" required="true" type="INTEGER" references="RHQ_RESOURCE"/>
+ <column name="RESOURCE_GROUP_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <!-- not using full words to fit index name length -->
+ <constraint name="RHQ_RES_GROUP_RES_EXP_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_ID"/>
+ <field ref="RESOURCE_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_CONFIG_GROUP_UPDATE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="GROUP_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_GROUP"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ </table>
+
+ <table name="RHQ_CONFIG_UPDATE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="true" references="RHQ_CONFIG" ondelete="cascade"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="false" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="CONFIG_RES_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="PLUGIN_CONFIG_RES_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="AGG_RES_UPDATE_ID" type="INTEGER" required="false" references="RHQ_CONFIG_GROUP_UPDATE"/>
+ <column name="AGG_PLUGIN_UPDATE_ID" type="INTEGER" required="false" references="RHQ_CONFIG_GROUP_UPDATE"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="10"/>
+ </table>
+
+
+ <table name="RHQ_TAGGING">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="NAMESPACE" type="VARCHAR2" required="false" size="20"/>
+ <column name="SEMANTIC" type="VARCHAR2" required="false" size="50"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+ </table>
+
+ <table name="RHQ_TAGGING_RESOURCE_MAP">
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_RESOURCE_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_RES_GROUP_MAP">
+ <column name="RESOURCE_GROUP_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_GROUP"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_RES_GROUP_MAP_KEY">
+ <primaryKey>
+ <field ref="RESOURCE_GROUP_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+<!-- END: inventory-schema.xml -->
+<!-- BEGIN: authz-schema.xml -->
+
+
+ <table name="RHQ_ROLE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="DESCRIPTION" size="100" type="VARCHAR2"/>
+ <column name="FSYSTEM" type="BOOLEAN" default="false"/>
+
+ <index name="RHQ_ROLE_NAME_KEY" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ROLE_RESOURCE_GROUP_MAP">
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+ <column name="RESOURCE_GROUP_ID" required="true" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
+
+ <constraint name="RHQ_ROLE_RES_GROUP_MAP_KEY">
+ <primaryKey>
+ <field ref="ROLE_ID"/>
+ <field ref="RESOURCE_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_ROLE_LDAP_GROUP">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+ <column name="LDAP_GROUP_NAME" size="128" required="true" type="VARCHAR2"/>
+
+ <index name="RHQ_ROLE_LDAP_GROUP_IDX" unique="true">
+ <field ref="ROLE_ID"/>
+ <field ref="LDAP_GROUP_NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PERMISSION">
+ <column name="ROLE_ID" type="INTEGER" references="RHQ_ROLE" required="true"/>
+ <column name="OPERATION" type="INTEGER" required="true"/>
+ <constraint name="RHQ_PERMISSION_PK">
+ <primaryKey>
+ <field ref="ROLE_ID"/>
+ <field ref="OPERATION"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_SUBJECT_ROLE_MAP">
+ <column name="SUBJECT_ID" required="true" type="INTEGER" references="RHQ_SUBJECT"/>
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+
+ <constraint name="RHQ_SUBJECT_ROLE_MAPPING_KEY">
+ <primaryKey>
+ <field ref="SUBJECT_ID"/>
+ <field ref="ROLE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_SUBJECT_ROLE_LDAP_MAP">
+ <column name="SUBJECT_ID" required="true" type="INTEGER" references="RHQ_SUBJECT"/>
+ <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
+ <constraint name="RHQ_SUBJECT_ROLE_LDAP_MAP_PK">
+ <primaryKey>
+ <field ref="SUBJECT_ID" />
+ <field ref="ROLE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+<!-- END: authz-schema.xml -->
+<!-- BEGIN: search-schema.xml -->
+
+
+ <table name="RHQ_SAVED_SEARCH">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CONTEXT" type="VARCHAR2" size="25" required="true"/>
+
+ <column name="NAME" type="VARCHAR2" size="200" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="500" required="false"/>
+ <column name="PATTERN" type="VARCHAR2" size="1000" required="true"/>
+
+ <column name="LAST_COMPUTE_TIME" type="LONG" required="true"/>
+ <column name="RESULT_COUNT" type="LONG" required="false"/>
+
+ <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT" required="true"/>
+ <column name="GLOBAL" type="BOOLEAN" required="true"/>
+ </table>
+
+<!-- END: search-schema.xml -->
+<!-- BEGIN: dashboard-schema.xml -->
+
+
+
+ <table name="RHQ_DASHBOARD">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="200" required="true"/>
+ <column name="SUBJECT_ID" type="INTEGER" required="true" references="RHQ_SUBJECT"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_RESOURCE_GROUP"/>
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <column name="SHARED" type="BOOLEAN" required="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ </table>
+
+
+ <table name="RHQ_DASHBOARD_PORTLET">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR2" size="200" required="true"/>
+ <column name="PORTLET_KEY" type="VARCHAR2" size="200" required="true"/>
+ <column name="COL" type="INTEGER" required="true"/>
+ <column name="COL_INDEX" type="INTEGER" required="true"/>
+ <column name="HEIGHT" type="INTEGER" required="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="DASHBOARD_ID" type="INTEGER" required="false" references="RHQ_DASHBOARD"/>
+ </table>
+
+<!-- END: dashboard-schema.xml -->
+<!-- BEGIN: operation-schema.xml -->
+
+
+ <table name="RHQ_OPERATION_DEF">
+
+ <!-- === required columns === -->
+
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE(ID)"/>
+ <column name="NAME" type="VARCHAR2" required="true" size="100"/>
+
+ <!-- === optional columns === -->
+
+ <!-- an OSGI version range - if null, the operation def applies to all versions of the associated resource type -->
+ <column name="RESOURCE_VERSION_RANGE" type="VARCHAR2" size="100"/>
+
+ <!-- A parameter config definition is only required for operations that have parameters. -->
+ <!-- A results config definition is only required for operations that return data. -->
+ <column name="PARAMETER_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="RESULTS_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF(ID)"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="4000"/>
+ <column name="TIMEOUT" type="INTEGER"/>
+
+ <!-- === business key (RESOURCE_TYPE_ID + NAME) === -->
+ <index name="RHQ_OPERATION_DEF_KEY_IDX" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_OPERATION_HISTORY">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="8"/>
+ <column name="JOB_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="JOB_GROUP" type="VARCHAR2" required="true" size="100"/>
+ <column name="OPERATION_DEF_ID" type="INTEGER" required="true" references="RHQ_OPERATION_DEF"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="STIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="PARAMETERS_CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+
+ <!-- for resource history -->
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="RESULTS_CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="GROUP_HISTORY_ID" type="INTEGER" required="false" references="RHQ_OPERATION_HISTORY"/>
+
+ <!-- for group history -->
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_RESOURCE_GROUP"/>
+
+ <index name="RHQ_OPERATION_HISTORY_JOB_IDX" unique="true">
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ <field ref="CTIME"/>
+ </index>
+
+ </table>
+
+ <!--
+ This table is really just to support some specific use-cases.
+ Specifically, to be able to get a list of histories for a specific schedule (aka quartz job)
+ and to be able to query a list of all schedules along with their associated resource/group IDs
+ possibly sorted by their next fire time.
+ Note that a NULL next fire time means it won't fire again and the row is probaby about to be deleted;
+ we can probably not even insert rows with NULL and make it a non-nullable field. But rather than
+ code special conditions into the session bean, we'll allow a short-lived NULL next fire time row.
+ -->
+ <table name="RHQ_OPERATION_SCHEDULE">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+
+ <column name="JOB_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="JOB_GROUP" type="VARCHAR2" required="true" size="100"/>
+ <column name="DTYPE" type="VARCHAR2" required="true" size="8"/>
+ <column name="NEXT_FIRE_TIME" type="LONG" required="false"/>
+
+ <!-- for resource history -->
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+
+ <!-- for group history -->
+ <column name="GROUP_ID" type="INTEGER" required="false" references="RHQ_RESOURCE_GROUP"/>
+
+ <!--
+ Note, this is the same as the primary key that Quartz uses for its schedules (RHQ_QRTZ_JOB_DETAILS).
+ We do not need to add DTYPE to the key, because we ensure the name/group are unique across resource/group
+ schedules
+ -->
+ <!-- === business key (JOB_NAME + JOB_GROUP) === -->
+ <index name="RHQ_OPERATION_SCHEDULE_KEY_IDX" unique="true">
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ </index>
+ </table>
+
+<!-- END: operation-schema.xml -->
+<!-- BEGIN: event-schema.xml -->
+
+
+ <!-- metadata -->
+
+ <table name="RHQ_EVENT_DEF">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE(ID)"/>
+
+ <column name="NAME" type="VARCHAR2" size="100" required="true"/>
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="1000"/>
+
+ <index name="RHQ_EVENT_DEF_IDX" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- instance data -->
+
+ <table name="RHQ_EVENT_SOURCE">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="EVENT_DEF_ID" type="INTEGER" required="true" references="RHQ_EVENT_DEF(ID)"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE(ID)"/>
+
+ <column name="LOCATION" required="true" size="2000" type="VARCHAR2"/>
+
+ <index name="RHQ_EVENT_SOURCE_IDX" unique="true">
+ <field ref="EVENT_DEF_ID"/>
+ <field ref="RESOURCE_ID"/>
+ <field ref="LOCATION"/>
+ </index>
+ </table>
+
+ <table name="RHQ_EVENT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="EVENT_SOURCE_ID" type="INTEGER" required="true" references="RHQ_EVENT_SOURCE(ID)"/>
+
+ <column name="TIMESTAMP" required="true" type="LONG"/>
+ <column name="SEVERITY" required="true" size="20" type="VARCHAR2"/>
+ <column name="DETAIL" required="true" size="4000" type="VARCHAR2"/>
+ <index name="RHQ_EVENT_IDX" unique="false">
+ <field ref="EVENT_SOURCE_ID"/>
+ <field ref="TIMESTAMP"/>
+ </index>
+ </table>
+
+<!-- END: event-schema.xml -->
+<!-- BEGIN: alert-schema.xml -->
+
+
+ <table name="RHQ_ALERT_DEFINITION">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="PARENT_ID" type="INTEGER" required="false"/>
+ <column name="GROUP_ALERT_DEF_ID" type="INTEGER" required="false"/>
+ <column name="DESCRIPTION" required="false" size="250" type="VARCHAR2"/>
+ <column name="PRIORITY" type="VARCHAR2" size="15" required="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE" required="false"/>
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE" required="false"/>
+ <column name="RESOURCE_GROUP_ID" type="INTEGER" references="RHQ_RESOURCE_GROUP" required="false"/>
+ <column name="ENABLED" required="true" default="TRUE" type="BOOLEAN"/>
+
+ <column name="REQUIRED" required="true" type="SMALLINT"/>
+
+ <column name="RECOVERY_ID" type="INTEGER" required="true"/>
+ <!-- required, but 0 effectively means null -->
+ <column name="WILL_RECOVER" required="true" default="false" type="BOOLEAN"/>
+ <column name="NOTIFY_FILTERED" required="true" default="false" type="BOOLEAN"/>
+ <column name="CONTROL_FILTERED" required="true" default="FALSE" type="BOOLEAN"/>
+
+ <column name="DELETED" required="true" default="FALSE" type="BOOLEAN"/>
+ <column name="READ_ONLY" required="true" default="FALSE" type="BOOLEAN"/>
+
+ <column name="DAMPENING_CATEGORY" type="SMALLINT" required="true"/>
+ <column name="DAMPENING_VALUE" type="INTEGER"/>
+ <column name="DAMPENING_VALUE_UNITS" type="SMALLINT"/>
+ <column name="DAMPENING_PERIOD" type="INTEGER"/>
+ <column name="DAMPENING_PERIOD_UNITS" type="SMALLINT"/>
+ </table>
+
+ <table name="RHQ_ALERT_DAMPEN_EVENT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="EVENT_TYPE" required="true" type="SMALLINT"/>
+ <column name="EVENT_TIMESTAMP" required="true" type="LONG"/>
+
+ <index name="RHQ_DAMPENING_EVENT_TYPE_IDX">
+ <field ref="EVENT_TYPE"/>
+ </index>
+ <index name="RHQ_DAMPENING_EVENT_TS_IDX">
+ <field ref="EVENT_TIMESTAMP"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ALERT_CONDITION">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="TYPE" required="true" type="VARCHAR2" size="15"/>
+ <!--
+ <column name="REQUIRED" required="true" type="BOOLEAN"/>
+ -->
+ <column name="MEASUREMENT_DEFINITION_ID" required="false" type="INTEGER"/>
+ <column name="NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="COMPARATOR" required="false" size="2" type="VARCHAR2"/>
+ <column name="THRESHOLD" required="false" type="DOUBLE"/>
+ <!-- event-based conditions use OPTION_STATUS for the string match, so should be a decent length -->
+ <column name="OPTION_STATUS" required="false" size="256" type="VARCHAR2"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="TRIGGER_ID" required="false" type="INTEGER"/>
+ </table>
+
+ <table name="RHQ_ALERT" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="RECOVERY_ID" type="INTEGER" required="true"/>
+ <!-- required, but 0 effectively means null -->
+ <column name="WILL_RECOVER" required="true" default="false" type="BOOLEAN"/>
+ <column name="ACK_TIME" required="false" type="LONG"/>
+ <column name="ACK_SUBJECT" required="false" size="100" type="VARCHAR2"/>
+ <index name="RHQ_ALERT_IDX_TIME" unique="false">
+ <field ref="CTIME"/>
+ </index>
+ <index name="RHQ_ALERT_IDX_ALERTDEF" unique="false">
+ <field ref="ALERT_DEFINITION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ALERT_NOTIF_LOG" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_ID" required="true" type="INTEGER" references="RHQ_ALERT(ID)"/>
+ <index name="RHQ_ALERT_IDX_ALERT" unique="false">
+ <field ref="ALERT_ID"/>
+ </index>
+ <column name="SENDER" required="false" size="100" type="VARCHAR2"/>
+ <column name="RESULT_STATE" required="false" size="20" type="VARCHAR2"/>
+ <column name="MESSAGE" required="false" size="4000" type="VARCHAR2"/>
+ </table>
+
+ <table name="RHQ_ALERT_CONDITION_LOG" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="CTIME" required="true" type="LONG"/>
+ <column name="ALERT_ID" required="false" type="INTEGER" references="RHQ_ALERT(ID)"/>
+ <column name="CONDITION_ID" required="true" type="INTEGER" references="RHQ_ALERT_CONDITION(ID)"/>
+ <column name="VALUE" required="true" size="250" type="VARCHAR2"/>
+ <index name="RHQ_ALERT_COND_LOG_IDX_TIME">
+ <field ref="CTIME" />
+ </index>
+ <index name="RHQ_ALERT_COND_LOG_IDX_ALERT">
+ <field ref="ALERT_ID"/>
+ </index>
+ <index name="RHQ_ALERT_COND_LOG_COND_IDX">
+ <field ref="CONDITION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ALERT_NOTIFICATION" tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@"
+ storage-options="freelists 5" cache="true" logging="false">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="ALERT_DEFINITION_ID" required="false" type="INTEGER" references="RHQ_ALERT_DEFINITION(ID)"/>
+ <column name="SENDER_CONFIG_ID" required="false" type="INTEGER" references="RHQ_CONFIG(ID)"/>
+ <column name="EXTRA_CONFIG_ID" required="false" type="INTEGER" references="RHQ_CONFIG(ID)"/>
+ <column name="SENDER_NAME" required="true" size="100" type="VARCHAR2" />
+ </table>
+
+<!-- END: alert-schema.xml -->
+<!-- BEGIN: sysconfig-schema.xml -->
+
+
+ <table name="RHQ_SYSTEM_CONFIG">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="PROPERTY_KEY" type="VARCHAR2" size="80"/>
+ <column name="PROPERTY_VALUE" type="VARCHAR2" size="300"/>
+ <column name="DEFAULT_PROPERTY_VALUE" type="VARCHAR2" size="300"/>
+ <column name="FREAD_ONLY" type="BOOLEAN" default="FALSE"/>
+
+ <index name="RHQ_SYSTEM_CONFIG_KEY_INDX" unique="true">
+ <field ref="PROPERTY_KEY"/>
+ </index>
+ </table>
+
+<!-- END: sysconfig-schema.xml -->
+<!-- BEGIN: scheduler-schema.xml -->
+
+
+ <table name="RHQ_QRTZ_JOB_DETAILS">
+ <column name="JOB_NAME" required="true" type="VARCHAR2" size="80"/>
+ <column name="JOB_GROUP" required="true" type="VARCHAR2" size="80"/>
+ <column name="DESCRIPTION" required="false" type="VARCHAR2" size="120"/>
+ <column name="JOB_CLASS_NAME" required="true" type="VARCHAR2" size="128"/>
+ <column name="IS_DURABLE" required="true" type="BOOLEAN" default="FALSE"/>
+ <column name="IS_VOLATILE" required="true" type="BOOLEAN"/>
+ <column name="IS_STATEFUL" required="true" type="BOOLEAN" default="FALSE"/>
+ <column name="REQUESTS_RECOVERY" required="true" type="BOOLEAN" default="FALSE"/>
+ <column name="JOB_DATA" required="false" type="BLOB"/>
+
+ <constraint name="RHQ_PK_QRTZ_JOB_DETAILS">
+ <primaryKey>
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_QRTZ_JOB_LISTENERS">
+ <column name="JOB_NAME" required="true" type="VARCHAR2" size="80"/>
+ <column name="JOB_GROUP" required="true" type="VARCHAR2" size="80"/>
+ <column name="JOB_LISTENER" required="true" type="VARCHAR2" size="80"/>
+
+ <constraint name="RHQ_PK_QRTZ_JOB_LISTENERS">
+ <primaryKey>
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ <field ref="JOB_LISTENER"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_JOB_LSTNRS_JN_JG">
+ <foreignKey local="JOB_NAME,JOB_GROUP"
+ references="RHQ_QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+ </table>
+
+ <table name="RHQ_QRTZ_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" required="true" size="80"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" required="true" size="80"/>
+ <column name="JOB_NAME" type="VARCHAR2" required="true" size="80"/>
+ <column name="JOB_GROUP" type="VARCHAR2" required="true" size="80"/>
+ <column name="IS_VOLATILE" type="BOOLEAN" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" required="false" size="120"/>
+ <column name="NEXT_FIRE_TIME" type="LONG" required="false"/>
+ <column name="PREV_FIRE_TIME" type="LONG" required="false"/>
+ <column name="PRIORITY" type="INTEGER" required="false"/>
+ <column name="TRIGGER_STATE" type="VARCHAR" required="true" size="16"/>
+ <column name="TRIGGER_TYPE" type="VARCHAR" required="true" size="8"/>
+ <column name="START_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="false"/>
+ <column name="CALENDAR_NAME" type="VARCHAR2" required="false" size="80"/>
+ <column name="MISFIRE_INSTR" type="INTEGER" required="false"/>
+ <column name="JOB_DATA" type="BLOB" required="false"/>
+
+ <constraint name="RHQ_PK_QRTZ_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_TRIGGERS_JN_JG">
+ <foreignKey local="JOB_NAME,JOB_GROUP"
+ references="RHQ_QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend these indexes. -->
+ <index name="RHQ_QRTZ_TRIGGERS_JN_JG_IDX">
+ <field ref="JOB_NAME"/>
+ <field ref="JOB_GROUP"/>
+ </index>
+ <index name="RHQ_QRTZ_TRIGGERS_NFT_IDX">
+ <field ref="NEXT_FIRE_TIME"/>
+ </index>
+ <index name="RHQ_QRTZ_TRIGGERS_TS_IDX">
+ <field ref="TRIGGER_STATE"/>
+ </index>
+ <index name="RHQ_QRTZ_TRIGGERS_TS_NFT_IDX">
+ <field ref="TRIGGER_STATE"/>
+ <field ref="NEXT_FIRE_TIME"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_QRTZ_SIMPLE_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" required="true" size="80"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" required="true" size="80"/>
+ <column name="REPEAT_COUNT" type="LONG" required="true"/>
+ <column name="REPEAT_INTERVAL" type="LONG" required="true"/>
+ <column name="TIMES_TRIGGERED" type="LONG" required="true"/>
+
+ <constraint name="RHQ_PK_QRTZ_SIMPLE_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_SIMPLE_TRGRS_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <!-- Commenting out, because Oracle auto-creates an index for the
+ primary key column(s) and fails if you try to create another
+ index for the same column(s) (ips, 03/29/07).
+ -->
+ <!--
+ <index name="RHQ_QRTZ_SIMPLE_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ -->
+ </table>
+
+ <table name="RHQ_QRTZ_CRON_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="CRON_EXPRESSION" type="VARCHAR2" size="80" required="true"/>
+ <column name="TIME_ZONE_ID" type="VARCHAR2" size="80" required="false"/>
+
+ <constraint name="RHQ_PK_QRTZ_CRON_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_CRON_TRIG_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <!-- Commenting out, because Oracle auto-creates an index for the
+ primary key column(s) and fails if you try to create another
+ index for the same column(s) (ips, 03/29/07).
+ -->
+ <!--
+ <index name="RHQ_QRTZ_CRON_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ -->
+ </table>
+
+ <table name="RHQ_QRTZ_BLOB_TRIGGERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="BLOB_DATA" type="BLOB" required="false"/>
+
+ <constraint name="RHQ_PK_QRTZ_BLOB_TRIGGERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_BLOB_TRIGG_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <!-- Commenting out, because Oracle auto-creates an index for the
+ primary key column(s) and fails if you try to create another
+ index for the same column(s) (ips, 03/29/07).
+ -->
+ <!--
+ <index name="RHQ_QRTZ_BLOB_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ -->
+ </table>
+
+ <table name="RHQ_QRTZ_TRIGGER_LISTENERS">
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_LISTENER" type="VARCHAR2" size="80" required="true"/>
+
+ <constraint name="RHQ_PK_QRTZ_TRIGGER_LISTENERS">
+ <primaryKey>
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ <field ref="TRIGGER_LISTENER"/>
+ </primaryKey>
+ </constraint>
+ <constraint name="RHQ_FK_QRTZ_TRGR_LSTNRS_TN_TG">
+ <foreignKey local="TRIGGER_NAME,TRIGGER_GROUP"
+ references="RHQ_QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)"
+ ondelete="cascade"/>
+ </constraint>
+
+ <!-- Quartz docs recommend this index. -->
+ <index name="RHQ_QRTZ_TRGR_LSTNRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_QRTZ_FIRED_TRIGGERS">
+ <column name="ENTRY_ID" primarykey="true" type="VARCHAR2" size="95" required="true"/>
+ <column name="TRIGGER_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="TRIGGER_GROUP" type="VARCHAR2" size="80" required="true"/>
+ <column name="INSTANCE_NAME" type="VARCHAR2" size="80" required="true"/>
+ <column name="FIRED_TIME" type="LONG" required="true"/>
+ <column name="PRIORITY" type="INTEGER" required="false"/>
+ <column name="STATE" type="VARCHAR2" size="16" required="true"/>
+ <column name="IS_VOLATILE" type="BOOLEAN" required="true"/>
+ <column name="JOB_NAME" type="VARCHAR2" size="80" required="false"/>
+ <column name="JOB_GROUP" type="VARCHAR2" size="80" required="false"/>
+ <column name="IS_STATEFUL" type="BOOLEAN" required="false"/>
+ <column name="REQUESTS_RECOVERY" type="BOOLEAN" required="false"/>
+
+ <!-- Quartz docs recommend these indexes. -->
+ <index name="RHQ_QRTZ_FIRED_TRGRS_TN_IDX">
+ <field ref="TRIGGER_NAME"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_TG_IDX">
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_TN_TG_IDX">
+ <field ref="TRIGGER_NAME"/>
+ <field ref="TRIGGER_GROUP"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_IN_IDX">
+ <field ref="INSTANCE_NAME"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_JN_IDX">
+ <field ref="JOB_NAME"/>
+ </index>
+ <index name="RHQ_QRTZ_FIRED_TRGRS_JG_IDX">
+ <field ref="JOB_GROUP"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_QRTZ_CALENDARS">
+ <column name="CALENDAR_NAME" primarykey="true" type="VARCHAR2" size="80" required="true"/>
+ <column name="CALENDAR" type="BLOB" required="true"/>
+ </table>
+
+ <table name="RHQ_QRTZ_PAUSED_TRIGGER_GRPS">
+ <column name="TRIGGER_GROUP" primarykey="true" type="VARCHAR2" size="80" required="true"/>
+ </table>
+
+ <table name="RHQ_QRTZ_SCHEDULER_STATE">
+ <column name="INSTANCE_NAME" primarykey="true" type="VARCHAR2" size="80" required="true"/>
+ <column name="LAST_CHECKIN_TIME" type="LONG" required="true"/>
+ <column name="CHECKIN_INTERVAL" type="LONG" required="true"/>
+ <column name="RECOVERER" type="VARCHAR2" size="80" required="false"/>
+ </table>
+
+ <table name="RHQ_QRTZ_LOCKS">
+ <column name="LOCK_NAME" primarykey="true" type="VARCHAR2" size="40" required="true"/>
+ <data LOCK_NAME="TRIGGER_ACCESS"/>
+ <data LOCK_NAME="JOB_ACCESS"/>
+ <data LOCK_NAME="CALENDAR_ACCESS"/>
+ <data LOCK_NAME="STATE_ACCESS"/>
+ <data LOCK_NAME="MISFIRE_ACCESS"/>
+ </table>
+
+<!-- END: scheduler-schema.xml -->
+<!-- BEGIN: amps-schema.xml -->
+
+
+ <table name="RHQ_PLUGIN">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="4000" type="VARCHAR2" required="false"/>
+ <column name="VERSION" size="200" type="VARCHAR2" required="false"/>
+ <column name="AMPS_VERSION" size="16" type="VARCHAR2" required="false"/>
+ <column name="ENABLED" type="BOOLEAN" required="true"/>
+ <column name="STATUS" size="16" type="VARCHAR2" required="true"/>
+ <column name="HELP" type="CLOB" required="false"/>
+ <column name="PATH" size="500" type="VARCHAR2" required="true"/>
+ <column name="MD5" size="100" type="VARCHAR2" required="true"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="DEPLOYMENT" size="8" type="VARCHAR2" required="true"/>
+ <column name="PTYPE" size="200" type="VARCHAR2" required="false"/>
+ <column name="PLUGIN_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="JOBS_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="CONTENT" type="BLOB" required="false"/>
+
+ <index name="RHQ_PLUGIN_NAME_DEPLOY_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="DEPLOYMENT"/>
+ </index>
+ </table>
+
+<!-- END: amps-schema.xml -->
+<!-- BEGIN: measurement-schema.xml -->
+
+ <table name="RHQ_MEASUREMENT_DEF">
+
+ <!-- === required columns === -->
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE(ID)"/>
+ <column name="NAME" type="VARCHAR2" size="100" required="true"/>
+
+ <!-- === optional columns === -->
+ <!-- an OSGI version range - if null, the metric def applies to all versions of the associated resource type -->
+ <column name="RESOURCE_VERSION_RANGE" type="VARCHAR2" size="100"/>
+ <column name="CATEGORY" type="SMALLINT"/>
+ <column name="UNITS" type="SMALLINT"/>
+ <column name="NUMERIC_TYPE" type="SMALLINT"/>
+ <column name="DISPLAY_TYPE" type="SMALLINT"/>
+ <column name="DATA_TYPE" type="SMALLINT"/>
+ <column name="RAW_NUMERIC_TYPE" type="SMALLINT"/>
+ <column name="DEFAULT_ON" type="BOOLEAN" default="false"/>
+ <column name="DEFAULT_INTERVAL" type="LONG" />
+ <column name="DISPLAY_NAME" type="VARCHAR2" size="100"/>
+ <column name="DISPLAY_ORDER" type="INTEGER" default="1000"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="500"/>
+ <column name="DESTINATION_TYPE" type="VARCHAR2" size="100"/>
+
+ <column name="VERSION" type="INTEGER"/>
+ <!-- for optimistic locking -->
+
+ <!-- === business key (RESOURCE_TYPE_ID + NAME + RAW_NUMERIC_TYPE) === -->
+ <index name="RHQ_METRIC_DEF_KEY_IDX" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ <field ref="RAW_NUMERIC_TYPE"/>
+ </index>
+ <index name="RHQ_METRIC_DEF_NT_IDX">
+ <field ref="NUMERIC_TYPE"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_SCHED">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+
+ <column name="ENABLED" type="BOOLEAN" default="false"/>
+ <column name="MTIME" type="LONG" />
+ <column name="DEFINITION" type="INTEGER" references="RHQ_MEASUREMENT_DEF(ID)"/>
+ <column name="VERSION" type="INTEGER" />
+ <column name="COLL_INTERVAL" type="LONG" />
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE(ID)"/>
+ <index name="RHQ_MEAS_SCHED_UNIQ" unique="true">
+ <field ref="RESOURCE_ID"/>
+ <field ref="DEFINITION"/>
+ </index>
+ <index name="RHQ_MEAS_SCHED_RESID_IDX">
+ <field ref="RESOURCE_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_BLINE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+
+ <column name="BL_USER_ENTERED" type="BOOLEAN" default="false" required="true"/>
+ <column name="BL_MIN" type="DOUBLE" required="true"/>
+ <column name="BL_MAX" type="DOUBLE" required="true"/>
+ <column name="BL_MEAN" type="DOUBLE" required="true"/>
+ <column name="BL_COMPUTE_TIME" type="LONG" required="true"/>
+ <column name="SCHEDULE_ID" type="INTEGER" required="true" references="RHQ_MEASUREMENT_SCHED(ID)"/>
+ <index name="RHQ_MEAS_BASELINE_CTIME_IDX">
+ <field ref="BL_COMPUTE_TIME"/>
+ </index>
+ <index name="RHQ_MEAS_BASELINE_SID_IDX">
+ <field ref="SCHEDULE_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_NUM_1H" logging="false" cache="true"
+ tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@" storage-options="freelists 20">
+
+ <column name="TIME_STAMP" required="true" type="LONG"/>
+ <column name="SCHEDULE_ID" required="true" type="INTEGER"/>
+ <column name="VALUE" required="false" type="DOUBLE"/>
+ <column name="MINVALUE" required="false" type="DOUBLE"/>
+ <column name="MAXVALUE" required="false" type="DOUBLE"/>
+
+ <constraint name="RHQ_MEAS_DATA_1H_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="RHQ_MEAS_DATA_1H_TIME_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_NUM_6H" logging="false" cache="true"
+ tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@" storage-options="freelists 20">
+
+ <column name="TIME_STAMP" required="true" type="LONG"/>
+ <column name="SCHEDULE_ID" required="true" type="INTEGER"/>
+ <column name="VALUE" required="false" type="DOUBLE"/>
+ <column name="MINVALUE" required="false" type="DOUBLE"/>
+ <column name="MAXVALUE" required="false" type="DOUBLE"/>
+
+ <constraint name="RHQ_MEAS_DATA_6H_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="RHQ_MEAS_DATA_6H_TIME_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_NUM_1D" logging="false" cache="true"
+ tablespace="@@@LARGE_TABLESPACE_FOR_DATA@@@" storage-options="freelists 20">
+
+ <column name="TIME_STAMP" required="true" type="LONG"/>
+ <column name="SCHEDULE_ID" required="true" type="INTEGER"/>
+ <column name="VALUE" required="false" type="DOUBLE"/>
+ <column name="MINVALUE" required="false" type="DOUBLE"/>
+ <column name="MAXVALUE" required="false" type="DOUBLE"/>
+
+ <constraint name="RHQ_MEAS_DATA_1D_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="RHQ_MEAS_DATA_1D_TIME_IDX">
+ <field ref="TIME_STAMP" />
+ </index>
+ </table>
+
+
+ <table name="RHQ_MEASUREMENT_DATA_TRAIT">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER" />
+ <column name="VALUE" type="VARCHAR2" size="4000" />
+ <constraint name="RHQ_MEAS_DATA_TRAIT_ID_TIME_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+ <table name="RHQ_CALLTIME_DATA_KEY">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="SCHEDULE_ID" type="INTEGER" required="true"/>
+ <column name="CALL_DESTINATION" type="VARCHAR2" size="4000" required="true"/>
+ <index name="RHQ_CALLTIME_DATA_KEY_IDX" unique="true">
+ <field ref="SCHEDULE_ID"/>
+ <field ref="CALL_DESTINATION"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_CALLTIME_DATA_VALUE">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="KEY_ID" type="INTEGER" references="RHQ_CALLTIME_DATA_KEY" required="true"/>
+ <column name="BEGIN_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="true"/>
+ <column name="MINIMUM" type="DOUBLE" required="true"/>
+ <column name="MAXIMUM" type="DOUBLE" required="true"/>
+ <column name="TOTAL" type="DOUBLE" required="true"/>
+ <column name="COUNT" type="LONG" required="true"/>
+ <index name="RHQ_CT_DA_VA_END_TIM_IDX">
+ <field ref="END_TIME"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_AVAILABILITY">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE(ID)"/>
+ <column name="START_TIME" type="LONG" required="true" />
+ <column name="END_TIME" type="LONG" required="false" />
+ <column name="AVAILABILITY_TYPE" type="SMALLINT" required="false" />
+ <index name="RHQ_AVAIL_RESOURCE_START_IDX">
+ <field ref="RESOURCE_ID"/>
+ <field ref="START_TIME"/>
+ </index>
+ <!-- only one null row can exist for any resource -->
+ <index name="RHQ_AVAIL_RESOURCE_END_IDX" condition="END_TIME IS NULL">
+ <field ref="RESOURCE_ID"/>
+ <field ref="END_TIME" />
+ </index>
+ </table>
+
+ <table name="RHQ_RESOURCE_AVAIL">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE(ID)" ondelete="cascade"/>
+ <column name="AVAILABILITY_TYPE" type="SMALLINT" required="false" />
+ <index name="RHQ_RESOURCE_AVAIL_IDX">
+ <field ref="RESOURCE_ID" />
+ </index>
+ </table>
+
+ <table name="RHQ_MEASUREMENT_OOB">
+ <column name="SCHEDULE_ID" type="INTEGER" references="RHQ_MEASUREMENT_SCHED(ID)" required="true"/>
+ <column name="TIME_STAMP" type="LONG" required="true"/>
+ <column name="OOB_FACTOR" type="INTEGER" required="true" />
+ <constraint name="RHQ_MEAS_OOB_ID_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_MEASUREMENT_OOB_TMP">
+ <column name="SCHEDULE_ID" type="INTEGER" required="true"/>
+ <column name="TIME_STAMP" type="LONG" required="true"/>
+ <column name="OOB_FACTOR" type="INTEGER" required="true" />
+ <constraint name="RHQ_MEAS_OOB_TMP_ID_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_NUMBERS">
+ <column name="i" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true" />
+ </table>
+
+
+ <table name="RHQ_MEAS_DATA_NUM_R00">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R00_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R00_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R01">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R01_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R01_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R02">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R02_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R02_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R03">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R03_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R03_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R04">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R04_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R04_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R05">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R05_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R05_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R06">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R06_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R06_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R07">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R07_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R07_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R08">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R08_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R08_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R09">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R09_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R09_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R10">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R10_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R10_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R11">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R11_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R11_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R12">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R12_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R12_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R13">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R13_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R13_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+ <table name="RHQ_MEAS_DATA_NUM_R14">
+ <column name="TIME_STAMP" type="LONG"/>
+ <column name="SCHEDULE_ID" type="INTEGER"/>
+ <column name="VALUE" type="DOUBLE"/>
+ <index name="RHQ_MEAS_DATA_R14_TS_IDX">
+ <field ref="TIME_STAMP"/>
+ </index>
+ <constraint name="RHQ_MEAS_DATA_NUM_R14_ID_T_PK">
+ <primaryKey>
+ <field ref="SCHEDULE_ID"/>
+ <field ref="TIME_STAMP"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+<!-- END: measurement-schema.xml -->
+<!-- BEGIN: content-schema.xml -->
+
+
+ <table name="RHQ_ARCHITECTURE">
+ <column name="ID" default="sequence-only" initial="100" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="50" type="VARCHAR2" required="true"/>
+ <index name="RHQ_ARCHITECTURE_NAME_IDX" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_REPO_GROUP_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ </table>
+
+
+ <table name="RHQ_REPO_GROUP">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+
+ <column name="REPO_GROUP_TYPE_ID" type="INTEGER" references="RHQ_REPO_GROUP_TYPE" required="true"/>
+
+ <index name="RHQ_REPO_GROUP_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="REPO_GROUP_TYPE_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_CONTENT_SOURCE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="false"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="PLUGIN_NAME" size="100" type="VARCHAR2" required="false"/>
+ <!-- we might want this as part of natural key -->
+ <column name="DEFAULT_LAZY_LOAD" type="BOOLEAN" required="true"/>
+ <column name="DEFAULT_DOWNLOAD_MODE" size="16" type="VARCHAR2" required="true"/>
+ <column name="DEFAULT_SYNC_SCHEDULE" size="64" type="VARCHAR2" required="false"/>
+ <column name="API_CLASS" size="100" type="VARCHAR2" required="true"/>
+
+ <column name="SOURCE_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF" required="false"/>
+
+ <index name="RHQ_CONTENT_SOURCE_TYPE_IDX" unique="true">
+ <field ref="NAME"/>
+ <!-- <field ref="PLUGIN_NAME"/> -->
+ </index>
+ </table>
+
+ <table name="RHQ_CONTENT_SOURCE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="LAZY_LOAD" type="BOOLEAN" required="true"/>
+ <column name="DOWNLOAD_MODE" size="16" type="VARCHAR2" required="true"/>
+ <column name="SYNC_SCHEDULE" size="64" type="VARCHAR2" required="false"/>
+ <column name="LOAD_ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="CREATION_TIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED_TIME" type="LONG" required="true"/>
+
+ <column name="CONTENT_SOURCE_TYPE_ID" type="INTEGER" references="RHQ_CONTENT_SOURCE_TYPE" required="true"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+
+ <index name="RHQ_CONTENT_SOURCE_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="CONTENT_SOURCE_TYPE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_REPO">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CREATION_TIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED_TIME" type="LONG" required="true"/>
+ <column name="IS_CANDIDATE" type="BOOLEAN" required="true"/>
+ <column name="SYNC_SCHEDULE" size="64" type="VARCHAR2" required="false"/>
+ <column name="OWNER_ID" type="INTEGER" required="false" references="RHQ_SUBJECT" />
+ <column name="IS_PRIVATE" type="BOOLEAN" required="true" />
+
+ <index name="RHQ_REPO_IDX" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_REPO_RELATION_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ </table>
+
+
+ <table name="RHQ_REPO_RELATION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="RELATED_REPO_ID" type="INTEGER" references="RHQ_REPO" required="true"/>
+ <column name="REPO_RELATION_TYPE_ID" type="INTEGER" references="RHQ_REPO_RELATION_TYPE" required="true"/>
+ </table>
+
+
+
+ <table name="RHQ_PACKAGE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="false"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CATEGORY" size="50" type="VARCHAR2" required="false"/>
+ <column name="DISCOVERY_INTERVAL" type="INTEGER" required="false"/>
+ <column name="IS_CREATION_DATA" type="BOOLEAN" required="true"/>
+ <column name="SUPPORTS_ARCHITECTURE" type="BOOLEAN" required="true"/>
+
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" references="RHQ_RESOURCE_TYPE" required="false"/>
+ <column name="DEPLOYMENT_CONFIG_DEF_ID" type="INTEGER" references="RHQ_CONFIG_DEF" required="false"/>
+ <column name="PACKAGE_EXTRA_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG_DEF" required="false"/>
+
+ <index name="RHQ_PACKAGE_TYPE_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="RESOURCE_TYPE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_PACKAGE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="CLASSIFICATION" size="200" type="VARCHAR2" required="false"/>
+
+ <column name="PACKAGE_TYPE_ID" type="INTEGER" references="RHQ_PACKAGE_TYPE" required="true"/>
+
+ <index name="RHQ_PACKAGE_IDX" unique="true">
+ <field ref="NAME"/>
+ <field ref="PACKAGE_TYPE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PACKAGE_BITS">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BITS" type="LARGEOBJECT" required="false"/>
+ </table>
+
+ <table name="RHQ_PACKAGE_VERSION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="false"/>
+ <column name="SHORT_DESCRIPTION" size="10000" type="CLOB" required="false"/>
+ <column name="LONG_DESCRIPTION" size="50000" type="CLOB" required="false"/>
+ <column name="VERSION" size="500" type="VARCHAR2" required="true"/>
+ <column name="DISPLAY_VERSION" size="500" type="VARCHAR2" required="false"/>
+ <column name="FILE_NAME" size="255" type="VARCHAR2" required="false"/>
+ <column name="FILE_SIZE" type="LONG" required="false"/>
+ <column name="FILE_MD5" size="32" type="VARCHAR2" required="false"/>
+ <column name="FILE_SHA256" size="64" type="VARCHAR2" required="false"/>
+ <column name="FILE_CREATION_TIME" type="LONG" required="false"/>
+ <column name="LICENSE_NAME" size="255" type="VARCHAR2" required="false"/>
+ <column name="LICENSE_VERSION" size="20" type="VARCHAR2" required="false"/>
+ <column name="METADATA" type="BLOB" required="false"/>
+
+ <column name="PACKAGE_ID" type="INTEGER" references="RHQ_PACKAGE" required="true"/>
+ <column name="ARCHITECTURE_ID" type="INTEGER" references="RHQ_ARCHITECTURE" required="true"/>
+ <column name="CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="PACKAGE_BITS_ID" type="INTEGER" references="RHQ_PACKAGE_BITS" required="false"/>
+
+ <index name="RHQ_PACKAGE_VERSION_IDX" unique="true">
+ <field ref="PACKAGE_ID"/>
+ <field ref="VERSION"/>
+ <field ref="ARCHITECTURE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_CONTENT_REQ">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="REQUEST_TYPE" type="VARCHAR2" required="true" size="20"/>
+ <column name="NOTES" type="VARCHAR2" required="false" size="512"/>
+ </table>
+
+ <table name="RHQ_INSTALLED_PACKAGE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="INSTALLATION_TIME" type="LONG" required="false"/>
+
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE" required="true"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" references="RHQ_PACKAGE_VERSION" required="true"/>
+ <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT" required="false"/>
+ </table>
+
+ <table name="RHQ_INSTALLED_PKG_HIST">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STATUS" type="VARCHAR2" size="24" required="true"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="HISTORY_TIMESTAMP" type="LONG" required="false"/>
+
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" references="RHQ_PACKAGE_VERSION" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE" required="true"/>
+ <column name="DEPLOYMENT_CONFIG_ID" type="INTEGER" references="RHQ_CONFIG" required="false"/>
+ <column name="CONTENT_SERVICE_REQUEST_ID" type="INTEGER" references="RHQ_CONTENT_REQ" required="false"/>
+ </table>
+
+ <table name="RHQ_CONTENT_SRC_SYNC">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STATUS" type="VARCHAR2" size="16" required="true"/>
+ <column name="START_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="false"/>
+ <column name="RESULTS" type="LONGVARCHAR" required="false"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ </table>
+
+ <table name="RHQ_REPO_SYNC">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STATUS" type="VARCHAR2" size="16" required="true"/>
+ <column name="START_TIME" type="LONG" required="true"/>
+ <column name="END_TIME" type="LONG" required="false"/>
+ <column name="RESULTS" type="LONGVARCHAR" required="false"/>
+ <column name="PERCENT_COMPLETE" type="LONG" required="false"/>
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ </table>
+
+
+ <table name="RHQ_PACKAGE_INST_STEP">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="STEP_KEY" type="VARCHAR2" size="500" required="true"/>
+ <column name="STEP_ORDER" type="INTEGER" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="4000" required="true"/>
+ <column name="ERROR_MSG" type="LONGVARCHAR" required="false"/>
+ <column name="RESULT" type="VARCHAR2" size="25" required="true"/>
+
+ <column name="INSTALLED_PKG_HIST_ID" type="INTEGER" references="RHQ_INSTALLED_PKG_HIST"/>
+ </table>
+
+ <table name="RHQ_REPO_RESOURCE_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_RESOURCE_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="RESOURCE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_REPO_CONTENT_SRC_MAP"> 1
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_CONTENT_SRC_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="CONTENT_SRC_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_REPO_REPO_GROUP_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="REPO_GROUP_ID" type="INTEGER" required="true" references="RHQ_REPO_GROUP"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_REPO_GROUP_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="REPO_GROUP_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_REPO_REPO_RELATION_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="REPO_RELATION_ID" type="INTEGER" required="true" references="RHQ_REPO_RELATION"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_REPO_RELATION_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="REPO_RELATION_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+ <table name="RHQ_REPO_PKG_VERSION_MAP">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_PKG_VER_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="PACKAGE_VERSION_ID"/>
+ </primaryKey>
+ </constraint>
+ <index name="RHQ_REPO_PKG_VER_MAP_IDX" unique="false">
+ <field ref="PACKAGE_VERSION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_PKG_VER_CONTENT_SRC_MAP">
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ <column name="LOCATION" type="VARCHAR2" size="4000" required="true"/>
+
+ <constraint name="RHQ_PKG_VER_CONTENT_SRC_KEY">
+ <primaryKey>
+ <field ref="PACKAGE_VERSION_ID"/>
+ <field ref="CONTENT_SRC_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_PKG_PRD_MAP">
+ <column name="PKG_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="PRD_ID" type="INTEGER" required="true" references="RHQ_PRD_VER"/>
+
+ <constraint name="RHQ_PKG_PRD_KEY">
+ <primaryKey>
+ <field ref="PKG_ID"/>
+ <field ref="PRD_ID"/>
+ </primaryKey>
+ </constraint>
+
+ </table>
+
+ <table name="RHQ_DISTRIBUTION_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+
+ </table>
+
+ <table name="RHQ_DISTRIBUTION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DISTRIBUTION_TYPE_ID" type="INTEGER" required="true" references="RHQ_DISTRIBUTION_TYPE"/>
+ <column name="LABEL" size="64" type="VARCHAR2" required="true"/>
+ <column name="BASE_PATH" size="256" type="VARCHAR2" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_DISTRIBUTION_IDX" unique="true">
+ <field ref="LABEL"/>
+ <field ref="BASE_PATH"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_REPO_DISTRIBUTION">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="DISTRIBUTION_ID" type="INTEGER" required="true" references="RHQ_DISTRIBUTION"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_DIST_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="DISTRIBUTION_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+
+ <table name="RHQ_DISTRIBUTION_FILE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DISTRIBUTION_ID" type="INTEGER" required="true" references="RHQ_DISTRIBUTION"/>
+ <column name="RELATIVE_FILENAME" size="256" type="VARCHAR2" required="true"/>
+ <!--<column name="FILE_SIZE" type="NUMBER" required="true"/>-->
+ <column name="MD5SUM" size="64" type="VARCHAR2" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+ <!--<column name="CTIME" type="LONG" required="true"/>-->
+
+ <index name="RHQ_DISTRIBUTION_FILE_IDX" unique="true">
+ <field ref="DISTRIBUTION_ID"/>
+ <field ref="RELATIVE_FILENAME"/>
+ </index>
+ </table>
+
+
+
+
+ <table name="RHQ_ADVISORY">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY" size="64" type="VARCHAR2" required="true"/>
+ <column name="ADVISORY_TYPE" size="64" type="VARCHAR2" required="true" />
+ <column name="ADVISORY_REL" size="64" type="VARCHAR2" required="false"/>
+ <column name="ADVISORY_NAME" size="64" type="VARCHAR2" required="false"/>
+ <column name="DESCRIPTION" size="4000" type="VARCHAR2" required="false"/>
+ <column name="SYNOPSIS" size="4000" type="VARCHAR2" required="true"/>
+ <column name="TOPIC" size="4000" type="VARCHAR2" required="false"/>
+ <column name="SOLUTION" size="4000" type="VARCHAR2" required="false"/>
+ <column name="SEVERITY" size="64" type="VARCHAR2" required="false"/>
+ <column name="ISSUE_DATE" type="LONG" required="false"/>
+ <column name="UPDATE_DATE" type="LONG" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_NAME_UQ" unique="true">
+ <field ref="ADVISORY_NAME"/>
+ </index>
+
+ <index name="RHQ_ADVISORY_UQ" unique="true">
+ <field ref="ADVISORY"/>
+ </index>
+
+ <index name="RHQ_ADVISORY_UDATE_IDX" unique="false">
+ <field ref="UPDATE_DATE"/>
+ </index>
+ </table>
+
+ <table name="RHQ_ADVISORY_PACKAGE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_PKG_IDX" unique="true">
+ <field ref="ADVISORY_ID"/>
+ <field ref="PACKAGE_VERSION_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_CVE">
+ <column name="ID" default="sequence-only" initial="101" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="64" type="VARCHAR2" required="true"/>
+ </table>
+
+ <table name="RHQ_ADVISORY_CVE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="CVE_ID" type="INTEGER" required="true" references="RHQ_CVE"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_CVE_IDX" unique="true">
+ <field ref="ADVISORY_ID"/>
+ <field ref="CVE_ID"/>
+ </index>
+
+ </table>
+
+ <table name="RHQ_ADVISORY_BUGLIST">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="BUG_ID" size="256" type="VARCHAR2" required="true"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <index name="RHQ_ADVISORY_BUG_IDX" unique="true">
+ <field ref="ADVISORY_ID"/>
+ <field ref="BUG_ID"/>
+ </index>
+ </table>
+
+
+ <table name="RHQ_REPO_ADVISORY">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="ADVISORY_ID" type="INTEGER" required="true" references="RHQ_ADVISORY"/>
+ <column name="LAST_MODIFIED" type="LONG" required="true"/>
+
+ <constraint name="RHQ_REPO_ADV_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="ADVISORY_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- BUNDLE_TYPE is things like "Cobbler profile" or "file-based bundle" or "puppet recipe" -->
+ <table name="RHQ_BUNDLE_TYPE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_TYPE_UNIQUE" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- BUNDLE is a named piece of content that can be versioned and installed somewhere -->
+ <table name="RHQ_BUNDLE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="BUNDLE_TYPE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_TYPE"/>
+ <column name="PACKAGE_TYPE_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_TYPE"/>
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_UNIQUE" unique="true">
+ <field ref="BUNDLE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- BUNDLE_VERSION represents an actual piece of content that needs to be installed somewhere -->
+ <table name="RHQ_BUNDLE_VERSION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="VERSION" size="500" type="VARCHAR2" required="true"/>
+ <column name="VERSION_ORDER" type="INTEGER" required="true"/>
+ <column name="ACTION" type="CLOB" required="true"/>
+ <column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF" />
+ <column name="BUNDLE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_VERSION_UNIQUE" unique="true">
+ <field ref="BUNDLE_ID"/>
+ <field ref="NAME"/>
+ <field ref="VERSION"/>
+ </index>
+ </table>
+
+ <!-- Many-to-many table that links many repos to a particular bundle version. destination platforms -->
+ <!-- would be required to have associations to the specified repos (to access required content -->
+ <table name="RHQ_BUNDLE_VERSION_REPO">
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+
+ <constraint name="RHQ_BUNDLE_VERSION_REPO_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_VERSION_ID"/>
+ <field ref="REPO_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- BUNDLE_FILE represents a file that is associated with (possibly bundled inside) a bundle version -->
+ <table name="RHQ_BUNDLE_FILE">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ </table>
+
+ <!-- A logical destination for a bundle deployment. Defines the platforms and directory on those targets. -->
+ <table name="RHQ_BUNDLE_DESTINATION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="BUNDLE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE"/>
+ <column name="GROUP_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_GROUP"/>
+ <column name="DEPLOY_DIR" size="256" type="VARCHAR2" required="true"/>
+ <column name="DEST_BASE_DIR_NAME" size="200" type="VARCHAR2" required="true"/>
+
+ <!-- This index is for constraint, not performance -->
+ <index name="RHQ_BUNDLE_DESTINATION_UNIQUE" unique="true">
+ <field ref="BUNDLE_ID"/>
+ <field ref="GROUP_ID"/>
+ <field ref="DEPLOY_DIR"/>
+ </index>
+ </table>
+
+ <!-- An actual deployment of a bundle version to a destination, with a specific config. Bundle deployments
+ can differ only on ctime, which is assumed to be different -->
+ <table name="RHQ_BUNDLE_DEPLOYMENT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="BUNDLE_DESTINATION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DESTINATION"/>
+ <column name="CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG" />
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="false" size="255"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="IS_LIVE" type="BOOLEAN" required="true"/>
+ <column name="REPLACED_BUNDLE_DEPLOYMENT_ID" type="INTEGER" required="false" references="RHQ_BUNDLE_DEPLOYMENT"/>
+ </table>
+
+ <!-- Represents a bundle version that is deployed on a platform resource -->
+ <table name="RHQ_BUNDLE_RES_DEPLOY">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BUNDLE_DEPLOYMENT_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DEPLOYMENT" />
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE" />
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <index name="RHQ_BUNDLE_RES_DEPLOY_IDX" unique="true">
+ <field ref="BUNDLE_DEPLOYMENT_ID"/>
+ <field ref="RESOURCE_ID"/>
+ </index>
+ </table>
+
+ <table name="RHQ_BUNDLE_RES_DEP_HIST">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="BUNDLE_RES_DEPLOY_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_RES_DEPLOY" />
+ <column name="SUBJECT_NAME" required="false" size="255" type="VARCHAR2"/>
+ <column name="AUDIT_TIME" required="true" type="LONG"/>
+ <column name="ACTION" required="true" size="128" type="VARCHAR2"/>
+ <column name="INFO" required="true" size="512" type="VARCHAR2"/>
+ <column name="CATEGORY" required="false" size="32" type="VARCHAR2"/>
+ <column name="STATUS" required="true" type="VARCHAR2" size="16"/>
+ <column name="MESSAGE" required="false" type="LONGVARCHAR"/>
+ <column name="ATTACHMENT" required="false" type="LONGVARCHAR"/>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_MAP">
+ <column name="BUNDLE_ID" type="INTEGER" required="true" references="RHQ_BUNDLE"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_VERSION_MAP">
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_VERSION"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_VER_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_VERSION_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_DEPLOY_MAP">
+ <column name="BUNDLE_DEPLOYMENT_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DEPLOYMENT"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_DEP_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_DEPLOYMENT_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_TAGGING_BUNDLE_DEST_MAP">
+ <column name="BUNDLE_DESTINATION_ID" type="INTEGER" required="true" references="RHQ_BUNDLE_DESTINATION"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAGGING"/>
+ <constraint name="RHQ_TAGGING_BUNDLE_DES_MAP_KEY">
+ <primaryKey>
+ <field ref="BUNDLE_DESTINATION_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- Drift Management Tables -->
+ <table name="RHQ_DRIFT_DEF_TEMPLATE">
+ <column name="ID" default="sequence-only" initial="1001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="NAME" type="VARCHAR2" size="128" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="512" required="false"/>
+ <!-- true if defined by user, false if provided by plugin -->
+ <column name="IS_USER_DEFINED" type="BOOLEAN" required="true"/>
+ <!--
+ Change sets are managed by the drift server plugins; therefore, we cannot maintain
+ a FK constraint on the change set id. And the type cannot be integer because
+ other back ends like MongoDB use other types that are basically variants of a
+ UUID
+
+ jsanda
+ -->
+ <column name="DRIFT_CHANGE_SET_ID" type="VARCHAR2" size="64" required="false"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <index name="RHQ_DRIFT_DEF_TEMPLATE_UNIQUE" unique="true">
+ <field ref="RESOURCE_TYPE_ID"/>
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <!-- Content of a file being managed for drift. Used for diff and/or remediation -->
+ <table name="RHQ_DRIFT_FILE">
+ <column name="HASH_ID" type="VARCHAR2" size="64" primarykey="true" required="true"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="DATA" type="LARGEOBJECT" required="false"/>
+ <column name="DATA_SIZE" type="LONG" required="false"/>
+ <column name="STATUS" type="VARCHAR2" size="20" required="true"/>
+ </table>
+
+ <!-- A single drift definition defining file tracking
+ Note: A resource or group (todo: group, other?) can have zero or more drift configurations.
+ Note: The name, interval and is_enabled values are also stored withing the referenced config.
+ This allows us to use the config editor to manipulate all fields.
+ Note: Name is read-only
+ Note: Interval unit is millis
+ -->
+ <table name="RHQ_DRIFT_DEFINITION">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="DRIFT_DEF_TEMPLATE_ID" type="INTEGER" required="false" references="RHQ_DRIFT_DEF_TEMPLATE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="NAME" type="VARCHAR2" size="512" required="true"/>
+ <column name="DESCRIPTION" type="VARCHAR2" size="512" required="false"/>
+ <column name="INTERVAL" type="LONG" required="true"/>
+ <column name="IS_ENABLED" type="BOOLEAN" required="true"/>
+ <column name="DRIFT_HANDLING_MODE" type="VARCHAR2" size="20" required="true"/>
+ <column name="IS_PINNED" type="BOOLEAN" required="true"/>
+ <column name="IS_ATTACHED" type="BOOLEAN" required="true"/>
+ <column name="COMPLIANCE_STATUS" type="INTEGER" required="true"/>
+ </table>
+
+ <!-- A set of drift records (note, this is for the JPA server plugin impl only) -->
+ <table name="RHQ_DRIFT_SET">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ </table>
+
+ <!-- A drift change-set report for a resource (note, this is for the JPA server plugin impl only) -->
+ <table name="RHQ_DRIFT_CHANGE_SET">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="DRIFT_SET_ID" type="INTEGER" required="false" references="RHQ_DRIFT_SET"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <!-- Version 0 is initial change-set -->
+ <column name="VERSION" type="INTEGER" required="true"/>
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="false" references="RHQ_RESOURCE"/>
+ <column name="DRIFT_DEFINITION_ID" type="INTEGER" required="false" references="RHQ_DRIFT_DEFINITION"/>
+ <!-- the drift handling mode at changeset creation time -->
+ <column name="DRIFT_HANDLING_MODE" type="VARCHAR2" size="20" required="true"/>
+ </table>
+
+ <!-- A single occurence of drift for a resource (note, this is for the JPA server plugin impl only) -->
+ <table name="RHQ_DRIFT">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <column name="DRIFT_SET_ID" type="INTEGER" required="false" references="RHQ_DRIFT_SET"/>
+ <column name="DRIFT_CHANGE_SET_ID" type="INTEGER" required="true" references="RHQ_DRIFT_CHANGE_SET"/>
+ <!-- the file path not including the base directory -->
+ <column name="PATH" type="VARCHAR2" size="1024" required="true"/>
+ <!-- the same as PATH less [/]filename.ext. Redundant storage for the purpose of strict directory search.
+ this field can be considered transient for serialization purposes -->
+ <column name="PATH_DIRECTORY" type="VARCHAR2" size="1024" required="true"/>
+ <column name="OLD_DRIFT_FILE" type="VARCHAR2" size="64" required="false" references="RHQ_DRIFT_FILE"/>
+ <column name="NEW_DRIFT_FILE" type="VARCHAR2" size="64" required="false" references="RHQ_DRIFT_FILE"/>
+ </table>
+
+
+<!-- END: content-schema.xml -->
+<!-- BEGIN: resource-request-schema.xml -->
+
+
+ <table name="RHQ_CREATE_RES_HIST">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="PARENT_RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="CREATED_RESOURCE_NAME" type="VARCHAR2" size="500" required="false"/>
+ <column name="NEW_RESOURCE_KEY" type="VARCHAR2" required="false" size="500"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
+ <column name="INSTALLED_PACKAGE_ID" type="INTEGER" required="false" references="RHQ_INSTALLED_PACKAGE"/>
+ </table>
+
+ <table name="RHQ_DELETE_RES_HIST">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="ERROR_MESSAGE" type="LONGVARCHAR" required="false"/>
+ <column name="SUBJECT_NAME" type="VARCHAR2" required="true" size="100"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+ <column name="STATUS" type="VARCHAR2" required="true" size="16"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ </table>
+
+<!-- END: resource-request-schema.xml -->
+<!-- BEGIN: jms-schema.xml -->
+
+<!-- the schema matches that which would be automatically created by the JMS subsystem -->
+<!-- see deploy/jms/rhq-jdbc-state-service.xml and rhq-jdbc2-service.xml -->
+
+
+ <table name="JMS_MESSAGES">
+ <column name="MESSAGEID" required="true" type="INTEGER" />
+ <column name="DESTINATION" required="true" type="VARCHAR2" size="255" />
+ <column name="TXID" required="false" type="INTEGER" />
+ <column name="TXOP" required="false" type="CHAR" size="1" />
+ <column name="MESSAGEBLOB" required="false" type="BLOB" />
+
+ <constraint name="JMS_MESSAGES_PKEY">
+ <primaryKey>
+ <field ref="MESSAGEID"/>
+ <field ref="DESTINATION"/>
+ </primaryKey>
+ </constraint>
+
+ <index name="JMS_MESSAGES_TXOP_TXID">
+ <field ref="TXOP"/>
+ <field ref="TXID"/>
+ </index>
+ <index name="JMS_MESSAGES_DESTINATION">
+ <field ref="DESTINATION"/>
+ </index>
+ </table>
+
+ <table name="JMS_TRANSACTIONS">
+ <column name="TXID" required="true" type="INTEGER" primarykey="true" />
+ </table>
+
+ <table name="JMS_USERS">
+ <column name="USERID" required="true" type="VARCHAR2" size="32" primarykey="true" />
+ <column name="PASSWD" required="true" type="VARCHAR2" size="32" />
+ <column name="CLIENTID" required="false" type="VARCHAR2" size="128" />
+ </table>
+
+ <table name="JMS_ROLES">
+ <column name="ROLEID" required="true" type="VARCHAR2" size="32" />
+ <column name="USERID" required="true" type="VARCHAR2" size="32" />
+
+ <constraint name="JMS_ROLES_PKEY">
+ <primaryKey>
+ <field ref="USERID"/>
+ <field ref="ROLEID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="JMS_SUBSCRIPTIONS">
+ <column name="CLIENTID" required="true" type="VARCHAR2" size="128" />
+ <column name="SUBNAME" required="true" type="VARCHAR2" size="128" />
+ <column name="TOPIC" required="true" type="VARCHAR2" size="255" />
+ <column name="SELECTOR" required="false" type="VARCHAR2" size="255" />
+
+ <constraint name="JMS_SUBSCRIPTIONS_PKEY">
+ <primaryKey>
+ <field ref="CLIENTID"/>
+ <field ref="SUBNAME"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+<!-- END: jms-schema.xml -->
+<!-- BEGIN: obsolete-schema.xml -->
+
+
+ <!-- NOTE: The tables will be dropped in the *** REVERSE ORDER *** as listed in this file! -->
+ <!-- NOTE: So, put the table you want dropped first at the bottom, and so on... -->
+
+
+ <!-- !!! REMOVED FROM CONTENT-SCHEMA !!!! -->
+
+ <table name="RHQ_DRIFT_TEMPLATE_MAP">
+ <column name="RESOURCE_TYPE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE_TYPE"/>
+ <column name="CONFIG_TEMPLATE_ID" type="INTEGER" required="true" references="RHQ_CONFIG_TEMPLATE"/>
+ </table>
+
+ <table name="RHQ_BUNDLE_CONFIG" obsolete="true">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG" />
+ <!-- this probably needs a DTYPE discriminator so we know if its a bundle or a specific bundle version -->
+ <column name="BUNDLE_VERSION_ID" type="INTEGER" required="false" references="RHQ_BUNDLE_VERSION"/>
+ <column name="BUNDLE_ID" type="INTEGER" required="false" references="RHQ_BUNDLE"/>
+ </table>
+
+ <table name="RHQ_CHANNEL" obsolete="true">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ <column name="CREATION_TIME" type="LONG" required="true"/>
+ <column name="LAST_MODIFIED_TIME" type="LONG" required="true"/>
+
+ <index name="RHQ_CHANNEL_IDX" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
+
+ <table name="RHQ_CHANNEL_RESOURCE_MAP" obsolete="true">
+ <column name="CHANNEL_ID" type="INTEGER" required="true" references="RHQ_CHANNEL"/>
+ <column name="RESOURCE_ID" type="INTEGER" required="true" references="RHQ_RESOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_CHANNEL_RESOURCE_MAP_KEY">
+ <primaryKey>
+ <field ref="CHANNEL_ID"/>
+ <field ref="RESOURCE_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_CHANNEL_CONTENT_SRC_MAP" obsolete="true">
+ <column name="CHANNEL_ID" type="INTEGER" required="true" references="RHQ_CHANNEL"/>
+ <column name="CONTENT_SRC_ID" type="INTEGER" required="true" references="RHQ_CONTENT_SOURCE"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_CHAN_CONTENT_SRC_MAP_KEY">
+ <primaryKey>
+ <field ref="CHANNEL_ID"/>
+ <field ref="CONTENT_SRC_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <table name="RHQ_CHANNEL_PKG_VERSION_MAP" obsolete="true">
+ <column name="CHANNEL_ID" type="INTEGER" required="true" references="RHQ_CHANNEL"/>
+ <column name="PACKAGE_VERSION_ID" type="INTEGER" required="true" references="RHQ_PACKAGE_VERSION"/>
+ <column name="CTIME" type="LONG" required="true"/>
+
+ <constraint name="RHQ_CHANNEL_PKG_VER_MAP_KEY">
+ <primaryKey>
+ <field ref="CHANNEL_ID"/>
+ <field ref="PACKAGE_VERSION_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+ <!-- !!! REMOVED FROM MEASUREMENT-SCHEMA !!!! -->
+
+ <table name="RHQ_MEASUREMENT_OOB" obsolete="true">
+ <column name="ID" type="INTEGER" default="sequence-only" initial="10001" primarykey="true" required="true"/>
+ <column name="SCHEDULE_ID" type="INTEGER" references="RHQ_MEASUREMENT_SCHED(ID)" required="true"/>
+ <column name="OCCURRED" type="LONG" required="true"/>
+ <column name="DIFF" type="DOUBLE" required="true"/>
+
+ <index name="RHQ_MEASUREMENT_OOB_IDX" unique="true">
+ <field ref="SCHEDULE_ID" />
+ <field ref="OCCURRED" />
+ </index>
+ </table>
+
+
+ <table name="RHQ_TAG" obsolete="true">
+ <column name="ID" default="sequence-only" initial="10001" primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" size="200" type="VARCHAR2" required="true"/>
+ <column name="DESCRIPTION" size="500" type="VARCHAR2" required="false"/>
+ </table>
+
+ <table name="RHQ_REPO_TAG_MAP" obsolete="true">
+ <column name="REPO_ID" type="INTEGER" required="true" references="RHQ_REPO"/>
+ <column name="TAG_ID" type="INTEGER" required="true" references="RHQ_TAG"/>
+
+ <constraint name="RHQ_REPO_TAG_MAP_KEY">
+ <primaryKey>
+ <field ref="REPO_ID"/>
+ <field ref="TAG_ID"/>
+ </primaryKey>
+ </constraint>
+ </table>
+
+
+<!-- END: obsolete-schema.xml -->
+</dbsetup>
12 years, 3 months