modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/DatasourceJBossASClient.java | 42 +++-
modules/core/domain/pom.xml | 7
modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/ServerInstallUtil.java | 22 +-
modules/enterprise/server/installer/src/test/java/org/rhq/enterprise/server/installer/client/DatasourceJBossASClientTest.java | 3
modules/enterprise/server/itests-2/pom.xml | 32 +--
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBeanTest.java | 88 +++++-----
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java | 7
7 files changed, 128 insertions(+), 73 deletions(-)
New commits:
commit 946dee4b2e8c8ce275f069a3c79efedd3c7aaf74
Author: Jay Shaughnessy <jshaughn(a)jshaughn.csb>
Date: Wed Dec 12 09:12:47 2012 -0500
Oracle testing
- Add no-tx-separate=pools=true for ora XA datasource to avoid connection issues
- remove SetBigStringTryClob conn prop for oracle because we shouldn't need
it with the Ora11 driver and trying to set hits an AS bug
- apply necessary changes to installer as well as test code
- fix issues with aggressive and sometimes non-functioning cleanup code in MeasurementDataManagerBeanTest
- Add oracle driver jar to test deployment to support dbunit
Also
- Add support for recovery-plugin class for postgres to avoid mem leak in 7.1.1.Final.
(note - the actual use of that hook will be in a subsequent commit)
diff --git a/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/DatasourceJBossASClient.java b/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/DatasourceJBossASClient.java
index ab44796..1b5b462 100644
--- a/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/DatasourceJBossASClient.java
+++ b/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/DatasourceJBossASClient.java
@@ -261,9 +261,12 @@ public class DatasourceJBossASClient extends JBossASClient {
* @param idleTimeoutMinutes
* @param minPoolSize
* @param maxPoolSize
+ * @param noRecovery optional, left unset if null
+ * @param noTxSeparatePools optional, left unset if null
* @param preparedStatementCacheSize
+ * @param recoveryPluginClassName optional, left unset if null
* @param securityDomain
- * @param staleConnectionCheckerClassName
+ * @param staleConnectionCheckerClassName optional, left unset if null
* @param transactionIsolation
* @param validConnectionCheckerClassName
* @param xaDatasourceProperties
@@ -271,9 +274,10 @@ public class DatasourceJBossASClient extends JBossASClient {
* @return the request that can be used to create the XA datasource
*/
public ModelNode createNewXADatasourceRequest(String name, int blockingTimeoutWaitMillis, String driverName,
- String exceptionSorterClassName, int idleTimeoutMinutes, int minPoolSize, int maxPoolSize,
- int preparedStatementCacheSize, String securityDomain, String staleConnectionCheckerClassName,
- String transactionIsolation, String validConnectionCheckerClassName, Map<String, String> xaDatasourceProperties) {
+ String exceptionSorterClassName, int idleTimeoutMinutes, int minPoolSize, int maxPoolSize, Boolean noRecovery,
+ Boolean noTxSeparatePools, int preparedStatementCacheSize, String recoveryPluginClassName,
+ String securityDomain, String staleConnectionCheckerClassName, String transactionIsolation,
+ String validConnectionCheckerClassName, Map<String, String> xaDatasourceProperties) {
String jndiName = "java:jboss/datasources/" + name;
@@ -286,8 +290,11 @@ public class DatasourceJBossASClient extends JBossASClient {
+ ", \"jndi-name\" => \"%s\" " //
+ ", \"jta\" => true " //
+ ", \"min-pool-size\" => %d " //
- + ", \"max-pool-size\" => %d " //
+ + ", \"max-pool-size\" => %d " //
+ + ", \"no-recovery\" => %b " //
+ + ", \"no-tx-separate-pools\" => %b " //
+ ", \"prepared-statements-cache-size\" => %dL " //
+ + ", \"recovery-plugin-class-name\" => \"%s\" " //
+ ", \"security-domain\" => \"%s\" " //
+ ", \"stale-connection-checker-class-name\" => \"%s\" " //
+ ", \"transaction-isolation\" => \"%s\" " //
@@ -296,8 +303,11 @@ public class DatasourceJBossASClient extends JBossASClient {
+ "}";
String dmr = String.format(dmrTemplate, blockingTimeoutWaitMillis, driverName, exceptionSorterClassName,
- idleTimeoutMinutes, jndiName, minPoolSize, maxPoolSize, preparedStatementCacheSize, securityDomain,
- staleConnectionCheckerClassName, transactionIsolation, validConnectionCheckerClassName);
+ idleTimeoutMinutes, jndiName, minPoolSize, maxPoolSize, noRecovery, noTxSeparatePools,
+ preparedStatementCacheSize, recoveryPluginClassName, securityDomain, staleConnectionCheckerClassName,
+ transactionIsolation, validConnectionCheckerClassName);
+
+ System.out.println("**** \n" + dmr);
Address addr = Address.root().add(SUBSYSTEM, SUBSYSTEM_DATASOURCES, XA_DATA_SOURCE, name);
final ModelNode request1 = ModelNode.fromString(dmr);
@@ -327,6 +337,22 @@ public class DatasourceJBossASClient extends JBossASClient {
batch[n++] = requestN;
}
- return createBatchRequest(batch);
+ ModelNode result = createBatchRequest(batch);
+
+ // remove unset args
+ if (null == noRecovery) {
+ result.get("steps").get(0).remove("no-recovery");
+ }
+ if (null == noTxSeparatePools) {
+ result.get("steps").get(0).remove("no-tx-separate-pools");
+ }
+ if (null == recoveryPluginClassName) {
+ result.get("steps").get(0).remove("recovery-plugin-class-name");
+ }
+ if (null == staleConnectionCheckerClassName) {
+ result.get("steps").get(0).remove("stale-connection-checker-class-name");
+ }
+
+ return result;
}
}
diff --git a/modules/core/domain/pom.xml b/modules/core/domain/pom.xml
index e874c08..cb7699b 100644
--- a/modules/core/domain/pom.xml
+++ b/modules/core/domain/pom.xml
@@ -381,7 +381,7 @@
</timeout>
<statement>
<prepared-statement-cache-size>75</prepared-statement-cache-size>
- </statement>
+ </statement>
</xa-datasource>]]></replacevalue>
</replacefilter>
@@ -441,6 +441,11 @@
<xa-pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>50</max-pool-size>
+ <!--
+ Oracle does not like XA connections getting used both inside and outside a JTA transaction.
+ To workaround the problem you can create separate sub-pools for the different contexts using <no-tx-separate-pools/>
+ -->
+ <no-tx-separate-pools>true</no-tx-separate-pools>
</xa-pool>
<security>
<security-domain>RHQDSSecurityDomain</security-domain>
diff --git a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/ServerInstallUtil.java b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/ServerInstallUtil.java
index 516dca6..c65001d 100644
--- a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/ServerInstallUtil.java
+++ b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/ServerInstallUtil.java
@@ -511,7 +511,7 @@ public class ServerInstallUtil {
"org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter", 15, false, 2, 5, 75,
RHQ_DS_SECURITY_DOMAIN, "-unused-stale-conn-checker-", "TRANSACTION_READ_COMMITTED",
"org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker", props);
- noTxDsRequest.get("steps").get(0).remove("stale-connection-checker-class-name"); // we don't have one of these for postgres
+ noTxDsRequest.get("steps").get(0).remove("stale-connection-checker-class-name"); // we don't have one of these for postgres
} else {
LOG.info("Postgres datasource [" + RHQ_DATASOURCE_NAME_NOTX + "] already exists");
}
@@ -522,11 +522,18 @@ public class ServerInstallUtil {
props.put("PortNumber", "${rhq.server.database.port:5432}");
props.put("DatabaseName", "${rhq.server.database.db-name:rhq}");
+ /* TODO: Use this version which defines the recovery plugin
xaDsRequest = client.createNewXADatasourceRequest(RHQ_DATASOURCE_NAME_XA, 30000, JDBC_DRIVER_POSTGRES,
- "org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter", 15, 5, 50, 75,
- RHQ_DS_SECURITY_DOMAIN, "-unused-stale-conn-checker-", "TRANSACTION_READ_COMMITTED",
+ "org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter", 15, 5, 50, Boolean.FALSE,
+ (Boolean) null, 75, "org.jboss.jca.core.recovery.ValidatingManagedConnectionFactoryRecoveryPlugin",
+ RHQ_DS_SECURITY_DOMAIN, (String) null, "TRANSACTION_READ_COMMITTED",
+ "org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker", props);
+ */
+ xaDsRequest = client.createNewXADatasourceRequest(RHQ_DATASOURCE_NAME_XA, 30000, JDBC_DRIVER_POSTGRES,
+ "org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter", 15, 5, 50, (Boolean) null,
+ (Boolean) null, 75, (String) null, RHQ_DS_SECURITY_DOMAIN, (String) null, "TRANSACTION_READ_COMMITTED",
"org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker", props);
- xaDsRequest.get("steps").get(0).remove("stale-connection-checker-class-name"); // we don't have one of these for postgres
+
} else {
LOG.info("Postgres XA datasource [" + RHQ_DATASOURCE_NAME_XA + "] already exists");
}
@@ -549,7 +556,6 @@ public class ServerInstallUtil {
if (!client.isDatasource(RHQ_DATASOURCE_NAME_NOTX)) {
props.put("char.encoding", "UTF-8");
- props.put("SetBigStringTryClob", "true");
noTxDsRequest = client.createNewDatasourceRequest(RHQ_DATASOURCE_NAME_NOTX, 30000,
"${rhq.server.database.connection-url:jdbc:oracle:thin:@127.0.0.1:1521:rhq}", JDBC_DRIVER_ORACLE,
@@ -564,11 +570,11 @@ public class ServerInstallUtil {
if (!client.isDatasource(RHQ_DATASOURCE_NAME_XA)) {
props.clear();
props.put("URL", "${rhq.server.database.connection-url:jdbc:oracle:thin:@127.0.0.1:1521:rhq}");
- props.put("ConnectionProperties", "SetBigStringTryClob=true");
xaDsRequest = client.createNewXADatasourceRequest(RHQ_DATASOURCE_NAME_XA, 30000, JDBC_DRIVER_ORACLE,
- "org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter", 15, 5, 50, 75,
- RHQ_DS_SECURITY_DOMAIN, "org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker",
+ "org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter", 15, 5, 50, (Boolean) null,
+ Boolean.TRUE, 75, (String) null, RHQ_DS_SECURITY_DOMAIN,
+ "org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker",
"TRANSACTION_READ_COMMITTED",
"org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker", props);
} else {
diff --git a/modules/enterprise/server/installer/src/test/java/org/rhq/enterprise/server/installer/client/DatasourceJBossASClientTest.java b/modules/enterprise/server/installer/src/test/java/org/rhq/enterprise/server/installer/client/DatasourceJBossASClientTest.java
index f2dd7bc..52a3478 100644
--- a/modules/enterprise/server/installer/src/test/java/org/rhq/enterprise/server/installer/client/DatasourceJBossASClientTest.java
+++ b/modules/enterprise/server/installer/src/test/java/org/rhq/enterprise/server/installer/client/DatasourceJBossASClientTest.java
@@ -106,7 +106,8 @@ public class DatasourceJBossASClientTest {
xaDSProps.put("ConnectionProperties", "SetBigStringTryClob=true");
ModelNode request = client.createNewXADatasourceRequest("RHQDS", 30000, "oracle",
- "org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter", 15, 2, 5, 75, "RHQDSSecurityDomain",
+ "org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter", 15, 2, 5, (Boolean) null,
+ Boolean.TRUE, 75, (String) null, "RHQDSSecurityDomain",
"org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker", "TRANSACTION_READ_COMMITTED",
"org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker", xaDSProps);
diff --git a/modules/enterprise/server/itests-2/pom.xml b/modules/enterprise/server/itests-2/pom.xml
index c0c420e..e1b466f 100644
--- a/modules/enterprise/server/itests-2/pom.xml
+++ b/modules/enterprise/server/itests-2/pom.xml
@@ -23,7 +23,8 @@
<properties>
<jboss.zip>${settings.localRepository}/org/jboss/as/jboss-as-dist/${jboss.version}/jboss-as-dist-${jboss.version}.zip</jboss.zip>
<jboss.unzip.location>${basedir}/target/jboss-as-${jboss.version}</jboss.unzip.location>
- <jboss.vm.args>-Xmx700m -XX:MaxPermSize=200m -Djava.security.manager -Djava.security.policy==${jboss.unzip.location}/security.policy</jboss.vm.args>
+ <jboss.vm.args>-Xmx700m -XX:MaxPermSize=200m -Djava.security.manager
+ -Djava.security.policy==${jboss.unzip.location}/security.policy</jboss.vm.args>
<jboss.vm.args.debug></jboss.vm.args.debug> <!-- -Ditest.debug can override this, see below -->
</properties>
@@ -225,11 +226,9 @@
<echo>JBossAS ${jboss.version} should now be at: ${jboss.unzip.location}</echo>
<echo>Copying security policy to JBossAS</echo>
- <copy file="${project.build.directory}/test-classes/security.policy" tofile="${jboss.unzip.location}/security.policy"/>
-
- <property
- name="jboss.conf"
- location="${jboss.unzip.location}/standalone/configuration/standalone.xml" />
+ <copy file="${project.build.directory}/test-classes/security.policy" tofile="${jboss.unzip.location}/security.policy" />
+
+ <property name="jboss.conf" location="${jboss.unzip.location}/standalone/configuration/standalone.xml" />
<echo>Will now add test configuration to JBossAS config file: ${jboss.conf}</echo>
<replace file="${jboss.conf}">
@@ -520,7 +519,10 @@
</timeout>
<statement>
<prepared-statement-cache-size>75</prepared-statement-cache-size>
- </statement>
+ </statement>
+ <recovery no-recovery="false">
+ <recover-plugin class-name="org.jboss.jca.core.recovery.ValidatingManagedConnectionFactoryRecoveryPlugin"/>
+ </recovery>
</xa-datasource>]]></replacevalue>
</replacefilter>
@@ -580,6 +582,11 @@
<xa-pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>50</max-pool-size>
+ <!--
+ Oracle does not like XA connections getting used both inside and outside a JTA transaction.
+ To workaround the problem you can create separate sub-pools for the different contexts using <no-tx-separate-pools/>
+ -->
+ <no-tx-separate-pools>true</no-tx-separate-pools>
</xa-pool>
<security>
<security-domain>RHQDSSecurityDomain</security-domain>
@@ -631,15 +638,8 @@
<clean.db>${clean.db}</clean.db>
<log4j.configDebug>false</log4j.configDebug>
<project.version>${project.version}</project.version>
-
- <rhq.test.ds.type-mapping>${rhq.test.ds.type-mapping}</rhq.test.ds.type-mapping>
- <rhq.test.ds.server-name>${rhq.test.ds.server-name}</rhq.test.ds.server-name>
- <rhq.test.ds.db-name>${rhq.test.ds.db-name}</rhq.test.ds.db-name>
- <rhq.test.ds.connection-url>${rhq.test.ds.connection-url}</rhq.test.ds.connection-url>
- <rhq.db.admin.username>${rhq.db.admin.username}</rhq.db.admin.username>
- <rhq.db.admin.password>${rhq.db.admin.password}</rhq.db.admin.password>
- <rhq.test.ds.user-name>${rhq.test.ds.user-name}</rhq.test.ds.user-name>
- <rhq.test.ds.password>${rhq.test.ds.password}</rhq.test.ds.password>
+ <rhq.skip.oracle>${skip.oracle}</rhq.skip.oracle>
+ <rhq.ojdbc.version>${ojdbc6.version}</rhq.ojdbc.version>
</systemPropertyVariables>
<additionalClasspathElements>
<!-- The below is required for tests to run against Oracle. -->
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBeanTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBeanTest.java
index 9c2882c..8861378 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBeanTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/measurement/MeasurementDataManagerBeanTest.java
@@ -31,6 +31,8 @@ import static org.rhq.core.domain.measurement.NumericType.DYNAMIC;
import static org.rhq.core.domain.resource.ResourceCategory.SERVER;
import static org.rhq.test.AssertUtils.assertPropertiesMatch;
+import java.math.BigDecimal;
+import java.math.MathContext;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@@ -46,6 +48,7 @@ import org.testng.annotations.Test;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.common.EntityContext;
+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;
@@ -59,8 +62,10 @@ import org.rhq.core.util.jdbc.JDBCUtil;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.drift.DriftServerPluginService;
import org.rhq.enterprise.server.measurement.util.MeasurementDataManagerUtility;
+import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.test.TransactionCallback;
+import org.rhq.enterprise.server.util.ResourceTreeHelper;
import org.rhq.test.AssertUtils;
/**
@@ -108,6 +113,9 @@ public class MeasurementDataManagerBeanTest extends AbstractEJB3Test {
@EJB
private MeasurementDataManagerLocal dataManager;
+ @EJB
+ private ResourceManagerLocal resourceManager;
+
@Override
protected void beforeMethod() throws Exception {
overlord = subjectManager.getOverlord();
@@ -149,15 +157,14 @@ public class MeasurementDataManagerBeanTest extends AbstractEJB3Test {
dataManager.mergeMeasurementReport(report);
List<MeasurementDataNumericHighLowComposite> actualData = findDataForContext(overlord,
- EntityContext.forResource(resource.getId()), dynamicSchedule, beginTime.getMillis(),
- endTime.getMillis());
+ EntityContext.forResource(resource.getId()), dynamicSchedule, beginTime.getMillis(), endTime.getMillis());
assertEquals("Expected to get back 60 data points.", buckets.getNumDataPoints(), actualData.size());
MeasurementDataNumericHighLowComposite expectedBucket0Data = new MeasurementDataNumericHighLowComposite(
- buckets.get(0), (1.1 + 2.2 + 3.3) / 3, 3.3, 1.1);
+ buckets.get(0), divide((1.1 + 2.2 + 3.3), 3), 3.3, 1.1);
MeasurementDataNumericHighLowComposite expectedBucket59Data = new MeasurementDataNumericHighLowComposite(
- buckets.get(59), (4.4 + 5.5 + 6.6) / 3, 6.6, 4.4);
+ buckets.get(59), divide((4.4 + 5.5 + 6.6), 3), 6.6, 4.4);
MeasurementDataNumericHighLowComposite expectedBucket29Data = new MeasurementDataNumericHighLowComposite(
buckets.get(29), Double.NaN, Double.NaN, Double.NaN);
@@ -169,6 +176,11 @@ public class MeasurementDataManagerBeanTest extends AbstractEJB3Test {
actualData.get(29));
}
+ static double divide(double dividend, int divisor) {
+ return new BigDecimal(Double.toString(dividend)).divide(new BigDecimal(Integer.toString(divisor)),
+ MathContext.DECIMAL64).doubleValue();
+ }
+
@Test(enabled = true)
public void getRawAggregate() {
DateTime now = new DateTime();
@@ -191,8 +203,7 @@ public class MeasurementDataManagerBeanTest extends AbstractEJB3Test {
MeasurementAggregate actual = dataManager.getAggregate(overlord, dynamicSchedule.getId(),
beginTime.getMillis(), endTime.getMillis());
- MeasurementAggregate expected = new MeasurementAggregate(1.1, (1.1 + 2.2 + 3.3 + 4.4 + 5.5 + 6.6) / 6,
- 6.6);
+ MeasurementAggregate expected = new MeasurementAggregate(1.1, (1.1 + 2.2 + 3.3 + 4.4 + 5.5 + 6.6) / 6, 6.6);
AssertUtils.assertPropertiesMatch(expected, actual, "Aggregate does not match");
}
@@ -206,19 +217,16 @@ public class MeasurementDataManagerBeanTest extends AbstractEJB3Test {
// results in an interval or bucket size of 4.4 hours
Buckets buckets = new Buckets(beginTime, endTime);
- List<AggregateTestData> data = asList(
- new AggregateTestData(buckets.get(0), dynamicSchedule.getId(), 2.0, 3.0, 1.0),
- new AggregateTestData(buckets.get(0) + Hours.ONE.toStandardDuration().getMillis(),
- dynamicSchedule.getId(), 5.0, 6.0, 4.0),
- new AggregateTestData(buckets.get(0) + Hours.TWO.toStandardDuration().getMillis(),
+ List<AggregateTestData> data = asList(new AggregateTestData(buckets.get(0), dynamicSchedule.getId(), 2.0, 3.0,
+ 1.0),
+ new AggregateTestData(buckets.get(0) + Hours.ONE.toStandardDuration().getMillis(), dynamicSchedule.getId(),
+ 5.0, 6.0, 4.0), new AggregateTestData(buckets.get(0) + Hours.TWO.toStandardDuration().getMillis(),
dynamicSchedule.getId(), 3.0, 3.0, 3.0),
- new AggregateTestData(buckets.get(59), dynamicSchedule.getId(), 5.0, 9.0, 2.0),
- new AggregateTestData(buckets.get(59) + Hours.ONE.toStandardDuration().getMillis(),
- dynamicSchedule.getId(), 5.0, 6.0, 4.0),
+ new AggregateTestData(buckets.get(59), dynamicSchedule.getId(), 5.0, 9.0, 2.0), new AggregateTestData(
+ buckets.get(59) + Hours.ONE.toStandardDuration().getMillis(), dynamicSchedule.getId(), 5.0, 6.0, 4.0),
new AggregateTestData(buckets.get(59) + Hours.TWO.toStandardDuration().getMillis(),
- dynamicSchedule.getId(), 3.0, 3.0, 3.0)
- );
+ dynamicSchedule.getId(), 3.0, 3.0, 3.0));
insert1HourData(data);
@@ -281,11 +289,20 @@ public class MeasurementDataManagerBeanTest extends AbstractEJB3Test {
executeInTransaction(false, new TransactionCallback() {
@Override
public void execute() throws Exception {
+ ResourceCriteria c = new ResourceCriteria();
+ c.addFilterInventoryStatus(null);
+ c.addFilterResourceKey(RESOURCE_KEY);
+ c.fetchSchedules(true);
+ List<Resource> r = resourceManager.findResourcesByCriteria(subjectManager.getOverlord(), c);
// Note that the order of deletes is important due to FK
// constraints.
- deleteMeasurementSchedules();
- deleteResource();
+ if (!r.isEmpty()) {
+ assertTrue("Should be only 1 resource", r.size() == 1);
+ Resource doomedResource = r.get(0);
+ deleteMeasurementSchedules(doomedResource);
+ deleteResource(doomedResource);
+ }
deleteAgent();
deleteDynamicMeasurementDef();
deleteResourceType();
@@ -294,38 +311,31 @@ public class MeasurementDataManagerBeanTest extends AbstractEJB3Test {
}
private void deleteDynamicMeasurementDef() {
- em.createQuery("delete from MeasurementDefinition " +
- "where dataType = :dataType and " +
- "name = :name")
- .setParameter("dataType", MEASUREMENT)
- .setParameter("name", DYNAMIC_DEF_NAME)
- .executeUpdate();
+ em.createQuery("delete from MeasurementDefinition " + "where dataType = :dataType and " + "name = :name")
+ .setParameter("dataType", MEASUREMENT).setParameter("name", DYNAMIC_DEF_NAME).executeUpdate();
}
private void deleteAgent() {
- em.createQuery("delete from Agent where name = :name")
- .setParameter("name", AGENT_NAME)
- .executeUpdate();
+ em.createQuery("delete from Agent where name = :name").setParameter("name", AGENT_NAME).executeUpdate();
}
private void deleteResourceType() {
em.createQuery("delete from ResourceType where name = :name and plugin = :plugin")
- .setParameter("name", RESOURCE_TYPE)
- .setParameter("plugin", PLUGIN)
- .executeUpdate();
+ .setParameter("name", RESOURCE_TYPE).setParameter("plugin", PLUGIN).executeUpdate();
}
- private void deleteResource() {
- em.createQuery("delete from Availability").executeUpdate();
-
- em.createQuery("delete from Resource where resourceKey = :key and uuid = :uuid")
- .setParameter("key", RESOURCE_KEY)
- .setParameter("uuid", RESOURCE_UUID)
- .executeUpdate();
+ private void deleteResource(Resource doomedResource) {
+ ResourceTreeHelper.deleteResource(em, doomedResource);
+ em.flush();
}
- private void deleteMeasurementSchedules() {
- em.createQuery("delete from MeasurementSchedule").executeUpdate();
+ private void deleteMeasurementSchedules(Resource doomedResource) {
+ for (MeasurementSchedule ms : doomedResource.getSchedules()) {
+ int i = em.createQuery("delete from MeasurementSchedule where id = :msId").setParameter("msId", ms.getId())
+ .executeUpdate();
+ em.flush();
+ System.out.println("Deleted [" + i + "] schedules with id [" + ms.getId() + "]");
+ }
}
private void insertDummyReport() {
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
index deceebc..dd46a29 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
@@ -338,6 +338,13 @@ public abstract class AbstractEJB3Test extends Arquillian {
dependencies.addAll(resolver.artifact("org.rhq:test-utils").resolveAs(JavaArchive.class));
dependencies.addAll(resolver.artifact("org.rhq.helpers:perftest-support").resolveAs(JavaArchive.class));
+ // If we're running oracle we need to include the OJDBC driver because dbunit needs it. Note that we need
+ // add it explicitly even though it is a provided module used by the datasource.
+ if (!Boolean.valueOf(System.getProperty("rhq.skip.oracle"))) {
+ dependencies.addAll(resolver.artifact("com.oracle:ojdbc6:jar:" + System.getProperty("rhq.ojdbc.version"))
+ .resolveAs(JavaArchive.class));
+ }
+
// Transitive deps required by the above and for some reason not sucked in. Note that
// these require an explicit version. TODO (jshaughn): Can we make these transitive or
// avoid the explicit version?