[rhq] modules/enterprise
by ips
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/AsyncResourceDeleteJob.java | 22 +++++-----
1 file changed, 13 insertions(+), 9 deletions(-)
New commits:
commit be4d0cd2040e2275ad73588b2cfd9a685e80e549
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Sep 8 11:08:01 2011 -0400
[BZ 736439] prevent potential timeout of overlord session
(https://bugzilla.redhat.com/show_bug.cgi?id=736439)
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/AsyncResourceDeleteJob.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/AsyncResourceDeleteJob.java
index 75051c2..888009d 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/AsyncResourceDeleteJob.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/AsyncResourceDeleteJob.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -37,7 +37,6 @@ public class AsyncResourceDeleteJob extends AbstractStatefulJob {
private final Log log = LogFactory.getLog(AsyncResourceDeleteJob.class);
- Subject overlord = LookupUtil.getSubjectManager().getOverlord();
ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
private class AsyncDeletionStats {
@@ -53,22 +52,26 @@ public class AsyncResourceDeleteJob extends AbstractStatefulJob {
@Override
public void executeJobCode(JobExecutionContext arg0) throws JobExecutionException {
+ Subject overlord = LookupUtil.getSubjectManager().getOverlord();
List<Integer> toBeRemovedIds = resourceManager.findResourcesMarkedForAsyncDeletion(overlord);
AsyncDeletionStats stats = new AsyncDeletionStats();
for (Integer doomedResourceId : toBeRemovedIds) {
try {
+ // Lookup a new overlord subject for each iteration to ensure the overlord session does not timeout
+ // when a large number of Resources are being deleted.
+ overlord = LookupUtil.getSubjectManager().getOverlord();
// do not recurse
uninventoryResource(overlord, doomedResourceId, stats, false);
} catch (Throwable t) {
- log.debug("Simple asynchronous deletion of resource[id=" + doomedResourceId + "] failed, "
- + "trying more robust yet expensive removal method, cause: " + ThrowableUtil.getAllMessages(t));
+ log.debug("Simple asynchronous deletion of resource[id=" + doomedResourceId + "] failed; "
+ + "trying more robust yet expensive removal method - cause: " + ThrowableUtil.getAllMessages(t));
try {
// try more robust yet expensive recursive delete
uninventoryResource(overlord, doomedResourceId, stats, true);
- } catch (Throwable tt) {
+ } catch (RuntimeException re) {
log.debug("Error during asynchronous deletion of resource[id=" + doomedResourceId + "], cause: "
- + ThrowableUtil.getAllMessages(tt));
+ + ThrowableUtil.getAllMessages(re));
stats.deletedWithFailure++;
}
}
@@ -116,9 +119,9 @@ public class AsyncResourceDeleteJob extends AbstractStatefulJob {
* unscheduleResourceOperation already takes care of ignoring requests to delete unknown schedules,
* which would happen if the following sequence occurs:
*
- * - a user tries to delete a resource, gets the list of resource operation schedules - just then, one
- * or more of the schedules completes it's last scheduled firing, and is removed - then we try to
- * unschedule it here, except that the jobid will no longer be known
+ * - a user tries to delete a resource, gets the list of resource operation schedules - just then,
+ * one or more of the schedules completes it's last scheduled firing, and is removed - then we try
+ * to unschedule it here, except that the jobid will no longer be known
*/
operationManager.unscheduleResourceOperation(overlord, schedule.getJobId().toString(), resourceId);
} catch (UnscheduleException ise) {
@@ -131,4 +134,5 @@ public class AsyncResourceDeleteJob extends AbstractStatefulJob {
+ "]; will not attempt to unschedule anything", t);
}
}
+
}
12 years, 9 months
[rhq] modules/plugins
by ips
modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemDiscoveryComponent.java | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
New commits:
commit ff79822c8ce2cf266374304e5e0b74c557ade870
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Sep 8 10:58:13 2011 -0400
guard against possible NPE; extract constants for fs sys type names
diff --git a/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemDiscoveryComponent.java b/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemDiscoveryComponent.java
index eb10088..b1367b6 100644
--- a/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemDiscoveryComponent.java
+++ b/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemDiscoveryComponent.java
@@ -43,6 +43,9 @@ import org.rhq.core.system.SystemInfo;
@SuppressWarnings({"UnusedDeclaration"})
public class FileSystemDiscoveryComponent implements ResourceDiscoveryComponent<PlatformComponent> {
+ private static final String SYS_TYPE_NAME_LOFS = "lofs";
+ private static final String SYS_TYPE_NAME_TMPFS = "tmpfs";
+
private final Log log = LogFactory.getLog(this.getClass());
public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext<PlatformComponent> discoveryContext)
@@ -67,7 +70,7 @@ public class FileSystemDiscoveryComponent implements ResourceDiscoveryComponent<
break;
default:
String sysTypeName = fs.getSysTypeName();
- if (!(sysTypeName.equals("lofs") || sysTypeName.equals("tmpfs"))) {
+ if (!(SYS_TYPE_NAME_LOFS.equals(sysTypeName) || SYS_TYPE_NAME_TMPFS.equals(sysTypeName))) {
continue;
}
}
12 years, 9 months
[rhq] modules/plugins
by ips
modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemDiscoveryComponent.java | 23 ++++++----
1 file changed, 14 insertions(+), 9 deletions(-)
New commits:
commit da3676e57a24d816a5143de063169b0559d57473
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Sep 8 10:53:18 2011 -0400
[BZ 553034] fix so Solaris lofs and tmpfs fielsystems are discovered
(https://bugzilla.redhat.com/show_bug.cgi?id=553034)
diff --git a/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemDiscoveryComponent.java b/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemDiscoveryComponent.java
index a12d556..eb10088 100644
--- a/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemDiscoveryComponent.java
+++ b/modules/plugins/platform/src/main/java/org/rhq/plugins/platform/FileSystemDiscoveryComponent.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2010 Red Hat, Inc.
+ * Copyright (C) 2005-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -42,6 +42,7 @@ import org.rhq.core.system.SystemInfo;
*/
@SuppressWarnings({"UnusedDeclaration"})
public class FileSystemDiscoveryComponent implements ResourceDiscoveryComponent<PlatformComponent> {
+
private final Log log = LogFactory.getLog(this.getClass());
public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext<PlatformComponent> discoveryContext)
@@ -65,23 +66,27 @@ public class FileSystemDiscoveryComponent implements ResourceDiscoveryComponent<
case FileSystem.TYPE_NETWORK:
break;
default:
- if (!(fs.getDevName().equals("lofs") ||
- fs.getDevName().equals("tmpfs"))) {
- continue;
+ String sysTypeName = fs.getSysTypeName();
+ if (!(sysTypeName.equals("lofs") || sysTypeName.equals("tmpfs"))) {
+ continue;
}
}
- Configuration pluginConfig = discoveryContext.getDefaultPluginConfiguration();
try {
String key = fsInfo.getMountPoint();
+ String name = fsInfo.getMountPoint();
+ String description = fsInfo.getFileSystem().getDevName() + ": "
+ + fsInfo.getFileSystem().getDirName();
+ Configuration pluginConfig = discoveryContext.getDefaultPluginConfiguration();
DiscoveredResourceDetails details = new DiscoveredResourceDetails(discoveryContext.getResourceType(),
- key, key, null, fsInfo.getFileSystem().getDevName() + ": "
- + fsInfo.getFileSystem().getDirName(), pluginConfig, null);
+ key, name, null, description, pluginConfig, null);
results.add(details);
} catch (Exception e) {
- log.error("File system discovery failed for [" + fsInfo + "]: " + e);
+ log.error("File system discovery failed for [" + fsInfo + "].", e);
}
}
+
return results;
}
-}
\ No newline at end of file
+
+}
12 years, 9 months
[rhq] Branch 'feature/performance' - 3 commits - modules/core modules/enterprise modules/plugins
by ips
modules/core/client-api/src/main/resources/rhq-plugin.xsd | 12
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryServerServiceImpl.java | 2
modules/plugins/perftest/src/main/java/org/rhq/plugins/perftest/PerfTestComponent.java | 16 +
modules/plugins/perftest/src/main/java/org/rhq/plugins/perftest/event/PerfTestEventPoller.java | 2
modules/plugins/perftest/src/main/resources/META-INF/rhq-plugin.xml | 137 +++++-----
5 files changed, 100 insertions(+), 69 deletions(-)
New commits:
commit 91849bd6dd4e0f4a51e535da4f21f19b0b2e2937
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Sep 8 10:35:21 2011 -0400
make various improvements to the server-a resourceType used by the configurable-1 scenario, including setting up resource subCategories; add generic support to PerfTestComponent for simulating operation execution; make minor Javadoc improvement in PerfTestEventPoller
diff --git a/modules/plugins/perftest/src/main/java/org/rhq/plugins/perftest/PerfTestComponent.java b/modules/plugins/perftest/src/main/java/org/rhq/plugins/perftest/PerfTestComponent.java
index fdfb98e..1bf4b8a 100644
--- a/modules/plugins/perftest/src/main/java/org/rhq/plugins/perftest/PerfTestComponent.java
+++ b/modules/plugins/perftest/src/main/java/org/rhq/plugins/perftest/PerfTestComponent.java
@@ -57,6 +57,7 @@ import org.rhq.plugins.perftest.trait.TraitFactory;
import java.io.InputStream;
import java.util.List;
+import java.util.Random;
import java.util.Set;
import java.util.Arrays;
@@ -70,10 +71,13 @@ public class PerfTestComponent implements ResourceComponent, MeasurementFacet, C
// Attributes --------------------------------------------
private Log log = LogFactory.getLog(PerfTestComponent.class);
+ public static final Random RANDOM = new Random();
+
private ResourceContext resourceContext;
private EventPoller eventPoller;
private Configuration resourceConfiguration;
+
// ResourceComponent Implementation --------------------------------------------
public void start(ResourceContext context) throws InvalidPluginConfigurationException, Exception {
@@ -186,9 +190,17 @@ public class PerfTestComponent implements ResourceComponent, MeasurementFacet, C
if (name.equals("createEvents")) {
return createEvents(parameters);
+ } else {
+ // Sleep for a bit to simulate actually doing something.
+ Thread.sleep(500);
+ // Make roughly 1 out of 10 invocations fail.
+ if ((RANDOM.nextInt(10) % 9) == 0) {
+ throw new Exception("Operation failed!");
+ } else {
+ // Assume the operation returns an empty result config.
+ return new OperationResult();
+ }
}
-
- return null;
}
private OperationResult createEvents(Configuration params) {
diff --git a/modules/plugins/perftest/src/main/java/org/rhq/plugins/perftest/event/PerfTestEventPoller.java b/modules/plugins/perftest/src/main/java/org/rhq/plugins/perftest/event/PerfTestEventPoller.java
index 10af135..8ad107d 100644
--- a/modules/plugins/perftest/src/main/java/org/rhq/plugins/perftest/event/PerfTestEventPoller.java
+++ b/modules/plugins/perftest/src/main/java/org/rhq/plugins/perftest/event/PerfTestEventPoller.java
@@ -11,9 +11,9 @@ import org.rhq.core.pluginapi.inventory.ResourceContext;
/**
* Emits events when polled. Set the following system properties to define behavior:
*
+ * rhq.perftest.events.polling-interval (in seconds; if this is not set, this poller object will never be created)
* rhq.perftest.events.count (default is "1")
* rhq.perftest.events.severity (default is "INFO")
- * rhq.perftest.events.polling-interval (in seconds; if this is not set, this poller object will never be created)
*/
public class PerfTestEventPoller implements EventPoller {
diff --git a/modules/plugins/perftest/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/perftest/src/main/resources/META-INF/rhq-plugin.xml
index 6642315..05c3e98 100644
--- a/modules/plugins/perftest/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/perftest/src/main/resources/META-INF/rhq-plugin.xml
@@ -119,6 +119,12 @@
<!-- try to make server-a and its children representative of "average" resources -->
<server name="server-a" class="PerfTestComponent" discovery="PerfTestDiscoveryComponent" description="Test Server A">
+ <subcategories>
+ <subcategory name="subcategory0">
+ <subcategory name="childSubcategory0"/>
+ </subcategory>
+ </subcategories>
+
<plugin-configuration>
<c:simple-property name="property0"/>
<c:simple-property name="property1"/>
@@ -127,16 +133,18 @@
<c:simple-property name="property4"/>
</plugin-configuration>
- <metric displayName="Metric 0" property="metric0" defaultOn="false"/>
- <metric displayName="Metric 1" property="metric1" defaultOn="false"/>
- <metric displayName="Metric 2" property="metric2" defaultOn="false"/>
- <metric displayName="Metric 3" property="metric3" defaultOn="false"/>
- <metric displayName="Metric 4" property="metric4" defaultOn="true" displayType="detail"/>
- <metric displayName="Metric 5" property="metric5" defaultOn="true" displayType="detail"/>
- <metric displayName="Metric 6" property="metric6" defaultOn="true" displayType="detail"/>
- <metric displayName="Metric 7" property="metric7" defaultOn="true" displayType="summary"/>
- <metric displayName="Metric 8" property="metric8" defaultOn="true" displayType="summary"/>
- <metric displayName="Metric 9" property="metric9" defaultOn="true" displayType="summary"/>
+ <operation name="operation0"/>
+
+ <metric property="metric0" defaultOn="true" displayType="summary"/>
+ <metric property="metric1" defaultOn="true" displayType="summary"/>
+ <metric property="metric2" defaultOn="true" displayType="summary"/>
+ <metric property="metric3" defaultOn="true" displayType="summary"/>
+ <metric property="metric4" defaultOn="true" displayType="summary"/>
+ <metric property="metric5" defaultOn="true" displayType="summary"/>
+ <metric property="metric6" defaultOn="true" displayType="summary"/>
+ <metric property="metric7" defaultOn="true" displayType="summary"/>
+ <metric property="metric8" defaultOn="true" displayType="summary"/>
+ <metric property="metric9" defaultOn="true" displayType="summary"/>
<event name="PerfTestEventType" description="a test event type"/>
@@ -146,17 +154,25 @@
<content name="artifact3" displayName="Artifact 3" category="configuration"/>
<content name="artifact4" displayName="Artifact 4" category="configuration"/>
- <service name="service-a" class="PerfTestComponent" discovery="PerfTestDiscoveryComponent" description="Nested Service A">
+ <service name="service-a" class="PerfTestComponent" discovery="PerfTestDiscoveryComponent"
+ description="Nested Service A" subCategory="childSubcategory0">
<plugin-configuration>
- <c:simple-property name="childProperty0"/>
- <c:simple-property name="childProperty1"/>
- <c:simple-property name="childProperty2"/>
+ <c:simple-property name="childProperty0" default="red"/>
+ <c:simple-property name="childProperty1" default="green"/>
+ <c:simple-property name="childProperty2" default="blue"/>
</plugin-configuration>
- <metric property="childMetric0" defaultOn="false"/>
- <metric property="childMetric1" defaultOn="true" displayType="detail"/>
+ <metric property="childMetric0" defaultOn="true" displayType="summary"/>
+ <metric property="childMetric1" defaultOn="true" displayType="summary"/>
<metric property="childMetric2" defaultOn="true" displayType="summary"/>
+ <metric property="childMetric3" defaultOn="true" displayType="summary"/>
+ <metric property="childMetric4" defaultOn="true" displayType="summary"/>
+ <metric property="childMetric5" defaultOn="true" displayType="summary"/>
+ <metric property="childMetric6" defaultOn="true" displayType="summary"/>
+ <metric property="childMetric7" defaultOn="true" displayType="summary"/>
+ <metric property="childMetric8" defaultOn="true" displayType="summary"/>
+ <metric property="childMetric9" defaultOn="true" displayType="summary"/>
<content name="childArtifact0" displayName="Child Artifact 0" category="configuration"/>
@@ -164,85 +180,80 @@
<!-- This group contains a sampling of all of the various types of properties. -->
<c:group name="group1" displayName="Group 1">
- <c:simple-property name="string" type="string"/>
- <c:simple-property name="longString" type="longString"/>
- <c:simple-property name="password" type="password"/>
- <c:simple-property name="boolean" type="boolean"/>
- <c:simple-property name="integer" type="integer"/>
- <c:simple-property name="long" type="long"/>
- <c:simple-property name="float" type="float"/>
- <c:simple-property name="double" type="double"/>
- <c:simple-property name="file" type="file"/>
- <c:simple-property name="directory" type="directory"/>
-
- <c:simple-property name="enum" default="Blue">
+ <c:simple-property name="string" type="string" default="blah"/>
+ <c:simple-property name="longString" type="longString" default="blah blah blah"/>
+ <c:simple-property name="password" type="password" default="secret"/>
+ <c:simple-property name="boolean" type="boolean" default="true"/>
+ <c:simple-property name="integer" type="integer" default="42"/>
+ <c:simple-property name="long" type="long" default="1000000000000"/>
+ <c:simple-property name="float" type="float" default="3.14"/>
+ <c:simple-property name="double" type="double" default="0.123456789"/>
+ <c:simple-property name="file" type="file" default="/etc/passwd"/>
+ <c:simple-property name="directory" type="directory" default="/tmp"/>
+
+ <c:simple-property name="enum" default="blue">
<c:property-options>
<c:option value="red" name="Red"/>
- <c:option value="blue" name="Blue"/>
<c:option value="green" name="Green"/>
+ <c:option value="blue" name="Blue"/>
</c:property-options>
</c:simple-property>
- <c:simple-property name="optional" required="false"/>
- <c:simple-property name="readOnly" readOnly="true"/>
+ <c:simple-property name="optional" required="false" default="boo"/>
+ <c:simple-property name="readOnly" readOnly="true" default="fixed"/>
<c:map-property name="openMap"/>
<c:map-property name="map">
- <c:simple-property name="mapMember1"/>
- <c:simple-property name="mapMember2"/>
- <c:simple-property name="mapMember3"/>
+ <c:simple-property name="mapMember1" default="value1"/>
+ <c:simple-property name="mapMember2" default="value2"/>
+ <c:simple-property name="mapMember3" default="value3"/>
</c:map-property>
<c:list-property name="listOfMaps">
<c:map-property name="listMember">
- <c:simple-property name="mapInListMember1"/>
- <c:simple-property name="mapInListMember2"/>
- <c:simple-property name="mapInListMember3"/>
+ <c:simple-property name="mapInListMember1" default="value1"/>
+ <c:simple-property name="mapInListMember2" default="value2"/>
+ <c:simple-property name="mapInListMember3" default="value3"/>
</c:map-property>
</c:list-property>
</c:group>
<!-- This group just contains a whole bunch of props to give this config some bulk. -->
<c:group name="group2" displayName="Group 2">
- <c:simple-property name="string1"/>
- <c:simple-property name="string2"/>
- <c:simple-property name="string3"/>
- <c:simple-property name="string4"/>
- <c:simple-property name="string5"/>
- <c:simple-property name="string6"/>
- <c:simple-property name="string7"/>
- <c:simple-property name="string8"/>
- <c:simple-property name="string9"/>
- <c:simple-property name="string10"/>
- <c:simple-property name="string11"/>
- <c:simple-property name="string12"/>
- <c:simple-property name="string13"/>
- <c:simple-property name="string14"/>
- <c:simple-property name="string15"/>
- <c:simple-property name="string16"/>
- <c:simple-property name="string17"/>
- <c:simple-property name="string18"/>
- <c:simple-property name="string19"/>
- <c:simple-property name="string20"/>
+ <c:simple-property name="string1" default="foo"/>
+ <c:simple-property name="string2" default="foo"/>
+ <c:simple-property name="string3" default="foo"/>
+ <c:simple-property name="string4" default="foo"/>
+ <c:simple-property name="string5" default="foo"/>
+ <c:simple-property name="string6" default="foo"/>
+ <c:simple-property name="string7" default="foo"/>
+ <c:simple-property name="string8" default="foo"/>
+ <c:simple-property name="string9" default="foo"/>
+ <c:simple-property name="string10" default="foo"/>
+ <c:simple-property name="string11" default="foo"/>
+ <c:simple-property name="string12" default="foo"/>
+ <c:simple-property name="string13" default="foo"/>
+ <c:simple-property name="string14" default="foo"/>
+ <c:simple-property name="string15" default="foo"/>
+ <c:simple-property name="string16" default="foo"/>
+ <c:simple-property name="string17" default="foo"/>
+ <c:simple-property name="string18" default="foo"/>
+ <c:simple-property name="string19" default="foo"/>
+ <c:simple-property name="string20" default="foo"/>
</c:group>
- <!-- Throw in a couple templates too. -->
+ <!-- Throw in a template for good measure. -->
<c:template name="template1" description="Template 1">
<c:simple-property name="string" default="template1Value"/>
</c:template>
- <c:template name="template2" description="Template 2">
- <c:simple-property name="string" default="template2Value"/>
- </c:template>
-
</resource-configuration>
<service name="service-ab" class="PerfTestComponent" discovery="PerfTestDiscoveryComponent" description="Nested Service A-B">
<plugin-configuration>
<c:simple-property name="grandchildProperty0"/>
</plugin-configuration>
- <metric property="grandchildMetric0" defaultOn="true" displayType="detail"/>
</service>
</service>
commit cd4e29698030b5766a02602b527f52a7cc468a07
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Sep 8 10:32:23 2011 -0400
document what the default collection interval will default to if the defaultInterval attribute is not specified for a metric in an Agent plugin descriptor
diff --git a/modules/core/client-api/src/main/resources/rhq-plugin.xsd b/modules/core/client-api/src/main/resources/rhq-plugin.xsd
index e02013a..1d95be7 100644
--- a/modules/core/client-api/src/main/resources/rhq-plugin.xsd
+++ b/modules/core/client-api/src/main/resources/rhq-plugin.xsd
@@ -202,8 +202,16 @@
<xs:annotation>
<xs:documentation>
The default collection interval, in milliseconds. The metric is not necessarily
- enabled - see the defaultOn attribute for that. The minimum allowed value is
- 30000 (30 seconds).
+ enabled by default - see the defaultOn attribute for that. The minimum allowed
+ value is 30000 (30 seconds). If unspecified, the default collection interval is
+ set according to the Resource category, metric data type, and metric display
+ type, as follows:
+
+ platform numeric metrics: summary - 1m, detail - 2m
+ server numeric metrics: summary - 5m, detail - 10m
+ service numeric metrics: summary - 10m, detail - 20m
+ traits: summary - 10m, detail - 30m
+ call-time metrics: 1m
</xs:documentation>
</xs:annotation>
<xs:simpleType>
commit ca3b7bfa051e1f1038f157fb28fac257cdca8245
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Sep 8 10:30:20 2011 -0400
include exception in logged error when adding a ResourceError fails
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryServerServiceImpl.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryServerServiceImpl.java
index 4e739aa..04e15d4 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryServerServiceImpl.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryServerServiceImpl.java
@@ -166,7 +166,7 @@ public class DiscoveryServerServiceImpl implements DiscoveryServerService {
ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
resourceManager.addResourceError(resourceError);
} catch (RuntimeException re) {
- log.error("Failed to persist resource error: " + resourceError);
+ log.error("Failed to persist Resource error [" + resourceError + "].", re);
throw re;
}
}
12 years, 9 months
[rhq] Branch 'drift' - modules/enterprise modules/test-utils
by mazz
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java | 65 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertNotificationManagerBean.java | 20
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java | 216 ++++
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/PluginDescriptorValidationTest.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/SubcategoryTest.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateConfigurationSubsystemTest.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateContentSubsystemTest.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateEventsSubsystemTest.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateMeasurementSubsystemTest.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateNativesSubsystemTest.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateOperationsSubsystemTest.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java | 446 ++++++++++
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateResourceSubsystemTest.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateResourceTypeSubsystemTest.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java | 407 ---------
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceManagerBeanTest.java | 25
modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/README.txt | 1
modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/jbossmq-state.xml | 16
modules/enterprise/server/jar/src/test/resources/test/metadata/alerts/type-with-metric.xml | 14
modules/test-utils/src/main/java/org/rhq/test/JPAUtils.java | 34
modules/test-utils/src/main/java/org/rhq/test/TransactionCallbackWithContext.java | 10
21 files changed, 772 insertions(+), 502 deletions(-)
New commits:
commit ae2204736e9dac949811c9810d08114b67205ea8
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Sep 8 09:40:44 2011 -0400
start alert unit tests. this commit causes one test failure. need to fix 736685
to get the test to pass.
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java
index 728ceff..1d73c1a 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java
@@ -659,47 +659,48 @@ public class AlertManagerBean implements AlertManagerLocal, AlertManagerRemote {
log.debug("Sending alert notifications for " + alert.toSimpleString() + "...");
}
List<AlertNotification> alertNotifications = alert.getAlertDefinition().getAlertNotifications();
- //Set<String> emailAddresses = new LinkedHashSet<String>();
- AlertSenderPluginManager alertSenderPluginManager = getAlertPluginManager();
+ if (alertNotifications != null && alertNotifications.size() > 0) {
+ AlertSenderPluginManager alertSenderPluginManager = getAlertPluginManager();
- for (AlertNotification alertNotification : alertNotifications) {
- AlertNotificationLog notificationLog = null;
+ for (AlertNotification alertNotification : alertNotifications) {
+ AlertNotificationLog notificationLog = null;
- String senderName = alertNotification.getSenderName();
- if (senderName == null) {
- notificationLog = new AlertNotificationLog(alert, senderName, ResultState.FAILURE, "Sender '"
- + senderName + "' is not defined");
- } else {
-
- AlertSender<?> notificationSender = alertSenderPluginManager
- .getAlertSenderForNotification(alertNotification);
- if (notificationSender == null) {
- notificationLog = new AlertNotificationLog(alert, senderName, ResultState.FAILURE,
- "Failed to obtain a sender with given name");
+ String senderName = alertNotification.getSenderName();
+ if (senderName == null) {
+ notificationLog = new AlertNotificationLog(alert, senderName, ResultState.FAILURE, "Sender '"
+ + senderName + "' is not defined");
} else {
- try {
- SenderResult result = notificationSender.send(alert);
- if (log.isDebugEnabled()) {
- log.debug(result);
- }
- if (result == null) {
- notificationLog = new AlertNotificationLog(alert, senderName, ResultState.UNKNOWN,
- "Sender did not return any result");
- } else {
- notificationLog = new AlertNotificationLog(alert, senderName, result);
- }
- } catch (Throwable t) {
- log.error("Notification processing terminated abruptly" + t.getMessage());
+ AlertSender<?> notificationSender = alertSenderPluginManager
+ .getAlertSenderForNotification(alertNotification);
+ if (notificationSender == null) {
notificationLog = new AlertNotificationLog(alert, senderName, ResultState.FAILURE,
- "Notification processing terminated abruptly, cause: " + t.getMessage());
+ "Failed to obtain a sender with given name");
+ } else {
+ try {
+ SenderResult result = notificationSender.send(alert);
+ if (log.isDebugEnabled()) {
+ log.debug(result);
+ }
+
+ if (result == null) {
+ notificationLog = new AlertNotificationLog(alert, senderName, ResultState.UNKNOWN,
+ "Sender did not return any result");
+ } else {
+ notificationLog = new AlertNotificationLog(alert, senderName, result);
+ }
+ } catch (Throwable t) {
+ log.error("Notification processing terminated abruptly" + t.getMessage());
+ notificationLog = new AlertNotificationLog(alert, senderName, ResultState.FAILURE,
+ "Notification processing terminated abruptly, cause: " + t.getMessage());
+ }
}
}
- }
- entityManager.persist(notificationLog);
- alert.addAlertNotificatinLog(notificationLog);
+ entityManager.persist(notificationLog);
+ alert.addAlertNotificatinLog(notificationLog);
+ }
}
} catch (Throwable t) {
log.error("Failed to send all notifications for " + alert.toSimpleString(), t);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertNotificationManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertNotificationManagerBean.java
index a57c686..14b1dfb 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertNotificationManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertNotificationManagerBean.java
@@ -307,19 +307,21 @@ public class AlertNotificationManagerBean implements AlertNotificationManagerLoc
public boolean finalizeNotifications(Subject subject, List<AlertNotification> notifications) {
boolean hasErrors = false;
- AlertSenderPluginManager pluginManager = alertManager.getAlertPluginManager();
+ if (notifications != null && notifications.size() > 0) {
+ AlertSenderPluginManager pluginManager = alertManager.getAlertPluginManager();
- for (AlertNotification notification : notifications) {
- AlertSender<?> sender = pluginManager.getAlertSenderForNotification(notification);
+ for (AlertNotification notification : notifications) {
+ AlertSender<?> sender = pluginManager.getAlertSenderForNotification(notification);
- if (sender != null) {
- AlertSenderValidationResults validation = sender.validateAndFinalizeConfiguration(subject);
+ if (sender != null) {
+ AlertSenderValidationResults validation = sender.validateAndFinalizeConfiguration(subject);
- notification.setConfiguration(validation.getAlertParameters());
- notification.setExtraConfiguration(validation.getExtraParameters());
+ notification.setConfiguration(validation.getAlertParameters());
+ notification.setExtraConfiguration(validation.getExtraParameters());
- hasErrors = hasErrors || hasErrors(validation.getAlertParameters())
- || hasErrors(validation.getExtraParameters());
+ hasErrors = hasErrors || hasErrors(validation.getAlertParameters())
+ || hasErrors(validation.getExtraParameters());
+ }
}
}
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
index 8f086a6..32bb678 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
@@ -19,13 +19,221 @@
package org.rhq.enterprise.server.alert.test;
+import java.util.HashSet;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.transaction.TransactionManager;
+
+import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
-import org.rhq.enterprise.server.test.AbstractEJB3Test;
+import org.rhq.core.domain.alert.Alert;
+import org.rhq.core.domain.alert.AlertCondition;
+import org.rhq.core.domain.alert.AlertConditionCategory;
+import org.rhq.core.domain.alert.AlertDampening;
+import org.rhq.core.domain.alert.AlertDefinition;
+import org.rhq.core.domain.alert.AlertPriority;
+import org.rhq.core.domain.alert.BooleanExpression;
+import org.rhq.core.domain.alert.AlertDampening.Category;
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.criteria.AlertCriteria;
+import org.rhq.core.domain.criteria.ResourceCriteria;
+import org.rhq.core.domain.measurement.MeasurementDataNumeric;
+import org.rhq.core.domain.measurement.MeasurementDefinition;
+import org.rhq.core.domain.measurement.MeasurementReport;
+import org.rhq.core.domain.measurement.MeasurementSchedule;
+import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.server.alert.AlertDefinitionManagerLocal;
+import org.rhq.enterprise.server.alert.AlertManagerLocal;
+import org.rhq.enterprise.server.measurement.MeasurementDataManagerLocal;
+import org.rhq.enterprise.server.resource.metadata.test.UpdatePluginMetadataTestBase;
+import org.rhq.enterprise.server.util.LookupUtil;
+import org.rhq.test.JPAUtils;
+import org.rhq.test.TransactionCallbackWithContext;
@Test
-public class AlertConditionTest extends AbstractEJB3Test {
- public void test() throws Exception {
- // TODO need tests here
+public class AlertConditionTest extends UpdatePluginMetadataTestBase {
+ private Resource resource;
+ private Server server;
+
+ @Override
+ protected String getSubsystemDirectory() {
+ return "alerts";
+ }
+
+ @AfterMethod(alwaysRun = true)
+ public void removePersistedResource() throws Exception {
+ if (resource != null) {
+ deleteNewResource(resource);
+ resource = null;
+ }
+
+ deleteServerIdentity();
+
+ return;
+ }
+
+ public void testBZ736685() throws Exception {
+ // TODO: note that once BZ 735262 is fixed, THIS test will need to be rewritten
+ // TODO: since this assumes the bad behavior of 735262 to test 736685
+
+ // create our resource with alert definition
+ MeasurementDefinition metricDef = createResourceWithMetricSchedule();
+ createAlertDefinitionWithTwoConditionsALL(metricDef);
+
+ // re-load the resource so we get the measurement schedule
+ Resource resourceWithSchedules = loadResourceWithSchedules();
+ MeasurementSchedule schedule = resourceWithSchedules.getSchedules().iterator().next();
+
+ // simulate some measurement reports coming from the agent
+ MeasurementScheduleRequest request = new MeasurementScheduleRequest(schedule);
+ MeasurementReport report = new MeasurementReport();
+ report.addData(new MeasurementDataNumeric(getTimestamp(60), request, Double.valueOf(20.0))); // 20 < 60
+ report.addData(new MeasurementDataNumeric(getTimestamp(30), request, Double.valueOf(50.0))); // 50 > 40, 50 < 60
+ MeasurementDataManagerLocal dataManager = LookupUtil.getMeasurementDataManager();
+ dataManager.mergeMeasurementReport(report);
+
+ // wait for our JMS messages to process and see if we get any alerts
+ Thread.sleep(5000);
+
+ AlertManagerLocal alertManager = LookupUtil.getAlertManager();
+ AlertCriteria alertCriteria = new AlertCriteria();
+ alertCriteria.addFilterResourceIds(resourceWithSchedules.getId());
+ PageList<Alert> alerts = alertManager.findAlertsByCriteria(getOverlord(), alertCriteria);
+ assert alerts.size() == 1 : "1 alert should have fired: " + alerts;
+
+ int resourceId = resource.getId();
+ deleteNewResource(resource);
+ resource = null;
+
+ AlertDefinitionManagerLocal alertDefManager = LookupUtil.getAlertDefinitionManager();
+ PageList<AlertDefinition> defs = alertDefManager.findAlertDefinitions(getOverlord(), resourceId, PageControl
+ .getUnlimitedInstance());
+ assert defs.isEmpty() : "failed to delete the alert definition - are condition logs still around?";
+
+ return;
+ }
+
+ private Resource loadResourceWithSchedules() {
+ ResourceCriteria resourceCriteria = new ResourceCriteria();
+ resourceCriteria.addFilterId(resource.getId());
+ resourceCriteria.fetchSchedules(true);
+ Resource resourceWithSchedules = getResource(resourceCriteria);
+ assert resourceWithSchedules != null : "could not obtain resource from DB";
+ assert resourceWithSchedules.getSchedules() != null && resourceWithSchedules.getSchedules().size() == 1 : "missing schedule";
+ return resourceWithSchedules;
+ }
+
+ private void createAlertDefinitionWithTwoConditionsALL(MeasurementDefinition metricDef) {
+ // create alert definition with the conditions "metric value > 40 AND metric value < 60"
+ HashSet<AlertCondition> conditions = new HashSet<AlertCondition>(2);
+ AlertCondition cond1 = new AlertCondition();
+ cond1.setCategory(AlertConditionCategory.THRESHOLD);
+ cond1.setName(metricDef.getDisplayName());
+ cond1.setComparator(">");
+ cond1.setThreshold(Double.valueOf(40.0)); // value > 40 threshold
+ cond1.setOption(null);
+ cond1.setMeasurementDefinition(metricDef);
+ conditions.add(cond1);
+
+ AlertCondition cond2 = new AlertCondition();
+ cond2.setCategory(AlertConditionCategory.THRESHOLD);
+ cond2.setName(metricDef.getDisplayName());
+ cond2.setComparator("<");
+ cond2.setThreshold(Double.valueOf(60.0)); // value < 60 threshold
+ cond2.setOption(null);
+ cond2.setMeasurementDefinition(metricDef);
+ conditions.add(cond2);
+
+ AlertDefinition alertDefinition = new AlertDefinition();
+ alertDefinition.setName("two condition ALL alert");
+ alertDefinition.setEnabled(true);
+ alertDefinition.setPriority(AlertPriority.HIGH);
+ alertDefinition.setAlertDampening(new AlertDampening(Category.NONE));
+ alertDefinition.setRecoveryId(Integer.valueOf(0));
+ alertDefinition.setConditionExpression(BooleanExpression.ALL);
+ alertDefinition.setConditions(conditions);
+
+ AlertDefinitionManagerLocal alertDefManager = LookupUtil.getAlertDefinitionManager();
+ int defId = alertDefManager.createAlertDefinition(getOverlord(), alertDefinition, resource.getId());
+ alertDefinition.setId(defId);
+
+ // now that we created an alert def, we have to reload the alert condition cache
+ reloadAllAlertConditionCaches();
+ }
+
+ private MeasurementDefinition createResourceWithMetricSchedule() throws Exception {
+ registerPlugin("type-with-metric.xml");
+ ResourceType resourceType = getResourceType("TypeWithMetrics");
+ assert resourceType != null : "failed to deploy resource type";
+ assert resourceType.getMetricDefinitions() != null : "failed to create metric defs";
+ assert resourceType.getMetricDefinitions().size() == 1 : "do not have the expected number of metric defs";
+
+ final MeasurementDefinition metricDef = resourceType.getMetricDefinitions().iterator().next();
+
+ resource = persistNewResource(resourceType.getName());
+ assert resource != null && resource.getId() > 0 : "failed to create test resource";
+
+ JPAUtils.executeInTransaction(new TransactionCallbackWithContext<Object>() {
+ @Override
+ public Object execute(TransactionManager tm, EntityManager em) throws Exception {
+ MeasurementSchedule schedule = new MeasurementSchedule(metricDef, resource);
+ em.persist(schedule);
+ return null;
+ }
+ });
+
+ // create a server which attaches our agent to it - we need this for the alert subsystem to do its thing
+ createServerIdentity();
+ return metricDef;
+ }
+
+ /**
+ * Returns a epoch millis timestamp that is the current time minus the given number of seconds.
+ * In other words, this returns a time in the past - how far in the past is determined by the
+ * number of seconds parameter.
+ * @param secondsAgo
+ */
+ private long getTimestamp(long secondsAgo) {
+ return System.currentTimeMillis() - (secondsAgo * 1000);
+ }
+
+ private void reloadAllAlertConditionCaches() {
+ LookupUtil.getAlertConditionCacheManager().reloadAllCaches();
+ }
+
+ private void createServerIdentity() {
+ server = new Server();
+ server.setName("localhost"); // this is the default assumed in the SLSB code, we must match it
+ server.setAddress("localhost");
+ server.setPort(7080);
+ server.setSecurePort(7443);
+ server.setComputePower(1);
+ server.setOperationMode(Server.OperationMode.MAINTENANCE);
+ int serverId = LookupUtil.getServerManager().create(server);
+ assert serverId > 0 : "could not create our server identity in the DB";
+
+ // simulate the agent being "connected" to the server
+ try {
+ Agent agent = getAgent(getEntityManager());
+ agent.setServer(server);
+ LookupUtil.getAgentManager().updateAgent(agent);
+ } catch (NoResultException nre) {
+ // no agent to attach
+ }
+ }
+
+ private void deleteServerIdentity() throws Exception {
+ if (server != null) {
+ cleanupAgent(); // can't remove the server before we purge the agent
+ LookupUtil.getCloudManager().deleteServer(server.getId());
+ server = null;
+ }
}
}
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/PluginDescriptorValidationTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/PluginDescriptorValidationTest.java
index cff1b0c..66d87e6 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/PluginDescriptorValidationTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/PluginDescriptorValidationTest.java
@@ -40,7 +40,7 @@ import org.rhq.core.clientapi.descriptor.DescriptorPackages;
* @author Heiko W. Rupp
* TODO get the plugins dynamically - see comment in {@link #testPluginDescriptors()}
*/
-public class PluginDescriptorValidationTest extends UpdateSubsytemTestBase {
+public class PluginDescriptorValidationTest extends UpdatePluginMetadataTestBase {
// we stand in modules/enterprise/jar
String BASE = "../../../plugins/";
String EXT = "/src/main/resources/META-INF/rhq-plugin.xml";
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/SubcategoryTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/SubcategoryTest.java
index 1031f42..aa3c616 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/SubcategoryTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/SubcategoryTest.java
@@ -25,7 +25,7 @@ import org.testng.annotations.Test;
*
* @author Heiko W. Rupp
*/
-public class SubcategoryTest extends UpdateSubsytemTestBase {
+public class SubcategoryTest extends UpdatePluginMetadataTestBase {
@Override
protected String getSubsystemDirectory() {
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateConfigurationSubsystemTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateConfigurationSubsystemTest.java
index d5b0261..87f78e2 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateConfigurationSubsystemTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateConfigurationSubsystemTest.java
@@ -51,7 +51,7 @@ import org.rhq.core.domain.resource.ResourceType;
*
* @author Heiko Rupp
*/
-public class UpdateConfigurationSubsystemTest extends UpdateSubsytemTestBase {
+public class UpdateConfigurationSubsystemTest extends UpdatePluginMetadataTestBase {
private static final boolean ENABLED = true;
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateContentSubsystemTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateContentSubsystemTest.java
index 270008e..d0ee3ba 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateContentSubsystemTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateContentSubsystemTest.java
@@ -18,7 +18,7 @@
*/
package org.rhq.enterprise.server.resource.metadata.test;
-public class UpdateContentSubsystemTest extends UpdateSubsytemTestBase {
+public class UpdateContentSubsystemTest extends UpdatePluginMetadataTestBase {
@Override
protected String getSubsystemDirectory() {
return "content";
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateEventsSubsystemTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateEventsSubsystemTest.java
index 4c8ab8a..08b313a 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateEventsSubsystemTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateEventsSubsystemTest.java
@@ -43,7 +43,7 @@ import org.rhq.enterprise.server.util.LookupUtil;
* Note, plugins are registered in new transactions. for tests, this means
* you can't do everything in a trans and roll back at the end. You must clean up manually.
*/
-public class UpdateEventsSubsystemTest extends UpdateSubsytemTestBase {
+public class UpdateEventsSubsystemTest extends UpdatePluginMetadataTestBase {
static final boolean ENABLED = true;
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateMeasurementSubsystemTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateMeasurementSubsystemTest.java
index c5cadf4..0acd54c 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateMeasurementSubsystemTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateMeasurementSubsystemTest.java
@@ -39,7 +39,7 @@ import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.enterprise.server.util.LookupUtil;
-public class UpdateMeasurementSubsystemTest extends UpdateSubsytemTestBase {
+public class UpdateMeasurementSubsystemTest extends UpdatePluginMetadataTestBase {
static final boolean ENABLED = true;
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateNativesSubsystemTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateNativesSubsystemTest.java
index a320043..5f51d6c 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateNativesSubsystemTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateNativesSubsystemTest.java
@@ -32,7 +32,7 @@ import org.rhq.core.domain.resource.ResourceType;
* Note, plugins are registered in new transactions. for tests, this means
* you can't do everything in a trans and roll back at the end. You must clean up manually.
*/
-public class UpdateNativesSubsystemTest extends UpdateSubsytemTestBase {
+public class UpdateNativesSubsystemTest extends UpdatePluginMetadataTestBase {
@Override
protected String getSubsystemDirectory() {
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateOperationsSubsystemTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateOperationsSubsystemTest.java
index cd36f1d..c340367 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateOperationsSubsystemTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateOperationsSubsystemTest.java
@@ -39,7 +39,7 @@ import org.rhq.core.domain.resource.ResourceType;
* Note, plugins are registered in new transactions. for tests, this means
* you can't do everything in a trans and roll back at the end. You must clean up manually.
*/
-public class UpdateOperationsSubsystemTest extends UpdateSubsytemTestBase {
+public class UpdateOperationsSubsystemTest extends UpdatePluginMetadataTestBase {
private static final boolean ENABLED = true;
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
new file mode 100644
index 0000000..535fd06
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
@@ -0,0 +1,446 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.enterprise.server.resource.metadata.test;
+
+import java.io.FileNotFoundException;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.transaction.Status;
+import javax.transaction.TransactionManager;
+import javax.xml.XMLConstants;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.util.ValidationEventCollector;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+
+import org.rhq.core.clientapi.agent.measurement.MeasurementAgentService;
+import org.rhq.core.clientapi.descriptor.DescriptorPackages;
+import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.criteria.ResourceCriteria;
+import org.rhq.core.domain.criteria.ResourceTypeCriteria;
+import org.rhq.core.domain.measurement.MeasurementData;
+import org.rhq.core.domain.measurement.MeasurementDataRequest;
+import org.rhq.core.domain.measurement.ResourceMeasurementScheduleRequest;
+import org.rhq.core.domain.plugin.Plugin;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.resource.InventoryStatus;
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.MessageDigestGenerator;
+import org.rhq.enterprise.server.resource.ResourceManagerLocal;
+import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
+import org.rhq.enterprise.server.resource.metadata.PluginManagerLocal;
+import org.rhq.enterprise.server.test.AbstractEJB3Test;
+import org.rhq.enterprise.server.test.TestServerCommunicationsService;
+import org.rhq.enterprise.server.util.LookupUtil;
+import org.rhq.test.JPAUtils;
+import org.rhq.test.TransactionCallbackWithContext;
+
+public class UpdatePluginMetadataTestBase extends AbstractEJB3Test {
+
+ protected TestServerCommunicationsService agentServiceContainer;
+
+ protected static final String PLUGIN_NAME = "ResourceMetaDataManagerBeanTest"; // don't change this - our test descriptor .xml files use it as plugin name
+ protected static final String AGENT_NAME = "-dummy agent-";
+ protected static final String COMMON_PATH_PREFIX = "./test/metadata/";
+
+ protected static PluginManagerLocal pluginMgr;
+ protected static ResourceTypeManagerLocal resourceTypeManager;
+ protected static ResourceManagerLocal resourceManager;
+
+ @BeforeMethod
+ protected void init() {
+ try {
+ pluginMgr = LookupUtil.getPluginManager();
+ resourceTypeManager = LookupUtil.getResourceTypeManager();
+ resourceManager = LookupUtil.getResourceManager();
+ } catch (Throwable t) {
+ // Catch RuntimeExceptions and Errors and dump their stack trace, because Surefire will completely swallow them
+ // and throw a cryptic NPE (see http://jira.codehaus.org/browse/SUREFIRE-157)!
+ t.printStackTrace();
+ throw new RuntimeException(t);
+ }
+ }
+
+ @BeforeClass
+ public void beforeClass() {
+ agentServiceContainer = prepareForTestAgents();
+ prepareMockAgentServiceContainer();
+
+ prepareScheduler();
+ }
+
+ protected void prepareMockAgentServiceContainer() {
+ agentServiceContainer.measurementService = new MockMeasurementAgentService();
+ }
+
+ @AfterClass
+ public void afterClass() throws Exception {
+ unprepareForTestAgents();
+ unprepareScheduler();
+ cleanupTest();
+ }
+
+ protected ResourceType getResourceType(String typeName) {
+ return getResourceType(typeName, PLUGIN_NAME);
+ }
+
+ protected ResourceType getResourceType(String typeName, String pluginName) {
+ Subject overlord = getOverlord();
+
+ ResourceTypeCriteria resourceTypeCriteria = new ResourceTypeCriteria();
+ resourceTypeCriteria.setStrict(true);
+ resourceTypeCriteria.addFilterName(typeName);
+ resourceTypeCriteria.addFilterPluginName(pluginName);
+
+ // used in UpdateMeasurementSubsystemTest
+ resourceTypeCriteria.fetchMetricDefinitions(true);
+ // used in several UpdateResourceSubsystemTest tests
+ resourceTypeCriteria.fetchSubCategory(true);
+
+ PageList<ResourceType> results = resourceTypeManager
+ .findResourceTypesByCriteria(overlord, resourceTypeCriteria);
+ if (results.size() == 0) {
+ return null;
+ } else if (results.size() == 1) {
+ return results.get(0);
+ } else {
+ throw new IllegalStateException("Found more than one resourceType with name " + typeName + " from plugin "
+ + pluginName + ".");
+ }
+ }
+
+ protected Resource createResource(String resourceKey, String name, ResourceType type) {
+ Resource resource = new Resource(resourceKey, name, type);
+ resource.setUuid(UUID.randomUUID().toString());
+ resource.setInventoryStatus(InventoryStatus.COMMITTED);
+ return resource;
+ }
+
+ protected Resource getResource(ResourceCriteria resourceCriteria) {
+ Subject overlord = getOverlord();
+
+ PageList<Resource> results = resourceManager.findResourcesByCriteria(overlord, resourceCriteria);
+ if (results.size() == 0) {
+ return null;
+ } else if (results.size() == 1) {
+ return results.get(0);
+ } else {
+ throw new IllegalStateException("Found more than one Resource with criteria " + resourceCriteria + ".");
+ }
+ }
+
+ protected String getSubsystemDirectory() {
+ return ".";
+ }
+
+ protected void registerPlugin(String pathToDescriptor, String versionOverride) throws Exception {
+ pathToDescriptor = COMMON_PATH_PREFIX + getSubsystemDirectory() + "/" + pathToDescriptor;
+ registerPluginInternal(pathToDescriptor, versionOverride);
+ }
+
+ private void registerPluginInternal(String pathToDescriptor, String versionOverride) throws Exception {
+ System.out.println("Registering plugin with descriptor [" + pathToDescriptor + "]...");
+ String md5 = MessageDigestGenerator.getDigestString(pathToDescriptor);
+ Plugin testPlugin = new Plugin(PLUGIN_NAME, "foo.jar", md5);
+ testPlugin.setDisplayName(PLUGIN_NAME + ": " + pathToDescriptor);
+ PluginDescriptor descriptor = loadPluginDescriptor(pathToDescriptor);
+ // if caller passed in their own version, use it - otherwise, use the plugin descriptor version.
+ // this allows our tests to reuse descriptors without having to duplicate them
+ if (versionOverride != null) {
+ testPlugin.setVersion(versionOverride);
+ } else {
+ testPlugin.setVersion(descriptor.getVersion());
+ }
+ try {
+ pluginMgr.registerPlugin(getOverlord(), testPlugin, descriptor, null, true);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ throw new RuntimeException(t);
+ }
+
+ }
+
+ protected void registerPlugin(String pathToDescriptor) throws Exception {
+ registerPlugin(pathToDescriptor, null);
+ }
+
+ public PluginDescriptor loadPluginDescriptor(String descriptorFile) throws Exception {
+ URL descriptorUrl = this.getClass().getClassLoader().getResource(descriptorFile);
+
+ JAXBContext jaxbContext = JAXBContext.newInstance(DescriptorPackages.PC_PLUGIN);
+ URL pluginSchemaURL = this.getClass().getClassLoader().getResource("rhq-plugin.xsd");
+ Schema pluginSchema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(pluginSchemaURL);
+
+ Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
+ ValidationEventCollector vec = new ValidationEventCollector();
+ unmarshaller.setEventHandler(vec);
+ unmarshaller.setSchema(pluginSchema);
+ if (descriptorUrl == null)
+ throw new FileNotFoundException("File " + descriptorFile + " not found");
+ return (PluginDescriptor) unmarshaller.unmarshal(descriptorUrl.openStream());
+ }
+
+ protected boolean containedIn(String string, String[] references) {
+ boolean found = false;
+ for (String ref : references) {
+ if (string.equals(ref)) {
+ found = true;
+ break;
+ }
+ }
+
+ return found;
+ }
+
+ protected int getPluginId(EntityManager entityManager) throws NoResultException {
+ Plugin existingPlugin;
+ try {
+ existingPlugin = (Plugin) entityManager.createNamedQuery(Plugin.QUERY_FIND_BY_NAME).setParameter("name",
+ PLUGIN_NAME).getSingleResult();
+ int plugin1Id = existingPlugin.getId();
+ return plugin1Id;
+ } catch (NoResultException nre) {
+ throw nre;
+ }
+ }
+
+ protected int getAgentId(EntityManager entityManager) throws NoResultException {
+ try {
+ Agent existingAgent = getAgent(entityManager);
+ int agentId = existingAgent.getId();
+ return agentId;
+ } catch (NoResultException nre) {
+ throw nre;
+ }
+ }
+
+ protected Agent getAgent(EntityManager entityManager) throws NoResultException {
+ Agent existingAgent;
+ try {
+ existingAgent = (Agent) entityManager.createNamedQuery(Agent.QUERY_FIND_BY_NAME).setParameter("name",
+ AGENT_NAME).getSingleResult();
+ return existingAgent;
+ } catch (NoResultException nre) {
+ throw nre;
+ }
+ }
+
+ protected void setUpAgent(EntityManager entityManager, Resource testResource) {
+ Agent agent;
+ try {
+ agent = getAgent(entityManager);
+ } catch (NoResultException nre) {
+ agent = new Agent(AGENT_NAME, "localhost", 12345, "http://localhost:12345/", "-dummy token-");
+ entityManager.persist(agent);
+ }
+
+ testResource.setAgent(agent);
+ agentServiceContainer.addStartedAgent(agent);
+ }
+
+ /**
+ * A dummy that needs to be set up before running ResourceManager.deleteResource()
+ */
+ public class MockMeasurementAgentService implements MeasurementAgentService {
+
+ @Override
+ public Set<MeasurementData> getRealTimeMeasurementValue(int resourceId, List<MeasurementDataRequest> requests) {
+ return null;
+ }
+
+ public void scheduleCollection(Set<ResourceMeasurementScheduleRequest> resourceSchedules) {
+ }
+
+ public void unscheduleCollection(Set<Integer> resourceIds) {
+ }
+
+ public void updateCollection(Set<ResourceMeasurementScheduleRequest> resourceSchedules) {
+ }
+
+ public Map<String, Object> getMeasurementScheduleInfoForResource(int resourceId) {
+ return null;
+ }
+ }
+
+ protected void cleanupTest() throws Exception {
+ cleanupMetadata();
+ cleanupAgent();
+ cleanupPlugin();
+ }
+
+ protected void cleanupMetadata() throws Exception {
+ String pathToDescriptor = COMMON_PATH_PREFIX + "/noTypes.xml";
+ registerPluginInternal(pathToDescriptor, null);
+ }
+
+ protected void cleanupAgent() throws Exception {
+ getTransactionManager().begin();
+ EntityManager em = getEntityManager();
+ try {
+ try {
+ int agentId = getAgentId(em);
+ Agent agent = em.getReference(Agent.class, agentId);
+ if (null != agent) {
+ em.remove(agent);
+ }
+ } catch (NoResultException nre) {
+ // ignore, nothing to clean up
+ }
+ } catch (Exception e) {
+ if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) {
+ getTransactionManager().rollback();
+ }
+ System.out.println("CANNOT CLEAN UP AGENT: " + e);
+ throw e;
+ } finally {
+ if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) {
+ getTransactionManager().commit();
+ }
+ }
+ }
+
+ protected void cleanupPlugin() throws Exception {
+ getTransactionManager().begin();
+ EntityManager em = getEntityManager();
+ try {
+ try {
+ int plugin1Id = getPluginId(em);
+ Plugin plugin1 = em.getReference(Plugin.class, plugin1Id);
+ if (null != plugin1) {
+ em.remove(plugin1);
+ }
+ } catch (NoResultException nre) {
+ // ignore, nothing to do
+ }
+ } catch (Exception e) {
+ if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) {
+ getTransactionManager().rollback();
+ }
+ System.out.println("CANNOT CLEAN UP PLUGIN: " + e);
+ throw e;
+ } finally {
+ if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) {
+ getTransactionManager().commit();
+ }
+ }
+ }
+
+ protected void cleanupResourceType(String rtName) throws Exception {
+ try {
+ ResourceType rt = getResourceType(rtName);
+
+ if (null != rt) {
+ Subject overlord = getOverlord();
+ ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
+
+ // delete any resources first
+ ResourceCriteria c = new ResourceCriteria();
+ c.setStrict(true);
+ c.addFilterResourceTypeId(rt.getId());
+ c.addFilterInventoryStatus(InventoryStatus.NEW);
+ List<Resource> doomedResources = resourceManager.findResourcesByCriteria(overlord, c);
+ c.addFilterInventoryStatus(InventoryStatus.DELETED);
+ doomedResources.addAll(resourceManager.findResourcesByCriteria(overlord, c));
+ c.addFilterInventoryStatus(InventoryStatus.UNINVENTORIED);
+ doomedResources.addAll(resourceManager.findResourcesByCriteria(overlord, c));
+ // invoke bulk delete on the resource to remove any dependencies not defined in the hibernate entity model
+ // perform in-band and out-of-band work in quick succession
+ for (Resource doomed : doomedResources) {
+ List<Integer> deletedIds = resourceManager.uninventoryResource(overlord, doomed.getId());
+ for (Integer deletedResourceId : deletedIds) {
+ resourceManager.uninventoryResourceAsyncWork(overlord, deletedResourceId);
+ }
+ }
+
+ // Measurement defs go away via cascade remove
+
+ getTransactionManager().begin();
+ EntityManager em = getEntityManager();
+
+ rt = em.find(ResourceType.class, rt.getId());
+ ResourceType parent = rt.getParentResourceTypes().isEmpty() ? null : rt.getParentResourceTypes()
+ .iterator().next();
+ em.remove(rt);
+ if (null != parent) {
+ em.remove(parent);
+ }
+ }
+ } catch (Exception e) {
+ if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) {
+ getTransactionManager().rollback();
+ }
+ System.out.println("CANNOT CLEAN UP RESOURCE TYPE: " + rtName + ": " + e);
+ throw e;
+ } finally {
+ if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) {
+ getTransactionManager().commit();
+ }
+ }
+ }
+
+ //
+ // provide some convience methods to create resources
+ //
+
+ protected Subject getOverlord() {
+ return LookupUtil.getSubjectManager().getOverlord();
+ }
+
+ protected Resource persistNewResource(final String resourceTypeName) throws Exception {
+ return JPAUtils.executeInTransaction(new TransactionCallbackWithContext<Resource>() {
+ @Override
+ public Resource execute(TransactionManager tm, EntityManager em) throws Exception {
+ ResourceType resourceType = getResourceType(resourceTypeName);
+ Resource resource = new Resource("reskey" + System.currentTimeMillis(), "resname", resourceType);
+ resource.setUuid(UUID.randomUUID().toString());
+ resource.setInventoryStatus(InventoryStatus.COMMITTED);
+ setUpAgent(em, resource);
+ em.persist(resource);
+ return resource;
+ }
+ });
+ }
+
+ protected void deleteNewResource(final Resource resource) throws Exception {
+ try {
+ List<Integer> deletedIds = resourceManager.uninventoryResource(getOverlord(), resource.getId());
+ for (Integer deletedResourceId : deletedIds) {
+ resourceManager.uninventoryResourceAsyncWork(getOverlord(), deletedResourceId);
+ }
+ } catch (Exception e) {
+ System.out.println("CANNOT CLEAN UP RESOURCE: " + resource + ": " + e);
+ throw e;
+ }
+ }
+
+}
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateResourceSubsystemTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateResourceSubsystemTest.java
index 5408db8..2d35079 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateResourceSubsystemTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateResourceSubsystemTest.java
@@ -33,7 +33,7 @@ import org.rhq.core.domain.resource.ResourceType;
* Note, plugins are registered in new transactions. for tests, this means
* you can't do everything in a trans and roll back at the end. You must clean up manually.
*/
-public class UpdateResourceSubsystemTest extends UpdateSubsytemTestBase {
+public class UpdateResourceSubsystemTest extends UpdatePluginMetadataTestBase {
private static final boolean ENABLED = true;
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateResourceTypeSubsystemTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateResourceTypeSubsystemTest.java
index 5ad9cdb..dc71f4c 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateResourceTypeSubsystemTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateResourceTypeSubsystemTest.java
@@ -41,7 +41,7 @@ import org.rhq.enterprise.server.util.LookupUtil;
* Note, plugins are registered in new transactions. For tests, this means
* you can't do everything in a trans and roll back at the end. You must clean up manually.
*/
-public class UpdateResourceTypeSubsystemTest extends UpdateSubsytemTestBase {
+public class UpdateResourceTypeSubsystemTest extends UpdatePluginMetadataTestBase {
@Override
protected String getSubsystemDirectory() {
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java
deleted file mode 100644
index 77d48be..0000000
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2010 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.enterprise.server.resource.metadata.test;
-
-import java.io.FileNotFoundException;
-import java.net.URL;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-
-import javax.ejb.EJB;
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.PersistenceContext;
-import javax.transaction.Status;
-import javax.xml.XMLConstants;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.util.ValidationEventCollector;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.BeforeTest;
-
-import org.rhq.core.clientapi.agent.measurement.MeasurementAgentService;
-import org.rhq.core.clientapi.descriptor.DescriptorPackages;
-import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
-import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.criteria.ResourceCriteria;
-import org.rhq.core.domain.criteria.ResourceTypeCriteria;
-import org.rhq.core.domain.measurement.MeasurementData;
-import org.rhq.core.domain.measurement.MeasurementDataRequest;
-import org.rhq.core.domain.measurement.ResourceMeasurementScheduleRequest;
-import org.rhq.core.domain.plugin.Plugin;
-import org.rhq.core.domain.resource.Agent;
-import org.rhq.core.domain.resource.InventoryStatus;
-import org.rhq.core.domain.resource.Resource;
-import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.core.util.MessageDigestGenerator;
-import org.rhq.enterprise.server.RHQConstants;
-import org.rhq.enterprise.server.resource.ResourceManagerLocal;
-import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
-import org.rhq.enterprise.server.resource.metadata.ResourceMetadataManagerLocal;
-import org.rhq.enterprise.server.resource.metadata.PluginManagerLocal;
-import org.rhq.enterprise.server.test.AbstractEJB3Test;
-import org.rhq.enterprise.server.test.TestServerCommunicationsService;
-import org.rhq.enterprise.server.util.LookupUtil;
-
-// TODO: Fix typo in class name.
-public class UpdateSubsytemTestBase extends AbstractEJB3Test {
-
- @PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME)
- @EJB
- protected ResourceManagerLocal resMgr;
-
- protected TestServerCommunicationsService agentServiceContainer;
-
- protected int agentId;
- protected int plugin1Id;
-
- protected static final String PLUGIN_NAME = "ResourceMetaDataManagerBeanTest";
- protected static final String AGENT_NAME = "-dummy agent-";
- protected static final String COMMON_PATH_PREFIX = "./test/metadata/";
-
- protected static PluginManagerLocal pluginMgr;
- protected static ResourceTypeManagerLocal resourceTypeManager;
- protected static ResourceManagerLocal resourceManager;
-
- @BeforeMethod
- protected void init() {
- try {
- pluginMgr = LookupUtil.getPluginManager();
- resourceTypeManager = LookupUtil.getResourceTypeManager();
- resourceManager = LookupUtil.getResourceManager();
- } catch (Throwable t) {
- // Catch RuntimeExceptions and Errors and dump their stack trace, because Surefire will completely swallow them
- // and throw a cryptic NPE (see http://jira.codehaus.org/browse/SUREFIRE-157)!
- t.printStackTrace();
- throw new RuntimeException(t);
- }
- }
-
- @BeforeClass
- public void beforeClass() {
- agentServiceContainer = prepareForTestAgents();
- agentServiceContainer.measurementService = new MockAgentService();
-
- prepareScheduler();
- }
-
- @AfterClass
- public void afterClass() throws Exception {
- unprepareForTestAgents();
- unprepareScheduler();
- cleanupTest();
- }
-
-// @BeforeTest
-// public void beforeTest() throws Exception {
-//// startTest(); Done in super.@BeforeMethod already ??
-// // cleanup anything left over from a previous, interrupted run.
-// cleanupTest();
-// }
-
- protected ResourceType getResourceType(String typeName) {
- return getResourceType(typeName, PLUGIN_NAME);
- }
-
- protected ResourceType getResourceType(String typeName, String pluginName) {
- Subject overlord = LookupUtil.getSubjectManager().getOverlord();
-
- ResourceTypeCriteria resourceTypeCriteria = new ResourceTypeCriteria();
- resourceTypeCriteria.setStrict(true);
- resourceTypeCriteria.addFilterName(typeName);
- resourceTypeCriteria.addFilterPluginName(pluginName);
-
- // used in UpdateMeasurementSubsystemTest
- resourceTypeCriteria.fetchMetricDefinitions(true);
- // used in several UpdateResourceSubsystemTest tests
- resourceTypeCriteria.fetchSubCategory(true);
-
- PageList<ResourceType> results = resourceTypeManager
- .findResourceTypesByCriteria(overlord, resourceTypeCriteria);
- if (results.size() == 0) {
- return null;
- } else if (results.size() == 1) {
- return results.get(0);
- } else {
- throw new IllegalStateException("Found more than one resourceType with name " + typeName + " from plugin "
- + pluginName + ".");
- }
- }
-
- protected Resource createResource(String resourceKey, String name, ResourceType type) {
- Resource resource = new Resource(resourceKey, name, type);
- resource.setUuid(UUID.randomUUID().toString());
- resource.setInventoryStatus(InventoryStatus.COMMITTED);
- return resource;
- }
-
- protected Resource getResource(ResourceCriteria resourceCriteria) {
- Subject overlord = LookupUtil.getSubjectManager().getOverlord();
-
- PageList<Resource> results = resourceManager.findResourcesByCriteria(overlord, resourceCriteria);
- if (results.size() == 0) {
- return null;
- } else if (results.size() == 1) {
- return results.get(0);
- } else {
- throw new IllegalStateException("Found more than one Resource with criteria " + resourceCriteria + ".");
- }
- }
-
- protected String getSubsystemDirectory() {
- return ".";
- }
-
- protected void registerPlugin(String pathToDescriptor, String versionOverride) throws Exception {
- pathToDescriptor = COMMON_PATH_PREFIX + getSubsystemDirectory() + "/" + pathToDescriptor;
- registerPluginInternal(pathToDescriptor, versionOverride);
- }
-
- private void registerPluginInternal(String pathToDescriptor, String versionOverride) throws Exception {
- System.out.println("Registering plugin with descriptor [" + pathToDescriptor + "]...");
- String md5 = MessageDigestGenerator.getDigestString(pathToDescriptor);
- Plugin testPlugin = new Plugin(PLUGIN_NAME, "foo.jar", md5);
- testPlugin.setDisplayName("ResourceMetaDataManagerBeanTest: " + pathToDescriptor);
- PluginDescriptor descriptor = loadPluginDescriptor(pathToDescriptor);
- // if caller passed in their own version, use it - otherwise, use the plugin descriptor version.
- // this allows our tests to reuse descriptors without having to duplicate them
- if (versionOverride != null) {
- testPlugin.setVersion(versionOverride);
- } else {
- testPlugin.setVersion(descriptor.getVersion());
- }
- try {
- pluginMgr.registerPlugin(LookupUtil.getSubjectManager().getOverlord(), testPlugin, descriptor, null,
- true);
- } catch (Throwable t) {
- t.printStackTrace();
- throw new RuntimeException(t);
- }
-
- }
-
- protected void registerPlugin(String pathToDescriptor) throws Exception {
- registerPlugin(pathToDescriptor, null);
- }
-
- public PluginDescriptor loadPluginDescriptor(String descriptorFile) throws Exception {
- URL descriptorUrl = this.getClass().getClassLoader().getResource(descriptorFile);
-
- JAXBContext jaxbContext = JAXBContext.newInstance(DescriptorPackages.PC_PLUGIN);
- URL pluginSchemaURL = this.getClass().getClassLoader().getResource("rhq-plugin.xsd");
- Schema pluginSchema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(pluginSchemaURL);
-
- Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
- ValidationEventCollector vec = new ValidationEventCollector();
- unmarshaller.setEventHandler(vec);
- unmarshaller.setSchema(pluginSchema);
- if (descriptorUrl == null)
- throw new FileNotFoundException("File " + descriptorFile + " not found");
- return (PluginDescriptor) unmarshaller.unmarshal(descriptorUrl.openStream());
- }
-
- protected boolean containedIn(String string, String[] references) {
- boolean found = false;
- for (String ref : references) {
- if (string.equals(ref)) {
- found = true;
- break;
- }
- }
-
- return found;
- }
-
- protected int getPluginId(EntityManager entityManager) {
- Plugin existingPlugin;
- try {
- existingPlugin = (Plugin) entityManager.createNamedQuery(Plugin.QUERY_FIND_BY_NAME).setParameter("name",
- PLUGIN_NAME).getSingleResult();
- plugin1Id = existingPlugin.getId();
- return plugin1Id;
- } catch (NoResultException nre) {
- throw nre;
- }
- }
-
- protected int getAgentId(EntityManager entityManager) {
- Agent existingAgent;
- try {
- existingAgent = (Agent) entityManager.createNamedQuery(Agent.QUERY_FIND_BY_NAME).setParameter("name",
- AGENT_NAME).getSingleResult();
- agentId = existingAgent.getId();
- return agentId;
- } catch (NoResultException nre) {
- throw nre;
- }
- }
-
- protected void setUpAgent(EntityManager entityManager, Resource testResource) {
- Agent agent = new Agent(AGENT_NAME, "localhost", 12345, "http://localhost:12345/", "-dummy token-");
- entityManager.persist(agent);
-
- testResource.setAgent(agent);
- agentServiceContainer.addStartedAgent(agent);
- agentId = agent.getId();
- }
-
- /**
- * A dummy that needs to be set up before running ResourceManager.deleteResource()
- */
- public class MockAgentService implements MeasurementAgentService {
-
- @Override
- public Set<MeasurementData> getRealTimeMeasurementValue(int resourceId, List<MeasurementDataRequest> requests) {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- public void scheduleCollection(Set<ResourceMeasurementScheduleRequest> resourceSchedules) {
- // TODO Auto-generated method stub
-
- }
-
- public void unscheduleCollection(Set<Integer> resourceIds) {
- // TODO Auto-generated method stub
-
- }
-
- public void updateCollection(Set<ResourceMeasurementScheduleRequest> resourceSchedules) {
- // TODO Auto-generated method stub
-
- }
-
- public Map<String, Object> getMeasurementScheduleInfoForResource(int resourceId) {
- return null;
- }
- }
-
- protected void cleanupTest() throws Exception {
- try {
- String pathToDescriptor = COMMON_PATH_PREFIX + "/noTypes.xml";
- registerPluginInternal(pathToDescriptor, null);
-
- /*cleanupResourceType("constraintPlatform");
- cleanupResourceType("events");
- cleanupResourceType("groupDeletedPlatform");
- cleanupResourceType("groupPropDeletedPlatform");
- cleanupResourceType("groupPropMovedPlatform");
- cleanupResourceType("myPlatform");
- cleanupResourceType("myPlatform3");
- cleanupResourceType("myPlatform4");
- cleanupResourceType("myPlatform5");
- cleanupResourceType("myPlatform6");
- cleanupResourceType("myPlatform7");
- cleanupResourceType("ops");
- cleanupResourceType("testApp1");
- cleanupResourceType("testServer1");
- cleanupResourceType("testServer2");
- cleanupResourceType("testService1");
- cleanupResourceType("testService2");
- cleanupResourceType("TestServer");*/
-
- getTransactionManager().begin();
- EntityManager entityManager = getEntityManager();
-
- try {
- agentId = getAgentId(entityManager);
- Agent agent = entityManager.getReference(Agent.class, agentId);
- if (null != agent) {
- entityManager.remove(agent);
- }
- } catch (Exception e) {
- // ignore, agent does not exist
- }
-
- try {
- plugin1Id = getPluginId(entityManager);
- Plugin plugin1 = entityManager.getReference(Plugin.class, plugin1Id);
- if (null != plugin1) {
- entityManager.remove(plugin1);
- }
- } catch (Exception e) {
- // ignore, plugin1 does not exist
- }
- } finally {
- if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) {
- getTransactionManager().commit();
- }
- }
- }
-
- protected void cleanupResourceType(String rtName) throws Exception {
- try {
- ResourceType rt = getResourceType(rtName);
-
- if (null != rt) {
- Subject overlord = LookupUtil.getSubjectManager().getOverlord();
- ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
-
- // delete any resources first
- ResourceCriteria c = new ResourceCriteria();
- c.setStrict(true);
- c.addFilterResourceTypeId(rt.getId());
- c.addFilterInventoryStatus(InventoryStatus.NEW);
- List<Resource> doomedResources = resourceManager.findResourcesByCriteria(overlord, c);
- c.addFilterInventoryStatus(InventoryStatus.DELETED);
- doomedResources.addAll(resourceManager.findResourcesByCriteria(overlord, c));
- c.addFilterInventoryStatus(InventoryStatus.UNINVENTORIED);
- doomedResources.addAll(resourceManager.findResourcesByCriteria(overlord, c));
- // invoke bulk delete on the resource to remove any dependencies not defined in the hibernate entity model
- // perform in-band and out-of-band work in quick succession
- for (Resource doomed : doomedResources) {
- List<Integer> deletedIds = resourceManager.uninventoryResource(overlord, doomed.getId());
- for (Integer deletedResourceId : deletedIds) {
- resourceManager.uninventoryResourceAsyncWork(overlord, deletedResourceId);
- }
- }
-
- // Measurement defs go away via cascade remove
-
- getTransactionManager().begin();
- EntityManager em = getEntityManager();
-
- rt = em.find(ResourceType.class, rt.getId());
- ResourceType parent = rt.getParentResourceTypes().isEmpty() ? null : rt.getParentResourceTypes()
- .iterator().next();
- em.remove(rt);
- if (null != parent) {
- em.remove(parent);
- }
- }
- } catch (Exception e) {
- if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) {
- getTransactionManager().rollback();
- }
- System.out.println("CANNOT CLEAN UP TEST (cleanupResourceType): " + e);
- throw e;
- } finally {
- if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) {
- getTransactionManager().commit();
- }
- }
- }
-}
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceManagerBeanTest.java
index 03d941e..664be6d 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/test/ResourceManagerBeanTest.java
@@ -24,7 +24,6 @@ import java.util.Random;
import javax.persistence.EntityManager;
import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -37,7 +36,7 @@ import org.rhq.core.domain.resource.ResourceErrorType;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.enterprise.server.discovery.DiscoveryServerServiceImpl;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
-import org.rhq.enterprise.server.resource.metadata.test.UpdateSubsytemTestBase;
+import org.rhq.enterprise.server.resource.metadata.test.UpdatePluginMetadataTestBase;
import org.rhq.enterprise.server.test.TestServerCommunicationsService;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -45,33 +44,21 @@ import org.rhq.enterprise.server.util.LookupUtil;
* Test for {@link ResourceManagerLocal} SLSB.
*/
@Test
-public class ResourceManagerBeanTest extends UpdateSubsytemTestBase {
- private ResourceManagerLocal resourceManager;
+public class ResourceManagerBeanTest extends UpdatePluginMetadataTestBase {
private Subject superuser;
private Resource newResource;
TestServerCommunicationsService agentServiceContainer;
- @Override
- @BeforeClass
- public void beforeClass() {
- super.beforeClass();
- agentServiceContainer = prepareForTestAgents();
- agentServiceContainer.measurementService = new MockAgentService();
-
- prepareScheduler();
- }
-
@BeforeMethod
public void beforeMethod() throws Exception {
- resourceManager = LookupUtil.getResourceManager();
superuser = LookupUtil.getSubjectManager().getOverlord();
- newResource = createNewResource();
+ newResource = createNewResourceWithNewType();
}
@AfterMethod
public void afterMethod() throws Exception {
- deleteNewResource(newResource);
+ deleteNewResourceAgentResourceType(newResource);
}
public void testResourceErrors() {
@@ -123,7 +110,7 @@ public class ResourceManagerBeanTest extends UpdateSubsytemTestBase {
assert errors.size() == 0;
}
- private Resource createNewResource() throws Exception {
+ private Resource createNewResourceWithNewType() throws Exception {
getTransactionManager().begin();
EntityManager em = getEntityManager();
@@ -158,7 +145,7 @@ public class ResourceManagerBeanTest extends UpdateSubsytemTestBase {
return resource;
}
- private void deleteNewResource(Resource resource) throws Exception {
+ private void deleteNewResourceAgentResourceType(Resource resource) throws Exception {
if (resource != null) {
getTransactionManager().begin();
EntityManager em = getEntityManager();
diff --git a/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/README.txt b/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/README.txt
deleted file mode 100644
index 3acca0a..0000000
--- a/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-jbossmq-state.xml is to allow for the JBossMQ JMS service to start in the embedded microcontainer. See AbstractEJB3Test.
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/jbossmq-state.xml b/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/jbossmq-state.xml
deleted file mode 100644
index caa6b9b..0000000
--- a/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/jbossmq-state.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<StateManager>
- <Users>
- <User>
- <Name>guest</Name>
- <Password>guest</Password>
- </User>
- </Users>
- <Roles>
- <Role name="guest">
- <UserName>guest</UserName>
- </Role>
- </Roles>
- <DurableSubscriptions>
- </DurableSubscriptions>
-</StateManager>
diff --git a/modules/enterprise/server/jar/src/test/resources/test/metadata/alerts/type-with-metric.xml b/modules/enterprise/server/jar/src/test/resources/test/metadata/alerts/type-with-metric.xml
new file mode 100644
index 0000000..1af82a9
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/test/metadata/alerts/type-with-metric.xml
@@ -0,0 +1,14 @@
+<plugin name="ResourceMetaDataManagerBeanTest" displayName="Type with Metric Test Plugin" package="org.rhq.plugins.mock.jboss"
+ version="1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+ <platform name="TypeWithMetrics">
+ <metric property="testMetric"
+ displayName="testMetric"
+ dataType="measurement"
+ measurementType="dynamic">
+ </metric>
+ </platform>
+</plugin>
+
\ No newline at end of file
diff --git a/modules/test-utils/src/main/java/org/rhq/test/JPAUtils.java b/modules/test-utils/src/main/java/org/rhq/test/JPAUtils.java
index 6e887c5..edbb7e7 100644
--- a/modules/test-utils/src/main/java/org/rhq/test/JPAUtils.java
+++ b/modules/test-utils/src/main/java/org/rhq/test/JPAUtils.java
@@ -50,13 +50,38 @@ public class JPAUtils {
}
public static void executeInTransaction(TransactionCallback callback) {
+ TransactionManager tm = null;
try {
- lookupTransactionManager().begin();
+ tm = lookupTransactionManager();
+ tm.begin();
callback.execute();
- lookupTransactionManager().commit();
+ tm.commit();
} catch (Throwable t) {
try {
- lookupTransactionManager().rollback();
+ if (tm != null) {
+ tm.rollback();
+ }
+ } catch (SystemException e) {
+ throw new RuntimeException("Failed to rollback transaction", e);
+ }
+ Throwable rootCause = getRootCause(t);
+ throw new RuntimeException(rootCause);
+ }
+ }
+
+ public static <T> T executeInTransaction(TransactionCallbackWithContext<T> callback) {
+ TransactionManager tm = null;
+ try {
+ tm = lookupTransactionManager();
+ tm.begin();
+ T results = callback.execute(tm, lookupEntityManager());
+ tm.commit();
+ return results;
+ } catch (Throwable t) {
+ try {
+ if (tm != null) {
+ tm.rollback();
+ }
} catch (SystemException e) {
throw new RuntimeException("Failed to rollback transaction", e);
}
@@ -161,7 +186,8 @@ public class JPAUtils {
em.createNativeQuery("delete from rhq_measurement_sched");
em.createNativeQuery("delete from rhq_measurement_def");
em.createNativeQuery("delete from rhq_plugin");
- em.createNativeQuery("delete from rhq_system_config where id not in (1, 2, 3, 4, 9, 10, 32, 34, 35, 36, 51, 52, 53, 54, 55, 56, 57, 58)");
+ em
+ .createNativeQuery("delete from rhq_system_config where id not in (1, 2, 3, 4, 9, 10, 32, 34, 35, 36, 51, 52, 53, 54, 55, 56, 57, 58)");
em.createNativeQuery("delete from rhq_alert_notification");
em.createNativeQuery("delete from rhq_alert_condition_log");
em.createNativeQuery("delete from rhq_alert");
diff --git a/modules/test-utils/src/main/java/org/rhq/test/TransactionCallbackWithContext.java b/modules/test-utils/src/main/java/org/rhq/test/TransactionCallbackWithContext.java
new file mode 100644
index 0000000..11850dc
--- /dev/null
+++ b/modules/test-utils/src/main/java/org/rhq/test/TransactionCallbackWithContext.java
@@ -0,0 +1,10 @@
+package org.rhq.test;
+
+import javax.persistence.EntityManager;
+import javax.transaction.TransactionManager;
+
+public interface TransactionCallbackWithContext<T> {
+
+ T execute(TransactionManager tm, EntityManager em) throws Exception;
+
+}
12 years, 9 months
[rhq] Branch 'drift' - modules/core
by John Sanda
modules/core/plugin-container/src/main/java/org/rhq/core/pc/drift/DriftManager.java | 26 +++--
modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/ResourceContainer.java | 21 ++--
modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftManagerTest.java | 52 +++++++++-
3 files changed, 82 insertions(+), 17 deletions(-)
New commits:
commit 0a302fd9e28be34dcd2f50090342a4f38b31c456
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Sep 7 13:56:11 2011 -0400
Update the resource container when a drift config is deleted
Prior to this commit if you deleted a drift configuration and then
subsequently restarted your agent, the drift configuration comes back to
life on the agent. That is because it is persisted to disk along with
other resource data when the agent is shut down. With this commit, when
a drift configuration is deleted, it is now also removed from the
resource container.
ResourceContainer now also stores DriftConfiguration
objects instead of DriftDetectionSchedules. The reason for this change
has to due with inventory sync. During a sync the server will be sending
the drift configs and not schedules. The drift detection scheudles exist
only on the agent.
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/drift/DriftManager.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/drift/DriftManager.java
index d2956d3..d8ae989 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/drift/DriftManager.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/drift/DriftManager.java
@@ -26,7 +26,6 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
-import java.util.Set;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.zip.ZipEntry;
@@ -115,11 +114,9 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri
}
log.debug("Rescheduling drift detection schedules for " + r);
- Set<DriftDetectionSchedule> driftSchedules = container.getDriftSchedules();
- if (driftSchedules != null)
- for (DriftDetectionSchedule schedule : driftSchedules) {
- schedulesQueue.addSchedule(schedule);
- }
+ for (DriftConfiguration c : container.getDriftConfigurations()) {
+ schedulesQueue.addSchedule(new DriftDetectionSchedule(r.getId(), c));
+ }
for (Resource child : r.getChildResources()) {
initSchedules(child, inventoryMgr);
@@ -280,9 +277,13 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri
if (added) {
if (log.isDebugEnabled()) {
log.debug(schedule + " has been added to " + schedulesQueue);
- } else {
- log.warn("Failed to add " + schedule + " to " + schedulesQueue);
}
+ ResourceContainer container = getInventoryManager().getResourceContainer(resourceId);
+ if (container != null) {
+ container.addDriftConfiguration(driftConfiguration);
+ }
+ } else {
+ log.warn("Failed to add " + schedule + " to " + schedulesQueue);
}
}
@@ -322,10 +323,17 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri
log.debug("Removed change set directory " + changeSetDir.getAbsolutePath());
}
});
+ if (schedule != null) {
+ ResourceContainer container = getInventoryManager().getResourceContainer(resourceId);
+ if (container != null) {
+ container.removeDriftConfiguration(schedule.getDriftConfiguration());
+ }
+ }
if (log.isDebugEnabled()) {
log.debug("Removed " + schedule + " from the queue " + schedulesQueue);
}
+
}
@Override
@@ -351,7 +359,7 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri
InventoryManager inventoryMgr = PluginContainer.getInstance().getInventoryManager();
ResourceContainer container = inventoryMgr.getResourceContainer(resourceId);
if (container != null) {
- container.getDriftSchedules().add(updatedSchedule);
+ container.addDriftConfiguration(driftConfiguration);
}
}
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/ResourceContainer.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/ResourceContainer.java
index fcf1aea..f0722ed 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/ResourceContainer.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/ResourceContainer.java
@@ -28,6 +28,7 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -48,11 +49,11 @@ import org.jetbrains.annotations.Nullable;
import org.rhq.core.clientapi.agent.PluginContainerException;
import org.rhq.core.domain.content.transfer.ResourcePackageDetails;
+import org.rhq.core.domain.drift.DriftConfiguration;
import org.rhq.core.domain.measurement.Availability;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
import org.rhq.core.domain.resource.Resource;
-import org.rhq.core.pc.drift.DriftDetectionSchedule;
import org.rhq.core.pc.util.FacetLockType;
import org.rhq.core.pc.util.LoggingThreadFactory;
import org.rhq.core.pluginapi.inventory.ResourceComponent;
@@ -89,7 +90,7 @@ public class ResourceContainer implements Serializable {
private SynchronizationState synchronizationState = SynchronizationState.NEW;
private Set<MeasurementScheduleRequest> measurementSchedule = new HashSet<MeasurementScheduleRequest>();
private Set<ResourcePackageDetails> installedPackages = new HashSet<ResourcePackageDetails>();
- private Set<DriftDetectionSchedule> driftSchedules = new HashSet<DriftDetectionSchedule>();
+ private Map<String, DriftConfiguration> driftConfigurations = new HashMap<String, DriftConfiguration>();
// transient fields
private transient ResourceComponent resourceComponent;
@@ -244,14 +245,22 @@ public class ResourceContainer implements Serializable {
}
}
- public Set<DriftDetectionSchedule> getDriftSchedules() {
+ public Collection<DriftConfiguration> getDriftConfigurations() {
synchronized (this) {
- return driftSchedules;
+ return driftConfigurations.values();
}
}
- public void setDriftSchedules(Set<DriftDetectionSchedule> schedules) {
- driftSchedules = schedules;
+ public void addDriftConfiguration(DriftConfiguration c) {
+ synchronized (this) {
+ driftConfigurations.put(c.getName(), c);
+ }
+ }
+
+ public void removeDriftConfiguration(DriftConfiguration c) {
+ synchronized (this) {
+ driftConfigurations.remove(c.getName());
+ }
}
public ResourceComponentState getResourceComponentState() {
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftManagerTest.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftManagerTest.java
index 226e84b..4b8b698 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftManagerTest.java
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftManagerTest.java
@@ -23,18 +23,25 @@ import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.rhq.core.clientapi.server.drift.DriftServerService;
import org.rhq.core.domain.drift.DriftConfiguration;
+import org.rhq.core.domain.resource.Resource;
import org.rhq.core.pc.PluginContainerConfiguration;
import org.rhq.core.pc.ServerServices;
+import org.rhq.core.pc.inventory.InventoryManager;
+import org.rhq.core.pc.inventory.ResourceContainer;
+import static java.util.Arrays.asList;
import static org.apache.commons.io.FileUtils.deleteDirectory;
import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
import static org.rhq.core.util.ZipUtil.unzipFile;
+import static org.rhq.test.AssertUtils.assertCollectionMatchesNoOrder;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
@@ -49,7 +56,7 @@ public class DriftManagerTest extends DriftTest {
private PluginContainerConfiguration pcConfig;
- private DriftManager driftMgr;
+ private TestDriftManager driftMgr;
@BeforeMethod
public void initTest() throws Exception {
@@ -63,7 +70,7 @@ public class DriftManagerTest extends DriftTest {
pcConfig.setDataDirectory(basedir());
pcConfig.setTemporaryDirectory(tmpDir);
- driftMgr = new DriftManager();
+ driftMgr = new TestDriftManager();
driftMgr.setConfiguration(pcConfig);
}
@@ -206,6 +213,21 @@ public class DriftManagerTest extends DriftTest {
}
@Test
+ public void unschedulingDetectionRemovesDriftConfigFromResourceContainer() throws Exception {
+ DriftConfiguration config = driftConfiguration("remove-from-queue", resourceDir.getAbsolutePath());
+ DriftConfiguration config2 = driftConfiguration("do-not-remove", resourceDir.getAbsolutePath());
+
+ driftMgr.scheduleDriftDetection(resourceId(), config);
+ driftMgr.scheduleDriftDetection(resourceId(), config2);
+ driftMgr.unscheduleDriftDetection(resourceId(), config);
+
+ ResourceContainer container = driftMgr.getInventoryManager().getResourceContainer(resourceId());
+
+ assertCollectionMatchesNoOrder(config + " should have been removed from the resource container ",
+ asList(config2), container.getDriftConfigurations());
+ }
+
+ @Test
public void unschedulingDetectionDeletesChangeSetDirectoryWhenScheduleIsNotActive() throws Exception {
DriftConfiguration config = driftConfiguration("delete-changeset-dir", resourceDir.getAbsolutePath());
File changeSetDir = changeSetDir(config.getName());
@@ -362,4 +384,30 @@ public class DriftManagerTest extends DriftTest {
void execute();
}
+ private static class TestDriftManager extends DriftManager {
+
+ FakeInventoryManager inventoryMgr = new FakeInventoryManager();
+
+ @Override
+ public InventoryManager getInventoryManager() {
+ return inventoryMgr;
+ }
+ }
+
+ private static class FakeInventoryManager extends InventoryManager {
+ private Map<Integer, ResourceContainer> resourceContainers = new HashMap<Integer, ResourceContainer>();
+
+ @Override
+ public ResourceContainer getResourceContainer(Integer resourceId) {
+ ResourceContainer container = resourceContainers.get(resourceId);
+ if (container == null) {
+ Resource resource = new Resource();
+ resource.setId(resourceId);
+ container = new ResourceContainer(resource, getClass().getClassLoader());
+ resourceContainers.put(resourceId, container);
+ }
+ return container;
+ }
+ }
+
}
12 years, 9 months
[rhq] Branch 'drift' - modules/enterprise
by Jay Shaughnessy
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/AbstractDriftChangeSetsTreeView.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftConfigurationDataSource.java | 20 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDetailsView.java | 143 +++++-----
3 files changed, 93 insertions(+), 78 deletions(-)
New commits:
commit 1742f95573899b85d40926dc3beb6b67c480e9e8
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed Sep 7 13:21:38 2011 -0400
Reflect in the GUI when a changeset contains planned changes. It is
in the display name of the changeset tree node and also in the
changeset section of the drift details.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/AbstractDriftChangeSetsTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/AbstractDriftChangeSetsTreeView.java
index d3768c1..fb63830 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/AbstractDriftChangeSetsTreeView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/AbstractDriftChangeSetsTreeView.java
@@ -44,6 +44,7 @@ import com.smartgwt.client.widgets.tree.events.NodeContextClickHandler;
import org.rhq.core.domain.drift.Drift;
import org.rhq.core.domain.drift.DriftChangeSet;
import org.rhq.core.domain.drift.DriftConfiguration;
+import org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ImageManager;
import org.rhq.enterprise.gui.coregui.client.ViewId;
@@ -387,7 +388,14 @@ public abstract class AbstractDriftChangeSetsTreeView extends LocatableTreeGrid
str.append(" (");
str.append(TimestampCellFormatter.format(changeset.getCtime(),
TimestampCellFormatter.DATE_TIME_FORMAT_SHORT));
+
+ if (DriftHandlingMode.plannedChanges == changeset.getDriftHandlingMode()) {
+ str.append(", ");
+ str.append(MSG.view_drift_table_driftHandlingMode_plannedChanges());
+ }
+
str.append(")");
+
return str.toString();
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftConfigurationDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftConfigurationDataSource.java
index 1f6190d..189f398 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftConfigurationDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftConfigurationDataSource.java
@@ -37,6 +37,7 @@ import org.rhq.core.domain.common.EntityContext;
import org.rhq.core.domain.criteria.DriftConfigurationCriteria;
import org.rhq.core.domain.drift.DriftConfiguration;
import org.rhq.core.domain.drift.DriftConfiguration.BaseDirectory;
+import org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ImageManager;
@@ -248,14 +249,7 @@ public class DriftConfigurationDataSource extends RPCDataSource<DriftConfigurati
record.setAttribute(ATTR_ID, from.getId());
record.setAttribute(ATTR_NAME, from.getName());
- switch (from.getDriftHandlingMode()) {
- case plannedChanges:
- record.setAttribute(ATTR_DRIFT_HANDLING_MODE, DRIFT_HANDLING_MODE_PLANNED);
- break;
- default:
- record.setAttribute(ATTR_DRIFT_HANDLING_MODE, DRIFT_HANDLING_MODE_NORMAL);
- break;
- }
+ record.setAttribute(ATTR_DRIFT_HANDLING_MODE, getDriftHandlingModeDisplayName(from.getDriftHandlingMode()));
record.setAttribute(ATTR_INTERVAL, String.valueOf(from.getInterval()));
record.setAttribute(ATTR_BASE_DIR_STRING, getBaseDirString(from.getBasedir()));
record.setAttribute(ATTR_ENABLED, ImageManager.getAvailabilityIcon(from.isEnabled()));
@@ -270,6 +264,16 @@ public class DriftConfigurationDataSource extends RPCDataSource<DriftConfigurati
return record;
}
+ public static String getDriftHandlingModeDisplayName(DriftHandlingMode driftHandlingMode) {
+ switch (driftHandlingMode) {
+ case plannedChanges:
+ return DRIFT_HANDLING_MODE_PLANNED;
+
+ default:
+ return DRIFT_HANDLING_MODE_NORMAL;
+ }
+ }
+
private static String getBaseDirString(BaseDirectory basedir) {
return basedir.getValueContext() + ":" + basedir.getValueName();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDetailsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDetailsView.java
index 1c0b54e..1791971 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDetailsView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDetailsView.java
@@ -20,6 +20,9 @@
package org.rhq.enterprise.gui.coregui.client.drift;
+import static org.rhq.core.domain.drift.DriftFileStatus.LOADED;
+import static org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter.DATE_TIME_FORMAT_FULL;
+
import java.util.LinkedHashMap;
import java.util.List;
@@ -37,6 +40,7 @@ import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.drift.Drift;
+import org.rhq.core.domain.drift.DriftChangeSet;
import org.rhq.core.domain.drift.DriftDetails;
import org.rhq.core.domain.drift.DriftFileStatus;
import org.rhq.core.domain.drift.FileDiffReport;
@@ -49,9 +53,6 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableWindow;
-import static org.rhq.core.domain.drift.DriftFileStatus.LOADED;
-import static org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter.DATE_TIME_FORMAT_FULL;
-
/**
* @author Jay Shaughnessy
*/
@@ -134,87 +135,90 @@ public class DriftDetailsView extends LocatableVLayout {
if (driftDetails.isBinaryFile()) {
switch (driftDetails.getDrift().getCategory()) {
- case FILE_ADDED:
- category.setValue(DriftDataSource.CATEGORY_ICON_ADD);
- oldFile.setValue(MSG.common_label_none());
- oldFileLink = spacer;
- newFile.setValue(driftDetails.getDrift().getNewDriftFile().getHashId());
- newFileLink = spacer;
- break;
- case FILE_CHANGED:
- category.setValue(DriftDataSource.CATEGORY_ICON_CHANGE);
- oldFile.setValue(driftDetails.getDrift().getOldDriftFile().getHashId());
- oldFileLink = createViewFileLink(driftDetails.getDrift().getOldDriftFile().getHashId(),
- driftDetails.getDrift().getPath(), driftDetails.getPreviousChangeSet().getVersion());
- newFile.setValue(driftDetails.getDrift().getNewDriftFile().getHashId());
- newFileLink = spacer;
- break;
- case FILE_REMOVED:
- category.setValue(DriftDataSource.CATEGORY_ICON_REMOVE);
- oldFile.setValue(driftDetails.getDrift().getOldDriftFile().getHashId());
- oldFileLink = spacer;
- newFile.setValue(MSG.common_label_none());
- newFileLink = spacer;
- break;
+ case FILE_ADDED:
+ category.setValue(DriftDataSource.CATEGORY_ICON_ADD);
+ oldFile.setValue(MSG.common_label_none());
+ oldFileLink = spacer;
+ newFile.setValue(driftDetails.getDrift().getNewDriftFile().getHashId());
+ newFileLink = spacer;
+ break;
+ case FILE_CHANGED:
+ category.setValue(DriftDataSource.CATEGORY_ICON_CHANGE);
+ oldFile.setValue(driftDetails.getDrift().getOldDriftFile().getHashId());
+ oldFileLink = createViewFileLink(driftDetails.getDrift().getOldDriftFile().getHashId(), driftDetails
+ .getDrift().getPath(), driftDetails.getPreviousChangeSet().getVersion());
+ newFile.setValue(driftDetails.getDrift().getNewDriftFile().getHashId());
+ newFileLink = spacer;
+ break;
+ case FILE_REMOVED:
+ category.setValue(DriftDataSource.CATEGORY_ICON_REMOVE);
+ oldFile.setValue(driftDetails.getDrift().getOldDriftFile().getHashId());
+ oldFileLink = spacer;
+ newFile.setValue(MSG.common_label_none());
+ newFileLink = spacer;
+ break;
}
driftForm.setItems(id, spacer, path, spacer, category, spacer, timestamp, spacer, oldFile, oldFileLink,
- newFile, newFileLink);
+ newFile, newFileLink);
} else {
FormItem viewDiffLink = spacer;
switch (driftDetails.getDrift().getCategory()) {
- case FILE_ADDED:
- category.setValue(DriftDataSource.CATEGORY_ICON_ADD);
- oldFile.setValue(MSG.common_label_none());
- oldFileLink = spacer;
- newFile.setValue(driftDetails.getDrift().getNewDriftFile().getHashId());
- newFileLink = createViewFileLink(driftDetails.getDrift().getNewDriftFile().getHashId(),
- driftDetails.getDrift().getPath(), driftDetails.getChangeSet().getVersion(),
- driftDetails.getNewFileStatus());
- break;
- case FILE_CHANGED:
- category.setValue(DriftDataSource.CATEGORY_ICON_CHANGE);
- oldFile.setValue(driftDetails.getDrift().getOldDriftFile().getHashId());
- oldFileLink = createViewFileLink(driftDetails.getDrift().getOldDriftFile().getHashId(),
- driftDetails.getDrift().getPath(), driftDetails.getPreviousChangeSet().getVersion(),
- driftDetails.getOldFileStatus());
- newFile.setValue(driftDetails.getDrift().getNewDriftFile().getHashId());
- newFileLink = createViewFileLink(driftDetails.getDrift().getNewDriftFile().getHashId(),
- driftDetails.getDrift().getPath(), driftDetails.getChangeSet().getVersion(),
- driftDetails.getNewFileStatus());
- if (driftDetails.getNewFileStatus() == LOADED && driftDetails.getOldFileStatus() == LOADED) {
- viewDiffLink = createViewDiffLink(driftDetails.getDrift(),
- driftDetails.getPreviousChangeSet().getVersion());
- }
- break;
- case FILE_REMOVED:
- category.setValue(DriftDataSource.CATEGORY_ICON_REMOVE);
- oldFile.setValue(driftDetails.getDrift().getOldDriftFile().getHashId());
- oldFileLink = createViewFileLink(driftDetails.getDrift().getOldDriftFile().getHashId(),
- driftDetails.getDrift().getPath(), driftDetails.getChangeSet().getVersion(),
- driftDetails.getOldFileStatus());
- newFile.setValue(MSG.common_label_none());
- newFileLink = spacer;
- break;
+ case FILE_ADDED:
+ category.setValue(DriftDataSource.CATEGORY_ICON_ADD);
+ oldFile.setValue(MSG.common_label_none());
+ oldFileLink = spacer;
+ newFile.setValue(driftDetails.getDrift().getNewDriftFile().getHashId());
+ newFileLink = createViewFileLink(driftDetails.getDrift().getNewDriftFile().getHashId(), driftDetails
+ .getDrift().getPath(), driftDetails.getChangeSet().getVersion(), driftDetails.getNewFileStatus());
+ break;
+ case FILE_CHANGED:
+ category.setValue(DriftDataSource.CATEGORY_ICON_CHANGE);
+ oldFile.setValue(driftDetails.getDrift().getOldDriftFile().getHashId());
+ oldFileLink = createViewFileLink(driftDetails.getDrift().getOldDriftFile().getHashId(), driftDetails
+ .getDrift().getPath(), driftDetails.getPreviousChangeSet().getVersion(), driftDetails
+ .getOldFileStatus());
+ newFile.setValue(driftDetails.getDrift().getNewDriftFile().getHashId());
+ newFileLink = createViewFileLink(driftDetails.getDrift().getNewDriftFile().getHashId(), driftDetails
+ .getDrift().getPath(), driftDetails.getChangeSet().getVersion(), driftDetails.getNewFileStatus());
+ if (driftDetails.getNewFileStatus() == LOADED && driftDetails.getOldFileStatus() == LOADED) {
+ viewDiffLink = createViewDiffLink(driftDetails.getDrift(), driftDetails.getPreviousChangeSet()
+ .getVersion());
+ }
+ break;
+ case FILE_REMOVED:
+ category.setValue(DriftDataSource.CATEGORY_ICON_REMOVE);
+ oldFile.setValue(driftDetails.getDrift().getOldDriftFile().getHashId());
+ oldFileLink = createViewFileLink(driftDetails.getDrift().getOldDriftFile().getHashId(), driftDetails
+ .getDrift().getPath(), driftDetails.getChangeSet().getVersion(), driftDetails.getOldFileStatus());
+ newFile.setValue(MSG.common_label_none());
+ newFileLink = spacer;
+ break;
}
driftForm.setItems(id, spacer, path, spacer, category, spacer, timestamp, spacer, oldFile, oldFileLink,
- newFile, newFileLink, spacer, spacer, spacer, viewDiffLink);
+ newFile, newFileLink, spacer, spacer, spacer, viewDiffLink);
}
addMember(driftForm);
}
- private DynamicForm createChangeSetForm(Drift drift) {
+ private DynamicForm createChangeSetForm(Drift<?, ?> drift) {
DynamicForm changeSetForm = new LocatableDynamicForm(extendLocatorId("changeSetForm"));
changeSetForm.setIsGroup(true);
changeSetForm.setGroupTitle(MSG.view_drift_table_changeSet());
changeSetForm.setWrapItemTitles(false);
+ DriftChangeSet<?> changeSet = drift.getChangeSet();
StaticTextItem changeSetId = new StaticTextItem("changeSetId", MSG.common_title_id());
- changeSetId.setValue(drift.getChangeSet().getId());
+ changeSetId.setValue(changeSet.getId());
StaticTextItem changeSetCategory = new StaticTextItem("changeSetCategory", MSG.common_title_category());
- changeSetCategory.setValue(drift.getChangeSet().getCategory().name());
+ changeSetCategory.setValue(changeSet.getCategory().name());
StaticTextItem changeSetVersion = new StaticTextItem("changeSetVersion", MSG.common_title_version());
- changeSetVersion.setValue(drift.getChangeSet().getVersion());
- changeSetForm.setItems(changeSetId, changeSetCategory, changeSetVersion);
+ changeSetVersion.setValue(changeSet.getVersion());
+ StaticTextItem changeSetDriftHandling = new StaticTextItem("changeSetDriftHandling", MSG
+ .view_drift_table_driftHandlingMode());
+ changeSetDriftHandling.setValue(DriftConfigurationDataSource.getDriftHandlingModeDisplayName(changeSet
+ .getDriftHandlingMode()));
+
+ changeSetForm.setItems(changeSetId, changeSetCategory, changeSetVersion, changeSetDriftHandling);
return changeSetForm;
}
@@ -309,7 +313,7 @@ public class DriftDetailsView extends LocatableVLayout {
return window;
}
- private LinkItem createViewDiffLink(final Drift drift, final int oldVersion) {
+ private LinkItem createViewDiffLink(final Drift<?, ?> drift, final int oldVersion) {
LinkItem viewDiffLink = new LinkItem("viewDiff");
viewDiffLink.setLinkTitle("(view diff)");
viewDiffLink.setShowTitle(false);
@@ -327,8 +331,7 @@ public class DriftDetailsView extends LocatableVLayout {
public void onSuccess(FileDiffReport diffReport) {
int newVersion = drift.getChangeSet().getVersion();
String diffContents = toHtml(diffReport.getDiff(), oldVersion, newVersion);
- LocatableWindow window = createDiffViewer(diffContents, drift.getPath(), oldVersion,
- newVersion);
+ LocatableWindow window = createDiffViewer(diffContents, drift.getPath(), oldVersion, newVersion);
window.show();
}
});
@@ -340,8 +343,8 @@ public class DriftDetailsView extends LocatableVLayout {
private String toHtml(List<String> deltas, int oldVersion, int newVersion) {
StringBuilder diff = new StringBuilder();
diff.append("<font color=\"red\">").append(deltas.get(0)).append(":").append(oldVersion).append("</font><br/>");
- diff.append("<font color=\"green\">").append(deltas.get(1)).append(":").append(newVersion)
- .append("</font><br/>");
+ diff.append("<font color=\"green\">").append(deltas.get(1)).append(":").append(newVersion).append(
+ "</font><br/>");
for (String line : deltas.subList(2, deltas.size())) {
if (line.startsWith("@@")) {
12 years, 9 months
[rhq] Branch 'drift' - 4 commits - modules/enterprise
by mazz
modules/enterprise/server/jar/pom.xml | 30 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftChangesetBean.java | 6
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftFileBean.java | 6
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java | 31 +
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java | 73 ++--
modules/enterprise/server/jar/src/test/resources/embedded-jboss-beans.xml | 177 ----------
modules/enterprise/server/jar/src/test/resources/jboss-jms-beans.xml | 102 -----
modules/enterprise/server/jar/src/test/resources/jms-ra.rar |binary
modules/enterprise/server/jar/src/test/resources/log4j.xml | 5
modules/enterprise/server/jar/src/test/resources/login-config.xml | 9
modules/enterprise/server/jar/src/test/resources/rhq-mdb-beans.xml | 25 +
modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/README.txt | 1
modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/jbossmq-state.xml | 16
13 files changed, 186 insertions(+), 295 deletions(-)
New commits:
commit 4dbb8eeee9b4c3f12cfb2de0e2c14acf35a56baf
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Sep 7 12:47:35 2011 -0400
this completes the integration of JMS into the server/jar test embedded container.
JMS messages can now flow and we should be able to test alerts and other things that use JMS messaging.
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
index 8136142..8f086a6 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
@@ -19,22 +19,13 @@
package org.rhq.enterprise.server.alert.test;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.testng.annotations.Test;
-import org.rhq.enterprise.server.drift.DriftManagerLocal;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
-import org.rhq.enterprise.server.util.LookupUtil;
@Test
public class AlertConditionTest extends AbstractEJB3Test {
public void test() throws Exception {
- DriftManagerLocal mgr = LookupUtil.getDriftManager();
- Log log = LogFactory.getLog("TESTING");
- log.fatal("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
- mgr.addChangeSet(1, 0, null);
- Thread.sleep(5000);
- log.fatal("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
+ // TODO need tests here
}
}
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
index 31d5c59..eb50402 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
@@ -22,7 +22,6 @@ import static org.rhq.test.JPAUtils.clearDB;
import static org.rhq.test.JPAUtils.lookupEntityManager;
import static org.rhq.test.JPAUtils.lookupTransactionManager;
-import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Hashtable;
@@ -47,7 +46,6 @@ import org.testng.annotations.BeforeSuite;
import org.jboss.ejb3.embedded.EJB3StandaloneBootstrap;
import org.jboss.ejb3.embedded.EJB3StandaloneDeployer;
import org.jboss.mx.util.MBeanServerLocator;
-import org.jboss.system.server.ServerConfigImpl;
import org.rhq.core.db.DatabaseTypeFactory;
import org.rhq.core.db.PostgresqlDatabaseType;
@@ -71,11 +69,11 @@ import org.rhq.enterprise.server.util.LookupUtil;
public abstract class AbstractEJB3Test extends AssertJUnit {
private static EJB3StandaloneDeployer deployer;
- private static MBeanServer dummyJBossMBeanServer;
private static Statistics stats;
private static long start; // see endTest() if you want to output this
private SchedulerService schedulerService;
private ServerPluginService serverPluginService;
+ private MBeanServer dummyJBossMBeanServer;
@BeforeClass
public void resetDB() throws Exception {
@@ -92,9 +90,6 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
@BeforeSuite(alwaysRun = true)
public static void startupEmbeddedJboss() throws Exception {
- // need to create the JBoss MBeanServer and register the ServerConfig service for JMS subsystem to start properly
- prepareServerConfigMBean();
-
// Setting content location to the tmp dir
System.setProperty(ContentSourceManagerBean.FILESYSTEM_PROPERTY, System.getProperty("java.io.tmpdir"));
@@ -112,9 +107,6 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
deployer.setClassLoader(AbstractEJB3Test.class.getClassLoader());
System.err.println("...... embedded container classloader set....");
- deployer.setMbeanServer(getJBossMBeanServer());
- System.err.println("...... embedded container mbean server set....");
-
deployer.getArchivesByResource().add("META-INF/persistence.xml");
System.err.println("...... embedded container persistence xml deployed....");
@@ -177,10 +169,6 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
}
}
EJB3StandaloneBootstrap.shutdown();
- if (dummyJBossMBeanServer != null) {
- MBeanServerFactory.releaseMBeanServer(dummyJBossMBeanServer);
- dummyJBossMBeanServer = null;
- }
}
@BeforeMethod
@@ -250,7 +238,7 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
*
* @return MBeanServer instance
*/
- public static MBeanServer getJBossMBeanServer() {
+ public MBeanServer getJBossMBeanServer() {
if (dummyJBossMBeanServer == null) {
dummyJBossMBeanServer = MBeanServerFactory.createMBeanServer("jboss");
MBeanServerLocator.setJBoss(dummyJBossMBeanServer);
@@ -359,30 +347,4 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
schedulerService = null;
}
}
-
- private static final void prepareServerConfigMBean() throws Exception {
- // the JMS state service needs this, but for some reason, this deployed but the
- // state server can't find it in the JBoss MBeanServer. So this method deploys this manually.
- //
- // <bean name="jboss.system:type=ServerConfig" class="org.jboss.system.server.ServerConfigImpl">
- // <constructor>
- // <parameter class="java.util.Properties">
- // <map keyClass="java.lang.String" valueClass="java.lang.String">
- // <entry>
- // <key>jboss.home.dir</key>
- // <value>target</value>
- // </entry>
- // </map>
- // </parameter>
- // </constructor>
- // </bean>
- Properties props = new Properties();
- File jbossHomeDir = new File("target/test-classes/test-jboss-home-dir");
- assert jbossHomeDir.isDirectory() : "Test framework did not setup jboss home directory properly: "
- + jbossHomeDir.getAbsolutePath();
- props.setProperty("jboss.home.dir", jbossHomeDir.getAbsolutePath());
- ServerConfigImpl serverConfigService = new ServerConfigImpl(props);
- serverConfigService.initURLs();
- getJBossMBeanServer().registerMBean(serverConfigService, ServerConfigImpl.OBJECT_NAME);
- }
}
diff --git a/modules/enterprise/server/jar/src/test/resources/jboss-jms-beans.xml b/modules/enterprise/server/jar/src/test/resources/jboss-jms-beans.xml
index 3fa7853..287cffc 100644
--- a/modules/enterprise/server/jar/src/test/resources/jboss-jms-beans.xml
+++ b/modules/enterprise/server/jar/src/test/resources/jboss-jms-beans.xml
@@ -71,8 +71,7 @@
<property name="workManager"><inject bean="jms-rar-WorkManager"/></property>
</bean>
- <bean name="jboss.mq:service=StateManager" class="org.jboss.mq.sm.file.DynamicStateManager">
- <property name="stateFile">jbossmq-state.xml</property>
+ <bean name="jboss.mq:service=StateManager" class="org.jboss.mq.sm.none.NullStateManager">
</bean>
<bean name="BasicQueueParameters" class="org.jboss.mq.server.BasicQueueParameters"/>
commit 4d7cd7fe700fc600d97d6f0ed8c989debe7fb0a6
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Sep 7 11:58:21 2011 -0400
test log4j.xml hides the TIMER SERVICE IS NOT INSTALLED warning - we know embedded EJB3 container doesn't support timers
diff --git a/modules/enterprise/server/jar/src/test/resources/log4j.xml b/modules/enterprise/server/jar/src/test/resources/log4j.xml
index 681f2af..161f11e 100644
--- a/modules/enterprise/server/jar/src/test/resources/log4j.xml
+++ b/modules/enterprise/server/jar/src/test/resources/log4j.xml
@@ -49,6 +49,11 @@
<priority value="ERROR"/>
</category>
+ <!-- hides the TIMER SERVICE IS NOT INSTALLED warning - we know embedded EJB3 container doesn't support timers -->
+ <category name="org.jboss.ejb3.timerservice.jboss.JBossTimerServiceFactory">
+ <priority value="ERROR"/>
+ </category>
+
<!-- Hibernate SQL logs -->
<!--
<category name="org.hibernate.SQL">
commit 0b736a13f2fd80a7d75acdf064de87ff06aa8778
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Sep 7 11:20:57 2011 -0400
this gets JMS messages to flow in our test embedded container
diff --git a/modules/enterprise/server/jar/pom.xml b/modules/enterprise/server/jar/pom.xml
index d2f2bc5..77750c0 100644
--- a/modules/enterprise/server/jar/pom.xml
+++ b/modules/enterprise/server/jar/pom.xml
@@ -552,6 +552,36 @@ Build-OS-Version=${os.version}
</executions>
</plugin>
+ <!-- in order to get JMS to work properly in embedded test container, extract jms-rs.rar classes -->
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+
+ <execution>
+ <id>Extract JMS classes from RAR needed for JMS tests</id>
+ <phase>process-classes</phase>
+ <configuration>
+ <tasks>
+ <unzip src="src/test/resources/jms-ra.rar" dest="target">
+ <patternset>
+ <include name="jms-ra.jar"/>
+ </patternset>
+ </unzip>
+ <unzip src="target/jms-ra.jar" dest="target/test-classes">
+ <patternset>
+ <include name="org/**"/>
+ </patternset>
+ </unzip>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ </executions>
+ </plugin>
+
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<!-- Everything but the web service tests, this is the standard test execution -->
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
new file mode 100644
index 0000000..8136142
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
@@ -0,0 +1,40 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2011 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.enterprise.server.alert.test;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.testng.annotations.Test;
+
+import org.rhq.enterprise.server.drift.DriftManagerLocal;
+import org.rhq.enterprise.server.test.AbstractEJB3Test;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+@Test
+public class AlertConditionTest extends AbstractEJB3Test {
+ public void test() throws Exception {
+ DriftManagerLocal mgr = LookupUtil.getDriftManager();
+ Log log = LogFactory.getLog("TESTING");
+ log.fatal("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+ mgr.addChangeSet(1, 0, null);
+ Thread.sleep(5000);
+ log.fatal("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
+ }
+}
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
index 5ed329f..31d5c59 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
@@ -18,6 +18,11 @@
*/
package org.rhq.enterprise.server.test;
+import static org.rhq.test.JPAUtils.clearDB;
+import static org.rhq.test.JPAUtils.lookupEntityManager;
+import static org.rhq.test.JPAUtils.lookupTransactionManager;
+
+import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Hashtable;
@@ -42,6 +47,7 @@ import org.testng.annotations.BeforeSuite;
import org.jboss.ejb3.embedded.EJB3StandaloneBootstrap;
import org.jboss.ejb3.embedded.EJB3StandaloneDeployer;
import org.jboss.mx.util.MBeanServerLocator;
+import org.jboss.system.server.ServerConfigImpl;
import org.rhq.core.db.DatabaseTypeFactory;
import org.rhq.core.db.PostgresqlDatabaseType;
@@ -57,10 +63,6 @@ import org.rhq.enterprise.server.scheduler.SchedulerService;
import org.rhq.enterprise.server.scheduler.SchedulerServiceMBean;
import org.rhq.enterprise.server.util.LookupUtil;
-import static org.rhq.test.JPAUtils.clearDB;
-import static org.rhq.test.JPAUtils.lookupEntityManager;
-import static org.rhq.test.JPAUtils.lookupTransactionManager;
-
/**
* This is the abstract test base for server jar tests.
*
@@ -68,6 +70,13 @@ import static org.rhq.test.JPAUtils.lookupTransactionManager;
*/
public abstract class AbstractEJB3Test extends AssertJUnit {
+ private static EJB3StandaloneDeployer deployer;
+ private static MBeanServer dummyJBossMBeanServer;
+ private static Statistics stats;
+ private static long start; // see endTest() if you want to output this
+ private SchedulerService schedulerService;
+ private ServerPluginService serverPluginService;
+
@BeforeClass
public void resetDB() throws Exception {
if (isDBResetNeeded()) {
@@ -82,6 +91,10 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
//@BeforeSuite(groups = {"integration.ejb3","PERF"}) // TODO investigate again
@BeforeSuite(alwaysRun = true)
public static void startupEmbeddedJboss() throws Exception {
+
+ // need to create the JBoss MBeanServer and register the ServerConfig service for JMS subsystem to start properly
+ prepareServerConfigMBean();
+
// Setting content location to the tmp dir
System.setProperty(ContentSourceManagerBean.FILESYSTEM_PROPERTY, System.getProperty("java.io.tmpdir"));
@@ -92,21 +105,30 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
EJB3StandaloneBootstrap.boot(null);
// EJB3StandaloneBootstrap.scanClasspath();
- /*Properties p = System.getProperties();
- * for (Object name : p.keySet()) { System.out.println(" " + name + " = " +
- * p.getProperty((String)name));}*/
-
- System.err.println("...... embedded-jboss-beans deployed....");
+ System.err.println("...... embedded container booted....");
- // Add all EJBs found in the archive that has this file
- EJB3StandaloneDeployer deployer = EJB3StandaloneBootstrap.createDeployer(); //new EJB3StandaloneDeployer();
+ deployer = EJB3StandaloneBootstrap.createDeployer();
deployer.setClassLoader(AbstractEJB3Test.class.getClassLoader());
+ System.err.println("...... embedded container classloader set....");
+
+ deployer.setMbeanServer(getJBossMBeanServer());
+ System.err.println("...... embedded container mbean server set....");
+
deployer.getArchivesByResource().add("META-INF/persistence.xml");
+ System.err.println("...... embedded container persistence xml deployed....");
+
deployer.getArchivesByResource().add("META-INF/ejb-jar.xml");
+ System.err.println("...... embedded container ejb-jar xml deployed....");
+
+ EJB3StandaloneBootstrap.deployXmlResource("jboss-jms-beans.xml");
+ System.err.println("...... embedded container jboss-jms-beans xml deployed....");
+
+ EJB3StandaloneBootstrap.deployXmlResource("rhq-mdb-beans.xml");
+ System.err.println("...... embedded container rhq-mdb-beans xml deployed....");
/*
- * File core = new File(deployDir, "on-core-domain-ejb.ejb3"); if (!core.exists())
+ * File core = new File(deployDir, "on-core-domain-ejb.ejb3"); if (!core.exists())
* System.err.println("Deployment directory does not exist: " + core.getAbsolutePath());
* deployer.getArchives().add(core.toURI().toURL());
*
@@ -116,10 +138,6 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
*
*/
- System.err.println("...... deploying MM ejb3.....");
- System.err.println("...... ejb3 deployed....");
-
- // Deploy everything we got
//deployer.setKernel(EJB3StandaloneBootstrap.getKernel());
deployer.create();
System.err.println("...... deployer created....");
@@ -133,6 +151,8 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
stats = sessionFactory.getStatistics();
stats.setStatisticsEnabled(true);
+ System.err.println("...... embedded container initialized and ready for testing....");
+
} catch (Throwable t) {
// Catch RuntimeExceptions and Errors and dump their stack trace, because Surefire will completely swallow them
// and throw a cryptic NPE (see http://jira.codehaus.org/browse/SUREFIRE-157)!
@@ -142,13 +162,27 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
}
//@Configuration(groups = "integration.ejb3", afterSuite = true)
- @AfterSuite
+ @AfterSuite(alwaysRun = true)
public static void shutdownEmbeddedJboss() {
+ System.err.println("!!! Any errors occurring after this point occurred during embedded server shutdown !!!\n"
+ + "!!! and is probably not a real problem. !!!");
+ if (deployer != null) {
+ try {
+ deployer.stop();
+ deployer.destroy();
+ deployer = null;
+ } catch (Throwable t) {
+ System.err.println("Failed to stop embedded deployer");
+ t.printStackTrace(System.err);
+ }
+ }
EJB3StandaloneBootstrap.shutdown();
+ if (dummyJBossMBeanServer != null) {
+ MBeanServerFactory.releaseMBeanServer(dummyJBossMBeanServer);
+ dummyJBossMBeanServer = null;
+ }
}
- private static long start;
-
@BeforeMethod
public static void startTest() {
if (DatabaseTypeFactory.getDefaultDatabaseType() == null) {
@@ -176,10 +210,6 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
//System.out.println("Connections used: " + (stats.getQueryExecutionCount() - start));
}
- private TransactionManager tm;
- private MBeanServer dummyJBossMBeanServer;
- private static Statistics stats;
-
public TransactionManager getTransactionManager() {
return lookupTransactionManager();
}
@@ -220,7 +250,7 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
*
* @return MBeanServer instance
*/
- public MBeanServer getJBossMBeanServer() {
+ public static MBeanServer getJBossMBeanServer() {
if (dummyJBossMBeanServer == null) {
dummyJBossMBeanServer = MBeanServerFactory.createMBeanServer("jboss");
MBeanServerLocator.setJBoss(dummyJBossMBeanServer);
@@ -258,16 +288,15 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
*/
public void unprepareForTestAgents() {
try {
- if (dummyJBossMBeanServer != null) {
- dummyJBossMBeanServer.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ MBeanServer mbs = getJBossMBeanServer();
+ if (mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME)) {
+ mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
- private ServerPluginService serverPluginService;
-
/**
* If you need to test server plugins, you must first prepare the server plugin service.
* After this returns, the caller must explicitly start the PC by using the appropriate API
@@ -298,8 +327,6 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
}
}
- private SchedulerService schedulerService;
-
public SchedulerService getSchedulerService() {
return schedulerService;
}
@@ -332,4 +359,30 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
schedulerService = null;
}
}
+
+ private static final void prepareServerConfigMBean() throws Exception {
+ // the JMS state service needs this, but for some reason, this deployed but the
+ // state server can't find it in the JBoss MBeanServer. So this method deploys this manually.
+ //
+ // <bean name="jboss.system:type=ServerConfig" class="org.jboss.system.server.ServerConfigImpl">
+ // <constructor>
+ // <parameter class="java.util.Properties">
+ // <map keyClass="java.lang.String" valueClass="java.lang.String">
+ // <entry>
+ // <key>jboss.home.dir</key>
+ // <value>target</value>
+ // </entry>
+ // </map>
+ // </parameter>
+ // </constructor>
+ // </bean>
+ Properties props = new Properties();
+ File jbossHomeDir = new File("target/test-classes/test-jboss-home-dir");
+ assert jbossHomeDir.isDirectory() : "Test framework did not setup jboss home directory properly: "
+ + jbossHomeDir.getAbsolutePath();
+ props.setProperty("jboss.home.dir", jbossHomeDir.getAbsolutePath());
+ ServerConfigImpl serverConfigService = new ServerConfigImpl(props);
+ serverConfigService.initURLs();
+ getJBossMBeanServer().registerMBean(serverConfigService, ServerConfigImpl.OBJECT_NAME);
+ }
}
diff --git a/modules/enterprise/server/jar/src/test/resources/embedded-jboss-beans.xml b/modules/enterprise/server/jar/src/test/resources/embedded-jboss-beans.xml
index 55d697b..05edefa 100644
--- a/modules/enterprise/server/jar/src/test/resources/embedded-jboss-beans.xml
+++ b/modules/enterprise/server/jar/src/test/resources/embedded-jboss-beans.xml
@@ -157,181 +157,4 @@
</constructor>
</bean>
- <!-- JMS configuration -->
- <bean name="jboss.mq:service=JMSProviderLoader,name=JMSProvider" class="org.jboss.jms.jndi.JNDIProviderAdapter">
- <property name="factoryRef">java:/XAConnectionFactory</property>
- <property name="queueFactoryRef">java:/XAConnectionFactory</property>
- <property name="topicFactoryRef">java:/XAConnectionFactory</property>
- <property name="properties" class="java.util.Properties">
- <map keyClass="java.lang.String" valueClass="java.lang.String">
- <entry>
- <key>java.naming.factory.initial</key>
- <value>org.jnp.interfaces.LocalOnlyContextFactory</value>
- </entry>
- <entry>
- <key>java.naming.factory.url.pkgs</key>
- <value>org.jboss.naming:org.jnp.interfaces</value>
- </entry>
- </map>
- </property>
- </bean>
-
- <bean name="b1" class="org.jboss.ejb3.embedded.JndiBinder">
- <property name="jndiProperties"><inject bean="InitialContextProperties"/></property>
- <property name="target"><inject bean="jboss.mq:service=JMSProviderLoader,name=JMSProvider"/></property>
- <property name="bindTo">java:/DefaultJMSProvider</property>
- <property name="serializable">true</property>
- </bean>
-
- <bean name="jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool" class="org.jboss.jms.asf.StdServerSessionPoolFactory">
- <property name="name">StdJMSPool</property>
- <property name="xidFactory"><inject bean="XidFactoryMBean"/></property>
- <property name="transactionManager"><inject bean="TransactionManager"/></property>
- </bean>
-
- <bean name="b2" class="org.jboss.ejb3.embedded.JndiBinder">
- <property name="jndiProperties"><inject bean="InitialContextProperties"/></property>
- <property name="target"><inject bean="jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool"/></property>
- <property name="bindTo">java:/StdJMSPool</property>
- <property name="serializable">false</property>
- </bean>
-
-
- <bean name="jboss.mq:service=PersistenceManager" class="org.jboss.mq.kernel.JDBC2PersistenceManager">
- <property name="transactionManager">
- <inject bean="TransactionManager"/>
- </property>
- <property name="datasource">
- <inject bean="RHQDS"/>
- </property>
- <property name="sqlProperties">
-
- BLOB_TYPE=OBJECT_BLOB
- INSERT_TX = INSERT INTO JMS_TRANSACTIONS (TXID) values(?)
- INSERT_MESSAGE = INSERT INTO JMS_MESSAGES (MESSAGEID, DESTINATION, MESSAGEBLOB, TXID, TXOP) VALUES(?,?,?,?,?)
- SELECT_ALL_UNCOMMITED_TXS = SELECT TXID FROM JMS_TRANSACTIONS
- SELECT_MAX_TX = SELECT MAX(TXID) FROM JMS_MESSAGES
- SELECT_MESSAGES_IN_DEST = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGES WHERE DESTINATION=?
- SELECT_MESSAGE = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGES WHERE MESSAGEID=? AND DESTINATION=?
- MARK_MESSAGE = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE MESSAGEID=? AND DESTINATION=?
- UPDATE_MESSAGE = UPDATE JMS_MESSAGES SET MESSAGEBLOB=? WHERE MESSAGEID=? AND DESTINATION=?
- UPDATE_MARKED_MESSAGES = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=?
- UPDATE_MARKED_MESSAGES_WITH_TX = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=? AND TXID=?
- DELETE_MARKED_MESSAGES_WITH_TX = DELETE FROM JMS_MESSAGES WHERE TXOP=? AND JMS_MESSAGES.TXID IN (SELECT TXID FROM JMS_TRANSACTIONS)
- DELETE_TX = DELETE FROM JMS_TRANSACTIONS WHERE TXID = ?
- DELETE_MARKED_MESSAGES = DELETE FROM JMS_MESSAGES WHERE TXID=? AND TXOP=?
- DELETE_MESSAGE = DELETE FROM JMS_MESSAGES WHERE MESSAGEID=? AND DESTINATION=?
- CREATE_MESSAGE_TABLE = CREATE CACHED TABLE JMS_MESSAGES ( MESSAGEID INTEGER NOT NULL, \
- DESTINATION VARCHAR(255) NOT NULL, TXID INTEGER, TXOP CHAR(1), \
- MESSAGEBLOB OBJECT, PRIMARY KEY (MESSAGEID, DESTINATION) )
- CREATE_IDX_MESSAGE_TXOP_TXID = CREATE INDEX JMS_MESSAGES_TXOP_TXID ON JMS_MESSAGES (TXOP, TXID)
- CREATE_IDX_MESSAGE_DESTINATION = CREATE INDEX JMS_MESSAGES_DESTINATION ON JMS_MESSAGES (DESTINATION)
- CREATE_TX_TABLE = CREATE CACHED TABLE JMS_TRANSACTIONS ( TXID INTEGER, PRIMARY KEY (TXID) )
- CREATE_TABLES_ON_STARTUP = TRUE
- DELETE_TEMPORARY_MESSAGES = DELETE FROM JMS_MESSAGES WHERE TXOP='T'
-
- </property>
- </bean>
-
- <bean name="jboss.mq:service=MessageCache" class="org.jboss.mq.kernel.MessageCache">
- <property name="persistenceManager"><inject bean="jboss.mq:service=PersistenceManager"/></property>
- <property name="highMemoryMark">50</property>
- <property name="maxMemoryMark">60</property>
- </bean>
-
- <bean name="jboss.mq:service=StateManager" class="org.jboss.mq.kernel.JDBCStateManager">
- <property name="transactionManager">
- <inject bean="TransactionManager"/>
- </property>
- <property name="datasource">
- <inject bean="RHQDS"/>
- </property>
- <property name="sqlProperties">
-
- CREATE_TABLES_ON_STARTUP = TRUE
- CREATE_USER_TABLE = CREATE TABLE JMS_USERS (USERID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, \
- CLIENTID VARCHAR(128), PRIMARY KEY(USERID))
- CREATE_ROLE_TABLE = CREATE TABLE JMS_ROLES (ROLEID VARCHAR(32) NOT NULL, USERID VARCHAR(32) NOT NULL, \
- PRIMARY KEY(USERID, ROLEID))
- CREATE_SUBSCRIPTION_TABLE = CREATE TABLE JMS_SUBSCRIPTIONS (CLIENTID VARCHAR(128) NOT NULL, \
- SUBNAME VARCHAR(128) NOT NULL, TOPIC VARCHAR(255) NOT NULL, \
- SELECTOR VARCHAR(255), PRIMARY KEY(CLIENTID, SUBNAME))
- GET_SUBSCRIPTION = SELECT TOPIC, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=?
- LOCK_SUBSCRIPTION = SELECT TOPIC, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=?
- GET_SUBSCRIPTIONS_FOR_TOPIC = SELECT CLIENTID, SUBNAME, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE TOPIC=?
- INSERT_SUBSCRIPTION = INSERT INTO JMS_SUBSCRIPTIONS (CLIENTID, SUBNAME, TOPIC, SELECTOR) VALUES(?,?,?,?)
- UPDATE_SUBSCRIPTION = UPDATE JMS_SUBSCRIPTIONS SET TOPIC=?, SELECTOR=? WHERE CLIENTID=? AND SUBNAME=?
- REMOVE_SUBSCRIPTION = DELETE FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=?
- GET_USER_BY_CLIENTID = SELECT USERID, PASSWD, CLIENTID FROM JMS_USERS WHERE CLIENTID=?
- GET_USER = SELECT PASSWD, CLIENTID FROM JMS_USERS WHERE USERID=?
- POPULATE.TABLES.01 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('guest', 'guest')
- POPULATE.TABLES.02 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('j2ee', 'j2ee')
- POPULATE.TABLES.03 = INSERT INTO JMS_USERS (USERID, PASSWD, CLIENTID) VALUES ('john', 'needle', 'DurableSubscriberExample')
- POPULATE.TABLES.04 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('nobody', 'nobody')
- POPULATE.TABLES.05 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('dynsub', 'dynsub')
- POPULATE.TABLES.06 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('guest','guest')
- POPULATE.TABLES.07 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('j2ee','guest')
- POPULATE.TABLES.08 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('john','guest')
- POPULATE.TABLES.09 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('subscriber','john')
- POPULATE.TABLES.10 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('publisher','john')
- POPULATE.TABLES.11 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('publisher','dynsub')
- POPULATE.TABLES.12 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('durpublisher','john')
- POPULATE.TABLES.13 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('durpublisher','dynsub')
- POPULATE.TABLES.14 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('noacc','nobody')
-
- </property>
- </bean>
-
-
- <bean name="BasicQueueParameters" class="org.jboss.mq.server.BasicQueueParameters"/>
-
- <bean name="jboss.mq:service=ThreadPool" class="org.jboss.util.threadpool.BasicThreadPool">
- <property name="name">JMSThread</property>
- <property name="threadGroupName">JBossMQ Server Threads</property>
- <!-- The max number of threads in the pool -->
- <property name="maximumPoolSize">10</property>
- <!-- The max number of tasks before the queue is full -->
- <property name="maximumQueueSize">1000</property>
- <!-- The behavior of the pool when a task is added and the queue is full.
- abort - a RuntimeException is thrown
- run - the calling thread executes the task
- wait - the calling thread blocks until the queue has room
- discard - the task is silently discarded without being run
- discardOldest - check to see if a task is about to complete and enque
- the new task if possible, else run the task in the calling thread
- -->
- </bean>
-
- <bean name="jboss.mq:service=DestinationManager" class="org.jboss.mq.server.JMSDestinationManager">
- <constructor>
- <parameter class="org.jboss.mq.server.BasicQueueParameters">
- <inject bean="BasicQueueParameters"/>
- </parameter>
- </constructor>
- <property name="persistenceManager"><inject bean="jboss.mq:service=PersistenceManager"/></property>
- <property name="messageCache"><inject bean="jboss.mq:service=MessageCache"/></property>
- <property name="stateManager"><inject bean="jboss.mq:service=StateManager"/></property>
- <property name="threadPool"><inject bean="jboss.mq:service=ThreadPool"/></property>
- <property name="threadGroup"><inject bean="jboss.mq:service=ThreadPool" property="threadGroup"/></property>
- <start method="startServer"/>
- <stop method="stopServer"/>
- </bean>
-
- <bean name="jboss.mq.destination:service=Queue,name=DLQ" class="org.jboss.mq.kernel.Queue">
- <property name="destinationManagerPojo"><inject bean="jboss.mq:service=DestinationManager"/></property>
- <property name="initialContextProperties"><inject bean="InitialContextProperties"/></property>
- <property name="destinationName">DLQ</property>
- </bean>
-
- <bean name="jboss.mq:service=Invoker" class="org.jboss.mq.server.JMSServerInvoker">
- <property name="next"><inject bean="jboss.mq:service=DestinationManager"/></property>
- </bean>
-
- <bean name="jboss.mq:service=invocationlayer,type=JVM" class="org.jboss.mq.kernel.JVMIL">
- <property name="jmsInvoker"><inject bean="jboss.mq:service=Invoker"/></property>
- <property name="connectionFactoryJNDIRef">java:/ConnectionFactory</property>
- <property name="XAConnectionFactoryJNDIRef">java:/JmsXA</property>
- <property name="pingPeriod">0</property>
- <property name="initialContextProperties"><inject bean="InitialContextProperties"/></property>
- </bean>
</deployment>
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/test/resources/jboss-jms-beans.xml b/modules/enterprise/server/jar/src/test/resources/jboss-jms-beans.xml
index 624b684..3fa7853 100644
--- a/modules/enterprise/server/jar/src/test/resources/jboss-jms-beans.xml
+++ b/modules/enterprise/server/jar/src/test/resources/jboss-jms-beans.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
- xmlns="urn:jboss:bean-deployer">
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0 bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
<bean name="jboss.mq:service=JMSProviderLoader,name=JMSProvider" class="org.jboss.jms.jndi.JNDIProviderAdapter">
- <property name="factoryRef">java:/XAConnectionFactory</property>
- <property name="queueFactoryRef">java:/XAConnectionFactory</property>
- <property name="topicFactoryRef">java:/XAConnectionFactory</property>
+ <property name="factoryRef">java:/JmsXA</property>
+ <property name="queueFactoryRef">java:/JmsXA</property>
+ <property name="topicFactoryRef">java:/JmsXA</property>
<property name="properties" class="java.util.Properties">
<map keyClass="java.lang.String" valueClass="java.lang.String">
<entry>
@@ -42,40 +42,7 @@
</bean>
- <bean name="jboss.mq:service=PersistenceManager" class="org.jboss.mq.kernel.JDBC2PersistenceManager">
- <property name="transactionManager">
- <inject bean="TransactionManager"/>
- </property>
- <property name="datasource">
- <inject bean="DefaultDS"/>
- </property>
- <property name="sqlProperties">
-
- BLOB_TYPE=OBJECT_BLOB
- INSERT_TX = INSERT INTO JMS_TRANSACTIONS (TXID) values(?)
- INSERT_MESSAGE = INSERT INTO JMS_MESSAGES (MESSAGEID, DESTINATION, MESSAGEBLOB, TXID, TXOP) VALUES(?,?,?,?,?)
- SELECT_ALL_UNCOMMITED_TXS = SELECT TXID FROM JMS_TRANSACTIONS
- SELECT_MAX_TX = SELECT MAX(TXID) FROM JMS_MESSAGES
- SELECT_MESSAGES_IN_DEST = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGES WHERE DESTINATION=?
- SELECT_MESSAGE = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGES WHERE MESSAGEID=? AND DESTINATION=?
- MARK_MESSAGE = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE MESSAGEID=? AND DESTINATION=?
- UPDATE_MESSAGE = UPDATE JMS_MESSAGES SET MESSAGEBLOB=? WHERE MESSAGEID=? AND DESTINATION=?
- UPDATE_MARKED_MESSAGES = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=?
- UPDATE_MARKED_MESSAGES_WITH_TX = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=? AND TXID=?
- DELETE_MARKED_MESSAGES_WITH_TX = DELETE FROM JMS_MESSAGES WHERE TXOP=? AND JMS_MESSAGES.TXID IN (SELECT TXID FROM JMS_TRANSACTIONS)
- DELETE_TX = DELETE FROM JMS_TRANSACTIONS WHERE TXID = ?
- DELETE_MARKED_MESSAGES = DELETE FROM JMS_MESSAGES WHERE TXID=? AND TXOP=?
- DELETE_MESSAGE = DELETE FROM JMS_MESSAGES WHERE MESSAGEID=? AND DESTINATION=?
- CREATE_MESSAGE_TABLE = CREATE CACHED TABLE JMS_MESSAGES ( MESSAGEID INTEGER NOT NULL, \
- DESTINATION VARCHAR(255) NOT NULL, TXID INTEGER, TXOP CHAR(1), \
- MESSAGEBLOB OBJECT, PRIMARY KEY (MESSAGEID, DESTINATION) )
- CREATE_IDX_MESSAGE_TXOP_TXID = CREATE INDEX JMS_MESSAGES_TXOP_TXID ON JMS_MESSAGES (TXOP, TXID)
- CREATE_IDX_MESSAGE_DESTINATION = CREATE INDEX JMS_MESSAGES_DESTINATION ON JMS_MESSAGES (DESTINATION)
- CREATE_TX_TABLE = CREATE CACHED TABLE JMS_TRANSACTIONS ( TXID INTEGER, PRIMARY KEY (TXID) )
- CREATE_TABLES_ON_STARTUP = TRUE
- DELETE_TEMPORARY_MESSAGES = DELETE FROM JMS_MESSAGES WHERE TXOP='T'
-
- </property>
+ <bean name="jboss.mq:service=PersistenceManager" class="org.jboss.mq.pm.none.PersistenceManager">
</bean>
<bean name="jboss.mq:service=MessageCache" class="org.jboss.mq.kernel.MessageCache">
@@ -96,7 +63,7 @@
</bean>
<bean name="jboss.jca:name='jms-ra.rar',service=RARDeployment" class="org.jboss.ejb3.embedded.resource.RARDeployment">
- <constructor>
+ <constructor>
<parameter class="org.jboss.deployment.DeploymentInfo">
<inject bean="jms-rar-DeploymentInfo"/>
</parameter>
@@ -104,50 +71,10 @@
<property name="workManager"><inject bean="jms-rar-WorkManager"/></property>
</bean>
- <bean name="jboss.mq:service=StateManager" class="org.jboss.mq.kernel.JDBCStateManager">
- <property name="transactionManager">
- <inject bean="TransactionManager"/>
- </property>
- <property name="datasource">
- <inject bean="DefaultDS"/>
- </property>
- <property name="sqlProperties">
-
- CREATE_TABLES_ON_STARTUP = TRUE
- CREATE_USER_TABLE = CREATE TABLE JMS_USERS (USERID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, \
- CLIENTID VARCHAR(128), PRIMARY KEY(USERID))
- CREATE_ROLE_TABLE = CREATE TABLE JMS_ROLES (ROLEID VARCHAR(32) NOT NULL, USERID VARCHAR(32) NOT NULL, \
- PRIMARY KEY(USERID, ROLEID))
- CREATE_SUBSCRIPTION_TABLE = CREATE TABLE JMS_SUBSCRIPTIONS (CLIENTID VARCHAR(128) NOT NULL, \
- SUBNAME VARCHAR(128) NOT NULL, TOPIC VARCHAR(255) NOT NULL, \
- SELECTOR VARCHAR(255), PRIMARY KEY(CLIENTID, SUBNAME))
- GET_SUBSCRIPTION = SELECT TOPIC, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=?
- LOCK_SUBSCRIPTION = SELECT TOPIC, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=?
- GET_SUBSCRIPTIONS_FOR_TOPIC = SELECT CLIENTID, SUBNAME, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE TOPIC=?
- INSERT_SUBSCRIPTION = INSERT INTO JMS_SUBSCRIPTIONS (CLIENTID, SUBNAME, TOPIC, SELECTOR) VALUES(?,?,?,?)
- UPDATE_SUBSCRIPTION = UPDATE JMS_SUBSCRIPTIONS SET TOPIC=?, SELECTOR=? WHERE CLIENTID=? AND SUBNAME=?
- REMOVE_SUBSCRIPTION = DELETE FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=?
- GET_USER_BY_CLIENTID = SELECT USERID, PASSWD, CLIENTID FROM JMS_USERS WHERE CLIENTID=?
- GET_USER = SELECT PASSWD, CLIENTID FROM JMS_USERS WHERE USERID=?
- POPULATE.TABLES.01 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('guest', 'guest')
- POPULATE.TABLES.02 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('j2ee', 'j2ee')
- POPULATE.TABLES.03 = INSERT INTO JMS_USERS (USERID, PASSWD, CLIENTID) VALUES ('john', 'needle', 'DurableSubscriberExample')
- POPULATE.TABLES.04 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('nobody', 'nobody')
- POPULATE.TABLES.05 = INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('dynsub', 'dynsub')
- POPULATE.TABLES.06 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('guest','guest')
- POPULATE.TABLES.07 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('j2ee','guest')
- POPULATE.TABLES.08 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('john','guest')
- POPULATE.TABLES.09 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('subscriber','john')
- POPULATE.TABLES.10 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('publisher','john')
- POPULATE.TABLES.11 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('publisher','dynsub')
- POPULATE.TABLES.12 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('durpublisher','john')
- POPULATE.TABLES.13 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('durpublisher','dynsub')
- POPULATE.TABLES.14 = INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('noacc','nobody')
-
- </property>
+ <bean name="jboss.mq:service=StateManager" class="org.jboss.mq.sm.file.DynamicStateManager">
+ <property name="stateFile">jbossmq-state.xml</property>
</bean>
-
<bean name="BasicQueueParameters" class="org.jboss.mq.server.BasicQueueParameters"/>
<bean name="jboss.mq:service=ThreadPool" class="org.jboss.util.threadpool.BasicThreadPool">
@@ -165,7 +92,7 @@
discardOldest - check to see if a task is about to complete and enque
the new task if possible, else run the task in the calling thread
-->
- <property name="blockingModeString">run</property>
+ <property name="blockingMode">run</property>
</bean>
<bean name="jboss.mq:service=DestinationManager" class="org.jboss.mq.server.JMSDestinationManager">
@@ -194,11 +121,13 @@
</bean>
<bean name="jboss.mq:service=invocationlayer,type=JVM" class="org.jboss.mq.kernel.JVMIL">
- <property name="jmsInvoker"><inject bean="jboss.mq:service=Invoker"/></property>
- <property name="connectionFactoryJNDIRef">java:/ConnectionFactory</property>
- <property name="XAConnectionFactoryJNDIRef">java:/XAConnectionFactory</property>
+ <property name="jmsInvoker"><inject bean="jboss.mq:service=Invoker"/></property>
+ <!-- notice we actually switched - the non-xa connection factory JNDI Ref is the JNDI name our EJBs use -->
+ <!-- the embedded EJB container doesn't support XA, so the connection factory our JmsXA JNDI lookup will return will be a non-XA factory -->
+ <property name="connectionFactoryJNDIRef">java:/JmsXA</property>
+ <property name="XAConnectionFactoryJNDIRef">java:/ConnectionFactory</property>
<property name="pingPeriod">0</property>
<property name="initialContextProperties"><inject bean="InitialContextProperties"/></property>
</bean>
-</deployment>
\ No newline at end of file
+</deployment>
diff --git a/modules/enterprise/server/jar/src/test/resources/jms-ra.rar b/modules/enterprise/server/jar/src/test/resources/jms-ra.rar
new file mode 100644
index 0000000..c4807c6
Binary files /dev/null and b/modules/enterprise/server/jar/src/test/resources/jms-ra.rar differ
diff --git a/modules/enterprise/server/jar/src/test/resources/login-config.xml b/modules/enterprise/server/jar/src/test/resources/login-config.xml
index 81637f9..645294d 100644
--- a/modules/enterprise/server/jar/src/test/resources/login-config.xml
+++ b/modules/enterprise/server/jar/src/test/resources/login-config.xml
@@ -41,6 +41,15 @@ $Revision: 42748 $
</authentication>
</application-policy>
+ <application-policy name = "jbossmq">
+ <authentication>
+ <login-module code = "org.jboss.mq.sm.file.DynamicLoginModule" flag = "required">
+ <module-option name = "unauthenticatedIdentity">guest</module-option>
+ <module-option name = "sm.objectname">jboss.mq:service=StateManager</module-option>
+ </login-module>
+ </authentication>
+ </application-policy>
+
<application-policy name="other">
<!-- A simple server login module, which can be used when the number
of users is relatively small. It uses two properties files:
diff --git a/modules/enterprise/server/jar/src/test/resources/rhq-mdb-beans.xml b/modules/enterprise/server/jar/src/test/resources/rhq-mdb-beans.xml
new file mode 100644
index 0000000..ad05b5e
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/rhq-mdb-beans.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0 bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+
+ <bean name="jboss.mq.destination:service=Queue,name=AlertConditionQueue" class="org.jboss.mq.kernel.Queue">
+ <property name="destinationManagerPojo"><inject bean="jboss.mq:service=DestinationManager"/></property>
+ <property name="initialContextProperties"><inject bean="InitialContextProperties"/></property>
+ <property name="destinationName">AlertConditionQueue</property>
+ </bean>
+
+ <bean name="jboss.mq.destination:service=Queue,name=DriftChangesetQueue" class="org.jboss.mq.kernel.Queue">
+ <property name="destinationManagerPojo"><inject bean="jboss.mq:service=DestinationManager"/></property>
+ <property name="initialContextProperties"><inject bean="InitialContextProperties"/></property>
+ <property name="destinationName">DriftChangesetQueue</property>
+ </bean>
+
+ <bean name="jboss.mq.destination:service=Queue,name=DriftFileQueue" class="org.jboss.mq.kernel.Queue">
+ <property name="destinationManagerPojo"><inject bean="jboss.mq:service=DestinationManager"/></property>
+ <property name="initialContextProperties"><inject bean="InitialContextProperties"/></property>
+ <property name="destinationName">DriftFileQueue</property>
+ </bean>
+
+</deployment>
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/README.txt b/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/README.txt
new file mode 100644
index 0000000..3acca0a
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/README.txt
@@ -0,0 +1 @@
+jbossmq-state.xml is to allow for the JBossMQ JMS service to start in the embedded microcontainer. See AbstractEJB3Test.
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/jbossmq-state.xml b/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/jbossmq-state.xml
new file mode 100644
index 0000000..caa6b9b
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/test-jboss-home-dir/server/default/conf/jbossmq-state.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<StateManager>
+ <Users>
+ <User>
+ <Name>guest</Name>
+ <Password>guest</Password>
+ </User>
+ </Users>
+ <Roles>
+ <Role name="guest">
+ <UserName>guest</UserName>
+ </Role>
+ </Roles>
+ <DurableSubscriptions>
+ </DurableSubscriptions>
+</StateManager>
commit 49532dd9b7a7b54a37080f05042c68b7b3a8b277
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Sep 7 10:44:00 2011 -0400
fix the error log to include the stack. add debug message so we know we got the message
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftChangesetBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftChangesetBean.java
index 38aa0c0..0c9f9fd 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftChangesetBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftChangesetBean.java
@@ -60,6 +60,10 @@ public class DriftChangesetBean implements MessageListener {
@Override
public void onMessage(Message message) {
try {
+ if (log.isDebugEnabled()) {
+ log.debug("Received drift change set message");
+ }
+
ObjectMessage msg = (ObjectMessage) message;
DriftUploadRequest request = (DriftUploadRequest) msg.getObject();
@@ -95,7 +99,7 @@ public class DriftChangesetBean implements MessageListener {
} catch (Throwable t) {
// catch Throwable here, don't let anything escape as bad things can happen wrt XA/2PhaseCommit
- log.error(t);
+ log.error("Error processing drift changeset message", t);
}
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftFileBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftFileBean.java
index b5b9356..6c639e4 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftFileBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftFileBean.java
@@ -59,6 +59,10 @@ public class DriftFileBean implements MessageListener {
@Override
public void onMessage(Message message) {
try {
+ if (log.isDebugEnabled()) {
+ log.debug("Received drift file message");
+ }
+
ObjectMessage msg = (ObjectMessage) message;
DriftUploadRequest request = (DriftUploadRequest) msg.getObject();
@@ -95,7 +99,7 @@ public class DriftFileBean implements MessageListener {
} catch (Throwable t) {
// catch Throwable here, don't let anything escape as bad things can happen wrt XA/2PhaseCommit
- log.error(t);
+ log.error("Error processing drift file message", t);
}
}
12 years, 9 months
[rhq] Branch 'drift' - modules/core
by Jay Shaughnessy
modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml | 4 ++++
1 file changed, 4 insertions(+)
New commits:
commit dcaa5e894b2acfa8281352c0de0990fc4f2b066d
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed Sep 7 11:32:52 2011 -0400
dbupgrade addition for drift config's drift handling mode support
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index 414f5a1..949f5bd 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -3474,6 +3474,8 @@
<schema-alterColumn table="RHQ_DRIFT_CONFIG" column="INTERVAL" nullable="FALSE" />
<schema-addColumn table="RHQ_DRIFT_CONFIG" column="IS_ENABLED" columnType="BOOLEAN" />
<schema-alterColumn table="RHQ_DRIFT_CONFIG" column="IS_ENABLED" nullable="FALSE" />
+ <schema-addColumn table="RHQ_DRIFT_CONFIG" column="MODE" columnType="VARCHAR2" precision="20" />
+ <schema-alterColumn table="RHQ_DRIFT_CONFIG" column="MODE" nullable="FALSE" />
<schema-addColumn table="RHQ_DRIFT_CONFIG" column="CONFIG_ID" columnType="INTEGER" />
<schema-alterColumn table="RHQ_DRIFT_CONFIG" column="CONFIG_ID" nullable="FALSE" />
<schema-directSQL>
@@ -3528,6 +3530,8 @@
REFERENCES RHQ_DRIFT_CONFIG (ID)
</statement>
</schema-directSQL>
+ <schema-addColumn table="RHQ_DRIFT_CHANGE_SET" column="DRIFT_CONFIG_MODE" columnType="VARCHAR2" precision="20" />
+ <schema-alterColumn table="RHQ_DRIFT_CHANGE_SET" column="DRIFT_CONFIG_MODE" nullable="FALSE" />
<!-- RHQ_DRIFT -->
<schema-createSequence name="RHQ_DRIFT_ID_SEQ" initial="10001" />
12 years, 9 months
[rhq] Branch 'drift' - 2 commits - modules/core modules/enterprise
by Jay Shaughnessy
modules/core/client-api/src/main/resources/rhq-plugin.xsd | 2 +-
modules/enterprise/server/ear/pom.xml | 6 ++++++
2 files changed, 7 insertions(+), 1 deletion(-)
New commits:
commit 0b756c37586c4dab03128e084c92b26b09536b78
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed Sep 7 10:51:27 2011 -0400
fix the element name to match our convention.
diff --git a/modules/core/client-api/src/main/resources/rhq-plugin.xsd b/modules/core/client-api/src/main/resources/rhq-plugin.xsd
index 08e2a90..54f3001 100644
--- a/modules/core/client-api/src/main/resources/rhq-plugin.xsd
+++ b/modules/core/client-api/src/main/resources/rhq-plugin.xsd
@@ -592,7 +592,7 @@
</xs:documentation>
</xs:annotation>
</xs:element>
- <xs:element name="driftHandlingMode" minOccurs="0" maxOccurs="1" default="normal">
+ <xs:element name="drift-handling-mode" minOccurs="0" maxOccurs="1" default="normal">
<xs:annotation>
<xs:documentation>
Specifies the way in which drift occurrences will be handled when reported. Normal
commit ae71c6d36eb4464d9cd34f75c2951de340321377
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed Sep 7 10:29:55 2011 -0400
[BZ 736050 - Domain jar being packaged in rhq.ear lib directory]
Caused by the rhq-script-bindings dep. Add an exclusion to ensure the
transitive dep is not pulled into lib.
diff --git a/modules/enterprise/server/ear/pom.xml b/modules/enterprise/server/ear/pom.xml
index 8cdaf8b..783e377 100644
--- a/modules/enterprise/server/ear/pom.xml
+++ b/modules/enterprise/server/ear/pom.xml
@@ -84,6 +84,12 @@
<groupId>org.rhq</groupId>
<artifactId>rhq-script-bindings</artifactId>
<version>${project.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-domain</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
12 years, 9 months