.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@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@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@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@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@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@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);
rhq-commits@lists.fedorahosted.org