.classpath
| 6
modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/CoreJBossASClient.java
| 15
modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/DatasourceJBossASClient.java
| 73
modules/core/domain/src/test/java/org/rhq/core/domain/test/AbstractEJB3Test.java
| 7
modules/enterprise/gui/installer/src/main/java/org/rhq/enterprise/gui/installer/server/servlet/ServerInstallUtil.java
| 26
modules/enterprise/server/appserver/src/main/scripts/rhq-container.build.xml
| 5
modules/enterprise/server/itests/pom.xml
| 51
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionWithComplexNotificationsTest.java
| 12
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/AbstractDriftServerTest.java
| 2
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
| 2
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
| 2
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
| 2
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
| 2
modules/enterprise/server/jar/pom.xml
| 58
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
| 5
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
| 5
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LdapGroupManagerBeanTest.java
| 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
| 16
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java
| 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
| 10
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/scheduler/jobs/DataPurgeJobTest.java
| 14
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
| 751 ++++++----
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/LargeGroupTestBase.java
| 8
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/OldAbstractEJB3Test.java
| 445 +++++
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallback.java
| 7
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallbackReturnable.java
| 7
modules/test-utils/src/main/java/org/rhq/test/JPAUtils.java
| 149 -
27 files changed, 1211 insertions(+), 473 deletions(-)
New commits:
commit 270cb3b5f588dff83b47b4137b120dec23f2aeb3
Merge: 4bca271 b423892
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Oct 24 14:45:04 2012 -0400
Merge branch 'rhq-on-as7' into feature/cassandra-backend
Conflicts:
modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/DatasourceJBossASClient.java
diff --cc .classpath
index e17d7ef,5570123..587f064
--- a/.classpath
+++ b/.classpath
@@@ -323,8 -325,8 +327,10 @@@
<classpathentry exported="true" kind="var"
path="M2_REPO/org/picketbox/picketbox/4.0.7.Final/picketbox-4.0.7.Final.jar"/>
<classpathentry exported="true" kind="var"
path="M2_REPO/jboss/jboss-embeddable-ejb3/jboss-ejb3-all/1.0.0.Alpha9/jboss-ejb3-all-1.0.0.Alpha9.jar"/>
<classpathentry exported="true" kind="var"
path="JDK_HOME/lib/tools.jar"/>
+ <classpathentry kind="var"
path="M2_REPO/org/apache/thrift/libthrift/0.7.0/libthrift-0.7.0.jar"/>
+ <classpathentry kind="var"
path="M2_REPO/org/hectorclient/hector-core/1.1-1/hector-core-1.1-1.jar"/>
<classpathentry kind="var"
path="M2_REPO/org/jboss/remotingjmx/remoting-jmx/1.0.2.Final/remoting-jmx-1.0.2.Final.jar"/>
+ <classpathentry kind="var"
path="M2_REPO/org/mozilla/rhino/1.7R4/rhino-1.7R4.jar"/>
+ <classpathentry kind="var"
path="M2_REPO/org/python/jython-standalone/2.5.2/jython-standalone-2.5.2.jar"/>
<classpathentry kind="output" path="eclipse-classes"/>
</classpath>
diff --cc
modules/enterprise/gui/installer/src/main/java/org/rhq/enterprise/gui/installer/server/servlet/ServerInstallUtil.java
index 33badf9,6d002de..bd9d134
---
a/modules/enterprise/gui/installer/src/main/java/org/rhq/enterprise/gui/installer/server/servlet/ServerInstallUtil.java
+++
b/modules/enterprise/gui/installer/src/main/java/org/rhq/enterprise/gui/installer/server/servlet/ServerInstallUtil.java
@@@ -424,8 -422,6 +424,8 @@@ public class ServerInstallUtil
"org.rhq.postgres",
"org.postgresql.xa.PGXADataSource");
final ModelNode oracleDriverRequest =
client.createNewJdbcDriverRequest(JDBC_DRIVER_ORACLE, "org.rhq.oracle",
"oracle.jdbc.xa.client.OracleXADataSource");
+ final ModelNode cassandraDriverRequest =
client.createNewJdbcDriverRequest(JDBC_DRIVER_CASSANDRA,
- "org.apache-extras.cassandra-jdbc",
"org.apache.cassandra.cql.jdbc.CassandraDataSource", false);
++ "org.apache-extras.cassandra-jdbc", null);
// if we are to use Oracle, we throw an exception if we can't create the
Oracle datasource. We also try to
// create the Postgres datasource but because it isn't needed, we don't
throw exceptions if that fails, we
commit 4bca271847d4d9fd6e0c0185a7b66e3cf9a2dec9
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Oct 24 11:57:50 2012 -0400
First pass at generating jdbc driver and data source configuration
The installer code is updated in this commit to generate the cassandra jdbc
driver and data source configurations that go into standalone-full.xml. Right
now the connection url is hard code to localhost.
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 b1f7a98..8b6667c 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
@@ -137,12 +137,25 @@ public class DatasourceJBossASClient extends JBossASClient {
* @return the request to create the JDBC driver configuration.
*/
public ModelNode createNewJdbcDriverRequest(String name, String moduleName, String
driverXaClassName) {
- String dmrTemplate = "" //
- + "{" //
- + "\"driver-module-name\" => \"%s\" " //
- + ", \"driver-xa-datasource-class-name\" =>
\"%s\" " //
- + "}";
+ return createNewJdbcDriverRequest(name, moduleName, driverXaClassName, true);
+ }
+ public ModelNode createNewJdbcDriverRequest(String name, String moduleName, String
driverXaClassName,
+ boolean isXA) {
+ String dmrTemplate;
+ if (isXA) {
+ dmrTemplate =
+ "{" +
+ "\"driver-module-name\" => \"%s\" " +
+ ", \"driver-xa-datasource-class-name\" =>
\"%s\" " +
+ "}";
+ } else {
+ dmrTemplate =
+ "{" +
+ "\"driver-module-name\" => \"%s\" " +
+ ", \"driver-datasource-class-name\" => \"%s\"
" +
+ "}";
+ }
String dmr = String.format(dmrTemplate, moduleName, driverXaClassName);
Address addr = Address.root().add(SUBSYSTEM, SUBSYSTEM_DATASOURCES, JDBC_DRIVER,
name);
@@ -239,6 +252,53 @@ public class DatasourceJBossASClient extends JBossASClient {
return createBatchRequest(batch);
}
+ public ModelNode createNewDatasourceRequest(String name, String
connectionUrlExpression, String driverName,
+ boolean jta, Map<String, String> connectionProperties) {
+
+ String jndiName = "java:jboss/datasources/" + name;
+
+ String dmrTemplate = "" //
+ + "{" //
+ + "\"connection-url\" => expression \"%s\" "
//
+ + ", \"driver-name\" => \"%s\" " //
+ + ", \"jndi-name\" => \"%s\" " //
+ + ", \"jta\" => %s " //
+ + ", \"use-java-context\" => true " //
+ + "}";
+
+ String dmr = String.format(dmrTemplate, connectionUrlExpression, driverName,
jndiName, jta);
+
+ Address addr = Address.root().add(SUBSYSTEM, SUBSYSTEM_DATASOURCES, DATA_SOURCE,
name);
+ final ModelNode request1 = ModelNode.fromString(dmr);
+ request1.get(OPERATION).set(ADD);
+ request1.get(ADDRESS).set(addr.getAddressNode());
+
+ // if there are no conn properties, no need to create a batch request, there is
only one ADD request to make
+ if (connectionProperties == null || connectionProperties.size() == 0) {
+ return request1;
+ }
+
+ // create a batch of requests - the first is the main one, the rest create each
conn property
+ ModelNode[] batch = new ModelNode[1 + connectionProperties.size()];
+ batch[0] = request1;
+ int n = 1;
+ for (Map.Entry<String, String> entry : connectionProperties.entrySet()) {
+ addr = Address.root().add(SUBSYSTEM, SUBSYSTEM_DATASOURCES, DATA_SOURCE,
name, CONNECTION_PROPERTIES,
+ entry.getKey());
+ final ModelNode requestN = new ModelNode();
+ requestN.get(OPERATION).set(ADD);
+ requestN.get(ADDRESS).set(addr.getAddressNode());
+ if (entry.getValue().indexOf("${") > -1) {
+ requestN.get(VALUE).setExpression(entry.getValue());
+ } else {
+ requestN.get(VALUE).set(entry.getValue());
+ }
+ batch[n++] = requestN;
+ }
+
+ return createBatchRequest(batch);
+ }
+
/**
* Returns a ModelNode that can be used to create an XA datasource.
* Callers are free to tweek the datasource request that is returned,
diff --git
a/modules/enterprise/gui/installer/src/main/java/org/rhq/enterprise/gui/installer/server/servlet/ServerInstallUtil.java
b/modules/enterprise/gui/installer/src/main/java/org/rhq/enterprise/gui/installer/server/servlet/ServerInstallUtil.java
index 6d002de..33badf9 100644
---
a/modules/enterprise/gui/installer/src/main/java/org/rhq/enterprise/gui/installer/server/servlet/ServerInstallUtil.java
+++
b/modules/enterprise/gui/installer/src/main/java/org/rhq/enterprise/gui/installer/server/servlet/ServerInstallUtil.java
@@ -147,10 +147,12 @@ public class ServerInstallUtil {
private static final String RHQ_DATASOURCE_NAME_NOTX = "NoTxRHQDS";
private static final String RHQ_DATASOURCE_NAME_XA = "RHQDS";
+ private static final String CASSANDRA_DATASOURCE_NAME = "CassandraDS";
private static final String RHQ_DS_SECURITY_DOMAIN =
"RHQDSSecurityDomain";
private static final String RHQ_REST_SECURITY_DOMAIN =
"RHQRESTSecurityDomain";
private static final String JDBC_DRIVER_POSTGRES = "postgres";
private static final String JDBC_DRIVER_ORACLE = "oracle";
+ private static final String JDBC_DRIVER_CASSANDRA = "cassandra";
private static final String JMS_ALERT_CONDITION_QUEUE =
"AlertConditionQueue";
private static final String JMS_DRIFT_CHANGESET_QUEUE =
"DriftChangesetQueue";
private static final String JMS_DRIFT_FILE_QUEUE = "DriftFileQueue";
@@ -422,6 +424,8 @@ public class ServerInstallUtil {
"org.rhq.postgres", "org.postgresql.xa.PGXADataSource");
final ModelNode oracleDriverRequest =
client.createNewJdbcDriverRequest(JDBC_DRIVER_ORACLE, "org.rhq.oracle",
"oracle.jdbc.xa.client.OracleXADataSource");
+ final ModelNode cassandraDriverRequest =
client.createNewJdbcDriverRequest(JDBC_DRIVER_CASSANDRA,
+ "org.apache-extras.cassandra-jdbc",
"org.apache.cassandra.cql.jdbc.CassandraDataSource", false);
// if we are to use Oracle, we throw an exception if we can't create the
Oracle datasource. We also try to
// create the Postgres datasource but because it isn't needed, we don't
throw exceptions if that fails, we
@@ -483,6 +487,12 @@ public class ServerInstallUtil {
throw new RuntimeException("bad db type"); // this should never
happen; should have never gotten to this point with a bad type
}
+ ModelNode cassandraResults = client.execute(cassandraDriverRequest);
+ if (!DatasourceJBossASClient.isSuccess(cassandraResults)) {
+ throw new FailureException(cassandraResults, "Failed to create Cassandra
database driver");
+ } else {
+ LOG.info("Deployed Cassandra JDBC driver");
+ }
}
/**
@@ -508,6 +518,7 @@ public class ServerInstallUtil {
default:
throw new RuntimeException("bad db type"); // this should never
happen; should have never gotten to this point with a bad type
}
+ createNewDatasources_Cassandra(mcc);
LOG.info("Created datasources");
@@ -562,6 +573,21 @@ public class ServerInstallUtil {
}
}
+ private static void createNewDatasources_Cassandra(ModelControllerClient mcc) throws
Exception {
+ DatasourceJBossASClient client = new DatasourceJBossASClient(mcc);
+ String connectionURL =
"jdbc:cassandra://localhost:9160/system?version=3.0.0";
+ ModelNode dsRequest =
client.createNewDatasourceRequest(CASSANDRA_DATASOURCE_NAME, connectionURL,
+ JDBC_DRIVER_CASSANDRA, false, new HashMap<String, String>());
+
+ ModelNode batch = DatasourceJBossASClient.createBatchRequest(dsRequest);
+ ModelNode results = client.execute(batch);
+ if (!DatasourceJBossASClient.isSuccess(results)) {
+ throw new FailureException(results, "Failed to create Cassandra data
source");
+ } else {
+ LOG.info("Created Cassandra data source");
+ }
+ }
+
private static void createNewDatasources_Oracle(ModelControllerClient mcc) throws
Exception {
final HashMap<String, String> props = new HashMap<String,
String>(2);
final DatasourceJBossASClient client = new DatasourceJBossASClient(mcc);
diff --git a/modules/enterprise/server/appserver/src/main/scripts/rhq-container.build.xml
b/modules/enterprise/server/appserver/src/main/scripts/rhq-container.build.xml
index 43e84e5..1da4a9a 100644
--- a/modules/enterprise/server/appserver/src/main/scripts/rhq-container.build.xml
+++ b/modules/enterprise/server/appserver/src/main/scripts/rhq-container.build.xml
@@ -201,14 +201,13 @@
toDir="${jboss.modules.dir}/org/apache-extras/cassandra-jdbc/main"
failonerror="false" verbose="true"/>
<copy
file="${settings.localRepository}/com/google/code/findbugs/jsr305/${cassandra.jdbc.jsr305.version}/jsr305-${cassandra.jdbc.jsr305.version}.jar"
toDir="${jboss.modules.dir}/org/apache-extras/cassandra-jdbc/main"
failonerror="false" verbose="true"/>
- <echo
file="${jboss.modules.dir}/org/apache-extras/cassandra-jdbc/main/module.xml">
- <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+ <echo
file="${jboss.modules.dir}/org/apache-extras/cassandra-jdbc/main/module.xml"><![CDATA[<?xml
version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1"
name="org.apache-extras.cassandra-jdbc">
<resources>
<resource-root path="cassandra-jdbc-${cassandra.jdbc.version}.jar"/>
<resource-root
path="cassandra-clientutil-${cassandra.version}.jar"/>
<resource-root path="cassandra-thrift-${cassandra.version}.jar"/>
- <resource-root path="libthrift-${cassandra.thrift}.jar"/>
+ <resource-root path="libthrift-${cassandra.thrift.version}.jar"/>
<resource-root path="jsr305-${cassandra.jdbc.jsr305.version}.jar"/>
<resource-root path="guava-${cassandra.jdbc.guava.version}.jar"/>
</resources>
commit b423892e0a62f0945f2d2d82a3b1f0e9d41c45a0
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Oct 24 11:13:21 2012 -0400
support adding a JDBC driver that does not support XA
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 b1f7a98..ab44796 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
@@ -132,18 +132,28 @@ public class DatasourceJBossASClient extends JBossASClient {
* @param name the name of the JDBC driver (this is not the name of the JDBC jar or
the module name, it is
* just a convienence name of the JDBC driver configuration).
* @param moduleName the name of the JBossAS module where the JDBC driver is
installed
- * @param driverXaClassName the JDBC driver's XA datasource classname
+ * @param driverXaClassName the JDBC driver's XA datasource classname (null if XA
is not supported)
*
* @return the request to create the JDBC driver configuration.
*/
public ModelNode createNewJdbcDriverRequest(String name, String moduleName, String
driverXaClassName) {
- String dmrTemplate = "" //
- + "{" //
- + "\"driver-module-name\" => \"%s\" " //
- + ", \"driver-xa-datasource-class-name\" =>
\"%s\" " //
- + "}";
-
- String dmr = String.format(dmrTemplate, moduleName, driverXaClassName);
+ String dmrTemplate;
+ String dmr;
+
+ if (driverXaClassName != null) {
+ dmrTemplate = "" //
+ + "{" //
+ + "\"driver-module-name\" => \"%s\" "
//
+ + ", \"driver-xa-datasource-class-name\" =>
\"%s\" " //
+ + "}";
+ dmr = String.format(dmrTemplate, moduleName, driverXaClassName);
+ } else {
+ dmrTemplate = "" //
+ + "{" //
+ + "\"driver-module-name\" => \"%s\" "
//
+ + "}";
+ dmr = String.format(dmrTemplate, moduleName);
+ }
Address addr = Address.root().add(SUBSYSTEM, SUBSYSTEM_DATASOURCES, JDBC_DRIVER,
name);
final ModelNode request = ModelNode.fromString(dmr);
commit 42d055452d1c9784053c1853daab063cd94ae484
Author: Jay Shaughnessy <jshaughn(a)jshaughn.csb>
Date: Mon Oct 22 14:09:17 2012 -0400
Just get things to build after removal of embeddable ejb3 and
new AbstractEJB3Test based on Arquillian. Not close to running,
lots of band-aids and placeholders...
diff --git
a/modules/core/domain/src/test/java/org/rhq/core/domain/test/AbstractEJB3Test.java
b/modules/core/domain/src/test/java/org/rhq/core/domain/test/AbstractEJB3Test.java
index 711630b..a83b0ef 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/test/AbstractEJB3Test.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/test/AbstractEJB3Test.java
@@ -16,6 +16,7 @@ import javax.persistence.PersistenceContext;
import javax.transaction.TransactionManager;
import org.testng.AssertJUnit;
+import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.jboss.arquillian.container.test.api.Deployment;
@@ -228,7 +229,7 @@ public abstract class AbstractEJB3Test extends Arquillian {
*
* Instead, override {@link #afterMethod()}.
*/
- @BeforeMethod
+ @AfterMethod(alwaysRun = true)
protected void __afterMethod() throws Exception {
// currently no special handling necessary
afterMethod();
@@ -373,11 +374,11 @@ public abstract class AbstractEJB3Test extends Arquillian {
}
protected void assertEquals(String msg, int expected, int actual) {
- AssertJUnit.assertEquals(expected, actual);
+ AssertJUnit.assertEquals(msg, expected, actual);
}
protected void assertEquals(String msg, String expected, String actual) {
- AssertJUnit.assertEquals(expected, actual);
+ AssertJUnit.assertEquals(msg, expected, actual);
}
protected void fail(String message) {
diff --git a/modules/enterprise/server/itests/pom.xml
b/modules/enterprise/server/itests/pom.xml
index d17fa7d..68425c80b 100644
--- a/modules/enterprise/server/itests/pom.xml
+++ b/modules/enterprise/server/itests/pom.xml
@@ -33,6 +33,57 @@
need the embeddable-ejb3 jar above the standard ejb3 jars because we need the
embeddble packages
loaded when testing. -->
+ <dependency>
+ <groupId>org.jboss.spec</groupId>
+ <artifactId>jboss-javaee-6.0</artifactId>
+ <version>${jboss.javaee6.spec.version}</version>
+ <scope>provided</scope>
+ <type>pom</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.as</groupId>
+ <artifactId>jboss-as-arquillian-container-managed</artifactId>
+ <version>${jboss.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.arquillian.testng</groupId>
+ <artifactId>arquillian-testng-container</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap</groupId>
+ <artifactId>shrinkwrap-impl-base</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-api-maven</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.arquillian.protocol</groupId>
+ <artifactId>arquillian-protocol-servlet</artifactId>
+ <scope>test</scope>
+ </dependency>
+
<dependency>
<groupId>org.rhq</groupId>
<artifactId>test-utils</artifactId>
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionWithComplexNotificationsTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionWithComplexNotificationsTest.java
index d89855e..9ab2cf9 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionWithComplexNotificationsTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionWithComplexNotificationsTest.java
@@ -27,7 +27,6 @@ import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
-import javax.transaction.TransactionManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -67,11 +66,9 @@ import org.rhq.enterprise.server.TestServerPluginService;
import org.rhq.enterprise.server.auth.SessionManager;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.test.TestServerCommunicationsService;
+import org.rhq.enterprise.server.test.TransactionCallback;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.enterprise.server.util.ResourceTreeHelper;
-import org.rhq.test.JPAUtils;
-import org.rhq.test.TransactionCallback;
-import org.rhq.test.TransactionCallbackWithContext;
/**
*
@@ -569,9 +566,9 @@ public class AlertDefinitionWithComplexNotificationsTest extends
AbstractEJB3Tes
private void removeNoExceptions(final Object o) {
try {
- JPAUtils.executeInTransaction(new
TransactionCallbackWithContext<Void>() {
- @Override
- public Void execute(TransactionManager tm, EntityManager em) {
+ executeInTransaction(new TransactionCallback() {
+ public void execute() {
+ EntityManager em = getEntityManager();
Object o2 = em.merge(o);
if (o2 instanceof Resource) {
@@ -579,7 +576,6 @@ public class AlertDefinitionWithComplexNotificationsTest extends
AbstractEJB3Tes
} else {
em.remove(o2);
}
- return null;
}
});
} catch (Exception e) {
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/AbstractDriftServerTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/AbstractDriftServerTest.java
index bc8cf51..4f43c5d 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/AbstractDriftServerTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/AbstractDriftServerTest.java
@@ -48,7 +48,7 @@ import org.rhq.enterprise.server.plugin.ServerPluginsLocal;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.test.TestServerCommunicationsService;
import org.rhq.enterprise.server.util.ResourceTreeHelper;
-import org.rhq.test.TransactionCallback;
+import org.rhq.enterprise.server.test.TransactionCallback;
@Test(groups = "drift", sequential = true)
public abstract class AbstractDriftServerTest extends AbstractEJB3Test {
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
index 81601f3..bbd93b1 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
@@ -63,7 +63,7 @@ import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility;
import org.rhq.test.AssertUtils;
-import org.rhq.test.TransactionCallback;
+import org.rhq.enterprise.server.test.TransactionCallback;
public class DriftTemplateManagerBeanTest extends AbstractDriftServerTest {
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
index e117707..dee42d9 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
@@ -53,7 +53,7 @@ import org.rhq.core.domain.drift.dto.DriftDTO;
import org.rhq.core.domain.drift.dto.DriftFileDTO;
import org.rhq.core.domain.util.PageList;
import org.rhq.test.AssertUtils;
-import org.rhq.test.TransactionCallback;
+import org.rhq.enterprise.server.test.TransactionCallback;
@Test(dependsOnGroups = "pinning")
public class JPADriftServerBeanTest extends AbstractDriftServerTest {
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
index 11b4a68..564264a 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
@@ -29,7 +29,7 @@ import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility;
import org.rhq.test.AssertUtils;
-import org.rhq.test.TransactionCallback;
+import org.rhq.enterprise.server.test.TransactionCallback;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
index bb132fe..a214621 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
@@ -55,7 +55,7 @@ import org.rhq.core.domain.drift.JPADriftSet;
import org.rhq.core.domain.server.EntitySerializer;
import org.rhq.core.domain.util.PageList;
import org.rhq.test.AssertUtils;
-import org.rhq.test.TransactionCallback;
+import org.rhq.enterprise.server.test.TransactionCallback;
@Test(dependsOnGroups = "pinning")
public class ManageSnapshotsTest extends AbstractDriftServerTest {
diff --git a/modules/enterprise/server/jar/pom.xml
b/modules/enterprise/server/jar/pom.xml
index ad383e2..0eaa6d9 100644
--- a/modules/enterprise/server/jar/pom.xml
+++ b/modules/enterprise/server/jar/pom.xml
@@ -107,9 +107,60 @@
<!--================ Test Deps ================-->
<!-- Note, the test deps are intentionally placed above the other scoped deps
because of classpath
- reasons. Maven orders the [test] classpath in the order listed in the pom.
We specifically
- need the embeddable-ejb3 jar above the standard ejb3 jars because we need the
embeddble packages
- loaded when testing. -->
+ reasons. Maven orders the [test] classpath in the order listed in the pom.
-->
+
+ <dependency>
+ <groupId>org.jboss.spec</groupId>
+ <artifactId>jboss-javaee-6.0</artifactId>
+ <version>${jboss.javaee6.spec.version}</version>
+ <scope>provided</scope>
+ <type>pom</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.as</groupId>
+ <artifactId>jboss-as-arquillian-container-managed</artifactId>
+ <version>${jboss.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.arquillian.testng</groupId>
+ <artifactId>arquillian-testng-container</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap</groupId>
+ <artifactId>shrinkwrap-impl-base</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-api-maven</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.arquillian.protocol</groupId>
+ <artifactId>arquillian-protocol-servlet</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+
<dependency>
<groupId>org.jboss.as</groupId>
@@ -165,7 +216,6 @@
</dependency>
<!-- NOTE: The remaining test deps correspond to the classes contained in
hibernate-all.jar and thirdparty-all.jar. -->
-
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
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 5116a90..97694e3 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
@@ -66,6 +66,7 @@ import
org.rhq.enterprise.server.measurement.MeasurementDataManagerLocal;
import org.rhq.enterprise.server.resource.metadata.test.UpdatePluginMetadataTestBase;
import org.rhq.enterprise.server.scheduler.SchedulerLocal;
import org.rhq.enterprise.server.scheduler.jobs.AlertAvailabilityDurationJob;
+import org.rhq.enterprise.server.test.TransactionCallbackReturnable;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.test.JPAUtils;
import org.rhq.test.TransactionCallbackWithContext;
@@ -428,9 +429,9 @@ public class AlertConditionTest extends UpdatePluginMetadataTestBase
{
}
private AlertCondition getAlertConditionWithLogs(final int conditionId) {
- return JPAUtils.executeInTransaction(new
TransactionCallbackWithContext<AlertCondition>() {
+ return executeInTransaction(new
TransactionCallbackReturnable<AlertCondition>() {
@Override
- public AlertCondition execute(TransactionManager tm, EntityManager em) throws
Exception {
+ public AlertCondition execute() throws Exception {
AlertCondition cond = em.find(AlertCondition.class, conditionId);
cond.getConditionLogs().size(); // force the load
return cond;
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
index 5992ea1..a4446c1 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
@@ -31,7 +31,6 @@ import javax.management.ObjectName;
import javax.persistence.Query;
import org.testng.annotations.AfterGroups;
-import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -165,8 +164,8 @@ public class CoreServerServiceImplTest extends AbstractEJB3Test {
server.setId(serverId);
}
- @AfterMethod
- public void unprepare() throws Exception {
+ @Override
+ public void afterMethod() throws Exception {
// cleanup our test server
LookupUtil.getCloudManager().updateServerMode(new Integer[] { server.getId() },
OperationMode.DOWN);
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LdapGroupManagerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LdapGroupManagerBeanTest.java
index 78d23e8..aaa0808 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LdapGroupManagerBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LdapGroupManagerBeanTest.java
@@ -38,9 +38,9 @@ import org.rhq.enterprise.server.resource.group.LdapGroupManagerLocal;
import org.rhq.enterprise.server.system.SystemManagerLocal;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.test.TestServerPluginService;
+import org.rhq.enterprise.server.test.TransactionCallback;
import org.rhq.enterprise.server.test.ldap.FakeLdapCtxFactory;
import org.rhq.enterprise.server.util.LookupUtil;
-import org.rhq.test.TransactionCallback;
/**
* Integration tests for methods and operations performed by {@link
LdapGroupManagerBean}.
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
index 3748612..755f910 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
@@ -53,10 +53,6 @@ public class MetadataBeanTest extends AbstractEJB3Test {
private List<Integer> pluginIds = new ArrayList<Integer>();
- @Override
- protected boolean isDBResetNeeded() {
- return false;
- }
@BeforeGroups(groups = { "plugin.metadata" }, dependsOnGroups = {
"integration.ejb3" })
public void beforeGroups() throws Exception {
@@ -79,7 +75,11 @@ public class MetadataBeanTest extends AbstractEJB3Test {
}
@BeforeMethod(groups = { "plugin.metadata" }, dependsOnGroups = {
"integration.ejb3" })
- public void beforeMethod() throws Exception {
+ public void before() throws Exception {
+ if (!inContainer()) {
+ return;
+ }
+
TestBundleServerPluginService bundleService = new
TestBundleServerPluginService();
prepareCustomServerPluginService(bundleService);
bundleService.startMasterPluginContainerWithoutSchedulingJobs();
@@ -93,7 +93,11 @@ public class MetadataBeanTest extends AbstractEJB3Test {
* however removes the generated plugin files during each test run.
*/
@AfterMethod(alwaysRun = true, groups = { "plugin.metadata" })
- void afterMethod() throws Exception {
+ void after() throws Exception {
+ if (!inContainer()) {
+ return;
+ }
+
unprepareServerPluginService();
unprepareScheduler();
unpreparePluginScannerService();
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java
index 336e23b..0e142e9 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java
@@ -512,7 +512,7 @@ public class ResourceMetadataManagerBeanTest extends MetadataBeanTest
{
// quickly as it is basically just updates the the inventory status to
UNINVENTORIED for the
// resources to be deleted.
for (Resource resource : resources) {
- assertEquals("The resource should have been marked for deletion",
+ assertTrue("The resource should have been marked for deletion",
InventoryStatus.UNINVENTORIED == resource.getInventoryStatus());
}
}
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
index a564aca..ef785fc 100644
---
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
@@ -28,7 +28,6 @@ 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;
@@ -61,9 +60,8 @@ 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.test.TransactionCallbackReturnable;
import org.rhq.enterprise.server.util.LookupUtil;
-import org.rhq.test.JPAUtils;
-import org.rhq.test.TransactionCallbackWithContext;
public class UpdatePluginMetadataTestBase extends AbstractEJB3Test {
@@ -425,9 +423,9 @@ public class UpdatePluginMetadataTestBase extends AbstractEJB3Test {
}
protected Resource persistNewResource(final String resourceTypeName) throws Exception
{
- return JPAUtils.executeInTransaction(new
TransactionCallbackWithContext<Resource>() {
- @Override
- public Resource execute(TransactionManager tm, EntityManager em) throws
Exception {
+ return executeInTransaction(new TransactionCallbackReturnable<Resource>()
{
+
+ public Resource execute() throws Exception {
ResourceType resourceType = getResourceType(resourceTypeName);
Resource resource = new Resource("reskey" +
System.currentTimeMillis(), "resname", resourceType);
resource.setUuid(UUID.randomUUID().toString());
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/scheduler/jobs/DataPurgeJobTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/scheduler/jobs/DataPurgeJobTest.java
index c710706..31d2a87 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/scheduler/jobs/DataPurgeJobTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/scheduler/jobs/DataPurgeJobTest.java
@@ -36,8 +36,6 @@ import javax.transaction.SystemException;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.rhq.core.domain.alert.Alert;
@@ -97,8 +95,8 @@ public class DataPurgeJobTest extends AbstractEJB3Test {
private int resourceTypeId;
private TestServerPluginService testServerPluginService;
- @BeforeMethod
- public void beforeMethod() throws Throwable {
+ @Override
+ public void beforeMethod() throws Exception {
try {
//we need this because the drift plugins are referenced from the system
settings that we use in our tests
testServerPluginService = new TestServerPluginService();
@@ -111,12 +109,12 @@ public class DataPurgeJobTest extends AbstractEJB3Test {
} catch (Throwable t) {
System.err.println("Cannot prepare test: " + t);
t.printStackTrace();
- throw t;
+ throw new RuntimeException(t);
}
}
- @AfterMethod(alwaysRun = true)
- public void afterMethod() throws Throwable {
+ @Override
+ public void afterMethod() throws Exception {
try {
deleteNewResource(newResource);
unprepareForTestAgents();
@@ -125,7 +123,7 @@ public class DataPurgeJobTest extends AbstractEJB3Test {
} catch (Throwable t) {
System.err.println("Cannot unprepare test: " + t);
t.printStackTrace();
- throw t;
+ throw new RuntimeException(t);
}
}
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 11d01a2..4ae4692 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
@@ -1,321 +1,482 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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.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;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
import java.util.Properties;
+import java.util.regex.Pattern;
import javax.management.MBeanServer;
-import javax.management.MBeanServerFactory;
+import javax.naming.Context;
import javax.naming.InitialContext;
-import javax.naming.NamingException;
import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceContext;
import javax.transaction.TransactionManager;
-import org.hibernate.SessionFactory;
-import org.hibernate.stat.Statistics;
import org.testng.AssertJUnit;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.AfterSuite;
-import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
-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.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.arquillian.testng.Arquillian;
+import org.jboss.shrinkwrap.api.ArchivePaths;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.resolver.api.DependencyResolvers;
+import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver;
-import org.rhq.core.db.DatabaseTypeFactory;
-import org.rhq.core.db.PostgresqlDatabaseType;
import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.server.PersistenceUtility;
-import org.rhq.enterprise.server.RHQConstants;
+import org.rhq.core.util.MessageDigestGenerator;
+import org.rhq.core.util.exception.ThrowableUtil;
+import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.server.auth.SessionManager;
-import org.rhq.enterprise.server.content.ContentSourceManagerBean;
-import org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceMBean;
import org.rhq.enterprise.server.core.plugin.PluginDeploymentScanner;
import org.rhq.enterprise.server.core.plugin.PluginDeploymentScannerMBean;
import org.rhq.enterprise.server.plugin.pc.ServerPluginService;
-import org.rhq.enterprise.server.plugin.pc.ServerPluginServiceMBean;
import org.rhq.enterprise.server.scheduler.SchedulerService;
-import org.rhq.enterprise.server.scheduler.SchedulerServiceMBean;
import org.rhq.enterprise.server.util.LookupUtil;
-import org.rhq.test.JPAUtils;
-import org.rhq.test.TransactionCallback;
-
-/**
- * This is the abstract test base for server jar tests.
- *
- * @author Greg Hinkle
- */
-public abstract class AbstractEJB3Test extends AssertJUnit {
-
- private static EJB3StandaloneDeployer deployer;
- private static Statistics stats;
- @SuppressWarnings("unused")
- private static long start; // see endTest() if you want to output this
- private SchedulerService schedulerService;
- private ServerPluginService serverPluginService;
- private MBeanServer dummyJBossMBeanServer;
- private PluginDeploymentScannerMBean pluginScannerService;
+import org.rhq.test.AssertUtils;
+import org.rhq.test.MatchResult;
+import org.rhq.test.PropertyMatchException;
+import org.rhq.test.PropertyMatcher;
- @BeforeClass
- public void resetDB() throws Exception {
- if (isDBResetNeeded()) {
- clearDB();
- }
- }
+public abstract class AbstractEJB3Test extends Arquillian {
- protected boolean isDBResetNeeded() {
- return true;
- }
+ protected static final String JNDI_RHQDS = "java:jboss/datasources/RHQDS";
- //@BeforeSuite(groups = {"integration.ejb3","PERF"}) // TODO
investigate again
- @BeforeSuite(alwaysRun = true)
- public static void startupEmbeddedJboss() throws Exception {
- // The embeddedDeployment property needs to be set for running tests
- // with the embedded container. It is set in the surefire configuration
- // in pom.xml but setting here makes it easier to run tests directly
- // from your IDE.
- //
- // jsanda
- System.setProperty("embeddedDeployment", "true");
+ private SchedulerService schedulerService;
+ private ServerPluginService serverPluginService;
+ //private MBeanServer dummyJBossMBeanServer;
+ private PluginDeploymentScannerMBean pluginScannerService;
- // Setting content location to the tmp dir
- System.setProperty(ContentSourceManagerBean.FILESYSTEM_PROPERTY,
System.getProperty("java.io.tmpdir"));
+ @PersistenceContext
+ protected EntityManager em;
- System.out.println("Starting JBoss EJB3 Embedded Container...");
- String deployDir = System.getProperty("deploymentDirectory",
"target/classes");
- System.out.println("Loading EJB3 deployments from directory: " +
deployDir);
- try {
- EJB3StandaloneBootstrap.boot(null);
- // EJB3StandaloneBootstrap.scanClasspath();
+ @ArquillianResource
+ protected InitialContext initialContext;
- System.err.println("...... embedded container booted....");
+ // We originally deployed the domain jar as a JavaArchive (JAR file). But this ran
into problems because
+ // of the dependent 3rd party jars. There isn't an obvious way to deploy the
dependent jars of a jar.
+ // Also, AS7 makes it hard to put them in a globally accessibly /lib directory due
to
+ // its classloader isolation and module approach. So, we now deploy an
EnterpriseArchive (ear)
+ // where the domain jar is deployed as a module and the 3rd party libraries are put
in the ear's /lib.
- deployer = EJB3StandaloneBootstrap.createDeployer();
+ @Deployment
+ protected static EnterpriseArchive getBaseDeployment() {
- deployer.setClassLoader(AbstractEJB3Test.class.getClassLoader());
- System.err.println("...... embedded container classloader
set....");
+ // depending on the db in use, set up the necessary datasource
+ String dialect = System.getProperty("hibernate.dialect");
+ if (dialect == null) {
+ System.out.println("!!! hibernate.dialect is not set! Assuming you want
to test on postgres");
+ dialect = "postgres";
+ }
- deployer.getArchivesByResource().add("META-INF/persistence.xml");
- System.err.println("...... embedded container persistence xml
deployed....");
+ String dataSourceXml;
+ if (dialect.toLowerCase().contains("postgres")) {
+ dataSourceXml = "jbossas-postgres-ds.xml";
+ } else {
+ dataSourceXml = "jbossas-oracle-ds.xml";
+ }
- deployer.getArchivesByResource().add("META-INF/ejb-jar.xml");
- System.err.println("...... embedded container ejb-jar xml
deployed....");
+ // Create the domain jar which will subsequently be packaged in the ear
deployment
+ JavaArchive ejbJar = ShrinkWrap.create(JavaArchive.class,
"rhq-core-domain-ejb3.jar") //
+ .addAsManifestResource(dataSourceXml) // the datasource
+ .addAsManifestResource("ejb-jar.xml") // the empty ejb jar
descriptor
+ .addAsManifestResource("test-persistence.xml",
"persistence.xml") // the test persistence context
+ .addAsManifestResource(EmptyAsset.INSTANCE,
ArchivePaths.create("beans.xml") // add CDI injection (needed by arquillian
injection)
+ );
+
+ // non-domain RHQ classes in use by domain test classes
+ ejbJar.addClass(ThrowableUtil.class) //
+ .addClass(MessageDigestGenerator.class) //
+ .addClass(StreamUtil.class) //
+ .addClass(AssertUtils.class) //
+ .addClasses(PropertyMatcher.class, MatchResult.class,
PropertyMatchException.class);
+
+ // domain classes
+ ejbJar = addClasses(ejbJar, new File("target/classes/org"), null);
+
+ JavaArchive testClassesJar = ShrinkWrap.create(JavaArchive.class,
"test-classes.jar");
+ testClassesJar = addClasses(testClassesJar, new
File("target/test-classes/org"), null);
+
+ // create test ear
+ EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class,
"test-domain.ear") //
+ .addAsModule(ejbJar) // the domain jar under test
+ .addAsLibrary(testClassesJar) // the actual test classes
+ .setApplicationXML("application.xml"); // the application xml
declaring the ejb jar
+
+ // Adding the 3rd party jars is not easy. There were basically two approaches I
could think of:
+ //
+ // 1) Use the MavenDependencyResolver to figure out and add all of the test deps
and put them in lib
+ //
+ // This immediately ran into trouble as there were way more jars sucked in than
were actually necessary.
+ // Furthermore, it included arquillian, shrinkwrap, jboss, etc.. lots of jars
that actually caused
+ // issues like locking and other horrible things due, I suppose, to just stepping
all over the test env
+ // set up by Arquillian. So, the next step was to try and start excluding the
unwanted jars. This was
+ // tedious and difficult and I didn't really get it close to working before
giving up and going with
+ // option 2.
+ //
+ // 2) Use the MavenDependencyResolver to locate and pull just the artifacts we
need.
+ //
+ // This is annoying because it's basically duplicating the same sort of
effort that we already
+ // use maven to do for us. It involves running, failing on NoClassDefFound,
fixing it, repeat. It
+ // does pull in necessary transitive deps but sometimes it pulls in unwanted
transitive deps. So,
+ // we still end up having to do some exclusion filtering. Since Shrinkwrap has
weak and buggy
+ // filtering, we have some homegrown filtering methods below.
+ // TODO: Is there any way to not have to specify the versions for the transitive
deps? This is brittle as is.
+
+ //load 3rd party deps explicitly
+ MavenDependencyResolver resolver =
DependencyResolvers.use(MavenDependencyResolver.class);
+ resolver.loadMetadataFromPom("pom.xml");
+ Collection<JavaArchive> dependencies = new HashSet<JavaArchive>();
+ dependencies
+
.addAll(resolver.artifact("commons-beanutils:commons-beanutils:1.8.2").resolveAs(JavaArchive.class));
+
dependencies.addAll(resolver.artifact("commons-codec:commons-codec").resolveAs(JavaArchive.class));
+
dependencies.addAll(resolver.artifact("commons-io:commons-io").resolveAs(JavaArchive.class));
+
dependencies.addAll(resolver.artifact("org.unitils:unitils-testng:3.1").resolveAs(JavaArchive.class));
+
+ String[] excludeFilters = { "testng.*jdk" };
+
+ dependencies = exclude(dependencies, excludeFilters);
+ ear = ear.addAsLibraries(dependencies);
+
+ System.out.println("** The Deployment EAR: " + ear.toString(true) +
"\n");
+
+ return ear;
+ }
- EJB3StandaloneBootstrap.deployXmlResource("jboss-jms-beans.xml");
- System.err.println("...... embedded container jboss-jms-beans xml
deployed....");
+ /**
+ * @param dependencies The current set of deps - THIS IS FILTERED, not copied
+ * @param filters regex filters
+ * @return the filtered set of deps
+ */
+ public static Collection<JavaArchive> exclude(Collection<JavaArchive>
dependencies, String... filters) {
- EJB3StandaloneBootstrap.deployXmlResource("rhq-mdb-beans.xml");
- System.err.println("...... embedded container rhq-mdb-beans xml
deployed....");
+ for (String filter : filters) {
+ Pattern p = Pattern.compile(filter);
- /*
- * 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());
- *
- * File server = new File(deployDir,
"on-enterprise-server-ejb.ejb3"); if (!server.exists())
- * System.err.println("Deployment directory does not exist: " +
server.getAbsolutePath());
- * deployer.getArchives().add(server.toURI().toURL());
- *
- */
+ for (Iterator<JavaArchive> i = dependencies.iterator(); i.hasNext();)
{
+ JavaArchive dependency = i.next();
+ if (p.matcher(dependency.getName()).find()) {
+ i.remove();
+ }
+ }
+ }
- //deployer.setKernel(EJB3StandaloneBootstrap.getKernel());
- deployer.create();
- System.err.println("...... deployer created....");
+ return dependencies;
+ }
- deployer.start();
- System.err.println("...... deployer started....");
+ /**
+ * @param dependencies The current set of deps - this is not changed
+ * @param filters regex filters
+ * @return set set of JavaArchives in dependencies that matched an include filter
+ */
+ public static Collection<JavaArchive> include(Collection<JavaArchive>
dependencies, String... filters) {
- System.err.println("...... start statistics");
- SessionFactory sessionFactory =
PersistenceUtility.getHibernateSession(getEntityManager())
- .getSessionFactory();
- stats = sessionFactory.getStatistics();
- stats.setStatisticsEnabled(true);
+ Collection<JavaArchive> result = new HashSet<JavaArchive>();
- System.err.println("...... embedded container initialized and ready for
testing....");
+ for (String filter : filters) {
+ Pattern p = Pattern.compile(filter);
- } 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);
+ for (Iterator<JavaArchive> i = dependencies.iterator(); i.hasNext();)
{
+ JavaArchive dependency = i.next();
+ if (p.matcher(dependency.getName()).find()) {
+ result.add(dependency);
+ }
+ }
}
- }
- //@Configuration(groups = "integration.ejb3", afterSuite = true)
- @AfterSuite(alwaysRun = true)
- public static void shutdownEmbeddedJboss() {
- System.out.println("Stopping JBoss EJB3 Embedded Container...");
+ return result;
+ }
- System.err.println("!!! Any errors occurring after this point
!!!");
- System.err.println("!!! occurred during embedded server shutdown
!!!");
- System.err.println("!!! and are 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);
+ public static JavaArchive addClasses(JavaArchive archive, File dir, String
packageName) {
+
+ packageName = (null == packageName) ? "" + dir.getName() : packageName
+ "." + dir.getName();
+
+ for (File file : dir.listFiles()) {
+ String fileName = file.getName();
+ if (file.isDirectory()) {
+ archive = addClasses(archive, file, packageName);
+ } else if (fileName.endsWith(".class")) {
+ int dot = fileName.indexOf('.');
+ try {
+ Class<?> clazz = Class.forName(packageName + "." +
fileName.substring(0, dot));
+ archive.addClasses(clazz);
+ } catch (Exception e) {
+ System.out.println("WARN: Could not add class:" + e);
+ }
}
}
- EJB3StandaloneBootstrap.shutdown();
+
+ return archive;
}
+ /**
+ * <p>DO NOT OVERRIDE.</p>
+ * <p>DO NOT DEFINE AN @BeforeMethod</p>
+ *
+ * Instead, override {@link #beforeMethod()}. If you must override, for example, if
you
+ * need to use special attributes on your annotation, then ensure you protect the
code with
+ * and {@link #inContainer()} call.
+ */
@BeforeMethod
- public static void startTest() {
- if (DatabaseTypeFactory.getDefaultDatabaseType() == null) {
- try {
- Connection conn = getConnection();
-
DatabaseTypeFactory.setDefaultDatabaseType(DatabaseTypeFactory.getDatabaseType(conn));
- } catch (Exception e) {
- System.err.println("!!! WARNING !!! cannot set default database
type, some tests may fail");
- e.printStackTrace();
- }
+ protected void __beforeMethod() throws Exception {
+ // Note that Arquillian calls the testng BeforeMethod twice (as of 1.0.2.Final,
once
+ // out of container and once in container. In general the expectation is to
execute it
+ // one time, and doing it in container allows for the expected injections and
context.
+ if (inContainer()) {
+ beforeMethod();
}
-
- if (stats != null)
- start = stats.getQueryExecutionCount();
- else
- start = 0;
}
- public static Connection getConnection() throws SQLException {
- return LookupUtil.getDataSource().getConnection();
+ /**
+ * <p>DO NOT OVERRIDE.</p>
+ * <p>DO NOT DEFINE AN @AfterMethod</p>
+ *
+ * Instead, override {@link #afterMethod()}.
+ */
+ @BeforeMethod
+ protected void __afterMethod() throws Exception {
+ // currently no special handling necessary
+ afterMethod();
}
- @AfterMethod
- public static void endTest() {
- //System.out.println("Connections used: " +
(stats.getQueryExecutionCount() - start));
+ protected boolean inContainer() {
+ // If the injection is done we're running in the container.
+ return (null != initialContext);
}
- public TransactionManager getTransactionManager() {
- return lookupTransactionManager();
+ /**
+ * Override Point! Do not implement a @BeforeMethod, instead override this method.
+ */
+ protected void beforeMethod() throws Exception {
+ // do nothing if we're not overridden
}
- public static EntityManager getEntityManager() {
- return lookupEntityManager();
+ /**
+ * Override Point! Do not implement an @AfterMethod, instead override this method.
+ */
+ protected void afterMethod() throws Exception {
+ // do nothing if we're not overridden
}
- public static InitialContext getInitialContext() {
- Hashtable<String, String> env = new Hashtable<String, String>();
- env.put("java.naming.factory.initial",
"org.jnp.interfaces.LocalOnlyContextFactory");
- env.put("java.naming.factory.url.pkgs",
"org.jboss.naming:org.jnp.interfaces");
- try {
- return new InitialContext(env);
- } catch (NamingException e) {
- e.printStackTrace();
- throw new RuntimeException("Failed to load initial context", e);
- }
+ protected void startTransaction() throws Exception {
+ getTransactionManager().begin();
}
- public boolean isPostgres() throws Exception {
- return DatabaseTypeFactory.getDatabaseType(getInitialContext(),
RHQConstants.DATASOURCE_JNDI_NAME) instanceof PostgresqlDatabaseType;
+ protected void commitTransaction() throws Exception {
+ getTransactionManager().commit();
}
- /**
- * This creates a session for the given user and associates that session with the
subject. You can test the security
- * annotations by creating sessions for different users with different permissions.
- *
- * @param subject a JON subject
- * @return the session activated subject, a copy of the subject passed in.
- */
- public Subject createSession(Subject subject) {
- return SessionManager.getInstance().put(subject);
+ protected void rollbackTransaction() throws Exception {
+ getTransactionManager().rollback();
}
- /**
- * Returns an MBeanServer that simulates the JBossAS MBeanServer.
- *
- * @return MBeanServer instance
- */
- public MBeanServer getJBossMBeanServer() {
- if (dummyJBossMBeanServer == null) {
- dummyJBossMBeanServer =
MBeanServerFactory.createMBeanServer("jboss");
- MBeanServerLocator.setJBoss(dummyJBossMBeanServer);
+ protected InitialContext getInitialContext() {
+ // may be null if not yet injected (as of 1.0.1.Final, only injected inside
@Test)
+ if (null != initialContext) {
+ return initialContext;
}
- return dummyJBossMBeanServer;
- }
+ InitialContext result = null;
- public void releaseJBossMBeanServer() {
- if (dummyJBossMBeanServer != null) {
- MBeanServerFactory.releaseMBeanServer(dummyJBossMBeanServer);
- dummyJBossMBeanServer = null;
+ try {
+ Properties jndiProperties = new Properties();
+ jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jboss.as.naming.InitialContextFactory");
+ result = new InitialContext(jndiProperties);
+
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to get InitialContext", e);
}
+
+ return result;
}
- /**
- * If you need to test round trips from server to agent and back, you first must
install the server communications
- * service that houses all the agent clients. Call this method and add your test
agent services to the public fields
- * in the returned object.
- *
- * @return the object that will house your test agent service impls and the agent
clients.
- *
- * @throws RuntimeException
- */
- public TestServerCommunicationsService prepareForTestAgents() {
+ public TransactionManager getTransactionManager() {
+ TransactionManager result = null;
+
try {
- MBeanServer mbs = getJBossMBeanServer();
- if (mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME)) {
- mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ result = (TransactionManager)
getInitialContext().lookup("java:jboss/TransactionManager");
+ if (null == result) {
+ result = (TransactionManager)
getInitialContext().lookup("TransactionManager");
}
- TestServerCommunicationsService testAgentContainer = new
TestServerCommunicationsService();
- mbs.registerMBean(testAgentContainer,
ServerCommunicationsServiceMBean.OBJECT_NAME);
- return testAgentContainer;
+
} catch (Exception e) {
- throw new RuntimeException(e);
+ throw new RuntimeException("Failed to get TransactionManager", e);
+ }
+
+ return result;
+ }
+
+ protected EntityManager getEntityManager() {
+ // may be null if not yet injected (as of 1.0.1.Final, only injected inside
@Test)
+ if (null != em) {
+ return em;
+ }
+
+ EntityManager result = null;
+
+ try {
+ EntityManagerFactory emf = (EntityManagerFactory)
getInitialContext().lookup(
+ "java:jboss/RHQEntityManagerFactory");
+ result = emf.createEntityManager();
+
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to get EntityManagerFactory",
e);
}
+
+ return result;
}
/**
- * Call this after your tests have finished. You only need to call this if your test
previously called
- * {@link #prepareForTestAgents()}.
+ * Equivalent to <pre>executeInTransaction(true, callback)</pre>.
+ * @param callback
*/
- public void unprepareForTestAgents() {
- unprepareForTestAgents(false);
+ protected void executeInTransaction(TransactionCallback callback) {
+ executeInTransaction(true, callback);
}
- public void unprepareForTestAgents(boolean beanOnly) {
+ protected void executeInTransaction(boolean rollback, final TransactionCallback
callback) {
+ executeInTransaction(rollback, new TransactionCallbackReturnable<Void>() {
+
+ public Void execute() throws Exception {
+ callback.execute();
+ return null;
+ }});
+ }
+
+ protected <T> T executeInTransaction(TransactionCallbackReturnable<T>
callback) {
+ return executeInTransaction(true, callback);
+ }
+
+ protected <T> T executeInTransaction(boolean rollback,
TransactionCallbackReturnable<T> callback) {
try {
- if (beanOnly) {
- MBeanServer mbs = getJBossMBeanServer();
- if (mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME)) {
- mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ startTransaction();
+ T result = callback.execute();
+ return result;
+
+ } catch (Throwable t) {
+ rollback = true;
+ RuntimeException re = new RuntimeException(ThrowableUtil.getAllMessages(t),
t);
+ throw re;
+
+ } finally {
+ try {
+ if (!rollback) {
+ commitTransaction();
+ } else {
+ rollbackTransaction();
}
- } else {
- releaseJBossMBeanServer();
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to " + (rollback ?
"rollback" : "commit") + " transaction", e);
}
- } catch (Exception e) {
- throw new RuntimeException(e);
}
}
+
+ /* The old AbstractEJB3Test impl extended AssertJUnit. Continue to support the used
methods
+ * with various call-thru methods.
+ */
+
+ protected void assertNotNull(Object o) {
+ AssertJUnit.assertNotNull(o);
+ }
+
+ protected void assertNotNull(String msg, Object o) {
+ AssertJUnit.assertNotNull(msg, o);
+ }
+
+ protected void assertNull(Object o) {
+ AssertJUnit.assertNull(o);
+ }
+
+ protected void assertNull(String msg, Object o) {
+ AssertJUnit.assertNull(msg, o);
+ }
+
+ protected void assertFalse(boolean b) {
+ AssertJUnit.assertFalse(b);
+ }
+
+ protected void assertFalse(String msg, boolean b) {
+ AssertJUnit.assertFalse(msg, b);
+ }
+
+ protected void assertTrue(boolean b) {
+ AssertJUnit.assertTrue(b);
+ }
+
+ protected void assertTrue(String msg, boolean b) {
+ AssertJUnit.assertTrue(msg, b);
+ }
+
+ protected void assertEquals(int expected, int actual) {
+ AssertJUnit.assertEquals(expected, actual);
+ }
+
+ protected void assertEquals(String msg, int expected, int actual) {
+ AssertJUnit.assertEquals(msg, expected, actual);
+ }
+
+ protected void assertEquals(long expected, long actual) {
+ AssertJUnit.assertEquals(expected, actual);
+ }
+
+ protected void assertEquals(String msg, long expected, long actual) {
+ AssertJUnit.assertEquals(msg, expected, actual);
+ }
+
+ protected void assertEquals(String expected, String actual) {
+ AssertJUnit.assertEquals(expected, actual);
+ }
+
+ protected void assertEquals(String msg, String expected, String actual) {
+ AssertJUnit.assertEquals(msg, expected, actual);
+ }
+
+ protected void assertEquals(boolean expected, boolean actual) {
+ AssertJUnit.assertEquals(expected, actual);
+ }
+
+ protected void assertEquals(String msg, boolean expected, boolean actual) {
+ AssertJUnit.assertEquals(msg, expected, actual);
+ }
+
+ protected void assertEquals(Object expected, Object actual) {
+ AssertJUnit.assertEquals(expected, actual);
+ }
+
+ protected void assertEquals(String msg, Object expected, Object actual) {
+ AssertJUnit.assertEquals(msg, expected, actual);
+ }
+
+ protected void fail() {
+ AssertJUnit.fail();
+ }
+
+ protected void fail(String message) {
+ AssertJUnit.fail(message);
+ }
+
+ private final long DEFAULT_OFFSET = 50;
+ private long referenceTime = new Date().getTime();
+
+ public Date getAnotherDate() {
+ return getAnotherDate(DEFAULT_OFFSET);
+ }
+
+ public Date getAnotherDate(long offset) {
+ referenceTime += offset;
+ return new Date(referenceTime);
+ }
+
/**
* 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
@@ -327,10 +488,11 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
*/
public void prepareCustomServerPluginService(ServerPluginService testServiceMBean) {
try {
- MBeanServer mbs = getJBossMBeanServer();
- testServiceMBean.start();
- mbs.registerMBean(testServiceMBean, ServerPluginServiceMBean.OBJECT_NAME);
- serverPluginService = testServiceMBean;
+ // TODO: Fix
+ // MBeanServer mbs = getJBossMBeanServer();
+ // testServiceMBean.start();
+ // mbs.registerMBean(testServiceMBean,
ServerPluginServiceMBean.OBJECT_NAME);
+ // serverPluginService = testServiceMBean;
return;
} catch (Exception e) {
throw new RuntimeException(e);
@@ -346,16 +508,16 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
serverPluginService.stopMasterPluginContainer();
serverPluginService.stop();
if (beanOnly) {
- MBeanServer mbs = getJBossMBeanServer();
- if (mbs.isRegistered(ServerPluginService.OBJECT_NAME)) {
-
getJBossMBeanServer().unregisterMBean(ServerPluginService.OBJECT_NAME);
- }
- if (mbs.isRegistered(ServerPluginServiceMBean.OBJECT_NAME)) {
-
getJBossMBeanServer().unregisterMBean(ServerPluginServiceMBean.OBJECT_NAME);
- }
+ // TODO: Fix
+ // if (mbs.isRegistered(ServerPluginService.OBJECT_NAME))
{
+ //
getJBossMBeanServer().unregisterMBean(ServerPluginService.OBJECT_NAME);
+ // }
+ // if
(mbs.isRegistered(ServerPluginServiceMBean.OBJECT_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(ServerPluginServiceMBean.OBJECT_NAME);
+ // }
} else {
- releaseJBossMBeanServer();
+ // releaseJBossMBeanServer();
}
serverPluginService = null;
}
@@ -377,7 +539,7 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
schedulerService = new SchedulerService();
schedulerService.setQuartzProperties(quartzProps);
schedulerService.start();
- getJBossMBeanServer().registerMBean(schedulerService,
SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
+ // getJBossMBeanServer().registerMBean(schedulerService,
SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
schedulerService.startQuartzScheduler();
return;
} catch (Exception e) {
@@ -394,12 +556,12 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
if (schedulerService != null) {
schedulerService.stop();
if (beanOnly) {
- MBeanServer mbs = getJBossMBeanServer();
- if (mbs.isRegistered(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME)) {
-
getJBossMBeanServer().unregisterMBean(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
- }
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if
(mbs.isRegistered(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
+ // }
} else {
- releaseJBossMBeanServer();
+ // releaseJBossMBeanServer();
}
schedulerService = null;
@@ -419,9 +581,9 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
if (scannerService == null) {
scannerService = new PluginDeploymentScanner();
}
- MBeanServer mbs = getJBossMBeanServer();
- mbs.registerMBean(scannerService, PluginDeploymentScannerMBean.OBJECT_NAME);
- pluginScannerService = scannerService;
+ // MBeanServer mbs = getJBossMBeanServer();
+ // mbs.registerMBean(scannerService,
PluginDeploymentScannerMBean.OBJECT_NAME);
+ // pluginScannerService = scannerService;
return;
} catch (Exception e) {
e.printStackTrace();
@@ -437,19 +599,86 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
if (pluginScannerService != null) {
pluginScannerService.stop();
if (beanOnly) {
- MBeanServer mbs = getJBossMBeanServer();
- if (mbs.isRegistered(PluginDeploymentScannerMBean.OBJECT_NAME)) {
-
getJBossMBeanServer().unregisterMBean(PluginDeploymentScannerMBean.OBJECT_NAME);
- }
- } else {
- releaseJBossMBeanServer();
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if
(mbs.isRegistered(PluginDeploymentScannerMBean.OBJECT_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(PluginDeploymentScannerMBean.OBJECT_NAME);
}
+ } else {
+ // releaseJBossMBeanServer();
+ }
- pluginScannerService = null;
+ pluginScannerService = null;
+ }
+
+ /**
+ * If you need to test round trips from server to agent and back, you first must
install the server communications
+ * service that houses all the agent clients. Call this method and add your test
agent services to the public fields
+ * in the returned object.
+ *
+ * @return the object that will house your test agent service impls and the agent
clients.
+ *
+ * @throws RuntimeException
+ */
+ public TestServerCommunicationsService prepareForTestAgents() {
+ try {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if
(mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME)) {
+ //
mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ // }
+ TestServerCommunicationsService testAgentContainer = new
TestServerCommunicationsService();
+ // mbs.registerMBean(testAgentContainer,
ServerCommunicationsServiceMBean.OBJECT_NAME);
+ return testAgentContainer;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
}
- protected void executeInTransaction(TransactionCallback callback) {
- JPAUtils.executeInTransaction(callback);
+ /**
+ * Call this after your tests have finished. You only need to call this if your test
previously called
+ * {@link #prepareForTestAgents()}.
+ */
+ public void unprepareForTestAgents() {
+ unprepareForTestAgents(false);
+ }
+
+ public void unprepareForTestAgents(boolean beanOnly) {
+ try {
+ if (beanOnly) {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if
(mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME)) {
+ //
mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ // }
+ } else {
+ // releaseJBossMBeanServer();
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * This creates a session for the given user and associates that session with the
subject. You can test the security
+ * annotations by creating sessions for different users with different permissions.
+ *
+ * @param subject a JON subject
+ * @return the session activated subject, a copy of the subject passed in.
+ */
+ public Subject createSession(Subject subject) {
+ return SessionManager.getInstance().put(subject);
+ }
+
+ public static Connection getConnection() throws SQLException {
+ return LookupUtil.getDataSource().getConnection();
}
+
+ public MBeanServer getJBossMBeanServer() {
+// if (dummyJBossMBeanServer == null) {
+// dummyJBossMBeanServer =
MBeanServerFactory.createMBeanServer("jboss");
+// MBeanServerLocator.setJBoss(dummyJBossMBeanServer);
+// }
+//
+// return dummyJBossMBeanServer;
+ return null;
+ }
+
}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/LargeGroupTestBase.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/LargeGroupTestBase.java
index 1bf07d7..cb7d301 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/LargeGroupTestBase.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/LargeGroupTestBase.java
@@ -325,8 +325,8 @@ public abstract class LargeGroupTestBase extends AbstractEJB3Test {
System.out.println(" Done.");
// purge the users and role
- JPAUtils.executeInTransaction(new TransactionCallbackWithContext<Object>()
{
- public Object execute(TransactionManager tm, EntityManager em) throws
Exception {
+ executeInTransaction(new TransactionCallbackReturnable<Object>() {
+ public Object execute() throws Exception {
lge.normalRole = em.getReference(Role.class, lge.normalRole.getId());
lge.normalSubject = em.getReference(Subject.class,
lge.normalSubject.getId());
lge.unauthzSubject = em.getReference(Subject.class,
lge.unauthzSubject.getId());
@@ -339,8 +339,8 @@ public abstract class LargeGroupTestBase extends AbstractEJB3Test {
if (!keepTypes) {
// purge the resource types
- JPAUtils.executeInTransaction(new
TransactionCallbackWithContext<Object>() {
- public Object execute(TransactionManager tm, EntityManager em) throws
Exception {
+ executeInTransaction(new TransactionCallbackReturnable<Object>() {
+ public Object execute() throws Exception {
ResourceType pType = em.getReference(ResourceType.class,
lge.platformResource.getResourceType()
.getId());
ResourceType sType = em.getReference(ResourceType.class,
lge.compatibleGroup.getResourceType()
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/OldAbstractEJB3Test.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/OldAbstractEJB3Test.java
new file mode 100644
index 0000000..a8337b7
--- /dev/null
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/OldAbstractEJB3Test.java
@@ -0,0 +1,445 @@
+///*
+// * RHQ Management Platform
+// * Copyright (C) 2005-2008 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.test;
+
+import org.testng.AssertJUnit;
+
+
+//import static org.rhq.test.JPAUtils.lookupEntityManager;
+//import static org.rhq.test.JPAUtils.lookupTransactionManager;
+//
+//import java.sql.Connection;
+//import java.sql.SQLException;
+//import java.util.Hashtable;
+//import java.util.Properties;
+//
+//import javax.management.MBeanServer;
+//import javax.management.MBeanServerFactory;
+//import javax.naming.InitialContext;
+//import javax.naming.NamingException;
+//import javax.persistence.EntityManager;
+//import javax.transaction.TransactionManager;
+//
+//import org.hibernate.SessionFactory;
+//import org.hibernate.stat.Statistics;
+//import org.testng.AssertJUnit;
+//import org.testng.annotations.AfterMethod;
+//import org.testng.annotations.AfterSuite;
+//import org.testng.annotations.BeforeMethod;
+//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.rhq.core.db.DatabaseTypeFactory;
+//import org.rhq.core.db.PostgresqlDatabaseType;
+//import org.rhq.core.domain.auth.Subject;
+//import org.rhq.core.domain.server.PersistenceUtility;
+//import org.rhq.enterprise.server.RHQConstants;
+//import org.rhq.enterprise.server.auth.SessionManager;
+//import org.rhq.enterprise.server.content.ContentSourceManagerBean;
+//import org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceMBean;
+//import org.rhq.enterprise.server.core.plugin.PluginDeploymentScanner;
+//import org.rhq.enterprise.server.core.plugin.PluginDeploymentScannerMBean;
+//import org.rhq.enterprise.server.plugin.pc.ServerPluginService;
+//import org.rhq.enterprise.server.plugin.pc.ServerPluginServiceMBean;
+//import org.rhq.enterprise.server.scheduler.SchedulerService;
+//import org.rhq.enterprise.server.scheduler.SchedulerServiceMBean;
+//import org.rhq.enterprise.server.util.LookupUtil;
+//
+////
+/////**
+//// * This is the abstract test base for server jar tests.
+//// *
+//// * @author Greg Hinkle
+//// */
+public abstract class OldAbstractEJB3Test extends AssertJUnit {
+ //
+ // private static EJB3StandaloneDeployer deployer;
+ // private static Statistics stats;
+ // @SuppressWarnings("unused")
+ // private static long start; // see endTest() if you want to output this
+ // private SchedulerService schedulerService;
+ // private ServerPluginService serverPluginService;
+ // private MBeanServer dummyJBossMBeanServer;
+ // private PluginDeploymentScannerMBean pluginScannerService;
+ //
+ //
+ // //@BeforeSuite(groups = {"integration.ejb3","PERF"}) //
TODO investigate again
+ // @BeforeSuite(alwaysRun = true)
+ // public static void startupEmbeddedJboss() throws Exception {
+ // // The embeddedDeployment property needs to be set for running tests
+ // // with the embedded container. It is set in the surefire configuration
+ // // in pom.xml but setting here makes it easier to run tests directly
+ // // from your IDE.
+ // //
+ // // jsanda
+ // System.setProperty("embeddedDeployment", "true");
+ //
+ // // Setting content location to the tmp dir
+ // System.setProperty(ContentSourceManagerBean.FILESYSTEM_PROPERTY,
System.getProperty("java.io.tmpdir"));
+ //
+ // System.out.println("Starting JBoss EJB3 Embedded Container...");
+ // String deployDir = System.getProperty("deploymentDirectory",
"target/classes");
+ // System.out.println("Loading EJB3 deployments from directory: " +
deployDir);
+ // try {
+ // EJB3StandaloneBootstrap.boot(null);
+ // // EJB3StandaloneBootstrap.scanClasspath();
+ //
+ // System.err.println("...... embedded container booted....");
+ //
+ // deployer = EJB3StandaloneBootstrap.createDeployer();
+ //
+ // deployer.setClassLoader(AbstractEJB3Test.class.getClassLoader());
+ // System.err.println("...... embedded container classloader
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())
+ // * System.err.println("Deployment directory does not exist: "
+ core.getAbsolutePath());
+ // * deployer.getArchives().add(core.toURI().toURL());
+ // *
+ // * File server = new File(deployDir,
"on-enterprise-server-ejb.ejb3"); if (!server.exists())
+ // * System.err.println("Deployment directory does not exist: "
+ server.getAbsolutePath());
+ // * deployer.getArchives().add(server.toURI().toURL());
+ // *
+ // */
+ //
+ // //deployer.setKernel(EJB3StandaloneBootstrap.getKernel());
+ // deployer.create();
+ // System.err.println("...... deployer created....");
+ //
+ // deployer.start();
+ // System.err.println("...... deployer started....");
+ //
+ // System.err.println("...... start statistics");
+ // SessionFactory sessionFactory =
PersistenceUtility.getHibernateSession(getEntityManager())
+ // .getSessionFactory();
+ // 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)!
+ // t.printStackTrace();
+ // throw new RuntimeException(t);
+ // }
+ // }
+ //
+ // //@Configuration(groups = "integration.ejb3", afterSuite = true)
+ // @AfterSuite(alwaysRun = true)
+ // public static void shutdownEmbeddedJboss() {
+ // System.out.println("Stopping JBoss EJB3 Embedded Container...");
+ //
+ // System.err.println("!!! Any errors occurring after this point
!!!");
+ // System.err.println("!!! occurred during embedded server shutdown
!!!");
+ // System.err.println("!!! and are 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();
+ // }
+ //
+ // @BeforeMethod
+ // public static void startTest() {
+ // if (DatabaseTypeFactory.getDefaultDatabaseType() == null) {
+ // try {
+ // Connection conn = getConnection();
+ //
DatabaseTypeFactory.setDefaultDatabaseType(DatabaseTypeFactory.getDatabaseType(conn));
+ // } catch (Exception e) {
+ // System.err.println("!!! WARNING !!! cannot set default
database type, some tests may fail");
+ // e.printStackTrace();
+ // }
+ // }
+ //
+ // if (stats != null)
+ // start = stats.getQueryExecutionCount();
+ // else
+ // start = 0;
+ // }
+ //
+ // public static Connection getConnection() throws SQLException {
+ // return LookupUtil.getDataSource().getConnection();
+ // }
+ //
+ // @AfterMethod
+ // public static void endTest() {
+ // //System.out.println("Connections used: " +
(stats.getQueryExecutionCount() - start));
+ // }
+ //
+ // public TransactionManager getTransactionManager() {
+ // return lookupTransactionManager();
+ // }
+ //
+ // public static EntityManager getEntityManager() {
+ // return lookupEntityManager();
+ // }
+ //
+ // public static InitialContext getInitialContext() {
+ // Hashtable<String, String> env = new Hashtable<String,
String>();
+ // env.put("java.naming.factory.initial",
"org.jnp.interfaces.LocalOnlyContextFactory");
+ // env.put("java.naming.factory.url.pkgs",
"org.jboss.naming:org.jnp.interfaces");
+ // try {
+ // return new InitialContext(env);
+ // } catch (NamingException e) {
+ // e.printStackTrace();
+ // throw new RuntimeException("Failed to load initial context",
e);
+ // }
+ // }
+ //
+ // public boolean isPostgres() throws Exception {
+ // return DatabaseTypeFactory.getDatabaseType(getInitialContext(),
RHQConstants.DATASOURCE_JNDI_NAME) instanceof PostgresqlDatabaseType;
+ // }
+ //
+ // /**
+ // * This creates a session for the given user and associates that session with
the subject. You can test the security
+ // * annotations by creating sessions for different users with different
permissions.
+ // *
+ // * @param subject a JON subject
+ // * @return the session activated subject, a copy of the subject passed in.
+ // */
+ // public Subject createSession(Subject subject) {
+ // return SessionManager.getInstance().put(subject);
+ // }
+ //
+ // /**
+ // * Returns an MBeanServer that simulates the JBossAS MBeanServer.
+ // *
+ // * @return MBeanServer instance
+ // */
+ // public MBeanServer getJBossMBeanServer() {
+ // if (dummyJBossMBeanServer == null) {
+ // dummyJBossMBeanServer =
MBeanServerFactory.createMBeanServer("jboss");
+ // MBeanServerLocator.setJBoss(dummyJBossMBeanServer);
+ // }
+ //
+ // return dummyJBossMBeanServer;
+ // }
+ //
+ // public void releaseJBossMBeanServer() {
+ // if (dummyJBossMBeanServer != null) {
+ // MBeanServerFactory.releaseMBeanServer(dummyJBossMBeanServer);
+ // dummyJBossMBeanServer = null;
+ // }
+ // }
+ //
+ // /**
+ // * If you need to test round trips from server to agent and back, you first
must install the server communications
+ // * service that houses all the agent clients. Call this method and add your
test agent services to the public fields
+ // * in the returned object.
+ // *
+ // * @return the object that will house your test agent service impls and the
agent clients.
+ // *
+ // * @throws RuntimeException
+ // */
+ // public TestServerCommunicationsService prepareForTestAgents() {
+ // try {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if (mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME)) {
+ // mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ // }
+ // TestServerCommunicationsService testAgentContainer = new
TestServerCommunicationsService();
+ // mbs.registerMBean(testAgentContainer,
ServerCommunicationsServiceMBean.OBJECT_NAME);
+ // return testAgentContainer;
+ // } catch (Exception e) {
+ // throw new RuntimeException(e);
+ // }
+ // }
+ //
+ // /**
+ // * Call this after your tests have finished. You only need to call this if your
test previously called
+ // * {@link #prepareForTestAgents()}.
+ // */
+ // public void unprepareForTestAgents() {
+ // unprepareForTestAgents(false);
+ // }
+ //
+ // public void unprepareForTestAgents(boolean beanOnly) {
+ // try {
+ // if (beanOnly) {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if (mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME))
{
+ //
mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ // }
+ // } else {
+ // releaseJBossMBeanServer();
+ // }
+ // } catch (Exception e) {
+ // throw new RuntimeException(e);
+ // }
+ // }
+ //
+ // /**
+ // * 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
+ // * on the given mbean; this method will only start the service, it will NOT
start the master PC.
+ // *
+ // * @param testServiceMBean the object that will house your test server plugins
+ // *
+ // * @throws RuntimeException
+ // */
+ // public void prepareCustomServerPluginService(ServerPluginService
testServiceMBean) {
+ // try {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // testServiceMBean.start();
+ // mbs.registerMBean(testServiceMBean,
ServerPluginServiceMBean.OBJECT_NAME);
+ // serverPluginService = testServiceMBean;
+ // return;
+ // } catch (Exception e) {
+ // throw new RuntimeException(e);
+ // }
+ // }
+ //
+ // public void unprepareServerPluginService() throws Exception {
+ // unprepareServerPluginService(false);
+ // }
+ //
+ // public void unprepareServerPluginService(boolean beanOnly) throws Exception {
+ // if (serverPluginService != null) {
+ // serverPluginService.stopMasterPluginContainer();
+ // serverPluginService.stop();
+ // if (beanOnly) {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if (mbs.isRegistered(ServerPluginService.OBJECT_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(ServerPluginService.OBJECT_NAME);
+ // }
+ // if (mbs.isRegistered(ServerPluginServiceMBean.OBJECT_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(ServerPluginServiceMBean.OBJECT_NAME);
+ // }
+ //
+ // } else {
+ // releaseJBossMBeanServer();
+ // }
+ // serverPluginService = null;
+ // }
+ // }
+ //
+ // public SchedulerService getSchedulerService() {
+ // return schedulerService;
+ // }
+ //
+ // public void prepareScheduler() {
+ // try {
+ // if (schedulerService != null) {
+ // return;
+ // }
+ //
+ // Properties quartzProps = new Properties();
+ //
quartzProps.load(this.getClass().getClassLoader().getResourceAsStream("test-scheduler.properties"));
+ //
+ // schedulerService = new SchedulerService();
+ // schedulerService.setQuartzProperties(quartzProps);
+ // schedulerService.start();
+ // getJBossMBeanServer().registerMBean(schedulerService,
SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
+ // schedulerService.startQuartzScheduler();
+ // return;
+ // } catch (Exception e) {
+ // e.printStackTrace();
+ // throw new RuntimeException(e);
+ // }
+ // }
+ //
+ // public void unprepareScheduler() throws Exception {
+ // unprepareScheduler(false);
+ // }
+ //
+ // public void unprepareScheduler(boolean beanOnly) throws Exception {
+ // if (schedulerService != null) {
+ // schedulerService.stop();
+ // if (beanOnly) {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if (mbs.isRegistered(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME))
{
+ //
getJBossMBeanServer().unregisterMBean(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
+ // }
+ // } else {
+ // releaseJBossMBeanServer();
+ // }
+ //
+ // schedulerService = null;
+ // }
+ // }
+ //
+ // public PluginDeploymentScannerMBean getPluginScannerService() {
+ // return pluginScannerService;
+ // }
+ //
+ // protected void preparePluginScannerService() {
+ // preparePluginScannerService(null);
+ // }
+ //
+ // public void preparePluginScannerService(PluginDeploymentScannerMBean
scannerService) {
+ // try {
+ // if (scannerService == null) {
+ // scannerService = new PluginDeploymentScanner();
+ // }
+ // MBeanServer mbs = getJBossMBeanServer();
+ // mbs.registerMBean(scannerService,
PluginDeploymentScannerMBean.OBJECT_NAME);
+ // pluginScannerService = scannerService;
+ // return;
+ // } catch (Exception e) {
+ // e.printStackTrace();
+ // throw new RuntimeException(e);
+ // }
+ // }
+ //
+ // public void unpreparePluginScannerService() throws Exception {
+ // unpreparePluginScannerService(false);
+ // }
+ //
+ // public void unpreparePluginScannerService(boolean beanOnly) throws Exception {
+ // if (pluginScannerService != null) {
+ // pluginScannerService.stop();
+ // if (beanOnly) {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if (mbs.isRegistered(PluginDeploymentScannerMBean.OBJECT_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(PluginDeploymentScannerMBean.OBJECT_NAME);
+ // }
+ // } else {
+ // releaseJBossMBeanServer();
+ // }
+ //
+ // pluginScannerService = null;
+ // }
+ // }
+ //
+ // protected void executeInTransaction(TransactionCallback callback) {
+ // executeInTransaction(callback);
+ // }
+}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallback.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallback.java
new file mode 100644
index 0000000..cec66cb
--- /dev/null
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallback.java
@@ -0,0 +1,7 @@
+package org.rhq.enterprise.server.test;
+
+public interface TransactionCallback {
+
+ void execute() throws Exception;
+
+}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallbackReturnable.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallbackReturnable.java
new file mode 100644
index 0000000..cd0389e
--- /dev/null
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallbackReturnable.java
@@ -0,0 +1,7 @@
+package org.rhq.enterprise.server.test;
+
+public interface TransactionCallbackReturnable<T extends Object> {
+
+ T execute() throws Exception;
+
+}
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 8d6d810..5819a1b 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
@@ -131,154 +131,5 @@ public class JPAUtils {
return list.toString();
}
- public static void clearDB() {
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = lookupEntityManager();
-
- em.createNativeQuery("delete from jms_subscriptions");
- em.createNativeQuery("delete from jms_roles");
- em.createNativeQuery("delete from jms_users");
- em.createNativeQuery("delete from jms_transactions");
- em.createNativeQuery("delete from jms_messages");
- em.createNativeQuery("delete from rhq_drift_config_map");
- em.createNativeQuery("delete from rhq_drift_template_map");
- em.createNativeQuery("delete from rhq_delete_res_hist");
- em.createNativeQuery("delete from rhq_create_res_hist");
- em.createNativeQuery("delete from
rhq_tagging_bundle_dest_map");
- em.createNativeQuery("delete from
rhq_tagging_bundle_deploy_map");
- em.createNativeQuery("delete from
rhq_tagging_bundle_version_map");
- em.createNativeQuery("delete from rhq_tagging_bundle_map");
- em.createNativeQuery("delete from rhq_bundle_res_dep_hist");
- em.createNativeQuery("delete from rhq_bundle_res_deploy");
- em.createNativeQuery("delete from rhq_bundle_deployment");
- em.createNativeQuery("delete from rhq_bundle_destination");
- em.createNativeQuery("delete from rhq_bundle_file");
- em.createNativeQuery("delete from rhq_bundle_version_repo");
- em.createNativeQuery("delete from rhq_bundle_version");
- em.createNativeQuery("delete from rhq_bundle");
- em.createNativeQuery("delete from rhq_bundle_type");
- em.createNativeQuery("delete from rhq_repo_advisory");
- em.createNativeQuery("delete from rhq_advisory_buglist");
- em.createNativeQuery("delete from rhq_advisory_cve");
- em.createNativeQuery("delete from rhq_cve");
- em.createNativeQuery("delete from rhq_advisory_package");
- em.createNativeQuery("delete from rhq_advisory");
- em.createNativeQuery("delete from rhq_distribution_file");
- em.createNativeQuery("delete from rhq_repo_distribution");
- em.createNativeQuery("delete from rhq_distribution where id not in
(1, 2)");
- em.createNativeQuery("delete from rhq_pkg_prd_map");
- em.createNativeQuery("delete from
rhq_pkg_ver_content_src_map");
- em.createNativeQuery("delete from rhq_repo_pkg_version_map");
- em.createNativeQuery("delete from
rhq_repo_repo_relation_map");
- em.createNativeQuery("delete from rhq_repo_repo_group_map");
- em.createNativeQuery("delete from rhq_repo_content_src_map");
- em.createNativeQuery("delete from rhq_repo_resource_map");
- em.createNativeQuery("delete from rhq_package_inst_step");
- em.createNativeQuery("delete from rhq_repo_sync");
- em.createNativeQuery("delete from rhq_content_src_sync");
- em.createNativeQuery("delete from rhq_installed_pkg_hist");
- em.createNativeQuery("delete from rhq_installed_package");
- em.createNativeQuery("delete from rhq_content_req");
- em.createNativeQuery("delete from rhq_package_version");
- em.createNativeQuery("delete from rhq_package_bits");
- em.createNativeQuery("delete from rhq_package");
- em.createNativeQuery("delete from rhq_package_type");
- em.createNativeQuery("delete from rhq_repo_relation");
- em.createNativeQuery("delete from rhq_repo_relation_type where id
not in (1, 2)");
- em.createNativeQuery("delete from rhq_repo");
- em.createNativeQuery("delete from rhq_repo_group");
- em.createNativeQuery("delete from rhq_repo_group_type where id
<> 1");
- em.createNativeQuery("delete from rhq_archirtecture where id < 1
and id > 38");
- em.createNativeQuery("delete from rhq_meas_data_num_r14");
- em.createNativeQuery("delete from rhq_meas_data_num_r13");
- em.createNativeQuery("delete from rhq_meas_data_num_r12");
- em.createNativeQuery("delete from rhq_meas_data_num_r11");
- em.createNativeQuery("delete from rhq_meas_data_num_r10");
- em.createNativeQuery("delete from rhq_meas_data_num_r09");
- em.createNativeQuery("delete from rhq_meas_data_num_r08");
- em.createNativeQuery("delete from rhq_meas_data_num_r07");
- em.createNativeQuery("delete from rhq_meas_data_num_r06");
- em.createNativeQuery("delete from rhq_meas_data_num_r05");
- em.createNativeQuery("delete from rhq_meas_data_num_r04");
- em.createNativeQuery("delete from rhq_meas_data_num_r03");
- em.createNativeQuery("delete from rhq_meas_data_num_r02");
- em.createNativeQuery("delete from rhq_meas_data_num_r01");
- em.createNativeQuery("delete from rhq_meas_data_num_r00");
- em.createNativeQuery("delete from rhq_measurement_oob_tmp");
- em.createNativeQuery("delete rhq_measurement_oob");
- em.createNativeQuery("delete rhq_resource_avail");
- em.createNativeQuery("delete from rhq_availability");
- em.createNativeQuery("delete from rhq_calltime_data_value");
- em.createNativeQuery("delete from rhq_calltime_data_key");
- em.createNativeQuery("delete from
rhq_measurement_data_trait");
- em.createNativeQuery("delete from
rhq_measurement_data_num_1d");
- em.createNativeQuery("delete from
rhq_measurement_data_num_6h");
- em.createNativeQuery("delete from
rhq_measurement_data_num_1h");
- em.createNativeQuery("delete from rhq_measurement_bline");
- 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_alert_notification");
- em.createNativeQuery("delete from rhq_alert_condition_log");
- em.createNativeQuery("delete from rhq_alert");
- em.createNativeQuery("delete from rhq_alert_condition");
- em.createNativeQuery("delete from rhq_alert_dampen_event");
- em.createNativeQuery("delete from rhq_alert_definition");
- em.createNativeQuery("delete from rhq_event");
- em.createNativeQuery("delete from rhq_event_source");
- em.createNativeQuery("delete from rhq_event_def");
- em.createNativeQuery("delete from rhq_operation_schedule");
- em.createNativeQuery("delete from rhq_operation_history");
- em.createNativeQuery("delete from rhq_operation_def");
- em.createNativeQuery("delete from rhq_dashboard_portlet");
- em.createNativeQuery("delete from rhq_dashboard");
- em.createNativeQuery("delete from rhq_saved_search");
- em.createNativeQuery("delete from rhq_subject_role_ldap_map");
- em.createNativeQuery("delete from rhq_subject_role_map where id not
in (1, 2)");
- em.createNativeQuery("delete from rhq_permission where role_id not
in (1, 2)");
- em.createNativeQuery("delete from rhq_role_ldap_group");
- em.createNativeQuery("delete from
rhq_role_resource_group_map");
- em.createNativeQuery("delete from rhq_role where id not in (1,
2)");
- em.createNativeQuery("delete from rhq_tagging_res_group_map");
- em.createNativeQuery("delete from rhq_tagging_resource_map");
- em.createNativeQuery("delete from rhq_tagging");
- em.createNativeQuery("delete from rhq_config_update");
- em.createNativeQuery("delete from rhq_config_group_update");
- em.createNativeQuery("delete from
rhq_resource_group_res_exp_map");
- em.createNativeQuery("delete from
rhq_resource_group_res_imp_map");
- em.createNativeQuery("delete from rhq_resource_group");
- em.createNativeQuery("delete from rhq_group_def");
- em.createNativeQuery("delete from rhq_resource_error");
- em.createNativeQuery("delete from rhq_resource");
- em.createNativeQuery("delete from rhq_prd_ver");
- em.createNativeQuery("delete from rhq_process_scan");
- em.createNativeQuery("delete from rhq_resource_type_parents");
- em.createNativeQuery("delete from rhq_resource_subcat");
- em.createNativeQuery("delete from rhq_resource_type");
- em.createNativeQuery("delete from rhq_subject where id not in (1,
2)");
- em.createNativeQuery("delete from rhq_principal where id <>
2");
- em.createNativeQuery("delete from rhq_failover_details");
- em.createNativeQuery("delete from rhq_failover_list");
- em.createNativeQuery("delete from rhq_partition_details");
- em.createNativeQuery("delete from rhq_partition_event");
- em.createNativeQuery("delete from rhq_agent");
- em.createNativeQuery("delete from rhq_server");
- em.createNativeQuery("delete from rhq_affinity_group");
- em.createNativeQuery("delete from rhq_raw_config");
- em.createNativeQuery("delete from rhq_config_template");
- em.createNativeQuery("delete from rhq_config_property");
- em.createNativeQuery("delete from rhq_config");
- em.createNativeQuery("delete from rhq_config_prop_constr");
- em.createNativeQuery("delete from rhq_conf_prop_def_enum");
- em.createNativeQuery("delete from rhq_config_pd_osrc");
- em.createNativeQuery("delete from rhq_config_prop_def");
- em.createNativeQuery("delete from rhq_config_prop_grp_def");
- em.createNativeQuery("delete from rhq_config_def");
- }
- });
- }
}
commit d59617ace8a18c0c25467f6b87c158c4ee141cd9
Author: Jay Shaughnessy <jshaughn(a)jshaughn.csb>
Date: Mon Oct 22 14:07:03 2012 -0400
more .classpath stuff for new deps
diff --git a/.classpath b/.classpath
index e9ae8a8..5570123 100644
--- a/.classpath
+++ b/.classpath
@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src"
path="modules/common/ant-bundle/src/main/java"/>
+ <classpathentry kind="src"
path="modules/enterprise/scripting/javascript/src/main/java"/>
+ <classpathentry kind="src"
path="modules/enterprise/scripting/python/src/main/java"/>
+ <classpathentry kind="src"
path="modules/enterprise/scripting/python/src/test/java"/>
+ <classpathentry kind="src"
path="modules/enterprise/scripting/javascript/src/test/java"/>
<classpathentry kind="src"
path="modules/enterprise/gui/installer/src/test/java"/>
<classpathentry kind="src"
path="modules/common/jboss-as-dmr-client/src/test/java"/>
<classpathentry kind="src"
path="modules/common/jboss-as-dmr-client/src/main/java"/>
@@ -322,5 +326,7 @@
<classpathentry exported="true" kind="var"
path="M2_REPO/jboss/jboss-embeddable-ejb3/jboss-ejb3-all/1.0.0.Alpha9/jboss-ejb3-all-1.0.0.Alpha9.jar"/>
<classpathentry exported="true" kind="var"
path="JDK_HOME/lib/tools.jar"/>
<classpathentry kind="var"
path="M2_REPO/org/jboss/remotingjmx/remoting-jmx/1.0.2.Final/remoting-jmx-1.0.2.Final.jar"/>
+ <classpathentry kind="var"
path="M2_REPO/org/mozilla/rhino/1.7R4/rhino-1.7R4.jar"/>
+ <classpathentry kind="var"
path="M2_REPO/org/python/jython-standalone/2.5.2/jython-standalone-2.5.2.jar"/>
<classpathentry kind="output" path="eclipse-classes"/>
</classpath>
commit 33b9581b81fc929c1bec2366010b457f33349464
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Oct 22 11:24:40 2012 -0400
support the ability to restart the server in AS7 admin-only mode (this may be useful
in the future when supporting the new AS7 proposed patching mechanism)
diff --git
a/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/CoreJBossASClient.java
b/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/CoreJBossASClient.java
index 1729f95..3ee36a5 100644
---
a/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/CoreJBossASClient.java
+++
b/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/CoreJBossASClient.java
@@ -180,8 +180,21 @@ public class CoreJBossASClient extends JBossASClient {
* @throws Exception
*/
public void reload() throws Exception {
+ reload(false);
+ }
+
+ /**
+ * Invokes the management "reload" operation which will shut down all the
app server services and
+ * restart them again potentially in admin-only mode.
+ * This does not shutdown the JVM itself.
+ *
+ * @param adminOnly if <code>true</code>, reloads the server in
admin-only mode
+ *
+ * @throws Exception
+ */
+ public void reload(boolean adminOnly) throws Exception {
final ModelNode request = createRequest("reload", Address.root());
- request.get("admin-only").set(false);
+ request.get("admin-only").set(adminOnly);
final ModelNode response = execute(request);
if (!isSuccess(response)) {
throw new FailureException(response);