modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BaseCriteria.java
| 7
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/Criteria.java
| 9
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/GenericDriftChangeSetCriteria.java
| 30 -
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/GenericDriftCriteria.java
| 29 -
modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
| 5
modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
| 42 +
modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptUtil.java
| 21
modules/enterprise/gui/content_http-war/src/main/java/org/rhq/gui/content/ContentHTTPServlet.java
| 1
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/ScriptableAbstractEJB3Test.java
| 37 +
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
| 22
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/util/ScriptTest.java
| 81 ++
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
| 279 +++++++++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
| 55 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleServerServiceImpl.java
| 24
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
| 78 +-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
| 10
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
| 26
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java
| 1
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DeletedResourceTypeFilter.java
| 17
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
| 3
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
| 12
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftServerServiceImpl.java
| 16
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBean.java
| 18
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/inventory/InventoryManagerBean.java
| 1
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/PlatformUtilizationManagerBean.java
| 48 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceFactoryManagerBean.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceTypeManagerBean.java
| 4
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
| 15
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java
| 17
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/MeasurementMetadataManagerBean.java
| 17
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginConfigurationMetadataManagerBean.java
| 19
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
| 20
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
| 11
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
| 7
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
| 13
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
| 34 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/execution/SearchAssistManager.java
| 25
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/tagging/TagManagerBean.java
| 1
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
| 92 +++
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
| 69 ++
modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
| 1
modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/MongoDBDriftServer.java
| 17
46 files changed, 1073 insertions(+), 171 deletions(-)
New commits:
commit 9957e3f699a021b08093e3fd6a96421577be9725
Merge: a9352d7 c367f45
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Tue Feb 26 10:04:15 2013 -0500
Merge branch 'track_master' into spinder/criteriaUsage
commit a9352d74a8eff4e9517af200d5f81b2f6f7b9f2b
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Thu Feb 21 16:36:29 2013 -0500
refactor to expose the ScriptEngine for these and other tests.
diff --git
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/ScriptableAbstractEJB3Test.java
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/ScriptableAbstractEJB3Test.java
new file mode 100644
index 0000000..1cc66c5
--- /dev/null
+++
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/ScriptableAbstractEJB3Test.java
@@ -0,0 +1,37 @@
+package org.rhq.enterprise.client;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.security.PermissionCollection;
+import java.util.Collections;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptException;
+
+import org.testng.annotations.Test;
+
+import org.rhq.bindings.ScriptEngineFactory;
+import org.rhq.bindings.StandardBindings;
+import org.rhq.bindings.StandardScriptPermissions;
+import org.rhq.bindings.util.PackageFinder;
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.enterprise.server.test.AbstractEJB3Test;
+
+/**
+ *
+ * @author Simeon Pinder
+ *
+ */
+@Test
+public class ScriptableAbstractEJB3Test extends AbstractEJB3Test {
+
+ protected ScriptEngine getEngine(Subject subject) throws ScriptException, IOException
{
+ StandardBindings bindings = new StandardBindings(new PrintWriter(System.out), new
LocalClient(subject));
+
+ PermissionCollection perms = new StandardScriptPermissions();
+
+ return ScriptEngineFactory.getSecuredScriptEngine("javascript",
+ new PackageFinder(Collections.<File> emptyList()), bindings, perms);
+ }
+}
diff --git
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
index 8489f1d..349a8ce 100644
---
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
+++
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
@@ -18,11 +18,7 @@
*/
package org.rhq.enterprise.client.security.test;
-import java.io.File;
import java.io.IOException;
-import java.io.PrintWriter;
-import java.security.PermissionCollection;
-import java.util.Collections;
import javax.naming.Context;
import javax.script.ScriptEngine;
@@ -31,15 +27,10 @@ import javax.script.ScriptException;
import org.testng.Assert;
import org.testng.annotations.Test;
-import org.rhq.bindings.ScriptEngineFactory;
-import org.rhq.bindings.StandardBindings;
-import org.rhq.bindings.StandardScriptPermissions;
-import org.rhq.bindings.util.PackageFinder;
import org.rhq.core.domain.auth.Subject;
-import org.rhq.enterprise.client.LocalClient;
+import org.rhq.enterprise.client.ScriptableAbstractEJB3Test;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.system.SystemManagerBean;
-import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -48,7 +39,7 @@ import org.rhq.enterprise.server.util.LookupUtil;
* @author Lukas Krejci
*/
@Test
-public class JndiAccessTest extends AbstractEJB3Test {
+public class JndiAccessTest extends ScriptableAbstractEJB3Test {
public void testScriptCantOverrideSystemProperties() throws Exception {
Subject overlord = LookupUtil.getSubjectManager().getOverlord();
@@ -272,15 +263,6 @@ public class JndiAccessTest extends AbstractEJB3Test {
// }
// }
- protected ScriptEngine getEngine(Subject subject) throws ScriptException, IOException
{
- StandardBindings bindings = new StandardBindings(new PrintWriter(System.out), new
LocalClient(subject));
-
- PermissionCollection perms = new StandardScriptPermissions();
-
- return ScriptEngineFactory.getSecuredScriptEngine("javascript",
- new PackageFinder(Collections.<File> emptyList()), bindings, perms);
- }
-
private static void checkIsDesiredSecurityException(ScriptException e) {
String message = e.getMessage();
String permissionTrace = "org.rhq.allow.server.internals.access";
diff --git
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/util/ScriptTest.java
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/util/ScriptTest.java
index 98ad38c..6768021 100644
---
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/util/ScriptTest.java
+++
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/util/ScriptTest.java
@@ -17,7 +17,7 @@ import org.testng.annotations.Test;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.client.security.test.JndiAccessTest;
+import org.rhq.enterprise.client.ScriptableAbstractEJB3Test;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.enterprise.server.util.SessionTestHelper;
@@ -26,7 +26,7 @@ import org.rhq.enterprise.server.util.SessionTestHelper;
* @author Simeon Pinder
*/
@Test
-public class ScriptTest extends JndiAccessTest {
+public class ScriptTest extends ScriptableAbstractEJB3Test {
/** Exercise the ScriptUtil.findResoruces
*
commit 0d130abb277d988190ac2577879d6eb40ea0814a
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Thu Feb 21 16:29:01 2013 -0500
Deprecate ScriptUtil.findResources() usage as does not properly support paging
and can produce result sets difficult to parse for large result sets.
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptUtil.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptUtil.java
index 6b86b61..7d64eab 100644
--- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptUtil.java
+++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptUtil.java
@@ -70,6 +70,25 @@ public class ScriptUtil {
this.scriptEngine = scriptEngine;
}
+ /** This convenience method has been deprecated as it was not designed to support
paging
+ * which is a requirement to efficiently handle large results sets. This methods
returns
+ * all inexact matches to the String parameter passed in. Clients may have
difficulty
+ * retrieving all results.
+ *
+ * Instead to page through large/small result sets you should create
+ * i)ResourceCriteria instances to be passed into
+ * ii)ResourceManager.findResourcesByCriteria(ResourceCriteria criteria)
+ *
+ * NOTE: ResourceCriteria by default has a page size of 200 and starts on page 0.
Ex. criteria.setPaging(0,200);
+ *
+ * To iterate over a larger result set you can
+ * i)get access to the total number of resources, as the PageList<Resource>
return includes a getTotalSize() method
+ * ii)iterate through the pages of results by using Ex. criteria.setPaging(1,200),
criteria.setPaging(2,200), [N,PageSize]
+ *
+ * @param string
+ * @return PageList<Resource> Resources with inexact name matches to the string
passed in.
+ */
+ @Deprecated
public PageList<Resource> findResources(String string) {
if (remoteClient == null) {
throw new IllegalStateException("The findResources() method requires a
connection to the RHQ server.");
commit bf664e0f63aabbd22b242450d0f673c4064c4215
Merge: 76458a3 b452250
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Thu Feb 21 14:49:53 2013 -0500
Merge branch 'track_master' into spinder/criteriaUsage
commit 76458a3ca5762cec0512e8ed6b607cdafeddf71a
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Thu Feb 21 14:16:16 2013 -0500
Add integration test to exercise some CLI functionality specifically findResources.
diff --git
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
index fabe6ae..8489f1d 100644
---
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
+++
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/security/test/JndiAccessTest.java
@@ -272,7 +272,7 @@ public class JndiAccessTest extends AbstractEJB3Test {
// }
// }
- private ScriptEngine getEngine(Subject subject) throws ScriptException, IOException
{
+ protected ScriptEngine getEngine(Subject subject) throws ScriptException, IOException
{
StandardBindings bindings = new StandardBindings(new PrintWriter(System.out), new
LocalClient(subject));
PermissionCollection perms = new StandardScriptPermissions();
diff --git
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/util/ScriptTest.java
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/util/ScriptTest.java
new file mode 100644
index 0000000..98ad38c
--- /dev/null
+++
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/client/util/ScriptTest.java
@@ -0,0 +1,81 @@
+package org.rhq.enterprise.client.util;
+
+import java.io.IOException;
+import java.util.Random;
+
+import javax.persistence.EntityManager;
+import javax.script.ScriptEngine;
+import javax.script.ScriptException;
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
+
+import org.testng.annotations.Test;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.client.security.test.JndiAccessTest;
+import org.rhq.enterprise.server.util.LookupUtil;
+import org.rhq.enterprise.server.util.SessionTestHelper;
+
+/**Exercise some of the methods available via cli an integration tests/using a running
server.
+
+ * @author Simeon Pinder
+ */
+@Test
+public class ScriptTest extends JndiAccessTest {
+
+ /** Exercise the ScriptUtil.findResoruces
+ *
+ * @throws ScriptException
+ * @throws IOException
+ * @throws NotSupportedException
+ * @throws SystemException
+ * @throws SecurityException
+ * @throws IllegalStateException
+ * @throws RollbackException
+ * @throws HeuristicMixedException
+ * @throws HeuristicRollbackException
+ */
+ @Test
+ public void testScriptUtilFindResources() throws ScriptException, IOException,
NotSupportedException,
+ SystemException,
+ SecurityException, IllegalStateException, RollbackException,
HeuristicMixedException,
+ HeuristicRollbackException {
+
+ //Instantiate ScriptEngine.
+ Subject overlord = LookupUtil.getSubjectManager().getOverlord();
+ ScriptEngine engine = getEngine(overlord);
+
+ //create resources to query.
+ getTransactionManager().begin();
+ EntityManager entityMgr = getEntityManager();
+ String tuid = "" + new Random().nextInt();
+ String prefix = "CLI-TEST-" + tuid + "-";
+ int resourceCount = 201; //assuming 200 per page at least 2 pages of results.
+ int[] resourceIds = new int[resourceCount];
+ try {
+ System.out.println("-------- Creating " + resourceCount + "
resource(s). This may take a while ....");
+ long start = System.currentTimeMillis();
+ for (int i = 0; i < resourceCount; i++) {
+ String name = prefix + i;
+ Resource r = SessionTestHelper.createNewResource(entityMgr, name);
+ resourceIds[i] = r.getId();
+ }
+ entityMgr.flush();
+
+ System.out.println("----------- Created " + resourceCount + "
resource(s) in "
+ + (System.currentTimeMillis() - start) + " ms.");
+
+ //now get the Resources back by CLI
+ PageList<Resource> result = (PageList<Resource>)
engine.eval("findResources('" + prefix + "');");
+ assert result.size() == resourceCount : "Expected to get '" +
resourceCount
+ + "' result(s) from across two pages but instead got '"
+ result.size() + "'.";
+ } finally {
+ getTransactionManager().rollback();
+ }
+ }
+}
commit 6a2b2c0c8c19cc52cbf39ddee7c49ea9ad0a3de1
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Thu Feb 21 10:13:48 2013 -0500
Apply fixes for CriteriaQueryTest incorrectly using paging.
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
index faa14ad..2e1c897 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
@@ -73,7 +73,9 @@ public class CriteriaQueryTest {
}
public void addPage(List<FakeEntity> entities) {
- pages.add(new PageList<FakeEntity>(entities, totalSize, pc));
+ int pageNumber = pages.size();
+ pages
+ .add(new PageList<FakeEntity>(entities, totalSize, new
PageControl(pageNumber, this.pc.getPageSize())));
}
@Override
@@ -113,7 +115,8 @@ public class CriteriaQueryTest {
queryExecutor.addPage(expected.subList(2, 4));
FakeEntityCriteria criteria = new FakeEntityCriteria();
- criteria.setPageControl(pc);
+ //spinder 2-20-13: DO NOT use criteria.setPageControl(pc) here as it causes
ignore of pageNumber/pageSize
+ criteria.setPaging(pc.getPageNumber(), pc.getPageSize());
CriteriaQuery<FakeEntity, FakeEntityCriteria> query = new
CriteriaQuery<FakeEntity, FakeEntityCriteria>(
criteria, queryExecutor);
@@ -164,7 +167,7 @@ public class CriteriaQueryTest {
//build criteria and attach pageControl
FakeEntityCriteria criteria = new FakeEntityCriteria();
- //DO NOT use criteria.setPageControl(pc) here as it causes ignore of
pageNumber/pageSize
+ //spinder 2-20-13:DO NOT use criteria.setPageControl(pc) here as it causes ignore
of pageNumber/pageSize
criteria.setPaging(pc.getPageNumber(), pc.getPageSize());
//?? So which pageControl has the right details? Criteria.pageControl? OR
PageControl passed into the QueryExecutor.
commit 650d2c0b7c326c1528acf309ddb22e2792b6d65c
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Wed Feb 20 14:03:52 2013 -0500
Clarify dirty read javadoc for test.
diff --git
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
index f48d360..40b0623 100644
---
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
+++
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
@@ -221,9 +221,12 @@ public class ResourceStorageTest extends AbstractEJB3Test {
}
/** Test creates a large number of resources and pages through them using
CriteriaQuery.
+ *
* NOTE: CriteriaQuery uses PageList instances underneath and are susceptible to
dirty
- * read issues if the total number of resources being parsed is i)very large or
ii)processing
- * each instance takes a significant amount of time. Ex. Begin parsing all resource
types,
+ * read issues if the underlying dataset changes because the total number of
resources being
+ * parsed is i)very large or ii)processing each instance takes a significant amount
of
+ * time such that another action/process/object may have changed the original
resources
+ * before resultset processing could be completed. Ex. Begin parsing all resource
types,
* while plugin update is removing some of those same types.
*
* @throws Exception
commit 962b33d40299d5076e57e5e5949c4d664d62ab15
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed Feb 20 13:53:51 2013 -0500
CriteriaQuery should always have a sort applied in the Criteria supplied to
it. Otherwise the implicit chunking will be unreliable, as queries will
have no guaranteed ordering, the DB is free to order results in any way it
likes.
To do this I've done two things:
1) I added the ability to sort by ID on all subclasses of Criteria
2) If no sort is specified in the CriteriaQuery Criteria, an ID sort is added
This default ASC sort on ID provides consistent chunking and the fastest
ordering given that it's an indexed (PK) field.
AND, DONE DURING MERGE:
Fix merge issue.
Also:
- fix issue when using CriteriaQuery with pageControlOverrides
- update tests to cover a few more scenarios
- remove the unnecessary pagecontrol overrides forwarding in CriteriaQuery.next
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BaseCriteria.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BaseCriteria.java
index c4993c1..5b931aa 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BaseCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BaseCriteria.java
@@ -18,7 +18,10 @@
*/
package org.rhq.core.domain.criteria;
+import java.util.List;
+
import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageOrdering;
/**
* All criteria, regardless of the backend storage that will be queried with this
criteria, needs
@@ -28,6 +31,10 @@ import org.rhq.core.domain.util.PageControl;
*/
public interface BaseCriteria {
+ void addSortId(PageOrdering sortId);
+
+ List<String> getOrderingFieldNames();
+
PageControl getPageControlOverrides();
void setPageControl(PageControl pageControl);
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/Criteria.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/Criteria.java
index afcff6f..2ae6859 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/Criteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/Criteria.java
@@ -35,6 +35,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
/**
* @author Joseph Marques
@@ -96,6 +97,9 @@ public abstract class Criteria implements Serializable, BaseCriteria {
private String searchExpression;
+ // All Criteria support sorting on ID
+ private PageOrdering sortId;
+
/**
* This default constructor will set default paging to avoid unintended fetch of huge
results. The default is:
* <pre>setPaging(0, 200);</pre>
@@ -139,6 +143,11 @@ public abstract class Criteria implements Serializable, BaseCriteria
{
return pageControlOverrides;
}
+ public void addSortId(PageOrdering sortId) {
+ addSortField("id");
+ this.sortId = sortId;
+ }
+
protected void addSortField(String fieldName) {
orderingFieldNames.add("sort" +
Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1));
}
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/GenericDriftChangeSetCriteria.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/GenericDriftChangeSetCriteria.java
index 0cb6bfa..c640bf0 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/GenericDriftChangeSetCriteria.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/GenericDriftChangeSetCriteria.java
@@ -18,15 +18,16 @@
*/
package org.rhq.core.domain.criteria;
-import org.rhq.core.domain.drift.DriftCategory;
-import org.rhq.core.domain.drift.DriftChangeSetCategory;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageOrdering;
+import static org.rhq.core.domain.util.CriteriaUtils.getListIgnoringNulls;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.List;
-import static org.rhq.core.domain.util.CriteriaUtils.getListIgnoringNulls;
+import org.rhq.core.domain.drift.DriftCategory;
+import org.rhq.core.domain.drift.DriftChangeSetCategory;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageOrdering;
/**
* The generic implementation of DriftChangeSetCriteria makes no assumptions about the
actual drift server
@@ -68,6 +69,8 @@ public class GenericDriftChangeSetCriteria implements Serializable,
DriftChangeS
private boolean fetchDrifts;
+ private PageOrdering sortId;
+
private PageOrdering sortVersion;
private PageControl pageControl;
@@ -209,6 +212,11 @@ public class GenericDriftChangeSetCriteria implements Serializable,
DriftChangeS
}
@Override
+ public void addSortId(PageOrdering sortId) {
+ this.sortId = sortId;
+ }
+
+ @Override
public void addSortVersion(PageOrdering sortVersion) {
this.sortVersion = sortVersion;
}
@@ -244,4 +252,16 @@ public class GenericDriftChangeSetCriteria implements Serializable,
DriftChangeS
pageControl.setPageSize(pageSize);
}
+ @Override
+ public List<String> getOrderingFieldNames() {
+ List<String> result = new ArrayList<String>(2);
+ if (null != sortId) {
+ result.add("id");
+ }
+ if (null != sortVersion) {
+ result.add("version");
+ }
+ return result;
+ }
+
}
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/GenericDriftCriteria.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/GenericDriftCriteria.java
index 3146b16..1c53353 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/GenericDriftCriteria.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/GenericDriftCriteria.java
@@ -18,16 +18,16 @@
*/
package org.rhq.core.domain.criteria;
-import org.rhq.core.domain.drift.DriftCategory;
-import org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageOrdering;
+import static org.rhq.core.domain.util.CriteriaUtils.getListIgnoringNulls;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
-import static org.rhq.core.domain.util.CriteriaUtils.getListIgnoringNulls;
+import org.rhq.core.domain.drift.DriftCategory;
+import org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageOrdering;
/**
* The generic implementation of DriftCriteria makes no assumptions about the actual
drift server
@@ -71,6 +71,8 @@ public class GenericDriftCriteria implements Serializable, DriftCriteria
{
private PageControl pageControl;
+ private PageOrdering sortId;
+
private PageOrdering sortCtime;
private boolean strict;
@@ -206,6 +208,11 @@ public class GenericDriftCriteria implements Serializable,
DriftCriteria {
}
@Override
+ public void addSortId(PageOrdering sortId) {
+ this.sortId = sortId;
+ }
+
+ @Override
public void addSortCtime(PageOrdering sortCtime) {
this.sortCtime = sortCtime;
}
@@ -241,4 +248,16 @@ public class GenericDriftCriteria implements Serializable,
DriftCriteria {
pageControl.setPageSize(pageSize);
}
+ @Override
+ public List<String> getOrderingFieldNames() {
+ List<String> result = new ArrayList<String>(2);
+ if (null != sortId) {
+ result.add("id");
+ }
+ if (null != sortCtime) {
+ result.add("ctime");
+ }
+ return result;
+ }
+
}
diff --git
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
index e746deb..f48d360 100644
---
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
+++
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
@@ -132,8 +132,8 @@ public class ResourceStorageTest extends AbstractEJB3Test {
ResourceGroupManagerLocal groupManager =
LookupUtil.getResourceGroupManager();
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
PageControl pc = new PageControl(0, 5, new OrderingField("rg.name",
PageOrdering.ASC));
- PageList<ResourceGroupComposite> groups =
groupManager.findResourceGroupComposites(subjectManager
- .getOverlord(), GroupCategory.COMPATIBLE, null, null, null, null, null,
null, pc);
+ PageList<ResourceGroupComposite> groups =
groupManager.findResourceGroupComposites(
+ subjectManager.getOverlord(), GroupCategory.COMPATIBLE, null, null, null,
null, null, null, pc);
System.out.println("Found compatible groups: " +
groups.getTotalSize());
for (ResourceGroupComposite group : groups) {
System.out.println("\t" + group);
@@ -195,8 +195,8 @@ public class ResourceStorageTest extends AbstractEJB3Test {
Subject rhqadmin =
subjectManager.loginUnauthenticated("rhqadmin");
rhqadmin = createSession(rhqadmin);
- Map<Resource, List<Resource>> queue =
discoveryBoss.getQueuedPlatformsAndServers(rhqadmin, PageControl
- .getUnlimitedInstance());
+ Map<Resource, List<Resource>> queue =
discoveryBoss.getQueuedPlatformsAndServers(rhqadmin,
+ PageControl.getUnlimitedInstance());
for (Resource root : queue.keySet()) {
System.out.println("Queue root resource: " + root);
}
@@ -228,7 +228,6 @@ public class ResourceStorageTest extends AbstractEJB3Test {
*
* @throws Exception
*/
- @SuppressWarnings("unused")
@Test(groups = "integration.ejb3")
public void testParsingCriteriaQueryResults() throws Exception {
getTransactionManager().begin();
@@ -251,8 +250,7 @@ public class ResourceStorageTest extends AbstractEJB3Test {
String tuid = "" + new Random().nextInt();
//create large number of resources
String prefix = "largeResultSet-" + tuid + "-";
- System.out.println("-------- Creating " + resourceCount
- + " resource(s). This may take a while ....");
+ System.out.println("-------- Creating " + resourceCount + "
resource(s). This may take a while ....");
long start = System.currentTimeMillis();
for (int i = 0; i < resourceCount; i++) {
@@ -264,15 +262,14 @@ public class ResourceStorageTest extends AbstractEJB3Test {
entityMgr.flush();
System.out.println("----------- Created " + resourceCount + "
resource(s) in "
- + (System.currentTimeMillis() - start)
- + " ms.");
+ + (System.currentTimeMillis() - start) + " ms.");
assert resourceNames.size() == resourceCount;//assert all resources
loaded/created
//query the results and delete the resources
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterName(prefix);
- criteria.addSortName(PageOrdering.ASC);
+ criteria.addSortName(PageOrdering.DESC); // use DESC just to make sure
sorting on name is different than insert order
criteria.setPaging(0, 47);
//iterate over the results with CriteriaQuery
@@ -288,10 +285,95 @@ public class ResourceStorageTest extends AbstractEJB3Test {
criteria, queryExecutor);
start = System.currentTimeMillis();
+ String prevName = null;
+ //iterate over the entire result set efficiently
+ ArrayList<String> alreadySeen = new ArrayList<String>();
+ int actualCount = 0;
+ for (Resource r : resources) {
+ assert null == prevName || r.getName().compareTo(prevName) < 0 :
"Results should be sorted by name DESC, something is out of order";
+ prevName = r.getName();
+ actualCount++;
+ // System.out.println(actualCount + " @@@ " +
r.getId() + ":"
+ // +
((resourceNames.containsKey(String.valueOf(r.getId()))) ? "NEW" :
"DIRTY") + ":" + r.getName());
+ resourceNames.remove(String.valueOf(r.getId()));
+ }
+
+ System.out.println("----------- Parsed " + actualCount + "
resource(s) in "
+ + (System.currentTimeMillis() - start) + " ms.");
+
+ //test that entire list parsed spanning multiple pages
+ assert resourceNames.size() == 0 : "Expected resourceNames to be empty.
Still " + resourceNames.size()
+ + " name(s).";
+
+ } finally {
+ getTransactionManager().rollback();
+ }
+ }
+
+ @Test(groups = "integration.ejb3")
+ public void testParsingCriteriaQueryResults_2() throws Exception {
+ // Same test as above but makes sure default id search works. use different
numbers just for variety
+ getTransactionManager().begin();
+ EntityManager entityMgr = getEntityManager();
+ final ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
+
+ //verify that all resource objects are actually parsed.
+ Map<String, Object> resourceNames = new HashMap<String, Object>();
+ int resourceCount = 344;
+
+ try {
+ final Subject subject = SessionTestHelper.createNewSubject(entityMgr,
"testSubject");
+
+ Role roleWithSubject = SessionTestHelper.createNewRoleForSubject(entityMgr,
subject, "role with subject");
+ roleWithSubject.addPermission(Permission.VIEW_RESOURCE);
+
+ ResourceGroup group =
SessionTestHelper.createNewCompatibleGroupForRole(entityMgr, roleWithSubject,
+ "accessible group");
+
+ String tuid = "" + new Random().nextInt();
+ //create large number of resources
+ String prefix = "largeResultSet-" + tuid + "-";
+ System.out.println("-------- Creating " + resourceCount + "
resource(s). This may take a while ....");
+
+ long start = System.currentTimeMillis();
+ for (int i = 0; i < resourceCount; i++) {
+ String name = prefix + i;
+ Resource r = SessionTestHelper.createNewResourceForGroup(entityMgr,
group, name);
+ //store away each resource name/key
+ resourceNames.put(String.valueOf(r.getId()), name);
+ }
+ entityMgr.flush();
+
+ System.out.println("----------- Created " + resourceCount + "
resource(s) in "
+ + (System.currentTimeMillis() - start) + " ms.");
+
+ assert resourceNames.size() == resourceCount;//assert all resources
loaded/created
+
+ //query the results and delete the resources, use default ID search
+ ResourceCriteria criteria = new ResourceCriteria();
+ criteria.addFilterName(prefix);
+ criteria.setPaging(0, 25);
+
+ //iterate over the results with CriteriaQuery
+ CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor = new
CriteriaQueryExecutor<Resource, ResourceCriteria>() {
+ @Override
+ public PageList<Resource> execute(ResourceCriteria criteria) {
+ return resourceManager.findResourcesByCriteria(subject, criteria);
+ }
+ };
+
+ //initiate first/(total depending on page size) request.
+ CriteriaQuery<Resource, ResourceCriteria> resources = new
CriteriaQuery<Resource, ResourceCriteria>(
+ criteria, queryExecutor);
+
+ start = System.currentTimeMillis();
+ int prevId = 0;
//iterate over the entire result set efficiently
ArrayList<String> alreadySeen = new ArrayList<String>();
int actualCount = 0;
for (Resource r : resources) {
+ assert r.getId() > prevId : "Results should be sorted by ID ASC,
something is out of order";
+ prevId = r.getId();
actualCount++;
// System.out.println(actualCount + " @@@ " +
r.getId() + ":"
// +
((resourceNames.containsKey(String.valueOf(r.getId()))) ? "NEW" :
"DIRTY") + ":" + r.getName());
@@ -299,8 +381,7 @@ public class ResourceStorageTest extends AbstractEJB3Test {
}
System.out.println("----------- Parsed " + actualCount + "
resource(s) in "
- + (System.currentTimeMillis() - start)
- + " ms.");
+ + (System.currentTimeMillis() - start) + " ms.");
//test that entire list parsed spanning multiple pages
assert resourceNames.size() == 0 : "Expected resourceNames to be empty.
Still " + resourceNames.size()
@@ -310,4 +391,89 @@ public class ResourceStorageTest extends AbstractEJB3Test {
getTransactionManager().rollback();
}
}
+
+ @Test(groups = "integration.ejb3")
+ public void testParsingCriteriaQueryResults_3() throws Exception {
+ // Same test as above but makes sure pageoverrides default id search works. use
different numbers just for variety
+ getTransactionManager().begin();
+ EntityManager entityMgr = getEntityManager();
+ final ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
+
+ //verify that all resource objects are actually parsed.
+ Map<String, Object> resourceNames = new HashMap<String, Object>();
+ int resourceCount = 423;
+
+ try {
+ final Subject subject = SessionTestHelper.createNewSubject(entityMgr,
"testSubject");
+
+ Role roleWithSubject = SessionTestHelper.createNewRoleForSubject(entityMgr,
subject, "role with subject");
+ roleWithSubject.addPermission(Permission.VIEW_RESOURCE);
+
+ ResourceGroup group =
SessionTestHelper.createNewCompatibleGroupForRole(entityMgr, roleWithSubject,
+ "accessible group");
+
+ String tuid = "" + new Random().nextInt();
+ //create large number of resources
+ String prefix = "largeResultSet-" + tuid + "-";
+ System.out.println("-------- Creating " + resourceCount + "
resource(s). This may take a while ....");
+
+ long start = System.currentTimeMillis();
+ for (int i = 0; i < resourceCount; i++) {
+ String name = prefix + i;
+ Resource r = SessionTestHelper.createNewResourceForGroup(entityMgr,
group, name);
+ //store away each resource name/key
+ resourceNames.put(String.valueOf(r.getId()), name);
+ }
+ entityMgr.flush();
+
+ System.out.println("----------- Created " + resourceCount + "
resource(s) in "
+ + (System.currentTimeMillis() - start) + " ms.");
+
+ assert resourceNames.size() == resourceCount;//assert all resources
loaded/created
+
+ //query the results and delete the resources, use default ID search
+ ResourceCriteria criteria = new ResourceCriteria();
+ criteria.addFilterName(prefix);
+ PageControl pc = new PageControl(0, 73);
+ criteria.setPageControl(pc);
+ assert pc.getOrderingFields().isEmpty() : "Should not have had any
sorting defined";
+
+ //iterate over the results with CriteriaQuery
+ CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor = new
CriteriaQueryExecutor<Resource, ResourceCriteria>() {
+ @Override
+ public PageList<Resource> execute(ResourceCriteria criteria) {
+ return resourceManager.findResourcesByCriteria(subject, criteria);
+ }
+ };
+
+ //initiate first/(total depending on page size) request.
+ CriteriaQuery<Resource, ResourceCriteria> resources = new
CriteriaQuery<Resource, ResourceCriteria>(
+ criteria, queryExecutor);
+
+ start = System.currentTimeMillis();
+ int prevId = 0;
+ //iterate over the entire result set efficiently
+ ArrayList<String> alreadySeen = new ArrayList<String>();
+ int actualCount = 0;
+ for (Resource r : resources) {
+ System.out.println(actualCount + " @@@ " + r.getId() +
":"
+ + ((resourceNames.containsKey(String.valueOf(r.getId()))) ?
"NEW" : "DIRTY") + ":" + r.getName());
+ assert r.getId() > prevId : "Results should be sorted by ID ASC,
something is out of order";
+ prevId = r.getId();
+ actualCount++;
+ resourceNames.remove(String.valueOf(r.getId()));
+ }
+
+ System.out.println("----------- Parsed " + actualCount + "
resource(s) in "
+ + (System.currentTimeMillis() - start) + " ms.");
+
+ //test that entire list parsed spanning multiple pages
+ assert resourceNames.size() == 0 : "Expected resourceNames to be empty.
Still " + resourceNames.size()
+ + " name(s).";
+
+ } finally {
+ getTransactionManager().rollback();
+ }
+ }
+
}
\ No newline at end of file
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
index 5e30b87..ab6a915 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
@@ -27,6 +27,7 @@ import java.util.NoSuchElementException;
import org.rhq.core.domain.criteria.BaseCriteria;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
/** This class provides a way to make PageList results easily iterable with 'for
each','while',etc. loops
* and importantly automatically handles iteration through all PageControl results.
This
@@ -50,9 +51,28 @@ public class CriteriaQuery<T, C extends BaseCriteria> implements
Iterable<T> {
//Executor
private CriteriaQueryExecutor<T, C> queryExecutor;
+ /**
+ * It is important that the <code>criteria</code> includes sorting. If
not then paging is nonsensical as the DB
+ * provides no guarantee of ordering. If no sort is specified, an implicit sort on
ID is added.
+ *
+ * @param criteria The criteria applied to each execution of the fetch. If no sort is
specified, an implicit sort on
+ * ID is added.
+ * @param queryExecutor
+ */
public CriteriaQuery(C criteria, CriteriaQueryExecutor<T, C> queryExecutor) {
this.criteria = criteria;
this.queryExecutor = queryExecutor;
+
+ // make sure we have at least a default sort, otherwise chunking doesn't
work
+ PageControl pageControlOverrides = this.criteria.getPageControlOverrides();
+ if (null != pageControlOverrides) {
+ if (pageControlOverrides.getOrderingFields().isEmpty()) {
+ pageControlOverrides.addDefaultOrderingField("id");
+ }
+
+ } else if (this.criteria.getOrderingFieldNames().isEmpty()) {
+ this.criteria.addSortId(PageOrdering.ASC);
+ }
}
/** Returns iterator for a single page of results as defined by
@@ -104,21 +124,31 @@ public class CriteriaQuery<T, C extends BaseCriteria>
implements Iterable<T> {
if (count == currentPage.getTotalSize()) {
throw new NoSuchElementException();
}
- deletable = null;//reset deletable.
+
+ deletable = null; // reset deletable.
+
//remove all flagged instances of T
if (!forDeletion.isEmpty()) {
currentPage.removeAll(forDeletion);
forDeletion.clear();
}
- PageControl pc = currentPage.getPageControl();
- criteria.setPaging(pc.getPageNumber() + 1, pc.getPageSize());
+ // advance the page. Although strange to be using a page control override
in conjunction with
+ // CriteriaQuery, nonetheless make sure we advance it if it exists,
because the normal setPaging is
+ // ignored when their is an overrides.
+ PageControl pcCurrent = currentPage.getPageControl();
+ PageControl pcOverrides = criteria.getPageControlOverrides();
+
+ if (null != pcOverrides) {
+ pcOverrides.setPageNumber(pcOverrides.getPageNumber() + 1);
+ } else {
+ criteria.setPaging(pcCurrent.getPageNumber() + 1,
pcCurrent.getPageSize());
+ }
+
//help out the GC.
currentPage.clear();
- //move the current pagelist forward one
currentPage = queryExecutor.execute(criteria);
- currentPage.setPageControl(new PageControl(pc.getPageNumber() + 1,
pc.getPageSize()));
iterator = currentPage.iterator();
}
commit ee7aabd4672dde076ed804fcb65c4b84f9d4c5b3
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Wed Feb 20 10:40:34 2013 -0500
small change to help out GC for large parses.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
index 82c4b21..5e30b87 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
@@ -113,6 +113,9 @@ public class CriteriaQuery<T, C extends BaseCriteria> implements
Iterable<T> {
PageControl pc = currentPage.getPageControl();
criteria.setPaging(pc.getPageNumber() + 1, pc.getPageSize());
+ //help out the GC.
+ currentPage.clear();
+
//move the current pagelist forward one
currentPage = queryExecutor.execute(criteria);
currentPage.setPageControl(new PageControl(pc.getPageNumber() + 1,
pc.getPageSize()));
commit ed395405ae926481cf23b1f0d402a69463726ed7
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Wed Feb 20 10:26:02 2013 -0500
Fix issue with CriteriaQuery where no sorting was being applied resulting in dirty
reads for large parses.
diff --git
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
index 6b93f7a..e746deb 100644
---
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
+++
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
@@ -237,9 +237,6 @@ public class ResourceStorageTest extends AbstractEJB3Test {
//verify that all resource objects are actually parsed.
Map<String, Object> resourceNames = new HashMap<String, Object>();
-
- ArrayList<Resource> allResources = new ArrayList<Resource>();
-
int resourceCount = 700; //assuming 200 per page at least 4 pages of results.
try {
@@ -275,8 +272,8 @@ public class ResourceStorageTest extends AbstractEJB3Test {
//query the results and delete the resources
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterName(prefix);
+ criteria.addSortName(PageOrdering.ASC);
criteria.setPaging(0, 47);
- // PageList<Resource> resources =
resourceManager.findResourcesByCriteria(subject, criteria);
//iterate over the results with CriteriaQuery
CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor = new
CriteriaQueryExecutor<Resource, ResourceCriteria>() {
@@ -292,12 +289,16 @@ public class ResourceStorageTest extends AbstractEJB3Test {
start = System.currentTimeMillis();
//iterate over the entire result set efficiently
+ ArrayList<String> alreadySeen = new ArrayList<String>();
+ int actualCount = 0;
for (Resource r : resources) {
- allResources.add(r);
+ actualCount++;
+ // System.out.println(actualCount + " @@@ " +
r.getId() + ":"
+ // +
((resourceNames.containsKey(String.valueOf(r.getId()))) ? "NEW" :
"DIRTY") + ":" + r.getName());
resourceNames.remove(String.valueOf(r.getId()));
}
- System.out.println("----------- Parsed " + resourceCount + "
resource(s) in "
+ System.out.println("----------- Parsed " + actualCount + "
resource(s) in "
+ (System.currentTimeMillis() - start)
+ " ms.");
commit e705b8b0d4f1013079d8370e172034e5985f22db
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Wed Feb 20 09:17:20 2013 -0500
Add delete support to CriteriaQuery during iteration process.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
index eb65599..82c4b21 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
@@ -20,6 +20,7 @@
*/
package org.rhq.enterprise.server.util;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.NoSuchElementException;
@@ -27,13 +28,13 @@ import org.rhq.core.domain.criteria.BaseCriteria;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
-/** This class provides a way to make PageList results easily iterable for 'for
each' loops
+/** This class provides a way to make PageList results easily iterable with 'for
each','while',etc. loops
* and importantly automatically handles iteration through all PageControl results.
This
* means that with a CriteriaQuery instance once can do:
*
* for (Resource entity : query) {
*
- * and automatically page through the results in PageControl.getPageSize(def. 200)
chunks.
+ * and automatically page through all of the results in PageControl.getPageSize(def. 200)
chunks.
*
* @author John Sanda
* @author Simeon Pinder
@@ -71,14 +72,18 @@ public class CriteriaQuery<T, C extends BaseCriteria> implements
Iterable<T> {
// i)creates page sized chunks results
// ii)at the end of each pageList, moves the iterator to next page and continues
iteration
//
- //NOTE: Assumes criteria page iteration starts with page 0. If that is not the case
- private class QueryResultsIterator implements Iterator<T> {
+ //NOTE: Assumes criteria page iteration starts with page 0. Will continue to iterate
over N members.
+ protected class QueryResultsIterator implements Iterator<T> {
private int count;
private PageList<T> currentPage;
private Iterator<T> iterator;
+ private T deletable = null;
+
+ private ArrayList<T> forDeletion = new ArrayList<T>();
+
/**The first pageList returned by the criteria instance is where iteration
begins.
* @param firstPage
*/
@@ -99,6 +104,12 @@ public class CriteriaQuery<T, C extends BaseCriteria> implements
Iterable<T> {
if (count == currentPage.getTotalSize()) {
throw new NoSuchElementException();
}
+ deletable = null;//reset deletable.
+ //remove all flagged instances of T
+ if (!forDeletion.isEmpty()) {
+ currentPage.removeAll(forDeletion);
+ forDeletion.clear();
+ }
PageControl pc = currentPage.getPageControl();
criteria.setPaging(pc.getPageNumber() + 1, pc.getPageSize());
@@ -109,22 +120,20 @@ public class CriteriaQuery<T, C extends BaseCriteria>
implements Iterable<T> {
}
T next = iterator.next();
+ deletable = next;
count++;
return next;
}
@Override
public void remove() {
- throw new UnsupportedOperationException("This iterator does not support
removal.");
- }
- }
-
- public PageList<T> loadAsList() {
- Iterator<T> iterator = iterator();
- PageList<T> list = new PageList<T>();
- while (iterator.hasNext()) {
- list.add(iterator.next());
+ if (deletable != null) {
+ forDeletion.add(deletable);
+ deletable = null;
+ } else {
+ throw new IllegalStateException(
+ "Not allowed to call remove() without calling next() just before
this call.");
+ }
}
- return list;
}
}
commit d6081f71933379e8d1455f7003eac5fcbaae5d1b
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 18 10:35:20 2013 -0500
Fix issue with conversion to CriteriaQuery usage.
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
index 9fd49a7..368f5d8 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
@@ -125,7 +125,8 @@ public class RepoScriptSourceProvider extends
BaseRhqSchemeScriptSourceProvider
CriteriaQuery<PackageAndLatestVersionComposite, PackageCriteria>
pvs = new CriteriaQuery<PackageAndLatestVersionComposite, PackageCriteria>(
pCrit, pQueryExecutor);
- if (!pvs.iterator().hasNext()) {
+ // if (!pvs.iterator().hasNext()) {
+ if (pvs.iterator().hasNext()) {
PackageAndLatestVersionComposite pv = pvs.iterator().next();
byte[] bytes =
repoManager.getPackageVersionBytes(rhqFacade.getSubject(), repo.getId(), pv
commit b22eeffcdaf0f5f37033705bd697faa0327d5076
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 18 06:05:15 2013 -0500
Removing earlier paging/CriteriaQuery changes as REST will be handling this
differently.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
index 6b4c4ba..032bf97 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
@@ -83,8 +83,6 @@ import org.rhq.enterprise.server.rest.domain.GroupRest;
import org.rhq.enterprise.server.rest.domain.Link;
import org.rhq.enterprise.server.rest.domain.MetricSchedule;
import org.rhq.enterprise.server.rest.domain.ResourceWithType;
-import org.rhq.enterprise.server.util.CriteriaQuery;
-import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* Deal with group related things.
@@ -124,16 +122,7 @@ public class GroupHandlerBean extends AbstractRestBean {
criteria.addFilterName(q);
}
- //Use CriteriaQuery to automatically chunk/page through criteria query results
- CriteriaQueryExecutor<ResourceGroup, ResourceGroupCriteria> queryExecutor =
new CriteriaQueryExecutor<ResourceGroup, ResourceGroupCriteria>() {
- @Override
- public PageList<ResourceGroup> execute(ResourceGroupCriteria criteria)
{
- return resourceGroupManager.findResourceGroupsByCriteria(caller,
criteria);
- }
- };
-
- CriteriaQuery<ResourceGroup, ResourceGroupCriteria> groups = new
CriteriaQuery<ResourceGroup, ResourceGroupCriteria>(
- criteria, queryExecutor);
+ PageList<ResourceGroup> groups =
resourceGroupManager.findResourceGroupsByCriteria(caller, criteria);
List<GroupRest> list = new ArrayList<GroupRest>();
for (ResourceGroup group : groups) {
@@ -415,16 +404,7 @@ public class GroupHandlerBean extends AbstractRestBean {
criteria.addFilterName(q);
}
- //Use CriteriaQuery to automatically chunk/page through criteria query results
- CriteriaQueryExecutor<GroupDefinition, ResourceGroupDefinitionCriteria>
queryExecutor = new CriteriaQueryExecutor<GroupDefinition,
ResourceGroupDefinitionCriteria>() {
- @Override
- public PageList<GroupDefinition>
execute(ResourceGroupDefinitionCriteria criteria) {
- return definitionManager.findGroupDefinitionsByCriteria(caller,
criteria);
- }
- };
-
- CriteriaQuery<GroupDefinition, ResourceGroupDefinitionCriteria> gdlist =
new CriteriaQuery<GroupDefinition, ResourceGroupDefinitionCriteria>(
- criteria, queryExecutor);
+ PageList<GroupDefinition> gdlist =
definitionManager.findGroupDefinitionsByCriteria(caller, criteria);
List<GroupDefinitionRest> list = new
ArrayList<GroupDefinitionRest>();
for (GroupDefinition def: gdlist) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
index 2e8f99c..a94b81c 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
@@ -76,8 +76,6 @@ import org.rhq.enterprise.server.rest.domain.OperationDefinitionRest;
import org.rhq.enterprise.server.rest.domain.OperationHistoryRest;
import org.rhq.enterprise.server.rest.domain.OperationRest;
import org.rhq.enterprise.server.rest.domain.SimplePropDef;
-import org.rhq.enterprise.server.util.CriteriaQuery;
-import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* Deal with operations
@@ -390,16 +388,7 @@ public class OperationsHandlerBean extends AbstractRestBean {
criteria.addSortEndTime(PageOrdering.DESC);
- //Use CriteriaQuery to automatically chunk/page through criteria query results
- CriteriaQueryExecutor<ResourceOperationHistory,
ResourceOperationHistoryCriteria> queryExecutor = new
CriteriaQueryExecutor<ResourceOperationHistory, ResourceOperationHistoryCriteria>()
{
- @Override
- public PageList<ResourceOperationHistory>
execute(ResourceOperationHistoryCriteria criteria) {
- return opsManager.findResourceOperationHistoriesByCriteria(caller,
criteria);
- }
- };
-
- CriteriaQuery<ResourceOperationHistory, ResourceOperationHistoryCriteria>
list = new CriteriaQuery<ResourceOperationHistory,
ResourceOperationHistoryCriteria>(
- criteria, queryExecutor);
+ PageList<ResourceOperationHistory> list =
opsManager.findResourceOperationHistoriesByCriteria(caller, criteria);
List<OperationHistoryRest> result = new
ArrayList<OperationHistoryRest>();
for (ResourceOperationHistory roh : list) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
index b748833..f518952 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
@@ -329,7 +329,6 @@ public class ResourceHandlerBean extends AbstractRestBean {
criteria.addFilterInterval(start,end);
criteria.addFilterResourceId(resourceId);
criteria.addSortStartTime(PageOrdering.DESC);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
List<Availability> points =
availMgr.findAvailabilityByCriteria(caller,criteria);
List<AvailabilityRest> ret = new
ArrayList<AvailabilityRest>(points.size());
@@ -524,7 +523,6 @@ public class ResourceHandlerBean extends AbstractRestBean {
public List<Link> getAlertsForResource(@ApiParam("Id of the resource to
query") @PathParam("id") int resourceId) {
AlertCriteria criteria = new AlertCriteria();
criteria.addFilterResourceIds(resourceId);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
List<Alert> alerts = alertManager.findAlertsByCriteria(caller, criteria);
List<Link> links = new ArrayList<Link>(alerts.size());
commit 9ba9f80aaa95d4f5ee3e209d26315d1cb70e12b8
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 18 05:43:55 2013 -0500
Remove any paging changes as REST will handle paging differently.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
index e550bd2..becb680 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
@@ -61,14 +61,11 @@ import org.rhq.core.domain.event.EventSource;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.event.EventManagerLocal;
import org.rhq.enterprise.server.rest.domain.EventDefinitionRest;
import org.rhq.enterprise.server.rest.domain.EventRest;
import org.rhq.enterprise.server.rest.domain.EventSourceRest;
-import org.rhq.enterprise.server.util.CriteriaQuery;
-import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* Handle event related things
@@ -308,16 +305,8 @@ public class EventHandlerBean extends AbstractRestBean {
private Response.ResponseBuilder getEventsAsBuilderForCriteria(HttpHeaders headers,
EventCriteria criteria) {
- //Use CriteriaQuery to automatically chunk/page through criteria query results
- CriteriaQueryExecutor<Event, EventCriteria> queryExecutor = new
CriteriaQueryExecutor<Event, EventCriteria>() {
- @Override
- public PageList<Event> execute(EventCriteria criteria) {
- return eventManager.findEventsByCriteria(caller, criteria);
- }
- };
-
- CriteriaQuery<Event, EventCriteria> eventList = new CriteriaQuery<Event,
EventCriteria>(criteria, queryExecutor);
- List<EventRest> restEvents = new ArrayList<EventRest>();
+ List<Event> eventList = eventManager.findEventsByCriteria(caller,
criteria);
+ List<EventRest> restEvents = new
ArrayList<EventRest>(eventList.size());
for (Event event : eventList) {
restEvents.add(convertEvent(event));
}
commit 2cb4c49448eeb7730ba064a2692929ddc45aa9c1
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 18 05:37:31 2013 -0500
Commenting out unused code. No need to execute the query if we don't process the
results.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
index 6521730..a1ff092 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
@@ -83,7 +83,6 @@ import
org.rhq.core.domain.criteria.GroupResourceConfigurationUpdateCriteria;
import org.rhq.core.domain.criteria.PluginConfigurationUpdateCriteria;
import org.rhq.core.domain.criteria.ResourceConfigurationUpdateCriteria;
import org.rhq.core.domain.criteria.ResourceCriteria;
-import org.rhq.core.domain.criteria.ResourceGroupCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceError;
@@ -2625,12 +2624,12 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
}
}
} else if (tt == PropertyOptionsSource.TargetType.GROUP) {
- // for groups we need to talk to the group manager
- ResourceGroupCriteria criteria = new ResourceGroupCriteria();
- criteria.setSearchExpression(expression);
-
- //?? spinder 2-12-13: We don't do anything with the composite
results here?
- resourceGroupManager.findResourceGroupCompositesByCriteria(subject,
criteria);
+ // spinder 2-15-13: commenting out this code below as we don't appear
to be using any of it. Half done.
+ // // for groups we need to talk to the group manager
+ // ResourceGroupCriteria criteria = new
ResourceGroupCriteria();
+ // criteria.setSearchExpression(expression);
+ //
+ //
resourceGroupManager.findResourceGroupCompositesByCriteria(subject, criteria);
}
// TODO plugin and resourceType
}
commit bacb200a03eb9ac474a61bf10c9121fd56e4e13e
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 18 05:32:12 2013 -0500
Removing criteriaQuery usage here as paging needs to be handled by caller instead.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
index 239cf35..5d149a1 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
@@ -82,8 +82,6 @@ import org.rhq.enterprise.server.agentclient.AgentClient;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.plugin.pc.drift.DriftChangeSetSummary;
-import org.rhq.enterprise.server.util.CriteriaQuery;
-import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
@@ -180,24 +178,13 @@ public class JPADriftServerBean implements JPADriftServerLocal {
}
@Override
- public PageList<DriftComposite> findDriftCompositesByCriteria(final Subject
subject, DriftCriteria criteria) {
+ public PageList<DriftComposite> findDriftCompositesByCriteria(Subject subject,
DriftCriteria criteria) {
JPADriftCriteria jpaCriteria = (criteria instanceof JPADriftCriteria) ?
(JPADriftCriteria) criteria
: new JPADriftCriteria(criteria);
jpaCriteria.fetchChangeSet(true);
-
- //Use CriteriaQuery to automatically chunk/page through criteria query results
- CriteriaQueryExecutor<JPADrift, JPADriftCriteria> queryExecutor = new
CriteriaQueryExecutor<JPADrift, JPADriftCriteria>() {
- @Override
- public PageList<JPADrift> execute(JPADriftCriteria jpaCriteria) {
- return findDriftsByCriteria(subject, jpaCriteria);
- }
- };
-
- CriteriaQuery<JPADrift, JPADriftCriteria> drifts = new
CriteriaQuery<JPADrift, JPADriftCriteria>(jpaCriteria,
- queryExecutor);
-
+ PageList<JPADrift> drifts = findDriftsByCriteria(subject, jpaCriteria);
PageList<DriftComposite> result = new PageList<DriftComposite>();
for (JPADrift drift : drifts) {
JPADriftChangeSet changeSet = drift.getChangeSet();
commit 835f4a546bfdd626c9519e3a4c2b9245e2cfee1a
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 18 05:25:30 2013 -0500
Remove this occurrence of CriteriaQuery usage.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
index 68af1e7..f749c9c 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
@@ -111,8 +111,6 @@ import
org.rhq.enterprise.server.plugin.pc.content.PackageTypeBehavior;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeNotFoundException;
-import org.rhq.enterprise.server.util.CriteriaQuery;
-import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
@@ -1595,26 +1593,17 @@ public class ContentManagerBean implements ContentManagerLocal,
ContentManagerRe
return runner.execute();
}
- public PageList<PackageAndLatestVersionComposite>
findPackagesWithLatestVersion(final Subject subject,
+ public PageList<PackageAndLatestVersionComposite>
findPackagesWithLatestVersion(Subject subject,
PackageCriteria criteria) {
if (criteria.getFilterRepoId() == null) {
throw new IllegalArgumentException("The criteria query has to have a
filter for a specific repo.");
}
criteria.fetchVersions(true);
+ PageList<Package> packages = findPackagesByCriteria(subject, criteria);
- //Use CriteriaQuery to automatically chunk/page through criteria query results
- CriteriaQueryExecutor<Package, PackageCriteria> queryExecutor = new
CriteriaQueryExecutor<Package, PackageCriteria>() {
- @Override
- public PageList<Package> execute(PackageCriteria criteria) {
- return findPackagesByCriteria(subject, criteria);
- }
- };
-
- CriteriaQuery<Package, PackageCriteria> packages = new
CriteriaQuery<Package, PackageCriteria>(criteria,
- queryExecutor);
-
- PageList<PackageAndLatestVersionComposite> ret = new
PageList<PackageAndLatestVersionComposite>();
+ PageList<PackageAndLatestVersionComposite> ret = new
PageList<PackageAndLatestVersionComposite>(
+ packages.getTotalSize(), packages.getPageControl());
for(Package p : packages) {
PackageVersion latest = repoManager.getLatestPackageVersion(subject,
p.getId(), criteria.getFilterRepoId());
commit f7146a6313337bfe23b9e0a52edb817b5df4e222
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 18 05:17:00 2013 -0500
Revert to just use clearPaging as CriteriaQuery usage not needed.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
index 711a653..a52c4c2 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
@@ -1,6 +1,6 @@
package org.rhq.enterprise.server.resource.metadata;
-import java.util.ArrayList;
+import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
@@ -12,11 +12,8 @@ import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.AlertDefinitionCriteria;
import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.alert.AlertDefinitionManagerLocal;
import org.rhq.enterprise.server.alert.AlertTemplateManagerLocal;
-import org.rhq.enterprise.server.util.CriteriaQuery;
-import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
@Stateless
public class AlertMetadataManagerBean implements AlertMetadataManagerLocal {
@@ -30,32 +27,21 @@ public class AlertMetadataManagerBean implements
AlertMetadataManagerLocal {
private AlertTemplateManagerLocal alertTemplateMgr;
@Override
- public void deleteAlertTemplates(final Subject subject, ResourceType resourceType) {
+ public void deleteAlertTemplates(Subject subject, ResourceType resourceType) {
log.debug("Deleting alert templates for " + resourceType);
AlertDefinitionCriteria criteria = new AlertDefinitionCriteria();
criteria.addFilterAlertTemplateResourceTypeId(resourceType.getId());
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- //Use CriteriaQuery to automatically chunk/page through criteria query results
- CriteriaQueryExecutor<AlertDefinition, AlertDefinitionCriteria>
queryExecutor = new CriteriaQueryExecutor<AlertDefinition,
AlertDefinitionCriteria>() {
- @Override
- public PageList<AlertDefinition> execute(AlertDefinitionCriteria
criteria) {
- return alertDefinitionMgr.findAlertDefinitionsByCriteria(subject,
criteria);
- }
- };
+ List<AlertDefinition> templates =
alertDefinitionMgr.findAlertDefinitionsByCriteria(subject, criteria);
- CriteriaQuery<AlertDefinition, AlertDefinitionCriteria> templates = new
CriteriaQuery<AlertDefinition, AlertDefinitionCriteria>(
- criteria, queryExecutor);
-
- ArrayList<Integer> templateIdList = new ArrayList<Integer>();
+ Integer[] templateIds = new Integer[templates.size()];
int i = 0;
for (AlertDefinition template : templates) {
- templateIdList.add(template.getId());
+ templateIds[i++] = template.getId();
}
- Integer[] templateIds = new Integer[templateIdList.size()];
- templateIds = templateIdList.toArray(templateIds);
-
// Alert definitions associated with individual resources and with groups
// are deleted as part of resource deletion. This commit adds support for
// templates which are alert definitions associated with the resource
commit 3f33214af914fb3411f0d297020347f275cfc95b
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 18 05:10:37 2013 -0500
Revert to only clearpaging updates here as CriteriaQuery usage is unnecessary.
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
index 773176b..9b20aef 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
@@ -74,8 +74,6 @@ import
org.rhq.enterprise.server.measurement.MeasurementDefinitionManagerRemote;
import org.rhq.enterprise.server.operation.OperationManagerRemote;
import org.rhq.enterprise.server.resource.ResourceManagerRemote;
import org.rhq.enterprise.server.resource.ResourceTypeNotFoundException;
-import org.rhq.enterprise.server.util.CriteriaQuery;
-import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* Implements a local object that exposes resource related data as
@@ -237,18 +235,9 @@ public class ResourceClientProxy {
private void initChildren() {
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterParentResourceId(resourceId);
-
- //Use CriteriaQuery to automatically chunk/page through criteria query results
- CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor = new
CriteriaQueryExecutor<Resource, ResourceCriteria>() {
- @Override
- public PageList<Resource> execute(ResourceCriteria criteria) {
- return
remoteClient.getProxy(ResourceManagerRemote.class).findResourcesByCriteria(
- remoteClient.getSubject(), criteria);
- }
- };
-
- CriteriaQuery<Resource, ResourceCriteria> childResources = new
CriteriaQuery<Resource, ResourceCriteria>(
- criteria, queryExecutor);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+ PageList<Resource> childResources =
remoteClient.getProxy(ResourceManagerRemote.class).findResourcesByCriteria(
+ remoteClient.getSubject(), criteria);
for (Resource child : childResources) {
this.children.add(proxyFactory.getResource(child.getId()));
@@ -258,26 +247,14 @@ public class ResourceClientProxy {
private void initMeasurements() {
MeasurementDefinitionCriteria criteria = new MeasurementDefinitionCriteria();
criteria.addFilterResourceTypeId(resource.getResourceType().getId());
- //
criteria.addFilterResourceTypeName(resource.getResourceType().getName());
- // criteria.setStrict(true);
-
- //Use CriteriaQuery to automatically chunk/page through criteria query results
- CriteriaQueryExecutor<MeasurementDefinition, MeasurementDefinitionCriteria>
queryExecutor = new CriteriaQueryExecutor<MeasurementDefinition,
MeasurementDefinitionCriteria>() {
- @Override
- public PageList<MeasurementDefinition>
execute(MeasurementDefinitionCriteria criteria) {
- return remoteClient.getProxy(MeasurementDefinitionManagerRemote.class)
- .findMeasurementDefinitionsByCriteria(remoteClient.getSubject(),
criteria);
- }
- };
-
- CriteriaQuery<MeasurementDefinition, MeasurementDefinitionCriteria>
measurementDefIterator = new CriteriaQuery<MeasurementDefinition,
MeasurementDefinitionCriteria>(
- criteria, queryExecutor);
+ //
criteria.addFilterResourceTypeName(resource.getResourceType().getName());
+ // criteria.setStrict(true);
- this.measurementDefinitions = new PageList<MeasurementDefinition>();
+ this.measurementDefinitions =
remoteClient.getProxy(MeasurementDefinitionManagerRemote.class)
+ .findMeasurementDefinitionsByCriteria(remoteClient.getSubject(), criteria);
this.measurementMap = new HashMap<String, Measurement>();
- for (MeasurementDefinition def : measurementDefIterator) {
- this.measurementDefinitions.add(def);
+ for (MeasurementDefinition def : measurementDefinitions) {
Measurement m = new Measurement(def);
String name = def.getDisplayName().replaceAll("\\W",
"");
commit 8d55baaac5f93f222dd14383884fe8538d752cc5
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 18 04:52:36 2013 -0500
Remove CriteriaQuery usage as unnecessary here.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
index e005121..13baa3c 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
@@ -126,8 +126,6 @@ import
org.rhq.enterprise.server.resource.disambiguation.DisambiguationUpdateStr
import org.rhq.enterprise.server.resource.disambiguation.Disambiguator;
import org.rhq.enterprise.server.resource.group.ResourceGroupDeleteException;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
-import org.rhq.enterprise.server.util.CriteriaQuery;
-import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
import org.rhq.enterprise.server.util.QueryUtility;
@@ -882,7 +880,7 @@ public class ResourceManagerBean implements ResourceManagerLocal,
ResourceManage
return resourceLineage;
}
- public Map<Integer, String> getResourcesAncestry(final Subject subject,
Integer[] resourceIds,
+ public Map<Integer, String> getResourcesAncestry(Subject subject, Integer[]
resourceIds,
ResourceAncestryFormat format) {
Map<Integer, String> result = new HashMap<Integer,
String>(resourceIds.length);
@@ -890,20 +888,10 @@ public class ResourceManagerBean implements ResourceManagerLocal,
ResourceManage
return result;
}
- final ResourceCriteria resourceCriteria = new ResourceCriteria();
+ ResourceCriteria resourceCriteria = new ResourceCriteria();
resourceCriteria.addFilterIds(resourceIds);
resourceCriteria.fetchResourceType(true);
-
- //Use CriteriaQuery to automatically chunk/page through criteria query results
- CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor = new
CriteriaQueryExecutor<Resource, ResourceCriteria>() {
- @Override
- public PageList<Resource> execute(ResourceCriteria criteria) {
- return findResourcesByCriteria(subject, resourceCriteria);
- }
- };
-
- CriteriaQuery<Resource, ResourceCriteria> resources = new
CriteriaQuery<Resource, ResourceCriteria>(
- resourceCriteria, queryExecutor);
+ List<Resource> resources = findResourcesByCriteria(subject,
resourceCriteria);
if (ResourceAncestryFormat.RAW == format) {
for (Resource resource : resources) {
@@ -925,36 +913,17 @@ public class ResourceManagerBean implements ResourceManagerLocal,
ResourceManage
// In addition to the types of the result resources, get the types of their
ancestry
typesSet.addAll(getAncestryTypeIds(ancestries));
- final ResourceTypeCriteria resourceTypeCriteria = new ResourceTypeCriteria();
+ ResourceTypeCriteria resourceTypeCriteria = new ResourceTypeCriteria();
resourceTypeCriteria.addFilterIds(typesSet.toArray(new
Integer[typesSet.size()]));
-
- //Use CriteriaQuery to automatically chunk/page through criteria query results
- CriteriaQueryExecutor<ResourceType, ResourceTypeCriteria> rtQueryExecutor
=
- new CriteriaQueryExecutor<ResourceType, ResourceTypeCriteria>() {
- @Override
- public PageList<ResourceType> execute(ResourceTypeCriteria
criteria) {
- return typeManager.findResourceTypesByCriteria(subject,
resourceTypeCriteria);
- }
- };
-
- CriteriaQuery<ResourceType, ResourceTypeCriteria> types =
- new CriteriaQuery<ResourceType,
ResourceTypeCriteria>(resourceTypeCriteria, rtQueryExecutor);
+ List<ResourceType> types = typeManager.findResourceTypesByCriteria(subject,
resourceTypeCriteria);
for (Resource resource : resources) {
- String decodedAncestry = getDecodedAncestry(resource,
loadAsList(types.iterator()), format);
+ String decodedAncestry = getDecodedAncestry(resource, types, format);
result.put(resource.getId(), decodedAncestry);
}
return result;
}
- private List<ResourceType> loadAsList(Iterator<ResourceType> iterator) {
- PageList<ResourceType> list = new PageList<ResourceType>();
- while(iterator.hasNext()){
- list.add(iterator.next());
- }
- return list;
- }
-
/**
* Get the complete set of resource type Ids in the ancestries provided. This is
useful for
* being able to load all the types in advance of generating decoded values.
commit 1d2618a3e388ad46f390732bc5101fef67c94e8c
Merge: db38ce2 f7409c5
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Sun Feb 17 22:19:02 2013 -0500
Merge branch 'track_master' into spinder/criteriaUsage
Conflicts:
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
commit db38ce2e7137d4507194ee296fbc51358b6719ed
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Sun Feb 17 22:10:41 2013 -0500
Add test to exercise CriteriaQuery iteration for large result sets.
diff --git
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
index d748109..6b93f7a 100644
---
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
+++
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/test/ResourceStorageTest.java
@@ -18,9 +18,13 @@
*/
package org.rhq.enterprise.server.resource.test;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Random;
+import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.apache.commons.logging.Log;
@@ -28,11 +32,15 @@ import org.apache.commons.logging.LogFactory;
import org.testng.annotations.Test;
import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.domain.authz.Role;
+import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.resource.group.GroupCategory;
+import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
import org.rhq.core.domain.util.OrderingField;
import org.rhq.core.domain.util.PageControl;
@@ -44,7 +52,10 @@ import org.rhq.enterprise.server.discovery.DiscoveryBossLocal;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.LookupUtil;
+import org.rhq.enterprise.server.util.SessionTestHelper;
public class ResourceStorageTest extends AbstractEJB3Test {
private Log log = LogFactory.getLog(ResourceStorageTest.class);
@@ -208,4 +219,94 @@ public class ResourceStorageTest extends AbstractEJB3Test {
Subject rhqadmin = subjectManager.loginUnauthenticated("rhqadmin");
System.out.println(rhqadmin);
}
+
+ /** Test creates a large number of resources and pages through them using
CriteriaQuery.
+ * NOTE: CriteriaQuery uses PageList instances underneath and are susceptible to
dirty
+ * read issues if the total number of resources being parsed is i)very large or
ii)processing
+ * each instance takes a significant amount of time. Ex. Begin parsing all resource
types,
+ * while plugin update is removing some of those same types.
+ *
+ * @throws Exception
+ */
+ @SuppressWarnings("unused")
+ @Test(groups = "integration.ejb3")
+ public void testParsingCriteriaQueryResults() throws Exception {
+ getTransactionManager().begin();
+ EntityManager entityMgr = getEntityManager();
+ final ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
+
+ //verify that all resource objects are actually parsed.
+ Map<String, Object> resourceNames = new HashMap<String, Object>();
+
+ ArrayList<Resource> allResources = new ArrayList<Resource>();
+
+ int resourceCount = 700; //assuming 200 per page at least 4 pages of results.
+
+ try {
+ final Subject subject = SessionTestHelper.createNewSubject(entityMgr,
"testSubject");
+
+ Role roleWithSubject = SessionTestHelper.createNewRoleForSubject(entityMgr,
subject, "role with subject");
+ roleWithSubject.addPermission(Permission.VIEW_RESOURCE);
+
+ ResourceGroup group =
SessionTestHelper.createNewCompatibleGroupForRole(entityMgr, roleWithSubject,
+ "accessible group");
+
+ String tuid = "" + new Random().nextInt();
+ //create large number of resources
+ String prefix = "largeResultSet-" + tuid + "-";
+ System.out.println("-------- Creating " + resourceCount
+ + " resource(s). This may take a while ....");
+
+ long start = System.currentTimeMillis();
+ for (int i = 0; i < resourceCount; i++) {
+ String name = prefix + i;
+ Resource r = SessionTestHelper.createNewResourceForGroup(entityMgr,
group, name);
+ //store away each resource name/key
+ resourceNames.put(String.valueOf(r.getId()), name);
+ }
+ entityMgr.flush();
+
+ System.out.println("----------- Created " + resourceCount + "
resource(s) in "
+ + (System.currentTimeMillis() - start)
+ + " ms.");
+
+ assert resourceNames.size() == resourceCount;//assert all resources
loaded/created
+
+ //query the results and delete the resources
+ ResourceCriteria criteria = new ResourceCriteria();
+ criteria.addFilterName(prefix);
+ criteria.setPaging(0, 47);
+ // PageList<Resource> resources =
resourceManager.findResourcesByCriteria(subject, criteria);
+
+ //iterate over the results with CriteriaQuery
+ CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor = new
CriteriaQueryExecutor<Resource, ResourceCriteria>() {
+ @Override
+ public PageList<Resource> execute(ResourceCriteria criteria) {
+ return resourceManager.findResourcesByCriteria(subject, criteria);
+ }
+ };
+
+ //initiate first/(total depending on page size) request.
+ CriteriaQuery<Resource, ResourceCriteria> resources = new
CriteriaQuery<Resource, ResourceCriteria>(
+ criteria, queryExecutor);
+
+ start = System.currentTimeMillis();
+ //iterate over the entire result set efficiently
+ for (Resource r : resources) {
+ allResources.add(r);
+ resourceNames.remove(String.valueOf(r.getId()));
+ }
+
+ System.out.println("----------- Parsed " + resourceCount + "
resource(s) in "
+ + (System.currentTimeMillis() - start)
+ + " ms.");
+
+ //test that entire list parsed spanning multiple pages
+ assert resourceNames.size() == 0 : "Expected resourceNames to be empty.
Still " + resourceNames.size()
+ + " name(s).";
+
+ } finally {
+ getTransactionManager().rollback();
+ }
+ }
}
\ No newline at end of file
commit 42593fc93ee5fffe4c270b60fedcce0101a25e66
Author: Thomas Segismont <tsegismo(a)redhat.com>
Date: Thu Feb 14 18:23:36 2013 +0100
Fix JMX plugin test failure
diff --git a/modules/plugins/jmx/src/test/java/org/rhq/plugins/jmx/test/JMXPluginTest.java
b/modules/plugins/jmx/src/test/java/org/rhq/plugins/jmx/test/JMXPluginTest.java
index b841a38..9757c7a 100644
--- a/modules/plugins/jmx/src/test/java/org/rhq/plugins/jmx/test/JMXPluginTest.java
+++ b/modules/plugins/jmx/src/test/java/org/rhq/plugins/jmx/test/JMXPluginTest.java
@@ -72,8 +72,6 @@ import org.rhq.plugins.jmx.util.JvmResourceKey;
* @author Greg Hinkle
* @author Ian Springer
*/
-// Disabled until we find a fix for Sigar getProcCredName issue
-@Test(enabled = false)
public class JMXPluginTest {
private static final int JMX_REMOTING_PORT1 = 9921;
@@ -95,8 +93,9 @@ public class JMXPluginTest {
this.testServerJvms.add(startTestServerJvm("-Dcom.sun.management.jmxremote.port="
+ JMX_REMOTING_PORT1,
"-Dcom.sun.management.jmxremote.ssl=false",
"-Dcom.sun.management.jmxremote.authenticate=false"));
- this.testServerJvms.add(startTestServerJvm("-D" +
JMXDiscoveryComponent.SYSPROP_RHQ_RESOURCE_KEY + "="
- + EXPLICIT_RESOURCE_KEY1));
+ // FIXME: Disabled until we find a fix for Sigar getProcCredName issue
+ // this.testServerJvms.add(startTestServerJvm("-D" +
JMXDiscoveryComponent.SYSPROP_RHQ_RESOURCE_KEY + "="
+ // + EXPLICIT_RESOURCE_KEY1));
this.testServerJvms.add(startTestServerJvm("-Dcom.sun.management.jmxremote.port="
+ JMX_REMOTING_PORT2,
"-Dcom.sun.management.jmxremote.ssl=false",
"-Dcom.sun.management.jmxremote.authenticate=false",
@@ -206,7 +205,8 @@ public class JMXPluginTest {
}
}
assert foundJmxRemotingServer : "JMX Remoting server not found.";
- assert foundExplicitKey1Server : "Explicit key server not found.";
+ // FIXME: Disabled until we find a fix for Sigar getProcCredName issue
+ //assert foundExplicitKey1Server : "Explicit key server not found.";
assert foundExplicitKey2Server : "JMX Remoting + explicit key server not
found.";
}
commit e7311690dd0c28a9d75b6b7a481291bcd13634db
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Wed Feb 13 20:09:02 2013 +0100
Fix the expectations of the JMock-based apache plugin integration tests
after the fixes in the inventory report processing that changed the workflow
slightly.
This should make the apache integration tests pass again.
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
index a7f6697..37d8433 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
@@ -117,7 +117,7 @@ public class FakeServerInventory {
InventoryReport inventoryReport = (InventoryReport)
invocation.getParameter(0);
for (Resource res : inventoryReport.getAddedRoots()) {
- Resource persisted = fakePersist(res, judge, new
HashSet<String>());
+ Resource persisted = fakePersist(res, requiredInventoryStatus,
new HashSet<String>());
if (res.getParentResource() == Resource.ROOT) {
platform = persisted;
@@ -333,7 +333,7 @@ public class FakeServerInventory {
}
}
- private Resource fakePersist(Resource agentSideResource, InventoryStatusJudge
statusJudge,
+ private Resource fakePersist(Resource agentSideResource, InventoryStatus
requiredInventoryStatus,
Set<String> inProgressUUIds) {
Resource persisted = resourceStore.get(agentSideResource.getUuid());
if (!inProgressUUIds.add(agentSideResource.getUuid())) {
commit 5c5706794ad060158ca832fcbd876dedb811d716
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Feb 14 15:28:02 2013 +0100
[BZ 909157 - Operation parameters are not shown in schedule operation details.] If the
method refreshOperationParametersItem() is called when scheduling a new operation, the
existent parameters are not forget.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
index 0f54af0..8436c2ab 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
@@ -355,7 +355,6 @@ public abstract class AbstractOperationScheduleDetailsView extends
this.operationParameters = (Configuration) record
.getAttributeAsObject(AbstractOperationScheduleDataSource.Field.PARAMETERS);
-
super.editExistingRecord(record);
}
@@ -426,11 +425,14 @@ public abstract class AbstractOperationScheduleDetailsView extends
private void refreshOperationParametersItem() {
String operationName = getSelectedOperationName();
String value;
- operationParameters = null; // reset params between dropdown selects
- // make sure we wipe out anything left by the previous op def
- for (Canvas child : this.operationParametersConfigurationHolder.getChildren()) {
- child.destroy();
+ if (isNewRecord()) { // BZ 909157: do it only for new schedule
+ operationParameters = null; // reset params between dropdown selects
+ // make sure we wipe out anything left by the previous op def
+ for (Canvas child :
this.operationParametersConfigurationHolder.getChildren()) {
+ child.destroy();
+ }
}
+
if (operationName == null) {
value = "<i>" +
MSG.view_operationScheduleDetails_fieldDefault_parameters() + "</i>";
this.operationParametersConfigurationHolder.hide();
@@ -453,8 +455,6 @@ public abstract class AbstractOperationScheduleDetailsView extends
ConfigurationTemplate defaultTemplate =
parametersDefinition.getDefaultTemplate();
this.operationParameters = (defaultTemplate != null) ?
defaultTemplate.createConfiguration()
: new Configuration();
- } else {
- this.operationParameters = new Configuration();
}
ConfigurationGWTServiceAsync configurationService =
GWTServiceLookup.getConfigurationService();
commit 56f8cf4ff1a4ef2c3aa7959d25487e57897778bb
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Feb 14 09:22:47 2013 -0500
installer now provides a "--force" option - this lets you re-run the
installer even if you didn't set autoinstall.enabled=true
and it also lets you attempt another installation if a previous one failed in the
middle of its prior attempt.
diff --git
a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java
b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java
index 48defbc..b8a83fc 100644
---
a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java
+++
b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java
@@ -157,6 +157,7 @@ public class Installer {
usage.append("\t--host=<hostname>, -h: hostname where the app server
is running").append("\n");
usage.append("\t--port=<port>, -p: talk to the app server over this
management port").append("\n");
usage.append("\t--test, -t: test the validity of the server properties
(install not performed)").append("\n");
+ usage.append("\t--force, -f: force the installer to try to install
everything").append("\n");
usage.append("\t--listservers, -l: show list of known installed servers
(install not performed)").append("\n");
usage.append("\t--setupdb, -b: only perform database schema creation or
update").append("\n");
usage.append("\t--reconfig, -r: resets some configuration settings in an
installed server").append("\n");
@@ -166,7 +167,7 @@ public class Installer {
}
private WhatToDo[] processArguments(String[] args) throws Exception {
- String sopts = "-:HD:h:p:d:blrt";
+ String sopts = "-:HD:h:p:d:bflrt";
LongOpt[] lopts = { new LongOpt("help", LongOpt.NO_ARGUMENT, null,
'H'),
new LongOpt("host", LongOpt.REQUIRED_ARGUMENT, null, 'h'),
new LongOpt("port", LongOpt.REQUIRED_ARGUMENT, null, 'p'),
@@ -174,6 +175,7 @@ public class Installer {
new LongOpt("setupdb", LongOpt.NO_ARGUMENT, null, 'b'),
new LongOpt("listservers", LongOpt.NO_ARGUMENT, null,
'l'),
new LongOpt("reconfig", LongOpt.NO_ARGUMENT, null, 'r'),
+ new LongOpt("force", LongOpt.NO_ARGUMENT, null, 'f'),
new LongOpt("test", LongOpt.NO_ARGUMENT, null, 't') };
boolean test = false;
@@ -255,6 +257,11 @@ public class Installer {
break; // don't return, in case we need to allow more args
}
+ case 'f': {
+ this.installerConfig.setForceInstall(true);
+ break; // don't return, in case we need to allow more args
+ }
+
case 'l': {
listservers = true;
break; // don't return, we need to allow more args to be processed,
like -p or -h
diff --git
a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerConfiguration.java
b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerConfiguration.java
index 0852b78..3adecbe 100644
---
a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerConfiguration.java
+++
b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerConfiguration.java
@@ -28,6 +28,7 @@ package org.rhq.enterprise.server.installer;
public class InstallerConfiguration {
private String managementHost = "127.0.0.1";
private int managementPort = 9999; // this is the default AS port
+ private boolean forceInstall = false;
public InstallerConfiguration() {
}
@@ -59,4 +60,12 @@ public class InstallerConfiguration {
}
this.managementPort = port;
}
+
+ public boolean isForceInstall() {
+ return this.forceInstall;
+ }
+
+ public void setForceInstall(boolean flag) {
+ this.forceInstall = flag;
+ }
}
diff --git
a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerServiceImpl.java
b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerServiceImpl.java
index 3ece569..e72f133 100644
---
a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerServiceImpl.java
+++
b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerServiceImpl.java
@@ -86,7 +86,7 @@ public class InstallerServiceImpl implements InstallerService {
return;
}
if (allServerDetails.size() == 0) {
- log.info("There are no known servers currently registered");
+ log("There are no known servers currently registered");
return;
}
@@ -108,7 +108,7 @@ public class InstallerServiceImpl implements InstallerService {
info.append(serverDetails.getEndpointSecurePortString());
info.append("\n");
}
- log.info(info.toString());
+ log(info.toString());
return;
}
@@ -136,15 +136,21 @@ public class InstallerServiceImpl implements InstallerService {
ServerDetails detailsFromProps =
getServerDetailsFromPropertiesOnly(serverProperties);
ServerDetails detailsFromDb = getServerDetails(dbUrl, dbUsername,
clearTextDbPassword,
detailsFromProps.getName());
+ ExistingSchemaOption existingSchemaOption =
getAutoinstallExistingSchemaOption(serverProperties);
+
if (detailsFromDb == null) {
- log.info("This will be considered a new server: " +
detailsFromProps);
+ log("This will be considered a new server: " + detailsFromProps);
} else {
- log.info("This [" + detailsFromProps + "] will be considered a
reinstallation of an existing server ["
- + detailsFromDb + "]");
+ if (existingSchemaOption == ExistingSchemaOption.OVERWRITE) {
+ log("This [" + detailsFromProps + "] will OVERWRITE the
existing server [" + detailsFromDb
+ + "] that already exists in the database.");
+ } else {
+ log("This [" + detailsFromProps + "] will be considered a
reinstallation of an existing server ["
+ + detailsFromDb + "]");
+ }
}
// just warns if the schema will be overwritten
- ExistingSchemaOption existingSchemaOption =
getAutoinstallExistingSchemaOption(serverProperties);
if (existingSchemaOption == ExistingSchemaOption.OVERWRITE) {
log.warn("The installer has been configured to OVERWRITE any existing
data in the database. "
+ "If you do install with this configuration, realize that all
existing data in the database "
@@ -153,10 +159,10 @@ public class InstallerServiceImpl implements InstallerService {
// just logs the location of the AS instance where RHQ will be installed
String appServerHomeDir = getAppServerHomeDir();
- log.info("The app server where the installation will go is found at: "
+ appServerHomeDir);
+ log("The app server where the installation will go is found at: " +
appServerHomeDir);
// give some message to indicate everything looks OK and the user can start the
real install
- log.info("It looks like everything is OK and you can start the
installation.");
+ log("It looks like everything is OK and you can start the
installation.");
}
@Override
@@ -177,8 +183,12 @@ public class InstallerServiceImpl implements InstallerService {
if (autoInstallMode) {
log("The server is preconfigured and ready for auto-install.");
} else {
- throw new AutoInstallDisabledException(
- "Auto-installation is disabled. Please fully configure
rhq-server.properties");
+ if (this.installerConfiguration.isForceInstall()) {
+ log("Auto-installation would have been disabled, but installer was
asked to force the install... continuing.");
+ } else {
+ throw new AutoInstallDisabledException(
+ "Auto-installation is disabled. Please fully configure
rhq-server.properties");
+ }
}
// make an attempt to connect to the app server - we must make sure its running
and we can connect to it
@@ -189,11 +199,21 @@ public class InstallerServiceImpl implements InstallerService {
final String installationResults = getInstallationResults();
if (installationResults != null) {
if (installationResults.length() == 0) {
- throw new AlreadyInstalledException(
- "The installer has already been told to perform its work. The
server should be ready soon.");
+ if (this.installerConfiguration.isForceInstall()) {
+ log("The installer appears to have already been told to perform
its work, but the installer was asked for force the install... continuing.");
+ } else {
+ throw new AlreadyInstalledException(
+ "The installer has already been told to perform its work.
The server should be ready soon.");
+ }
} else {
- throw new Exception("The installer has already attempted to install
the server but errors occurred:\n"
- + installationResults);
+ if (this.installerConfiguration.isForceInstall()) {
+ log("The installer is going to force another installation
attempt, even though a previous attempt encountered errors:\n"
+ + installationResults);
+ } else {
+ throw new Exception(
+ "The installer has already attempted to install the server
but errors occurred:\n"
+ + installationResults);
+ }
}
}
@@ -225,8 +245,12 @@ public class InstallerServiceImpl implements InstallerService {
String existingSchemaOption) throws AutoInstallDisabledException,
AlreadyInstalledException, Exception {
if (isEarDeployed()) {
- throw new AlreadyInstalledException(
- "It looks like the installation has already been completed - there
is nothing for the installer to do.");
+ if (this.installerConfiguration.isForceInstall()) {
+ log("It looks like the installation has already been completed, but
the installer was asked for force the install... continuing.");
+ } else {
+ throw new AlreadyInstalledException(
+ "It looks like the installation has already been completed -
there is nothing for the installer to do.");
+ }
}
prepareDatabase(serverProperties, serverDetails, existingSchemaOption);
@@ -930,7 +954,8 @@ public class InstallerServiceImpl implements InstallerService {
// Not only do we want to make sure we can connect, but we also want to
wait for the subsystems to initialize.
// Let's wait for one of the subsystems to exist; once we know this
is up, the rest are probably ready too.
if (!(new WebJBossASClient(getModelControllerClient()).isWebSubsystem()))
{
- throw new IllegalStateException("The server does not appear to
be fully started yet");
+ throw new IllegalStateException(
+ "The server does not appear to be fully started yet (the web
subsystem did not start)");
}
return retVal;
@@ -1096,8 +1121,13 @@ public class InstallerServiceImpl implements InstallerService {
try {
mcc = getModelControllerClient();
CoreJBossASClient client = new CoreJBossASClient(mcc);
- log("Installing RHQ EAR startup subsystem extension");
- client.addExtension(RHQ_EXTENSION_NAME);
+ boolean isDeployed = client.isExtension(RHQ_EXTENSION_NAME);
+ if (!isDeployed) {
+ log("Installing RHQ EAR startup subsystem extension");
+ client.addExtension(RHQ_EXTENSION_NAME);
+ } else {
+ log("RHQ EAR startup subsystem extension is already
deployed");
+ }
} finally {
safeClose(mcc);
}
@@ -1108,8 +1138,13 @@ public class InstallerServiceImpl implements InstallerService {
try {
mcc = getModelControllerClient();
CoreJBossASClient client = new CoreJBossASClient(mcc);
- log("Installing RHQ EAR subsystem");
- client.addSubsystem(RHQ_SUBSYSTEM_NAME);
+ boolean isDeployed = client.isSubsystem(RHQ_SUBSYSTEM_NAME);
+ if (!isDeployed) {
+ log("Installing RHQ EAR subsystem");
+ client.addSubsystem(RHQ_SUBSYSTEM_NAME);
+ } else {
+ log("RHQ EAR subsystem is already deployed");
+ }
} finally {
safeClose(mcc);
}
commit 36316a5917684ae2bfe811c682a553e7b7149772
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Thu Feb 14 15:04:35 2013 +0100
The apache integration tests are now resilient against apache servers running on the
target machine out of the test control. These will no longer affect the test results.
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
index 8bc25ca..a7f6697 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
@@ -59,6 +59,10 @@ import org.rhq.core.domain.resource.ResourceType;
*/
public class FakeServerInventory {
+ public interface InventoryStatusJudge {
+ InventoryStatus judge(Resource resource);
+ }
+
private Resource platform;
private Map<String, Resource> resourceStore = new HashMap<String,
Resource>();
private int counter;
@@ -77,6 +81,13 @@ public class FakeServerInventory {
}
};
+ private static final Comparator<Resource> RESOURCE_TYPE_AND_STATUS_COMPARATOR =
new Comparator<Resource>() {
+ public int compare(Resource o1, Resource o2) {
+ return o1.getResourceType().equals(o2.getResourceType())
+ && o1.getInventoryStatus() == o2.getInventoryStatus() ? 0 :
o1.getId() - o2.getId();
+ }
+ };
+
public FakeServerInventory() {
this(false);
}
@@ -86,14 +97,18 @@ public class FakeServerInventory {
}
public synchronized void prepopulateInventory(Resource platform,
Collection<Resource> topLevelServers) {
- this.platform = fakePersist(platform, InventoryStatus.COMMITTED, new
HashSet<String>());
+ this.platform = fakePersist(platform, getSimpleJudge(InventoryStatus.COMMITTED),
new HashSet<String>());
for (Resource res : topLevelServers) {
res.setParentResource(this.platform);
- fakePersist(res, InventoryStatus.COMMITTED, new HashSet<String>());
+ fakePersist(res, getSimpleJudge(InventoryStatus.COMMITTED), new
HashSet<String>());
}
}
public synchronized CustomAction mergeInventoryReport(final InventoryStatus
requiredInventoryStatus) {
+ return mergeInventoryReport(getSimpleJudge(requiredInventoryStatus));
+ }
+
+ public synchronized CustomAction mergeInventoryReport(final InventoryStatusJudge
judge) {
return new CustomAction("updateServerSideInventory") {
public Object invoke(Invocation invocation) throws Throwable {
synchronized (FakeServerInventory.this) {
@@ -102,7 +117,7 @@ public class FakeServerInventory {
InventoryReport inventoryReport = (InventoryReport)
invocation.getParameter(0);
for (Resource res : inventoryReport.getAddedRoots()) {
- Resource persisted = fakePersist(res, requiredInventoryStatus,
new HashSet<String>());
+ Resource persisted = fakePersist(res, judge, new
HashSet<String>());
if (res.getParentResource() == Resource.ROOT) {
platform = persisted;
@@ -265,6 +280,23 @@ public class FakeServerInventory {
}
@SuppressWarnings("serial")
+ public synchronized Set<Resource> findResourcesByTypeAndStatus(final
ResourceType type, final InventoryStatus status) {
+ Set<Resource> result = new HashSet<Resource>();
+ if (platform != null) {
+ findResources(platform, new Resource() {
+ public ResourceType getResourceType() {
+ return type;
+ }
+
+ public InventoryStatus getInventoryStatus() {
+ return status;
+ }
+ }, result, RESOURCE_TYPE_AND_STATUS_COMPARATOR);
+ }
+ return result;
+ }
+
+ @SuppressWarnings("serial")
private Set<Resource> getResources(Set<Integer> resourceIds, boolean
includeDescendants) {
//it is important to keep the hierarchical order of the resource in the returned
set
//so that plugin container can merge the resources from top to bottom.
@@ -301,7 +333,7 @@ public class FakeServerInventory {
}
}
- private Resource fakePersist(Resource agentSideResource, InventoryStatus
requiredInventoryStatus,
+ private Resource fakePersist(Resource agentSideResource, InventoryStatusJudge
statusJudge,
Set<String> inProgressUUIds) {
Resource persisted = resourceStore.get(agentSideResource.getUuid());
if (!inProgressUUIds.add(agentSideResource.getUuid())) {
@@ -316,6 +348,7 @@ public class FakeServerInventory {
persisted.setUuid(agentSideResource.getUuid());
resourceStore.put(persisted.getUuid(), persisted);
}
+
persisted.setAgent(agentSideResource.getAgent());
persisted.setCurrentAvailability(agentSideResource.getCurrentAvailability());
persisted.setDescription(agentSideResource.getDescription());
@@ -323,13 +356,15 @@ public class FakeServerInventory {
persisted.setPluginConfiguration(agentSideResource.getPluginConfiguration().clone());
persisted.setResourceConfiguration(agentSideResource.getResourceConfiguration().clone());
persisted.setVersion(agentSideResource.getVersion());
- persisted.setInventoryStatus(requiredInventoryStatus);
persisted.setResourceKey(agentSideResource.getResourceKey());
persisted.setResourceType(agentSideResource.getResourceType());
+ InventoryStatus status = statusJudge.judge(persisted);
+ persisted.setInventoryStatus(status);
+
Resource parent = agentSideResource.getParentResource();
if (parent != null && parent != Resource.ROOT) {
- parent = fakePersist(agentSideResource.getParentResource(),
requiredInventoryStatus,
+ parent = fakePersist(agentSideResource.getParentResource(), statusJudge,
inProgressUUIds);
persisted.setParentResource(parent);
parent.getChildResources().add(persisted);
@@ -340,7 +375,7 @@ public class FakeServerInventory {
//persist the children
Set<Resource> childResources = new LinkedHashSet<Resource>();
for (Resource child : agentSideResource.getChildResources()) {
- childResources.add(fakePersist(child, requiredInventoryStatus,
inProgressUUIds));
+ childResources.add(fakePersist(child, statusJudge, inProgressUUIds));
}
//now update the list with whatever the persisted resource contained in the past
//i.e. we prefer the current results from the agent but keep the children we used
to
@@ -398,6 +433,7 @@ public class FakeServerInventory {
children.add(syncChild);
}
+
getPrivateField(clazz, "childSyncInfos").set(ret, children);
return ret;
@@ -444,4 +480,14 @@ public class FakeServerInventory {
}
}
}
+
+ private InventoryStatusJudge getSimpleJudge(final InventoryStatus requiredStatus) {
+ return new InventoryStatusJudge() {
+
+ @Override
+ public InventoryStatus judge(Resource resource) {
+ return requiredStatus;
+ }
+ };
+ }
}
diff --git
a/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/augeas/AugeasReferenceLeakingTest.java
b/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/augeas/AugeasReferenceLeakingTest.java
index b1c8a24..85d5f52 100644
---
a/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/augeas/AugeasReferenceLeakingTest.java
+++
b/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/augeas/AugeasReferenceLeakingTest.java
@@ -49,6 +49,7 @@ import org.rhq.core.pc.configuration.ConfigurationManager;
import org.rhq.core.pc.inventory.InventoryManager;
import org.rhq.core.pc.inventory.ResourceContainer;
import org.rhq.core.pc.upgrade.FakeServerInventory;
+import org.rhq.plugins.apache.ApacheServerComponent;
import org.rhq.plugins.apache.PluginLocation;
import org.rhq.plugins.apache.setup.ApacheTestConfiguration;
import org.rhq.plugins.apache.setup.ApacheTestSetup;
@@ -58,7 +59,7 @@ import org.rhq.test.pc.PluginContainerSetup;
import org.rhq.test.pc.PluginContainerTest;
/**
- *
+ *
*
* @author Lukas Krejci
*/
@@ -126,13 +127,13 @@ public class AugeasReferenceLeakingTest extends BMNGRunner {
configureApacheServerToUseAugeas();
PluginContainer pc = PluginContainer.getInstance();
- Resource platform = pc.getInventoryManager().getPlatform();
+ Resource apacheServer = findApacheServerResource().getResource();
for (int i = 0; i < configurationReadingInvocationCount; ++i) {
- checkConfigurationRecursively(platform, pc.getConfigurationManager());
+ checkApacheServerConfigurationRecursively(apacheServer,
pc.getConfigurationManager());
Thread.sleep(10000);
}
-
+
//wait a couple of seconds for the loadConfig calls to finish
Thread.sleep(60000);
} finally {
@@ -192,14 +193,14 @@ public class AugeasReferenceLeakingTest extends BMNGRunner {
}
}
- private void checkConfigurationRecursively(Resource resource, ConfigurationManager
cm)
+ private void checkApacheServerConfigurationRecursively(Resource resource,
ConfigurationManager cm)
throws PluginContainerException {
if (resource.getResourceType().getResourceConfigurationDefinition() != null) {
cm.loadResourceConfiguration(resource.getId());
}
for (Resource child : resource.getChildResources()) {
- checkConfigurationRecursively(child, cm);
+ checkApacheServerConfigurationRecursively(child, cm);
}
}
@@ -208,32 +209,36 @@ public class AugeasReferenceLeakingTest extends BMNGRunner {
InventoryManager im = PluginContainer.getInstance().getInventoryManager();
- ResourceContainer apacheServer =
findResource(resourceTypes.findByName("Apache HTTP Server"));
+ ResourceContainer apacheServer = findApacheServerResource();
Configuration config =
apacheServer.getResourceContext().getPluginConfiguration();
config.getSimple("augeasEnabled").setValue("yes");
im.updatePluginConfiguration(apacheServer.getResource().getId(), config);
-
+
//and run discovery so that the new resources can go into inventory
-
+
im.executeServiceScanImmediately();
}
- private ResourceContainer findResource(ResourceType resourceType) {
+ private ResourceContainer findApacheServerResource() throws Exception {
InventoryManager im = PluginContainer.getInstance().getInventoryManager();
+ ResourceTypes resourceTypes = new ResourceTypes(PluginLocation.APACHE_PLUGIN);
+ ResourceType apacheServerResourceType = resourceTypes.findByName("Apache
HTTP Server");
- return findResource(im, resourceType, im.getPlatform());
+ return findApacheServerResource(im, apacheServerResourceType, im.getPlatform());
}
- private ResourceContainer findResource(InventoryManager im, ResourceType rt, Resource
root) {
- if (root.getResourceType().equals(rt)) {
+ private ResourceContainer findApacheServerResource(InventoryManager im, ResourceType
rt, Resource root) {
+ if (root.getResourceType().equals(rt)
+ &&
root.getPluginConfiguration().getSimpleValue(ApacheServerComponent.PLUGIN_CONFIG_PROP_SERVER_ROOT)
+ .equals(setup.getDeploymentConfig().serverRoot)) {
return im.getResourceContainer(root);
}
for (Resource child : root.getChildResources()) {
- ResourceContainer rc = findResource(im, rt, child);
+ ResourceContainer rc = findApacheServerResource(im, rt, child);
if (rc != null) {
return rc;
}
diff --git
a/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/setup/ApacheTestSetup.java
b/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/setup/ApacheTestSetup.java
index 37e74d9..e0363af 100644
---
a/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/setup/ApacheTestSetup.java
+++
b/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/setup/ApacheTestSetup.java
@@ -41,6 +41,7 @@ import org.rhq.core.domain.discovery.AvailabilityReport;
import org.rhq.core.domain.resource.InventoryStatus;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceError;
+import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.pc.ServerServices;
import org.rhq.core.pc.upgrade.FakeServerInventory;
import org.rhq.core.system.SystemInfoFactory;
@@ -257,9 +258,23 @@ public class ApacheTestSetup {
public void addDefaultExceptations(Expectations expectations) throws Exception {
ServerServices ss =
PluginContainerTest.getCurrentPluginContainerConfiguration().getServerServices();
+ //only import the apache servers we actually care about - we can't assume
another apache won't be present
+ //on the machine running the test...
+ final ResourceType serverResourceType =
apacheResourceTypes.findByName("Apache HTTP Server");
expectations.allowing(ss.getDiscoveryServerService()).mergeInventoryReport(
expectations.with(Expectations.any(InventoryReport.class)));
-
expectations.will(fakeInventory.mergeInventoryReport(InventoryStatus.COMMITTED));
+ expectations.will(fakeInventory.mergeInventoryReport(new
FakeServerInventory.InventoryStatusJudge() {
+ @Override
+ public InventoryStatus judge(Resource resource) {
+ if (serverResourceType.equals(resource.getResourceType())) {
+ return
deploymentConfig.serverRoot.equals(resource.getPluginConfiguration().getSimpleValue(
+ ApacheServerComponent.PLUGIN_CONFIG_PROP_SERVER_ROOT)) ?
InventoryStatus.COMMITTED
+ : InventoryStatus.IGNORED;
+ } else {
+ return InventoryStatus.COMMITTED;
+ }
+ }
+ }));
expectations.allowing(ss.getDiscoveryServerService()).upgradeResources(
expectations.with(Expectations.any(Set.class)));
diff --git
a/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/upgrade/UpgradeTestBase.java
b/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/upgrade/UpgradeTestBase.java
index aebea53..719a3dd 100644
---
a/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/upgrade/UpgradeTestBase.java
+++
b/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/upgrade/UpgradeTestBase.java
@@ -42,6 +42,7 @@ import org.testng.annotations.BeforeClass;
import org.rhq.core.clientapi.agent.metadata.PluginMetadataParser;
import org.rhq.core.clientapi.descriptor.AgentPluginDescriptorUtil;
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
+import org.rhq.core.domain.resource.InventoryStatus;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceError;
@@ -77,15 +78,15 @@ import org.rhq.test.pc.PluginContainerTest;
public class UpgradeTestBase extends PluginContainerTest {
private static final Log LOG = LogFactory.getLog(UpgradeTestBase.class);
-
+
public enum ResourceKeyFormat {
SNMP, RHQ3, RHQ4
};
-
+
protected static final String DEPLOYMENT_SIMPLE_WITH_RESOLVABLE_SERVERNAMES =
"simpleWithResolvableServerNames";
protected static final String DEPLOYMENT_SIMPLE_WITH_UNRESOLVABLE_SERVER_NAMES =
"simpleWithUnresolvableServerNames";
protected static final String DEPLOYMENT_SIMPLE_WITH_WILDCARD_LISTENS =
"simpleWithWildcardListens";
-
+
private ResourceTypes apacheResourceTypes;
protected Resource platform;
@@ -101,15 +102,15 @@ public class UpgradeTestBase extends PluginContainerTest {
apacheResourceTypes);
boolean testFailed = false;
try {
-
+
String[] configFiles =
Arrays.copyOf(testConfiguration.apacheConfigurationFiles,
testConfiguration.apacheConfigurationFiles.length + 1);
configFiles[testConfiguration.apacheConfigurationFiles.length] =
"/snmpd.conf";
-
+
setup.withInventoryFrom(testConfiguration.inventoryFile)
.withPlatformResource(platform).withDefaultExpectations().withDefaultOverrides(testConfiguration.defaultOverrides)
.withApacheSetup().withConfigurationFiles(configFiles)
.withServerRoot(testConfiguration.serverRoot).withExePath(testConfiguration.binPath);
-
+
testConfiguration.beforeTestSetup(setup);
LOG.debug("----------------------------------------------------------
Starting the upgrade test for: "
@@ -117,46 +118,46 @@ public class UpgradeTestBase extends PluginContainerTest {
LOG.debug("Deployment configuration: " +
setup.getDeploymentConfig());
setup.setup();
-
+
testConfiguration.beforePluginContainerStart(setup);
-
+
startConfiguredPluginContainer();
-
+
testConfiguration.beforeTests(setup);
-
+
//ok, now we should see the resources upgraded in the fake server inventory.
ResourceType serverResourceType = apacheResourceTypes.findByName("Apache
HTTP Server");
ResourceType vhostResourceType = apacheResourceTypes.findByName("Apache
Virtual Host");
-
- Set<Resource> servers =
setup.getFakeInventory().findResourcesByType(serverResourceType);
+
+ Set<Resource> servers =
setup.getFakeInventory().findResourcesByTypeAndStatus(serverResourceType,
InventoryStatus.COMMITTED);
assertEquals(servers.size(), 1, "There should be exactly one apache
server discovered.");
-
+
Resource server = servers.iterator().next();
-
+
String expectedResourceKey =
ApacheServerDiscoveryComponent.formatResourceKey(testConfiguration.serverRoot,
testConfiguration.serverRoot
+ "/conf/httpd.conf");
-
+
assertEquals(server.getResourceKey(), expectedResourceKey,
"The server resource key doesn't seem to be upgraded.");
-
- Set<Resource> vhosts =
setup.getFakeInventory().findResourcesByType(vhostResourceType);
-
+
+ Set<Resource> vhosts =
setup.getFakeInventory().findResourcesByTypeAndStatus(vhostResourceType,
InventoryStatus.COMMITTED);
+
String[] expectedRKs =
testConfiguration.getExpectedResourceKeysAfterUpgrade(setup);
-
+
assertEquals(vhosts.size(), expectedRKs.length, "Unexpected number of
vhosts discovered found");
-
+
List<String> expectedResourceKeys = Arrays.asList(expectedRKs);
-
+
for (Resource vhost : vhosts) {
assertTrue(expectedResourceKeys.contains(vhost.getResourceKey()),
"Unexpected virtual host resource key: '" +
vhost.getResourceKey() + "'. Only expecting " + expectedResourceKeys);
}
-
+
String[] expectedFailureRKs =
testConfiguration.getExpectedResourceKeysWithFailures(setup);
if (expectedFailureRKs != null && expectedFailureRKs.length > 0)
{
Set<Resource> failingResources = new HashSet<Resource>();
-
+
for(String rk : expectedFailureRKs) {
for(Resource r : vhosts) {
if (rk.equals(r.getResourceKey())) {
@@ -165,21 +166,21 @@ public class UpgradeTestBase extends PluginContainerTest {
}
}
}
-
+
assertEquals(failingResources.size(), expectedFailureRKs.length,
"Couldn't find all the resources that should have failed.");
-
+
for(Resource failingResource : failingResources) {
List<ResourceError> errors =
failingResource.getResourceErrors(ResourceErrorType.UPGRADE);
assertNotNull(errors, "The main vhost doesn't have any
upgrade errors.");
assertEquals(errors.size(), 1, "There should be exactly one
upgrade error on the main vhost.");
}
-
+
//check that all other vhosts were not upgraded but have no errors
for(Resource r : vhosts) {
if (failingResources.contains(r)) {
continue;
}
-
+
assertEquals(r.getResourceErrors(ResourceErrorType.UPGRADE).size(),
0, "Unexpected number of resource upgrade errors on vhost " + r);
}
} else {
@@ -213,31 +214,31 @@ public class UpgradeTestBase extends PluginContainerTest {
setup.withApacheSetup().init();
ApacheServerComponent component = setup.withApacheSetup().getServerComponent();
ApacheDirectiveTree config = component.parseRuntimeConfiguration(false);
-
+
DeploymentConfig deployConfig = setup.getDeploymentConfig();
-
+
VirtualHostLegacyResourceKeyUtil keyUtil = new
VirtualHostLegacyResourceKeyUtil(component, config);
-
+
Map<String, String> replacements = deployConfig.getTokenReplacements();
-
+
testConfig.defaultOverrides.put("main.rhq3.resource.key",
keyUtil.getRHQ3NonSNMPLegacyMainServerResourceKey());
-
- if (deployConfig.vhost1 != null) {
+
+ if (deployConfig.vhost1 != null) {
testConfig.defaultOverrides.put("vhost1.rhq3.resource.key",
keyUtil.getRHQ3NonSNMPLegacyVirtualHostResourceKey(deployConfig.vhost1.getVHostSpec(replacements)));
}
-
+
if (deployConfig.vhost2 != null) {
testConfig.defaultOverrides.put("vhost2.rhq3.resource.key",
keyUtil.getRHQ3NonSNMPLegacyVirtualHostResourceKey(deployConfig.vhost2.getVHostSpec(replacements)));
}
-
+
if (deployConfig.vhost3 != null) {
testConfig.defaultOverrides.put("vhost3.rhq3.resource.key",
keyUtil.getRHQ3NonSNMPLegacyVirtualHostResourceKey(deployConfig.vhost3.getVHostSpec(replacements)));
}
-
+
if (deployConfig.vhost4 != null) {
testConfig.defaultOverrides.put("vhost4.rhq3.resource.key",
keyUtil.getRHQ3NonSNMPLegacyVirtualHostResourceKey(deployConfig.vhost4.getVHostSpec(replacements)));
}
-
+
setup.withDefaultOverrides(testConfig.defaultOverrides);
}
@@ -248,13 +249,13 @@ public class UpgradeTestBase extends PluginContainerTest {
protected static String[] getVHostRKs(ApacheTestSetup setup, int[]
successfulUpgrades, int[] failedUpgrades, ResourceKeyFormat rkFormat) {
int sucLen = successfulUpgrades == null ? 0 : successfulUpgrades.length;
int failLen = failedUpgrades == null ? 0 : failedUpgrades.length;
-
+
String[] ret = new String[sucLen + failLen];
-
+
int retIdx = 0;
-
+
Map<String, String> replacements = setup.getInventoryFileReplacements();
-
+
for(int i = 0; i < sucLen; ++i, ++retIdx) {
int vhostNum = successfulUpgrades[i];
if (vhostNum == 0) {
@@ -264,7 +265,7 @@ public class UpgradeTestBase extends PluginContainerTest {
ret[retIdx] =
ApacheVirtualHostServiceDiscoveryComponent.createResourceKey(vhost.serverName,
vhost.hosts);
}
}
-
+
for(int i = 0; i < failLen; ++i, ++retIdx) {
String variableName = null;
if (failedUpgrades[i] == 0) {
@@ -280,7 +281,7 @@ public class UpgradeTestBase extends PluginContainerTest {
variableName = "vhost" + failedUpgrades[i] +
".rhq";
}
}
-
+
switch (rkFormat) {
case RHQ3:
variableName += "3.resource.key";
@@ -292,10 +293,10 @@ public class UpgradeTestBase extends PluginContainerTest {
variableName += "snmp.identifier";
break;
}
-
+
ret[retIdx] = replacements.get(variableName);
}
-
+
return ret;
}
@@ -305,7 +306,7 @@ public class UpgradeTestBase extends PluginContainerTest {
.toURL());
PluginMetadataParser parser = new PluginMetadataParser(descriptor,
Collections.<String, PluginMetadataParser> emptyMap());
-
+
List<ResourceType> platformTypes = parser.getAllTypes();
//this is the default container name in case of no plugin explicit plugin
configuration, which we don't have.
@@ -317,20 +318,20 @@ public class UpgradeTestBase extends PluginContainerTest {
}
Class discoveryClass = Class.forName(parser.getDiscoveryComponentClass(rt));
-
+
ResourceDiscoveryComponent discoveryComponent = (ResourceDiscoveryComponent)
discoveryClass.newInstance();
-
+
ResourceDiscoveryContext context = new ResourceDiscoveryContext(rt, null,
null,
SystemInfoFactory.createSystemInfo(), Collections.emptyList(),
Collections.emptyList(), containerName,
PluginContainerDeployment.AGENT);
-
+
Set<DiscoveredResourceDetails> results =
discoveryComponent.discoverResources(context);
-
+
if (!results.isEmpty()) {
DiscoveredResourceDetails details = results.iterator().next();
-
+
Resource platform = new Resource();
-
+
platform.setDescription(details.getResourceDescription());
platform.setResourceKey(details.getResourceKey());
platform.setName(details.getResourceName());
@@ -339,11 +340,11 @@ public class UpgradeTestBase extends PluginContainerTest {
platform.setResourceType(rt);
platform.setUuid(UUID.randomUUID().toString());
platform.setId(1);
-
+
return platform;
}
}
-
+
return null;
}
@@ -352,12 +353,12 @@ public class UpgradeTestBase extends PluginContainerTest {
if (prefix != null && !prefix.isEmpty()) {
bld.append(prefix).append(".");
}
-
+
bld.append(name);
-
+
return bld.toString();
}
-
+
protected static InetAddress determineLocalhost() {
try {
return InetAddress.getLocalHost();
commit 9b30d84de016542bad1f9490a9b24e93dce9c162
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Feb 13 16:11:34 2013 -0500
append to the installer log so we don't lose any installer log messages when
rhq-installer.sh is run multiple times
diff --git a/modules/enterprise/server/installer/src/main/resources/logging.properties
b/modules/enterprise/server/installer/src/main/resources/logging.properties
index 6a48b2b..0affd97 100644
--- a/modules/enterprise/server/installer/src/main/resources/logging.properties
+++ b/modules/enterprise/server/installer/src/main/resources/logging.properties
@@ -16,8 +16,9 @@ handler.CONSOLE.formatter=PATTERN
# File handler configuration
handler.FILE=org.jboss.logmanager.handlers.FileHandler
handler.FILE.level=${rhq.server.installer.loglevel:DEBUG}
-handler.FILE.properties=autoFlush,fileName
+handler.FILE.properties=autoFlush,append,fileName
handler.FILE.autoFlush=true
+handler.FILE.append=true
handler.FILE.fileName=${rhq.server.installer.logdir:.}/rhq-installer.log
handler.FILE.formatter=PATTERN
commit d3465f9300f95680fda57fab996401870a39ffa6
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Wed Feb 13 20:09:02 2013 +0100
Fix the expectations of the JMock-based apache plugin integration tests
after the fixes in the inventory report processing that changed the workflow
slightly.
This should make the apache integration tests pass again.
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
index 17beb1e..8bc25ca 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
@@ -26,6 +26,8 @@ package org.rhq.core.pc.upgrade;
import static org.testng.Assert.fail;
import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
@@ -52,7 +54,7 @@ import org.rhq.core.domain.resource.ResourceType;
/**
* This class represents a server side database store of the inventory for the purposes
* of the ResourceUpgradeTest unit test.
- *
+ *
* @author Lukas Krejci
*/
public class FakeServerInventory {
@@ -62,7 +64,7 @@ public class FakeServerInventory {
private int counter;
private boolean failing;
private boolean failUpgrade;
-
+
private static final Comparator<Resource> ID_COMPARATOR = new
Comparator<Resource>() {
public int compare(Resource o1, Resource o2) {
return o1.getId() - o2.getId();
@@ -90,18 +92,18 @@ public class FakeServerInventory {
fakePersist(res, InventoryStatus.COMMITTED, new HashSet<String>());
}
}
-
+
public synchronized CustomAction mergeInventoryReport(final InventoryStatus
requiredInventoryStatus) {
return new CustomAction("updateServerSideInventory") {
public Object invoke(Invocation invocation) throws Throwable {
synchronized (FakeServerInventory.this) {
throwIfFailing();
-
+
InventoryReport inventoryReport = (InventoryReport)
invocation.getParameter(0);
-
+
for (Resource res : inventoryReport.getAddedRoots()) {
Resource persisted = fakePersist(res, requiredInventoryStatus,
new HashSet<String>());
-
+
if (res.getParentResource() == Resource.ROOT) {
platform = persisted;
}
@@ -117,9 +119,9 @@ public class FakeServerInventory {
public Object invoke(Invocation invocation) throws Throwable {
synchronized (FakeServerInventory.this) {
throwIfFailing();
-
+
platform = null;
-
+
return getSyncInfo();
}
}
@@ -131,36 +133,36 @@ public class FakeServerInventory {
public Object invoke(Invocation invocation) throws Throwable {
synchronized(FakeServerInventory.this) {
throwIfFailing();
-
+
ResourceError error = (ResourceError) invocation.getParameter(0);
-
+
Resource serverSideResource =
resourceStore.get(error.getResource().getUuid());
-
+
if (serverSideResource != null) {
List<ResourceError> currentErrors =
serverSideResource.getResourceErrors();
currentErrors.add(error);
}
-
+
return null;
}
}
};
}
-
+
public synchronized CustomAction upgradeResources() {
return new CustomAction("upgradeServerSideInventory") {
@SuppressWarnings({ "serial", "unchecked" })
public Object invoke(Invocation invocation) throws Throwable {
synchronized(FakeServerInventory.this) {
throwIfFailing();
-
+
if (failUpgrade) {
- throw new RuntimeException("Failing the upgrade
purposefully.");
+ throw new RuntimeException("Failing the upgrade
purposefully.");
}
-
+
Set<ResourceUpgradeRequest> requests =
(Set<ResourceUpgradeRequest>) invocation.getParameter(0);
Set<ResourceUpgradeResponse> responses = new
HashSet<ResourceUpgradeResponse>();
-
+
for (final ResourceUpgradeRequest request : requests) {
Resource resource = findResource(platform, new Resource() {
public int getId() {
@@ -174,18 +176,18 @@ public class FakeServerInventory {
if (request.getNewName() != null) {
resource.setName(request.getNewName());
}
-
+
if (request.getNewResourceKey() != null) {
resource.setResourceKey(request.getNewResourceKey());
}
-
+
if (request.getUpgradeErrorMessage() != null) {
ResourceError error = new ResourceError(resource,
ResourceErrorType.UPGRADE,
request.getUpgradeErrorMessage(),
request.getUpgradeErrorStackTrace(),
request.getTimestamp());
resource.getResourceErrors().add(error);
}
-
+
ResourceUpgradeResponse resp = new
ResourceUpgradeResponse();
resp.setResourceId(resource.getId());
resp.setUpgradedResourceName(resource.getName());
@@ -206,16 +208,33 @@ public class FakeServerInventory {
public Object invoke(Invocation invocation) throws Throwable {
synchronized (FakeServerInventory.this) {
throwIfFailing();
-
+
Set<Integer> resourceIds = (Set<Integer>)
invocation.getParameter(0);
boolean includeDescendants = (Boolean) invocation.getParameter(1);
-
+
return getResources(resourceIds, includeDescendants);
}
}
};
}
+ public synchronized CustomAction getResourcesAsList() {
+ return new CustomAction("getResourcesAsList") {
+ @Override
+ public Object invoke(Invocation invocation) throws Throwable {
+ synchronized(FakeServerInventory.this) {
+ throwIfFailing();
+
+ Integer[] resourceIds = (Integer[]) invocation.getParameter(0);
+
+ Set<Resource> resources = getResources(new
LinkedHashSet<Integer>(Arrays.asList(resourceIds)), false);
+
+ return new ArrayList<Resource>(resources);
+ }
+ }
+ };
+ }
+
public synchronized boolean isFailing() {
return failing;
}
@@ -227,11 +246,11 @@ public class FakeServerInventory {
public synchronized boolean isFailUpgrade() {
return failUpgrade;
}
-
+
public synchronized void setFailUpgrade(boolean failUpgrade) {
this.failUpgrade = failUpgrade;
}
-
+
@SuppressWarnings("serial")
public synchronized Set<Resource> findResourcesByType(final ResourceType type)
{
Set<Resource> result = new HashSet<Resource>();
@@ -281,7 +300,7 @@ public class FakeServerInventory {
removeResource(child);
}
}
-
+
private Resource fakePersist(Resource agentSideResource, InventoryStatus
requiredInventoryStatus,
Set<String> inProgressUUIds) {
Resource persisted = resourceStore.get(agentSideResource.getUuid());
@@ -327,9 +346,9 @@ public class FakeServerInventory {
//i.e. we prefer the current results from the agent but keep the children we used
to
//have in the past. This is the same behavior as the actual RHQ server has.
childResources.addAll(persisted.getChildResources());
-
+
persisted.setChildResources(childResources);
-
+
inProgressUUIds.remove(agentSideResource.getUuid());
return persisted;
diff --git
a/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/setup/ApacheTestSetup.java
b/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/setup/ApacheTestSetup.java
index 9f12166..37e74d9 100644
---
a/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/setup/ApacheTestSetup.java
+++
b/modules/integration-tests/apache-plugin-test/src/test/java/org/rhq/plugins/apache/setup/ApacheTestSetup.java
@@ -74,14 +74,14 @@ public class ApacheTestSetup {
private Mockery context;
private ResourceTypes apacheResourceTypes;
private String testId;
-
+
public class ApacheSetup {
private String serverRoot;
private String exePath;
private Collection<String> configurationFiles;
private ApacheExecutionUtil execution;
private boolean deploy = true;
-
+
private ApacheSetup() {
}
@@ -162,16 +162,16 @@ public class ApacheTestSetup {
+ serverRootDir + "'.");
File logsDir = new File(serverRootDir, "logs");
-
+
assertTrue(logsDir.exists(), "The configured server root denotes a
directory that doesn't have a 'logs' subdirectory. This is
unexpected.");
-
+
File confDir = new File(serverRootDir, "conf");
assertTrue(confDir.exists(),
"The configured server root denotes a directory that doesn't
have a 'conf' subdirectory. This is unexpected.");
-
+
String confFilePath = confDir.getAbsolutePath() + File.separatorChar +
"httpd.conf";
-
+
String snmpHost = null;
int snmpPort = 0;
String pingUrl = null;
@@ -185,11 +185,11 @@ public class ApacheTestSetup {
new File(binDir, "envvars-std"));
ApacheDeploymentUtil.deployConfiguration(confDir, configurationFiles,
additionalFilesToProcess, deploymentConfig);
}
-
+
//ok, now try to find the ping URL. The best thing is to actually invoke
- //the same code the apache server discovery does.
+ //the same code the apache server discovery does.
ApacheDirectiveTree tree =
ApacheServerDiscoveryComponent.parseRuntimeConfiguration(confFilePath, null,
ApacheBinaryInfo.getInfo(exePath, SystemInfoFactory.createSystemInfo()));
-
+
//XXX this hardcodes apache2 as the only option we have...
HttpdAddressUtility.Address addrToUse =
HttpdAddressUtility.APACHE_2_x.getMainServerSampleAddress(tree, null, -1);
pingUrl = addrToUse.toString();
@@ -205,7 +205,7 @@ public class ApacheTestSetup {
}
private void doSetup() throws Exception {
- init();
+ init();
startApache();
}
@@ -228,12 +228,12 @@ public class ApacheTestSetup {
return this;
}
- public ApacheTestSetup withDefaultOverrides(Map<String, String>
defaultOverrides) {
+ public ApacheTestSetup withDefaultOverrides(Map<String, String>
defaultOverrides) {
this.defaultOverrides = defaultOverrides == null ? new HashMap<String,
String>() : defaultOverrides;
deploymentConfig =
ApacheDeploymentUtil.getDeploymentConfigurationFromSystemProperties(configurationName,
this.defaultOverrides);
return this;
}
-
+
public ApacheTestSetup withPlatformResource(Resource platform) {
this.platform = platform;
return this;
@@ -271,7 +271,7 @@ public class ApacheTestSetup {
expectations.allowing(ss.getDiscoveryServerService()).setResourceError(expectations.with(Expectations.any(ResourceError.class)));
expectations.will(fakeInventory.setResourceError());
-
+
expectations.allowing(ss.getDiscoveryServerService()).mergeAvailabilityReport(
expectations.with(Expectations.any(AvailabilityReport.class)));
@@ -280,7 +280,7 @@ public class ApacheTestSetup {
expectations.allowing(ss.getDiscoveryServerService()).clearResourceConfigError(
expectations.with(Expectations.any(int.class)));
-
+
expectations.allowing(ss.getDiscoveryServerService()).setResourceEnablement(
expectations.with(Expectations.any(int.class)),
expectations.with(Expectations.any(boolean.class)));
@@ -289,7 +289,10 @@ public class ApacheTestSetup {
expectations.allowing(ss.getDriftServerService()).getDriftDefinitions(expectations.with(Expectations.any(Set.class)));
expectations.will(Expectations.returnValue(Collections.emptyMap()));
-
+
+
expectations.allowing(ss.getDiscoveryServerService()).getResourcesAsList(expectations.with(Expectations.any(Integer[].class)));
+ expectations.will(fakeInventory.getResourcesAsList());
+
expectations.ignoring(ss.getBundleServerService());
expectations.ignoring(ss.getConfigurationServerService());
expectations.ignoring(ss.getContentServerService());
@@ -307,14 +310,14 @@ public class ApacheTestSetup {
public DeploymentConfig getDeploymentConfig() {
return deploymentConfig;
}
-
+
public ApacheTestSetup setup() throws Exception {
apacheSetup.doSetup();
- Map<String, String> replacements = deploymentConfig.getTokenReplacements();
+ Map<String, String> replacements =
deploymentConfig.getTokenReplacements();
replacements.put("server.root", apacheSetup.serverRoot);
replacements.put("exe.path", apacheSetup.exePath);
-
+
ApacheDeploymentUtil.addDefaultVariables(replacements, null);
HttpdAddressUtility addressUtility = apacheSetup.getServerComponent()
@@ -325,18 +328,18 @@ public class ApacheTestSetup {
addressUtility.getHttpdInternalMainServerAddressRepresentation(runtimeConfig).toString(false,
false));
replacements.put("main.rhq4.resource.key",
ApacheVirtualHostServiceComponent.MAIN_SERVER_RESOURCE_KEY);
-
+
VHostSpec vhost1 = deploymentConfig.vhost1 == null ? null :
deploymentConfig.vhost1.getVHostSpec(replacements);
VHostSpec vhost2 = deploymentConfig.vhost2 == null ? null :
deploymentConfig.vhost2.getVHostSpec(replacements);
VHostSpec vhost3 = deploymentConfig.vhost3 == null ? null :
deploymentConfig.vhost3.getVHostSpec(replacements);
VHostSpec vhost4 = deploymentConfig.vhost4 == null ? null :
deploymentConfig.vhost4.getVHostSpec(replacements);
-
+
if (vhost1 != null) {
replacements.put(
"vhost1.snmp.identifier",
addressUtility.getHttpdInternalVirtualHostAddressRepresentation(runtimeConfig,
vhost1.hosts.get(0),
vhost1.serverName).toString(false, false));
-
+
replacements.put(
"vhost1.rhq4.resource.key",
ApacheVirtualHostServiceDiscoveryComponent.createResourceKey(
@@ -348,7 +351,7 @@ public class ApacheTestSetup {
"vhost2.snmp.identifier",
addressUtility.getHttpdInternalVirtualHostAddressRepresentation(runtimeConfig,
vhost2.hosts.get(0),
vhost2.serverName).toString(false, false));
-
+
replacements.put(
"vhost2.rhq4.resource.key",
ApacheVirtualHostServiceDiscoveryComponent.createResourceKey(
@@ -360,7 +363,7 @@ public class ApacheTestSetup {
"vhost3.snmp.identifier",
addressUtility.getHttpdInternalVirtualHostAddressRepresentation(runtimeConfig,
vhost3.hosts.get(0),
vhost3.serverName).toString(false, false));
-
+
replacements.put(
"vhost3.rhq4.resource.key",
ApacheVirtualHostServiceDiscoveryComponent.createResourceKey(
@@ -372,7 +375,7 @@ public class ApacheTestSetup {
"vhost4.snmp.identifier",
addressUtility.getHttpdInternalVirtualHostAddressRepresentation(runtimeConfig,
vhost4.hosts.get(0),
vhost4.serverName).toString(false, false));
-
+
replacements.put(
"vhost4.rhq4.resource.key",
ApacheVirtualHostServiceDiscoveryComponent.createResourceKey(
@@ -381,35 +384,35 @@ public class ApacheTestSetup {
//let the user override everything we just did
replacements.putAll(defaultOverrides);
-
+
inventoryFileReplacements = replacements;
-
+
if (inventoryFile != null) {
InputStream dataStream = getClass().getResourceAsStream(inventoryFile);
-
+
Reader rdr = new TokenReplacingReader(new InputStreamReader(dataStream),
replacements);
-
+
@SuppressWarnings("unchecked")
List<Resource> inventory = (List<Resource>) new
ObjectCollectionSerializer().deserialize(rdr);
-
- //fix up the parent relationships, because they might not be reconstructed
correctly by
+
+ //fix up the parent relationships, because they might not be reconstructed
correctly by
//JAXB - we're missing XmlID and XmlIDRef annotations in our model
fixupParent(null, inventory);
-
+
fakeInventory.prepopulateInventory(platform, inventory);
}
return this;
}
/**
- * After the setup, this returns all the variables used to update the tokens in the
inventory file.
- *
+ * After the setup, this returns all the variables used to update the tokens in the
inventory file.
+ *
* @return
*/
public Map<String, String> getInventoryFileReplacements() {
return inventoryFileReplacements;
}
-
+
private void fixupParent(Resource parent, Collection<Resource> children) {
for (Resource child : children) {
child.setParentResource(parent);
commit a23490d9053904f0e78cb5b0ce7c43a92b7c4f36
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed Feb 13 11:51:45 2013 -0500
Fix issues in mergeAvailabilityReport "repair code". This is code that
attempts to fix problems in the Availability records, if they somehow get
corrupted. In general, it doesn't execute. But if and when it did, it
wasn't repairing things as well as it could. This makes improvements.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/AvailabilityManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/AvailabilityManagerBean.java
index 2946d40..0181d7a 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/AvailabilityManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/AvailabilityManagerBean.java
@@ -591,52 +591,13 @@ public class AvailabilityManagerBean implements
AvailabilityManagerLocal, Availa
// availability reports only tell us the current state at the start time; end
time is ignored/must be null
reported.setEndTime(null);
- try {
- q.setParameter("resourceId", reported.getResource().getId());
- Availability latest = (Availability) q.getSingleResult();
- AvailabilityType latestType = latest.getAvailabilityType();
- AvailabilityType reportedType = reported.getAvailabilityType();
-
- // If the current avail is DISABLED, and this report is not trying to
re-enable the resource,
- // Then ignore the reported avail.
- if (AvailabilityType.DISABLED == latestType) {
- if (!(mergeInfo.isEnablementReport() &&
(AvailabilityType.UNKNOWN == reportedType))) {
- disabledAvailabilities.add(reported);
- continue;
- }
- }
-
- if (reported.getStartTime() >= latest.getStartTime()) {
- //log.info( "new avail (latest/reported)-->" + latest +
"/" + reported );
-
- // the new availability data is for a time after our last known state
change
- // we are run-length encoded, so only persist data if the
availability changed
- if (latest.getAvailabilityType() != reported.getAvailabilityType())
{
- entityManager.persist(reported);
- mergeInfo.incrementNumInserted();
-
- latest.setEndTime(reported.getStartTime());
- latest = entityManager.merge(latest);
-
- updateResourceAvailability(reported);
- }
-
- // our last known state was unknown, ask for a full report to ensure
we are in sync with agent
- if (latest.getAvailabilityType() == AvailabilityType.UNKNOWN) {
- mergeInfo.setAskForFullReport(true);
- }
- } else {
- //log.info( "past avail (latest/reported)==>" + latest +
"/" + reported );
+ // get the latest avail for the reported resource
+ q.setParameter("resourceId", reported.getResource().getId());
+ Availability latest = null;
- // The new data is for a time in the past, probably an agent sending
a report after
- // a network outage has been corrected but after we have already
backfilled.
- // We need to insert it into our past timeline.
- insertAvailability(reported);
- mergeInfo.incrementNumInserted();
+ try {
+ latest = (Availability) q.getSingleResult();
- // this is an unusual report - ask the agent for a full report so as
to ensure we are in sync with agent
- mergeInfo.setAskForFullReport(true);
- }
} catch (NoResultException nre) {
// This should not happen unless the Resource in the report is stale,
which can happen in certain
// sync scenarios. A Resource is given its initial
Availability/ResourceAvailability when it is
@@ -644,37 +605,47 @@ public class AvailabilityManagerBean implements
AvailabilityManagerLocal, Availa
// it must not exist in my utopian view of the world. Let's just make
sure...
Resource attachedResource = (Resource) entityManager.find(Resource.class,
reported.getResource()
.getId());
- if (null == attachedResource) {
+
+ if ((null == attachedResource) || (InventoryStatus.COMMITTED !=
attachedResource.getInventoryStatus())) {
// expected case
log.info("Skipping mergeAvailabilityReport() for stale resource
[" + reported.getResource()
+ "]. These messages should go away after the next agent
synchronization with the server.");
- } else if (InventoryStatus.COMMITTED ==
attachedResource.getInventoryStatus()) {
- // this should not happen, it means the resource exists but has no
latest Availability
- // record (i.e. sendTime == null). Try to correct the situation.
+ continue;
+
+ } else {
+ // this should not really happen but is possible in rare failure
situations, it means the resource
+ // exists but has no latest Availability record (i.e. sendTime ==
null). Correct the situation and
+ // then process the reported avail.
log.warn("Resource [" + reported.getResource()
+ "] has no latest availability record (i.e. no endtime) -
will attempt to repair.\n"
+ mergeInfo.toString(false));
+
try {
List<Availability> attachedAvails =
attachedResource.getAvailability();
+ Availability attachedLastAvail = null;
+
if (attachedAvails.isEmpty()) {
- attachedResource.initCurrentAvailability();
- entityManager.merge(attachedResource);
+ latest = new Availability(attachedResource, 0L,
AvailabilityType.UNKNOWN);
+ entityManager.persist(latest);
} else {
- Availability attachedLastAvail =
attachedAvails.get(attachedAvails.size() - 1);
- attachedLastAvail.setEndTime(null);
- entityManager.merge(attachedLastAvail);
+ latest = attachedAvails.get(attachedAvails.size() - 1);
+ latest.setEndTime(null);
+ latest = entityManager.merge(latest);
}
+ updateResourceAvailability(latest);
+
// ask the agent for a full report so as to ensure we are in sync
with agent
mergeInfo.setAskForFullReport(true);
} catch (Throwable t) {
- log.warn("Unable to repair latest availablity for Resource
[" + reported.getResource() + "]", t);
+ log.warn("Unable to repair NoResult latest availablity for
Resource [" + reported.getResource()
+ + "]", t);
+ continue;
}
}
-
} catch (NonUniqueResultException nure) {
// This condition should never happen. In my world of la-la land,
I've done everything
// correctly so this never happens. But, due to the asynchronous nature
of things,
@@ -686,15 +657,69 @@ public class AvailabilityManagerBean implements
AvailabilityManagerLocal, Availa
log.warn("Resource [" + reported.getResource() + "] has
multiple availabilities without an endtime ["
+ nure.getMessage() + "] - will attempt to remove the extra
ones\n" + mergeInfo.toString(false));
- q.setParameter("resourceId", reported.getResource().getId());
- List<Availability> latest = q.getResultList();
+ try {
+
+ List<Availability> latestList = q.getResultList();
+
+ // delete all but the last one (our query sorts in ASC start time
order)
+ int latestCount = latestList.size();
+ for (int i = 0; i < (latestCount - 1); i++) {
+ entityManager.remove(latestList.get(i));
+ }
+
+ latest = latestList.get(latestCount - 1);
+ updateResourceAvailability(latest);
+
+ // this is an unusual report - ask the agent for a full report so as
to ensure we are in sync with agent
+ mergeInfo.setAskForFullReport(true);
+
+ } catch (Throwable t) {
+ log.warn(
+ "Unable to repair NonUnique Result latest availablity for
Resource [" + reported.getResource()
+ + "]", t);
+ continue;
+ }
+ }
+
+ AvailabilityType latestType = latest.getAvailabilityType();
+ AvailabilityType reportedType = reported.getAvailabilityType();
- // delete all but the last one (our query sorts in ASC start time order)
- int latestCount = latest.size();
- for (int i = 0; i < (latestCount - 1); i++) {
- entityManager.remove(latest.get(i));
+ // If the current avail is DISABLED, and this report is not trying to
re-enable the resource,
+ // Then ignore the reported avail.
+ if (AvailabilityType.DISABLED == latestType) {
+ if (!(mergeInfo.isEnablementReport() && (AvailabilityType.UNKNOWN
== reportedType))) {
+ disabledAvailabilities.add(reported);
+ continue;
}
- updateResourceAvailability(latest.get(latestCount - 1));
+ }
+
+ if (reported.getStartTime() >= latest.getStartTime()) {
+ //log.info( "new avail (latest/reported)-->" + latest +
"/" + reported );
+
+ // the new availability data is for a time after our last known state
change
+ // we are run-length encoded, so only persist data if the availability
changed
+ if (latest.getAvailabilityType() != reported.getAvailabilityType()) {
+ entityManager.persist(reported);
+ mergeInfo.incrementNumInserted();
+
+ latest.setEndTime(reported.getStartTime());
+ latest = entityManager.merge(latest);
+
+ updateResourceAvailability(reported);
+ }
+
+ // our last known state was unknown, ask for a full report to ensure we
are in sync with agent
+ if (latest.getAvailabilityType() == AvailabilityType.UNKNOWN) {
+ mergeInfo.setAskForFullReport(true);
+ }
+ } else {
+ //log.info( "past avail (latest/reported)==>" + latest +
"/" + reported );
+
+ // The new data is for a time in the past, probably an agent sending a
report after
+ // a network outage has been corrected but after we have already
backfilled.
+ // We need to insert it into our past timeline.
+ insertAvailability(reported);
+ mergeInfo.incrementNumInserted();
// this is an unusual report - ask the agent for a full report so as to
ensure we are in sync with agent
mergeInfo.setAskForFullReport(true);
commit 9c6886bf1be548b195ac14e81c76805b988c149a
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed Feb 13 09:22:40 2013 -0500
Fix test given slight change in avail behavior. In commit
c516ad09fcebcedfd1a505d6bfd434997ac6642d
we stopped kicking off an immediate avail scan when new resources were discovered,
simplifying the code, and approach, to just wait for the next scheduled scan,
which likely occurs nearly as fast. From the test's perspective this meant one
resource, the platform, had its avail change at a slightly different time.
diff --git
a/modules/core/plugin-container-itest/src/test/java/org/rhq/core/pc/avail/AvailTest.java
b/modules/core/plugin-container-itest/src/test/java/org/rhq/core/pc/avail/AvailTest.java
index 005e900..956fb97 100644
---
a/modules/core/plugin-container-itest/src/test/java/org/rhq/core/pc/avail/AvailTest.java
+++
b/modules/core/plugin-container-itest/src/test/java/org/rhq/core/pc/avail/AvailTest.java
@@ -24,13 +24,13 @@ import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
import org.rhq.core.domain.resource.InventoryStatus;
import org.rhq.core.pc.PluginContainer;
-import org.rhq.plugins.test.avail.AvailDiscoveryComponent;
-import org.rhq.plugins.test.avail.AvailResourceComponent;
import org.rhq.core.pc.inventory.AvailabilityExecutor;
import org.rhq.core.pc.inventory.AvailabilityExecutor.Scan;
import org.rhq.core.pc.inventory.ForceAvailabilityExecutor;
import org.rhq.core.pc.inventory.ResourceContainer;
import org.rhq.core.pluginapi.inventory.ResourceComponent;
+import org.rhq.plugins.test.avail.AvailDiscoveryComponent;
+import org.rhq.plugins.test.avail.AvailResourceComponent;
import org.rhq.test.arquillian.AfterDiscovery;
import org.rhq.test.arquillian.BeforeDiscovery;
import org.rhq.test.arquillian.FakeServerInventory;
@@ -184,7 +184,7 @@ public class AvailTest extends Arquillian {
Assert.assertEquals(datum.getAvailabilityType(), AvailabilityType.UP,
"should be UP at the start");
}
AvailabilityExecutor.Scan scan = executor.getMostRecentScanHistory();
- assertScan(scan, true, true, 29, 28, 29, 28, 0, 0);
+ assertScan(scan, true, true, 29, 29, 29, 28, 0, 0);
// do a forced avail check again - nothing changed, so we should have an empty
report
report = executor.call();
@@ -514,7 +514,7 @@ public class AvailTest extends Arquillian {
Assert.assertEquals(scan.getNumResources(), numResources,
"Unexpected numResources, remember to include the implied
platform?");
Assert.assertEquals(scan.getNumAvailabilityChanges(), numChanges,
- "Unexpected numChanges, remember to omit the implied platform");
+ "Unexpected numChanges, remember to include the implied
platform");
Assert.assertEquals(scan.getNumGetAvailabilityCalls(), numCalls,
"Unexpected numGetAvailCalls, remember to include the implied
platform");
Assert.assertEquals(scan.getNumScheduledRandomly(), numSched,
commit 1b1e78f7a8c6a364d563a9bae4ea73116e5381c1
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue Feb 12 17:20:00 2013 -0500
To maintain the test dep ordering, which is sometimes important, and definitel
is important here, move all of the test deps to the new test.dependencies profile.
diff --git a/modules/enterprise/server/itests-2/pom.xml
b/modules/enterprise/server/itests-2/pom.xml
index d5daa17..5961627 100644
--- a/modules/enterprise/server/itests-2/pom.xml
+++ b/modules/enterprise/server/itests-2/pom.xml
@@ -35,144 +35,7 @@
</properties>
<dependencies>
- <!--================ Test Deps ================ -->
-
- <!-- Note, the test dep ordering can be important. Maven orders the [test]
classpath in the order listed in the pom. -->
- <dependency>
- <groupId>org.jboss.as</groupId>
- <artifactId>jboss-as-dist</artifactId>
- <type>zip</type>
- <scope>test</scope>
- </dependency>
-
- <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.arquillian.testng</groupId>
- <artifactId>arquillian-testng-container</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.jboss.shrinkwrap.resolver</groupId>
- <artifactId>shrinkwrap-resolver-depchain</artifactId>
- <type>pom</type>
- <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>rhq-arquillian-suite-extension</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-domain</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-enterprise-server</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-script-bindings</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-server-client-api</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>rhq-serverplugin-drift</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>test-utils</artifactId>
- <version>${project.version}</version>
- <exclusions>
- <exclusion>
- <groupId>org.testng</groupId>
- <artifactId>testng</artifactId>
- </exclusion>
- </exclusions>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.rhq.helpers</groupId>
- <artifactId>perftest-support</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-entitymanager</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.opensymphony.quartz</groupId>
- <artifactId>quartz</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.liquibase</groupId>
- <artifactId>liquibase-core</artifactId>
- <version>${liquibase.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>joda-time</groupId>
- <artifactId>joda-time</artifactId>
- <version>2.1</version>
- <scope>test</scope>
- </dependency>
+ <!-- see the test.dependencies profile below -->
</dependencies>
<build>
@@ -669,46 +532,183 @@
<profiles>
- <profile>
- <!--
- This profile has been created to avoid unnecessary resolution of test
dependencies during a build that
- does not run, compile or need tests.
- More test dependencies are to be moved here if the set of sub-dependencies is
complex, references project
- test jars, or conflicts with changing the container version.
- -->
- <id>test.dependencies</id>
- <activation>
- <property>
- <name>maven.test.skip</name>
- <value>!true</value>
- </property>
- </activation>
-
- <dependencies>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>rhq-core-client-api</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.jboss.as</groupId>
- <artifactId>jboss-as-arquillian-container-managed</artifactId>
- <version>${jboss.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>rhq-core-domain</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </profile>
+ <profile>
+ <!-- This profile has been created to avoid unnecessary resolution of test
dependencies during a build that does not
+ run, compile or need tests. There are product build dependencies on this profile,
don't remove. -->
+
+ <id>test.dependencies</id>
+ <activation>
+ <property>
+ <name>maven.test.skip</name>
+ <value>!true</value>
+ </property>
+ </activation>
+
+
+ <dependencies>
+ <!-- Note, the test dep ordering can be important. Maven orders the [test]
classpath in the order listed in the pom. -->
+
+ <dependency>
+ <groupId>org.jboss.as</groupId>
+ <artifactId>jboss-as-dist</artifactId>
+ <type>zip</type>
+ <scope>test</scope>
+ </dependency>
+
+ <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.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-depchain</artifactId>
+ <type>pom</type>
+ <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>rhq-arquillian-suite-extension</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-domain</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>rhq-core-domain</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-enterprise-server</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-script-bindings</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-server-client-api</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>rhq-serverplugin-drift</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>rhq-core-client-api</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>test-utils</artifactId>
+ <version>${project.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ </exclusion>
+ </exclusions>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq.helpers</groupId>
+ <artifactId>perftest-support</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-entitymanager</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-module-testng</artifactId>
+ <version>${powermock.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito</artifactId>
+ <version>${powermock.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.opensymphony.quartz</groupId>
+ <artifactId>quartz</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.liquibase</groupId>
+ <artifactId>liquibase-core</artifactId>
+ <version>${liquibase.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>joda-time</groupId>
+ <artifactId>joda-time</artifactId>
+ <version>2.1</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+ </profile>
<!-- If testing against oracle, override the default property settings -->
<profile>
commit 1c247adee91e2d82a2dd28905345067efa546a85
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue Feb 12 15:48:32 2013 -0500
Fix a transactioning issue with agent backfill. It was possible for the Agent to
be marked backfilled in one transaction yet have the actual avail changes fail
in a second transaction, leaving the dead agent and its children with UP avail
and no longer eligible for backfill due to the flag being set.
Additionally, avoid large transactions if many agents need to be backfilled
sumultaneously.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
index 29c3ad3..d01dbd0 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
@@ -192,7 +192,7 @@ public class AgentManagerBean implements AgentManagerLocal {
server_bootstrap.removeDownedAgent(downedAgent.getRemoteEndpoint());
log.info("Agent with name [" + agentName + "] just went
down");
- agentManager.backfillAgent(subjectManager.getOverlord(), agentName,
downedAgent.getId());
+ agentManager.backfillAgentInNewTransaction(subjectManager.getOverlord(),
agentName, downedAgent.getId());
return;
}
@@ -272,7 +272,8 @@ public class AgentManagerBean implements AgentManagerLocal {
log.info("Have not heard from agent [" + record.getAgentName()
+ "] since ["
+ new Date(record.getLastAvailabilityPing()) + "]. Will be
backfilled since we suspect it is down");
- agentManager.backfillAgent(subjectManager.getOverlord(),
record.getAgentName(), record.getAgentId());
+ agentManager.backfillAgentInNewTransaction(subjectManager.getOverlord(),
record.getAgentName(),
+ record.getAgentId());
}
}
@@ -281,7 +282,8 @@ public class AgentManagerBean implements AgentManagerLocal {
return;
}
- public void backfillAgent(Subject subject, String agentName, int agentId) {
+ @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
+ public void backfillAgentInNewTransaction(Subject subject, String agentName, int
agentId) {
// make sure we lock out all processing of any availability reports that might
come our way to avoid concurrency
// problems
AvailabilityReportSerializer.getSingleton().lock(agentName);
@@ -299,7 +301,6 @@ public class AgentManagerBean implements AgentManagerLocal {
}
}
- @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void setAgentBackfilled(int agentId, boolean backfilled) {
Query query = entityManager.createNamedQuery(Agent.QUERY_SET_AGENT_BACKFILLED);
query.setParameter("agentId", agentId);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
index 6cb50f2..842d5d8 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
@@ -45,15 +45,16 @@ import org.rhq.enterprise.server.agentclient.AgentClient;
public interface AgentManagerLocal {
/**
- * Call this method to set the agent down and mark it 'backfilled'. Also,
sets all of its monitored resources
- * to an UNKNOWN avail state since the agent is no longer reporting availability.
+ * Call this method to set the agent DOWN and mark it 'backfilled'. Also,
sets all of its monitored resources
+ * to an UNKNOWN avail state since the agent is no longer reporting availability.
Done in its own transaction to
+ * avoid large transactions if many agents are simultaneously backfilled.
*
* @param subject
* @param agentName
* @param agentId
*/
// This method should not be remoted.
- void backfillAgent(Subject subject, String agentName, int agentId);
+ void backfillAgentInNewTransaction(Subject subject, String agentName, int agentId);
/**
* Persists a new agent.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/AvailabilityManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/AvailabilityManagerBean.java
index d92cbc4..2946d40 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/AvailabilityManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/AvailabilityManagerBean.java
@@ -749,7 +749,6 @@ public class AvailabilityManagerBean implements
AvailabilityManagerLocal, Availa
}
@SuppressWarnings("unchecked")
- @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void updateAgentResourceAvailabilities(int agentId, AvailabilityType
platformAvailType,
AvailabilityType childAvailType) {
commit 6bcb845e3a3fd76fed93444c64eb0d2d98dd93d1
Merge: 08de25a c516ad0
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 15:14:41 2013 -0500
Merge branch 'track_master' into testMerge
Conflicts:
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftServerServiceImpl.java
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/inventory/InventoryManagerBean.java
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
diff --cc
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
index c239cb1,b2492cf..00c12c3
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
@@@ -450,10 -448,9 +450,11 @@@ public class BundleManagerBean implemen
// first see if the bundle exists or not; if not, create one
BundleCriteria criteria = new BundleCriteria();
+ criteria.setStrict(true);
criteria.addFilterBundleTypeId(Integer.valueOf(bundleTypeId));
criteria.addFilterName(bundleName);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
PageList<Bundle> bundles = findBundlesByCriteria(subject, criteria);
Bundle bundle;
if (bundles.getTotalSize() == 0) {
diff --cc
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
index d6c6f50,319319f..68af1e7
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
@@@ -107,10 -108,9 +108,11 @@@ import org.rhq.enterprise.server.authz.
import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.plugin.pc.content.PackageDetailsValidationException;
import org.rhq.enterprise.server.plugin.pc.content.PackageTypeBehavior;
+ import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeNotFoundException;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
diff --cc
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
index 63cb44d,e7f5b68..f604468
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
@@@ -1077,30 -1078,18 +1078,17 @@@ public class DiscoveryBossBean implemen
if (null == resourceType) {
try {
- ResourceTypeCriteria criteria = new ResourceTypeCriteria();
- criteria.addFilterPluginName(plugin);
- criteria.addFilterName(name);
- criteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
-
- List<ResourceType> result =
resourceTypeManager.findResourceTypesByCriteria(
- subjectManager.getOverlord(), criteria);
-
- if (!result.isEmpty()) {
- resourceType = result.get(0);
- loadedTypeMap.put(key.toString(), resourceType);
- }
+ resourceType =
this.resourceTypeManager.getResourceTypeByNameAndPlugin(name, plugin);
-
} catch (RuntimeException e) {
- log.error("Failed to lookup Resource type [" +
resource.getResourceType() + "] for reported Resource ["
- + resource + "] - this should not have happened.");
- return false;
+ resourceType = null;
}
- }
- if (null == resourceType) {
- log.error("Reported resource [" + resource + "] has an
unknown type [" + resource.getResourceType()
- + "]. The Agent most likely has a plugin named '" +
resource.getResourceType().getPlugin()
- + "' installed that is not installed on the Server. Resource
will be ignored...");
- return false;
+ if (null == resourceType) {
+ log.error("Reported resource [" + resource + "] has an
unknown type [" + resource.getResourceType()
+ + "]. The Agent most likely has a plugin named '" +
plugin
+ + "' installed that is not installed on the Server.
Resource will be ignored...");
+ return false;
+ }
}
resource.setResourceType(resourceType);
diff --cc
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
index 53241d9,1495710..3b4f2ec
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
@@@ -504,10 -501,9 +505,11 @@@ public class DriftManagerBean implement
}
DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
+ criteria.setStrict(true);
criteria.addFilterName(summary.getDriftDefinitionName());
criteria.addFilterResourceIds(resourceId);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
PageList<DriftDefinition> definitions =
findDriftDefinitionsByCriteria(subject, criteria);
if (definitions.isEmpty()) {
diff --cc
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
index 95b5f9d,a6002a97..43d5240
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
@@@ -64,8 -64,8 +65,10 @@@ import org.rhq.enterprise.server.resour
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.resource.group.ResourceGroupDeleteException;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
+ import org.rhq.enterprise.server.scheduler.jobs.AsyncResourceDeleteJob;
+ import org.rhq.enterprise.server.scheduler.jobs.PurgeResourceTypesJob;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* This class manages the metadata for resources. Plugins are registered against this
bean so that their metadata can be
diff --cc
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
index 5d64970,ddf29b6..faa14ad
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
@@@ -126,60 -122,48 +126,104 @@@ public class CriteriaQueryTest
assertEquals(actual, expected);
}
+ /** This is like executeQueryThatReturnsMultiplePagesOfResults(), creates more
+ * that two pages of ordered entries and iterates over them. This is to test
+ * a nasty bug in CriteriaQuery where results beyond the first two pages were
+ * not being parsed.
+ */
+ @Test
+ public void executeQueryThatReturnsTotalPagesOfResults() {
+ //create page control to browse entries 100 at a time and start at page 0
+ int pageSize = 100;
+ PageControl pc = new PageControl(0, pageSize);
+
+ //Total size of result set is 500.
+ int totalSize = 500;
+
+ //Create list and populate with all entries.
+ List<FakeEntity> total = new ArrayList<FakeEntity>();
+ for (int i = 0; i < totalSize; i++) {
+ total.add(new FakeEntity(i));
+ }
+
+ //build executor to parse a given list with using PageControl passed in
+ FakeCriteriaQueryExecutor queryExecutor = new
FakeCriteriaQueryExecutor(totalSize, pc);
+
+ //add pages of results to simulate PageList results as returned by db queries
+ //todo: spinder, modify to support fractional results below and add last page.
+ int bucketCount = totalSize / pageSize;//number of full pages to list
+ int start = 0;
+ int end = pageSize;
+ //add bucketCount pages of data to read from.
+ for (int i = 0; i < bucketCount; i++) {
+ //Ex. first two pages (0, 100), (100,200), etc.
+ queryExecutor.addPage(total.subList(start, end));
+ start += pageSize;
+ end += pageSize;
+ }
+
+ //build criteria and attach pageControl
+ FakeEntityCriteria criteria = new FakeEntityCriteria();
+ //DO NOT use criteria.setPageControl(pc) here as it causes ignore of
pageNumber/pageSize
+ criteria.setPaging(pc.getPageNumber(), pc.getPageSize());
+
+ //?? So which pageControl has the right details? Criteria.pageControl? OR
PageControl passed into the QueryExecutor.
+
+ //Start off the initial query to page through the items in chunks defined by the
pageControl instance
+ CriteriaQuery<FakeEntity, FakeEntityCriteria> query = new
CriteriaQuery<FakeEntity, FakeEntityCriteria>(
+ criteria, queryExecutor);
+
+ //Now iterate over the list and make sure that iteration happens in order as
expected
+ //monotonically increasing.
+ int last = -1;
+ for (FakeEntity entity : query) {
+ //this fails with earlier bug in CriteriaQuery
+ assertEquals(true, (last < entity.getId()));
+ last = entity.getId();
+ }
+ }
++
+ @Test
+ public void singleResultTest() {
+ // This test doesn't really fit here but I;m adding it for convenience
+ List<FakeEntity> result = null;
+
+ try {
+ FakeEntityCriteria.getSingleResult(result);
+ assert false : "Should have thrown Runtime Exception";
+
+ } catch (RuntimeException e) {
+ assert e.getMessage().contains("NoResultException");
+ }
+
+ result = new ArrayList<FakeEntity>(2);
+
+ try {
+ FakeEntityCriteria.getSingleResult(result);
+ assert false : "Should have thrown Runtime Exception";
+
+ } catch (RuntimeException e) {
+ assert e.getMessage().contains("NoResultException");
+ }
+
+ result.add(new FakeEntity(1));
+
+ try {
+ FakeEntity r = FakeEntityCriteria.getSingleResult(result);
+ assert r.getId() == 1 : "Should have retuned expected entity but
returned: " + r;
+
+ } catch (Throwable t) {
+ assert false : "Should have returned single result";
+ }
+
+ result.add(new FakeEntity(2));
+
+ try {
+ FakeEntityCriteria.getSingleResult(result);
+ assert false : "Should have thrown Runtime Exception";
+
+ } catch (RuntimeException e) {
+ assert e.getMessage().contains("NonUniqueResultException");
+ }
+ }
-
}
commit 08de25a9c5d952594e4226f47e4cdd52e75b0137
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 15:00:02 2013 -0500
i)update DriftManagerBean to eliminate unnecessary page clearing
ii)Update ConfigurationManagerBean to use CriteriaQuery where possible instead of
unbounded criteria queries.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
index 141b910..6521730 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
@@ -120,6 +120,8 @@ import
org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
import org.rhq.enterprise.server.resource.group.ResourceGroupNotFoundException;
import org.rhq.enterprise.server.resource.group.ResourceGroupUpdateException;
import org.rhq.enterprise.server.scheduler.SchedulerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
import org.rhq.enterprise.server.util.QuartzUtil;
@@ -2560,7 +2562,7 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
* @param subject Subject of the caller - may limit search results
* @param pds the PropertyDefinitionSimple to work on
*/
- private void handlePDS(Subject subject, int resourceId, PropertyDefinitionSimple pds)
{
+ private void handlePDS(final Subject subject, int resourceId,
PropertyDefinitionSimple pds) {
if (pds.getOptionsSource() != null) {
// evaluate the source parameters
@@ -2574,8 +2576,16 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
if (tt == PropertyOptionsSource.TargetType.RESOURCE || tt ==
PropertyOptionsSource.TargetType.CONFIGURATION) {
List<Resource> resources = null;
+ CriteriaQuery<Resource, ResourceCriteria> resourcesPaged = null;
ResourceCriteria criteria = new ResourceCriteria();
- criteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
+
+ //Use CriteriaQuery to automatically chunk/page through criteria query
results
+ CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor =
new CriteriaQueryExecutor<Resource, ResourceCriteria>() {
+ @Override
+ public PageList<Resource> execute(ResourceCriteria criteria) {
+ return resourceManager.findResourcesByCriteria(subject,
criteria);
+ }
+ };
if (tt == PropertyOptionsSource.TargetType.CONFIGURATION) {
// split out expression part for target=configuration
@@ -2586,7 +2596,7 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
if (!"self".equals(expr)) {
criteria.setSearchExpression(expr);
- resources = resourceManager.findResourcesByCriteria(subject,
criteria);
+ resourcesPaged = new CriteriaQuery<Resource,
ResourceCriteria>(criteria, queryExecutor);
} else if (resourceId >= 0) {
resources = new ArrayList<Resource>();
resources.add(resourceManager.getResourceById(subject,
resourceId));
@@ -2602,37 +2612,24 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
}
} else {
criteria.setSearchExpression(expression);
- resources = resourceManager.findResourcesByCriteria(subject,
criteria);
+ resourcesPaged = new CriteriaQuery<Resource,
ResourceCriteria>(criteria, queryExecutor);
}
+ if (resources != null) {//process resources
for (Resource resource : resources) {
- if (tt == PropertyOptionsSource.TargetType.RESOURCE) {
- String name = resource.getName();
-
- // filter if the user provided a filter
- if (filterPattern != null) {
- Matcher m = filterPattern.matcher(name);
- if (m.matches()) {
- PropertyDefinitionEnumeration pde = new
PropertyDefinitionEnumeration(name, "" + name);
- pds.getEnumeratedValues().add(pde);
- }
- } else { // Filter is null -> none provided -> do not
filter
- PropertyDefinitionEnumeration pde = new
PropertyDefinitionEnumeration(name, "" + name);
- pds.getEnumeratedValues().add(pde);
- }
- } else if (tt == PropertyOptionsSource.TargetType.CONFIGURATION) {
- // for configuration we need to drill down into the resource
configuration
- if (!handleConfigurationTarget(pds, expression, resource))
- return;
-
+ processPropertyOptionsSource(pds, tt, expression, filterPattern,
resource);
+ }
+ } else {// process resourcesPaged(CriteriaQuery parsing)
+ for (Resource resource : resourcesPaged) {
+ processPropertyOptionsSource(pds, tt, expression, filterPattern,
resource);
}
}
} else if (tt == PropertyOptionsSource.TargetType.GROUP) {
// for groups we need to talk to the group manager
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
criteria.setSearchExpression(expression);
- criteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
+ //?? spinder 2-12-13: We don't do anything with the composite
results here?
resourceGroupManager.findResourceGroupCompositesByCriteria(subject,
criteria);
}
// TODO plugin and resourceType
@@ -2640,6 +2637,30 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
}
+ private void processPropertyOptionsSource(PropertyDefinitionSimple pds,
PropertyOptionsSource.TargetType tt,
+ String expression, Pattern filterPattern, Resource resource) {
+ if (tt == PropertyOptionsSource.TargetType.RESOURCE) {
+ String name = resource.getName();
+
+ // filter if the user provided a filter
+ if (filterPattern != null) {
+ Matcher m = filterPattern.matcher(name);
+ if (m.matches()) {
+ PropertyDefinitionEnumeration pde = new
PropertyDefinitionEnumeration(name, "" + name);
+ pds.getEnumeratedValues().add(pde);
+ }
+ } else { // Filter is null -> none provided -> do not filter
+ PropertyDefinitionEnumeration pde = new
PropertyDefinitionEnumeration(name, "" + name);
+ pds.getEnumeratedValues().add(pde);
+ }
+ } else if (tt == PropertyOptionsSource.TargetType.CONFIGURATION) {
+ // for configuration we need to drill down into the resource configuration
+ if (!handleConfigurationTarget(pds, expression, resource))
+ return;
+
+ }
+ }
+
/**
* Drill down in the case the user set up a target of "configuration". We
need to check
* that the target property actually exists and that it has a format we understand
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
index dcc08d8..53241d9 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
@@ -208,7 +208,6 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
DriftDefinitionCriteria driftDefCriteria = new DriftDefinitionCriteria();
driftDefCriteria.addFilterResourceIds(resourceId);
driftDefCriteria.addFilterName(driftDefName);
- driftDefCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
PageList<DriftDefinition> defs = findDriftDefinitionsByCriteria(overlord,
driftDefCriteria);
if (defs.isEmpty()) {
@@ -223,7 +222,6 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
criteria.addFilterDriftDefinitionId(driftDef.getId());
criteria.addFilterVersion(Integer.toString(version));
criteria.fetchDrifts(true);
- criteria.setPageControl(PageControl.getUnlimitedInstance());//disable paging as
the code assumes all the results will be returned.
PageList<? extends DriftChangeSet<?>> changeSets =
driftServerPlugin.findDriftChangeSetsByCriteria(overlord,
criteria);
commit 074bb5d7cdb8512e3a3d7738ca45f08018696ed3
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 13:27:03 2013 -0500
Update unbounded criteria usage to CriteriaQuery usage to scale for larger
deployments.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
index 4fabe9a..c239cb1 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
@@ -84,7 +84,6 @@ import org.rhq.core.domain.criteria.ResourceTypeCriteria;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.group.ResourceGroup;
-import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.StringUtils;
import org.rhq.core.util.NumberUtil;
@@ -105,6 +104,8 @@ import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility;
import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility.SerializationType;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
@@ -376,7 +377,6 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
criteria.addFilterDestinationId(bundleDestination.getId());
criteria.addFilterIsLive(true);
criteria.fetchBundleVersion(true);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
List<BundleDeployment> liveDeployments =
bundleManager.findBundleDeploymentsByCriteria(subject, criteria);
BundleDeployment liveDeployment = (liveDeployments.isEmpty()) ? null :
liveDeployments.get(0);
@@ -634,7 +634,6 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
criteria.setStrict(true);
criteria.addFilterBundleTypeId(bundleType.getId());
criteria.addFilterName(bundleName);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
PageList<Bundle> bundles = bundleManager.findBundlesByCriteria(subject,
criteria);
Bundle bundle;
@@ -702,15 +701,25 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
bundleVersion = bundleVersions.get(0);
List<BundleFile> bundleFiles = bundleVersion.getBundleFiles();
if (bundleFiles != null && bundleFiles.size() > 0) {
- BundleFileCriteria bfCriteria = new BundleFileCriteria();
+ final BundleFileCriteria bfCriteria = new BundleFileCriteria();
bfCriteria.addFilterBundleVersionId(bundleVersion.getId());
bfCriteria.fetchPackageVersion(true);
- bfCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
- PageList<BundleFile> bfs =
bundleManager.findBundleFilesByCriteria(subjectManager.getOverlord(),
- bfCriteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query
results
+ CriteriaQueryExecutor<BundleFile, BundleFileCriteria> queryExecutor
= new CriteriaQueryExecutor<BundleFile, BundleFileCriteria>() {
+ @Override
+ public PageList<BundleFile> execute(BundleFileCriteria
criteria) {
+ return
bundleManager.findBundleFilesByCriteria(subjectManager.getOverlord(), bfCriteria);
+ }
+ };
+
+ CriteriaQuery<BundleFile, BundleFileCriteria> bfs = new
CriteriaQuery<BundleFile, BundleFileCriteria>(
+ bfCriteria, queryExecutor);
+
bundleFiles.clear();
- bundleFiles.addAll(bfs);
+ for (BundleFile bf : bfs) {
+ bundleFiles.add(bf);
+ }
}
bundleVersion.setBundleDeployments(new ArrayList<BundleDeployment>());
} else {
@@ -854,7 +863,7 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
@Override
@RequiredPermission(Permission.MANAGE_BUNDLE)
@TransactionAttribute(TransactionAttributeType.NEVER)
- public void purgeBundleDestination(Subject subject, int bundleDestinationId) throws
Exception {
+ public void purgeBundleDestination(final Subject subject, int bundleDestinationId)
throws Exception {
// find the live bundle deployment for this destination, and get all the resource
deployments for that live deployment
BundleDeploymentCriteria bdc = new BundleDeploymentCriteria();
bdc.addFilterDestinationId(bundleDestinationId);
@@ -890,16 +899,28 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
for (BundleResourceDeployment resourceDeploy : resourceDeploys) {
resourceDeployIds.add(resourceDeploy.getId());
}
- BundleResourceDeploymentCriteria brdc = new BundleResourceDeploymentCriteria();
+ final BundleResourceDeploymentCriteria brdc = new
BundleResourceDeploymentCriteria();
brdc.addFilterIds(resourceDeployIds.toArray(new
Integer[resourceDeployIds.size()]));
brdc.fetchResource(true);
- brdc.setPageControl(PageControl.getUnlimitedInstance());
- PageList<BundleResourceDeployment> brdResults =
bundleManager.findBundleResourceDeploymentsByCriteria(subject,
- brdc);
+
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<BundleResourceDeployment,
BundleResourceDeploymentCriteria> queryExecutor = new
CriteriaQueryExecutor<BundleResourceDeployment, BundleResourceDeploymentCriteria>()
{
+ @Override
+ public PageList<BundleResourceDeployment>
execute(BundleResourceDeploymentCriteria criteria) {
+ return bundleManager.findBundleResourceDeploymentsByCriteria(subject,
brdc);
+ }
+ };
+
+ CriteriaQuery<BundleResourceDeployment, BundleResourceDeploymentCriteria>
brdResults = new CriteriaQuery<BundleResourceDeployment,
BundleResourceDeploymentCriteria>(
+ brdc, queryExecutor);
+
+ // PageList<BundleResourceDeployment> brdResults =
bundleManager.findBundleResourceDeploymentsByCriteria(subject,
+ // brdc);
resourceDeploys.clear();
- resourceDeploys.addAll(brdResults);
+ // resourceDeploys.addAll(brdResults);
// need to wire the live bundle deployment back in - no need for another query or
fetch it above because we have it already
for (BundleResourceDeployment brd : brdResults) {
+ resourceDeploys.add(brd);
brd.setBundleDeployment(liveDeployment);
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleServerServiceImpl.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleServerServiceImpl.java
index 0ca5b82..a78d7e9 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleServerServiceImpl.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleServerServiceImpl.java
@@ -33,11 +33,14 @@ import org.rhq.core.domain.bundle.BundleResourceDeploymentHistory;
import org.rhq.core.domain.content.PackageVersion;
import org.rhq.core.domain.criteria.BundleFileCriteria;
import org.rhq.core.domain.criteria.PackageVersionCriteria;
+import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.exception.WrappedRemotingException;
import org.rhq.enterprise.server.content.ContentManagerLocal;
import org.rhq.enterprise.server.content.ContentSourceManagerLocal;
import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility;
import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility.SerializationType;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -63,18 +66,27 @@ public class BundleServerServiceImpl implements BundleServerService {
public List<PackageVersion> getAllBundleVersionPackageVersions(int
bundleVersionId) {
try {
- BundleManagerLocal bm = LookupUtil.getBundleManager();
+ final BundleManagerLocal bm = LookupUtil.getBundleManager();
ContentManagerLocal cm = LookupUtil.getContentManager();
- Subject subject = LookupUtil.getSubjectManager().getOverlord();
- BundleFileCriteria bfc = new BundleFileCriteria();
+ final Subject subject = LookupUtil.getSubjectManager().getOverlord();
+ final BundleFileCriteria bfc = new BundleFileCriteria();
PackageVersionCriteria pvc = new PackageVersionCriteria();
bfc.addFilterBundleVersionId(bundleVersionId);
bfc.fetchPackageVersion(true);
- bfc.clearPaging();//disable paging as the code assumes all the results will
be returned.
- List<BundleFile> bundleFiles = bm.findBundleFilesByCriteria(subject,
bfc);
- List<PackageVersion> packageVersions = new
ArrayList<PackageVersion>(bundleFiles.size());
+ //Use CriteriaQuery to automatically chunk/page through criteria query
results
+ CriteriaQueryExecutor<BundleFile, BundleFileCriteria> queryExecutor =
new CriteriaQueryExecutor<BundleFile, BundleFileCriteria>() {
+ @Override
+ public PageList<BundleFile> execute(BundleFileCriteria criteria) {
+ return bm.findBundleFilesByCriteria(subject, bfc);
+ }
+ };
+
+ CriteriaQuery<BundleFile, BundleFileCriteria> bundleFiles = new
CriteriaQuery<BundleFile, BundleFileCriteria>(
+ bfc, queryExecutor);
+
+ List<PackageVersion> packageVersions = new
ArrayList<PackageVersion>();
PackageVersion packageVersion = null;
for (BundleFile bundleFile : bundleFiles) {
pvc.addFilterId(bundleFile.getPackageVersion().getId());
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DeletedResourceTypeFilter.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DeletedResourceTypeFilter.java
index c2371bd..347bc03 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DeletedResourceTypeFilter.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DeletedResourceTypeFilter.java
@@ -9,11 +9,12 @@ import org.rhq.core.domain.criteria.ResourceTypeCriteria;
import org.rhq.core.domain.plugin.Plugin;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.resource.metadata.PluginManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
public class DeletedResourceTypeFilter {
@@ -41,9 +42,17 @@ public class DeletedResourceTypeFilter {
private void loadDeletedTypes() {
ResourceTypeCriteria criteria = new ResourceTypeCriteria();
criteria.addFilterDeleted(true);
- criteria.setPageControl(PageControl.getUnlimitedInstance());
- PageList<ResourceType> results =
resourceTypeMgr.findResourceTypesByCriteria(subjectMgr.getOverlord(),
- criteria);
+
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<ResourceType, ResourceTypeCriteria> queryExecutor =
new CriteriaQueryExecutor<ResourceType, ResourceTypeCriteria>() {
+ @Override
+ public PageList<ResourceType> execute(ResourceTypeCriteria criteria) {
+ return
resourceTypeMgr.findResourceTypesByCriteria(subjectMgr.getOverlord(), criteria);
+ }
+ };
+
+ CriteriaQuery<ResourceType, ResourceTypeCriteria> results = new
CriteriaQuery<ResourceType, ResourceTypeCriteria>(
+ criteria, queryExecutor);
for (ResourceType type : results) {
deletedTypes.add(type.getName() + "::" + type.getPlugin());
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/execution/SearchAssistManager.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/execution/SearchAssistManager.java
index 1629926..ca9bfab 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/execution/SearchAssistManager.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/execution/SearchAssistManager.java
@@ -33,10 +33,13 @@ import org.rhq.core.domain.search.SavedSearch;
import org.rhq.core.domain.search.SearchSubsystem;
import org.rhq.core.domain.search.SearchSuggestion;
import org.rhq.core.domain.search.SearchSuggestion.Kind;
+import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.server.search.SavedSearchManagerLocal;
import org.rhq.enterprise.server.search.assist.SearchAssistant;
import org.rhq.enterprise.server.search.assist.SearchAssistantFactory;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -606,9 +609,17 @@ public class SearchAssistManager {
criteria.setCaseSensitive(false);
criteria.addSortName(PageOrdering.ASC);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- List<SavedSearch> savedSearchResults =
savedSearchManager.findSavedSearchesByCriteria(subject, criteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<SavedSearch, SavedSearchCriteria> queryExecutor = new
CriteriaQueryExecutor<SavedSearch, SavedSearchCriteria>() {
+ @Override
+ public PageList<SavedSearch> execute(SavedSearchCriteria criteria) {
+ return savedSearchManager.findSavedSearchesByCriteria(subject,
criteria);
+ }
+ };
+
+ CriteriaQuery<SavedSearch, SavedSearchCriteria> savedSearchResults = new
CriteriaQuery<SavedSearch, SavedSearchCriteria>(
+ criteria, queryExecutor);
List<SearchSuggestion> results = new ArrayList<SearchSuggestion>();
for (SavedSearch next : savedSearchResults) {
@@ -637,9 +648,17 @@ public class SearchAssistManager {
criteria.setCaseSensitive(false);
criteria.addSortName(PageOrdering.ASC);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- List<SavedSearch> savedSearchResults =
savedSearchManager.findSavedSearchesByCriteria(subject, criteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<SavedSearch, SavedSearchCriteria> queryExecutor = new
CriteriaQueryExecutor<SavedSearch, SavedSearchCriteria>() {
+ @Override
+ public PageList<SavedSearch> execute(SavedSearchCriteria criteria) {
+ return savedSearchManager.findSavedSearchesByCriteria(subject,
criteria);
+ }
+ };
+
+ CriteriaQuery<SavedSearch, SavedSearchCriteria> savedSearchResults = new
CriteriaQuery<SavedSearch, SavedSearchCriteria>(
+ criteria, queryExecutor);
List<SearchSuggestion> results = new ArrayList<SearchSuggestion>();
for (SavedSearch next : savedSearchResults) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/tagging/TagManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/tagging/TagManagerBean.java
index 944f799..27b2bf7 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/tagging/TagManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/tagging/TagManagerBean.java
@@ -84,7 +84,6 @@ public class TagManagerBean implements TagManagerLocal, TagManagerRemote
{
criteria.addFilterSemantic(tag.getSemantic());
criteria.addFilterName(tag.getName());
criteria.setStrict(true);
- criteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
List<Tag> found = findTagsByCriteria(subject, criteria);
if (!found.isEmpty()) {
commit 03bd442a7270443572a8e17c77551a2d72bf4951
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 12:04:30 2013 -0500
i)update ContentSourceMangerBean and several rest instances using unbounded criteria
to use CriteriaQuery specifically.
ii)modified CriteriaQuery to be able to return list of types
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
index e6bdf1b..b1dc1bc 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
@@ -122,6 +122,8 @@ import
org.rhq.enterprise.server.plugin.pc.content.InitializationException;
import org.rhq.enterprise.server.plugin.pc.content.PackageSyncReport;
import org.rhq.enterprise.server.plugin.pc.content.RepoDetails;
import org.rhq.enterprise.server.resource.ProductVersionManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -746,16 +748,25 @@ public class ContentSourceManagerBean implements
ContentSourceManagerLocal {
// Following same sort of workaround done in ContentProviderManager for
synchronizeContentProvider
// Assume this will need to be updated when we place syncing in repo layer
//
- RepoCriteria reposForContentSource = new RepoCriteria();
+ final RepoCriteria reposForContentSource = new RepoCriteria();
reposForContentSource.addFilterContentSourceIds(contentSourceId);
reposForContentSource.addFilterCandidate(false); // Don't sync
distributions for candidates
- reposForContentSource.clearPaging();//disable paging as the code assumes all
the results will be returned.
- Subject overlord = LookupUtil.getSubjectManager().getOverlord();
- List<Repo> repos = repoManager.findReposByCriteria(overlord,
reposForContentSource);
- log.debug("downloadDistributionBits found " + repos.size() + "
repos associated with this contentSourceId "
- + contentSourceId);
+ final Subject overlord = LookupUtil.getSubjectManager().getOverlord();
+ //Use CriteriaQuery to automatically chunk/page through criteria query
results
+ CriteriaQueryExecutor<Repo, RepoCriteria> queryExecutor = new
CriteriaQueryExecutor<Repo, RepoCriteria>() {
+ @Override
+ public PageList<Repo> execute(RepoCriteria criteria) {
+ return repoManager.findReposByCriteria(overlord,
reposForContentSource);
+ }
+ };
+
+ CriteriaQuery<Repo, RepoCriteria> repos = new CriteriaQuery<Repo,
RepoCriteria>(reposForContentSource,
+ queryExecutor);
+
+ int repoCount = 0;
for (Repo repo : repos) {
+ repoCount++;
log.debug("downloadDistributionBits operating on repo: " +
repo.getName() + " id = " + repo.getId());
// Look up Distributions associated with this ContentSource.
PageControl pageControl = PageControl.getUnlimitedInstance();
@@ -798,6 +809,9 @@ public class ContentSourceManagerBean implements
ContentSourceManagerLocal {
}
}
}
+ log.debug("downloadDistributionBits found and processed " +
repoCount
+ + " repos associated with this contentSourceId "
+ + contentSourceId);
} catch (Throwable t) {
log.error(t);
throw new RuntimeException(t);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
index 3d7abe0..786a8b1 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
@@ -59,11 +59,14 @@ import org.rhq.core.domain.event.EventSource;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.event.EventManagerLocal;
import org.rhq.enterprise.server.rest.domain.EventDefinitionRest;
import org.rhq.enterprise.server.rest.domain.EventRest;
import org.rhq.enterprise.server.rest.domain.EventSourceRest;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* Handle event related things
@@ -297,8 +300,16 @@ public class EventHandlerBean extends AbstractRestBean {
private Response.ResponseBuilder getEventsAsBuilderForCriteria(HttpHeaders headers,
EventCriteria criteria) {
- List<Event> eventList =
eventManager.findEventsByCriteria(caller,criteria);
- List<EventRest> restEvents = new
ArrayList<EventRest>(eventList.size());
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<Event, EventCriteria> queryExecutor = new
CriteriaQueryExecutor<Event, EventCriteria>() {
+ @Override
+ public PageList<Event> execute(EventCriteria criteria) {
+ return eventManager.findEventsByCriteria(caller, criteria);
+ }
+ };
+
+ CriteriaQuery<Event, EventCriteria> eventList = new CriteriaQuery<Event,
EventCriteria>(criteria, queryExecutor);
+ List<EventRest> restEvents = new ArrayList<EventRest>();
for (Event event : eventList) {
restEvents.add(convertEvent(event));
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
index ebaf451..8f9b360 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
@@ -80,6 +80,8 @@ import org.rhq.enterprise.server.rest.domain.GroupRest;
import org.rhq.enterprise.server.rest.domain.Link;
import org.rhq.enterprise.server.rest.domain.MetricSchedule;
import org.rhq.enterprise.server.rest.domain.ResourceWithType;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* Deal with group related things.
@@ -114,11 +116,19 @@ public class GroupHandlerBean extends AbstractRestBean {
if (q!=null) {
criteria.addFilterName(q);
}
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- List<ResourceGroup> groups =
resourceGroupManager.findResourceGroupsByCriteria(caller, criteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<ResourceGroup, ResourceGroupCriteria> queryExecutor =
new CriteriaQueryExecutor<ResourceGroup, ResourceGroupCriteria>() {
+ @Override
+ public PageList<ResourceGroup> execute(ResourceGroupCriteria criteria)
{
+ return resourceGroupManager.findResourceGroupsByCriteria(caller,
criteria);
+ }
+ };
+
+ CriteriaQuery<ResourceGroup, ResourceGroupCriteria> groups = new
CriteriaQuery<ResourceGroup, ResourceGroupCriteria>(
+ criteria, queryExecutor);
- List<GroupRest> list = new ArrayList<GroupRest>(groups.size());
+ List<GroupRest> list = new ArrayList<GroupRest>();
for (ResourceGroup group : groups) {
list.add(fillGroup(group, uriInfo));
}
@@ -373,10 +383,19 @@ public class GroupHandlerBean extends AbstractRestBean {
if (q!=null) {
criteria.addFilterName(q);
}
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- PageList<GroupDefinition> gdlist =
definitionManager.findGroupDefinitionsByCriteria(caller, criteria);
- List<GroupDefinitionRest> list = new
ArrayList<GroupDefinitionRest>(gdlist.getTotalSize());
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<GroupDefinition, ResourceGroupDefinitionCriteria>
queryExecutor = new CriteriaQueryExecutor<GroupDefinition,
ResourceGroupDefinitionCriteria>() {
+ @Override
+ public PageList<GroupDefinition>
execute(ResourceGroupDefinitionCriteria criteria) {
+ return definitionManager.findGroupDefinitionsByCriteria(caller,
criteria);
+ }
+ };
+
+ CriteriaQuery<GroupDefinition, ResourceGroupDefinitionCriteria> gdlist =
new CriteriaQuery<GroupDefinition, ResourceGroupDefinitionCriteria>(
+ criteria, queryExecutor);
+
+ List<GroupDefinitionRest> list = new
ArrayList<GroupDefinitionRest>();
for (GroupDefinition def: gdlist) {
GroupDefinitionRest definitionRest = buildGDRestFromDefinition(def);
createLinksForGDRest(uriInfo,definitionRest);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
index fbf81fb..2e8f99c 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
@@ -67,6 +67,7 @@ import org.rhq.core.domain.operation.ResourceOperationHistory;
import org.rhq.core.domain.operation.bean.ResourceOperationSchedule;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.server.operation.OperationManagerLocal;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
@@ -75,6 +76,8 @@ import org.rhq.enterprise.server.rest.domain.OperationDefinitionRest;
import org.rhq.enterprise.server.rest.domain.OperationHistoryRest;
import org.rhq.enterprise.server.rest.domain.OperationRest;
import org.rhq.enterprise.server.rest.domain.SimplePropDef;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* Deal with operations
@@ -343,7 +346,6 @@ public class OperationsHandlerBean extends AbstractRestBean {
ResourceOperationHistoryCriteria criteria = new
ResourceOperationHistoryCriteria();
JobId jobId = new JobId(jobName);
criteria.addFilterJobId(jobId);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
ResourceOperationHistory history ;//=
opsManager.getOperationHistoryByJobId(caller,jobName);
List<ResourceOperationHistory> list =
opsManager.findResourceOperationHistoriesByCriteria(caller,criteria);
@@ -387,11 +389,19 @@ public class OperationsHandlerBean extends AbstractRestBean {
criteria.addFilterResourceIds(resourceId);
criteria.addSortEndTime(PageOrdering.DESC);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- List<ResourceOperationHistory> list =
opsManager.findResourceOperationHistoriesByCriteria(caller,criteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<ResourceOperationHistory,
ResourceOperationHistoryCriteria> queryExecutor = new
CriteriaQueryExecutor<ResourceOperationHistory, ResourceOperationHistoryCriteria>()
{
+ @Override
+ public PageList<ResourceOperationHistory>
execute(ResourceOperationHistoryCriteria criteria) {
+ return opsManager.findResourceOperationHistoriesByCriteria(caller,
criteria);
+ }
+ };
+
+ CriteriaQuery<ResourceOperationHistory, ResourceOperationHistoryCriteria>
list = new CriteriaQuery<ResourceOperationHistory,
ResourceOperationHistoryCriteria>(
+ criteria, queryExecutor);
- List<OperationHistoryRest> result = new
ArrayList<OperationHistoryRest>(list.size());
+ List<OperationHistoryRest> result = new
ArrayList<OperationHistoryRest>();
for (ResourceOperationHistory roh : list) {
OperationHistoryRest historyRest = historyToHistoryRest(roh,uriInfo);
result.add(historyRest);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
index 0a4509d..eb65599 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
@@ -118,4 +118,13 @@ public class CriteriaQuery<T, C extends BaseCriteria>
implements Iterable<T> {
throw new UnsupportedOperationException("This iterator does not support
removal.");
}
}
+
+ public PageList<T> loadAsList() {
+ Iterator<T> iterator = iterator();
+ PageList<T> list = new PageList<T>();
+ while (iterator.hasNext()) {
+ list.add(iterator.next());
+ }
+ return list;
+ }
}
commit 60692c34e375615b5b772f32bd92d4da0cf904b7
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 09:12:50 2013 -0500
Update ContentMangerBean to use CriteriaQuery.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
index a957d00..d6c6f50 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
@@ -109,6 +109,8 @@ import
org.rhq.enterprise.server.plugin.pc.content.PackageDetailsValidationExcep
import org.rhq.enterprise.server.plugin.pc.content.PackageTypeBehavior;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeNotFoundException;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
@@ -1588,17 +1590,26 @@ public class ContentManagerBean implements ContentManagerLocal,
ContentManagerRe
return runner.execute();
}
- public PageList<PackageAndLatestVersionComposite>
findPackagesWithLatestVersion(Subject subject, PackageCriteria criteria) {
+ public PageList<PackageAndLatestVersionComposite>
findPackagesWithLatestVersion(final Subject subject,
+ PackageCriteria criteria) {
if (criteria.getFilterRepoId() == null) {
throw new IllegalArgumentException("The criteria query has to have a
filter for a specific repo.");
}
criteria.fetchVersions(true);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- PageList<Package> packages = findPackagesByCriteria(subject, criteria);
-
- PageList<PackageAndLatestVersionComposite> ret = new
PageList<PackageAndLatestVersionComposite>(packages.getTotalSize(),
packages.getPageControl());
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<Package, PackageCriteria> queryExecutor = new
CriteriaQueryExecutor<Package, PackageCriteria>() {
+ @Override
+ public PageList<Package> execute(PackageCriteria criteria) {
+ return findPackagesByCriteria(subject, criteria);
+ }
+ };
+
+ CriteriaQuery<Package, PackageCriteria> packages = new
CriteriaQuery<Package, PackageCriteria>(criteria,
+ queryExecutor);
+
+ PageList<PackageAndLatestVersionComposite> ret = new
PageList<PackageAndLatestVersionComposite>();
for(Package p : packages) {
PackageVersion latest = repoManager.getLatestPackageVersion(subject,
p.getId(), criteria.getFilterRepoId());
commit 3806efcdd4e34a1089d08137f53137d80c9e1879
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 09:00:29 2013 -0500
more unbounded criteria usages converted to CriteriaQuery.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/MeasurementMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/MeasurementMetadataManagerBean.java
index 0ab7dee..cf813ca 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/MeasurementMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/MeasurementMetadataManagerBean.java
@@ -26,10 +26,13 @@ import org.rhq.core.domain.measurement.MeasurementUnits;
import org.rhq.core.domain.measurement.NumericType;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementDefinitionManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementScheduleManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
@Stateless
public class MeasurementMetadataManagerBean implements MeasurementMetadataManagerLocal {
@@ -216,10 +219,18 @@ public class MeasurementMetadataManagerBean implements
MeasurementMetadataManage
MeasurementDefinitionCriteria criteria = new MeasurementDefinitionCriteria();
criteria.addFilterResourceTypeId(existingType.getId());
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- List<MeasurementDefinition> definitions =
measurementDefinitionMgr.findMeasurementDefinitionsByCriteria(
- subjectMgr.getOverlord(), criteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<MeasurementDefinition, MeasurementDefinitionCriteria>
queryExecutor = new CriteriaQueryExecutor<MeasurementDefinition,
MeasurementDefinitionCriteria>() {
+ @Override
+ public PageList<MeasurementDefinition>
execute(MeasurementDefinitionCriteria criteria) {
+ return measurementDefinitionMgr
+ .findMeasurementDefinitionsByCriteria(subjectMgr.getOverlord(),
criteria);
+ }
+ };
+
+ CriteriaQuery<MeasurementDefinition, MeasurementDefinitionCriteria>
definitions = new CriteriaQuery<MeasurementDefinition,
MeasurementDefinitionCriteria>(
+ criteria, queryExecutor);
// Remove the type's metric definitions. We do this separately, rather than
just relying on cascade
// upon deletion of the ResourceType, because the removeMeasurementDefinition()
will also take care
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginConfigurationMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginConfigurationMetadataManagerBean.java
index f833bc5..0c2fdcb 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginConfigurationMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginConfigurationMetadataManagerBean.java
@@ -1,7 +1,5 @@
package org.rhq.enterprise.server.resource.metadata;
-import java.util.List;
-
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
@@ -21,11 +19,14 @@ import
org.rhq.core.domain.configuration.definition.PropertyDefinition;
import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import
org.rhq.enterprise.server.configuration.metadata.ConfigurationDefinitionUpdateReport;
import
org.rhq.enterprise.server.configuration.metadata.ConfigurationMetadataManagerLocal;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
@Stateless
public class PluginConfigurationMetadataManagerBean implements
PluginConfigurationMetadataManagerLocal {
@@ -73,12 +74,20 @@ public class PluginConfigurationMetadataManagerBean implements
PluginConfigurati
if (updateReport.getNewPropertyDefinitions().size() > 0
|| updateReport.getUpdatedPropertyDefinitions().size() > 0) {
- Subject overlord = subjectMgr.getOverlord();
+ final Subject overlord = subjectMgr.getOverlord();
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterResourceTypeId(existingType.getId());
- criteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
- List<Resource> resources =
resourceMgr.findResourcesByCriteria(overlord, criteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria
query results
+ CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor
= new CriteriaQueryExecutor<Resource, ResourceCriteria>() {
+ @Override
+ public PageList<Resource> execute(ResourceCriteria
criteria) {
+ return resourceMgr.findResourcesByCriteria(overlord,
criteria);
+ }
+ };
+
+ CriteriaQuery<Resource, ResourceCriteria> resources = new
CriteriaQuery<Resource, ResourceCriteria>(
+ criteria, queryExecutor);
for (Resource resource : resources) {
updateResourcePluginConfiguration(resource, updateReport);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
index 08a4775..2845fcf 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.server.scheduler.jobs;
+import java.util.ArrayList;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
@@ -35,6 +37,8 @@ import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.content.ContentSourceManagerLocal;
import org.rhq.enterprise.server.content.RepoManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -113,19 +117,31 @@ public class ContentProviderSyncJob implements StatefulJob {
private void syncImportedRepos(ContentSource contentSource) throws
InterruptedException {
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
- Subject overlord = subjectManager.getOverlord();
- RepoCriteria repoCriteria = new RepoCriteria();
+ final Subject overlord = subjectManager.getOverlord();
+ final RepoCriteria repoCriteria = new RepoCriteria();
repoCriteria.addFilterContentSourceIds(contentSource.getId());
repoCriteria.addFilterCandidate(false);
- repoCriteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
-
- RepoManagerLocal repoManager = LookupUtil.getRepoManagerLocal();
- PageList<Repo> repos = repoManager.findReposByCriteria(overlord,
repoCriteria);
- Integer[] repoIds = new Integer[repos.size()];
- for (int i = 0; i < repos.size(); i++) {
- Repo repo = repos.get(i);
- repoIds[i] = repo.getId();
+
+ final RepoManagerLocal repoManager = LookupUtil.getRepoManagerLocal();
+
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<Repo, RepoCriteria> queryExecutor = new
CriteriaQueryExecutor<Repo, RepoCriteria>() {
+ @Override
+ public PageList<Repo> execute(RepoCriteria criteria) {
+ return repoManager.findReposByCriteria(overlord, repoCriteria);
+ }
+ };
+
+ CriteriaQuery<Repo, RepoCriteria> repos = new CriteriaQuery<Repo,
RepoCriteria>(repoCriteria, queryExecutor);
+
+
+ ArrayList<Integer> repoIdList = new ArrayList<Integer>();
+ for (Repo repo : repos) {
+ repoIdList.add(repo.getId());
}
+ Integer[] repoIds = new Integer[repoIdList.size()];
+ repoIds = repoIdList.toArray(repoIds);
+
repoManager.internalSynchronizeRepos(overlord, repoIds);
}
commit 4b2d458e0dcab67e5123ca9b28f280076ddaffba
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 08:38:53 2013 -0500
Update criteria usage to use CriteriaQuery where possible instead of unbounded
queries.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
index a52c4c2..711a653 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
@@ -1,6 +1,6 @@
package org.rhq.enterprise.server.resource.metadata;
-import java.util.List;
+import java.util.ArrayList;
import javax.ejb.EJB;
import javax.ejb.Stateless;
@@ -12,8 +12,11 @@ import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.AlertDefinitionCriteria;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.alert.AlertDefinitionManagerLocal;
import org.rhq.enterprise.server.alert.AlertTemplateManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
@Stateless
public class AlertMetadataManagerBean implements AlertMetadataManagerLocal {
@@ -27,21 +30,32 @@ public class AlertMetadataManagerBean implements
AlertMetadataManagerLocal {
private AlertTemplateManagerLocal alertTemplateMgr;
@Override
- public void deleteAlertTemplates(Subject subject, ResourceType resourceType) {
+ public void deleteAlertTemplates(final Subject subject, ResourceType resourceType) {
log.debug("Deleting alert templates for " + resourceType);
AlertDefinitionCriteria criteria = new AlertDefinitionCriteria();
criteria.addFilterAlertTemplateResourceTypeId(resourceType.getId());
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- List<AlertDefinition> templates =
alertDefinitionMgr.findAlertDefinitionsByCriteria(subject, criteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<AlertDefinition, AlertDefinitionCriteria>
queryExecutor = new CriteriaQueryExecutor<AlertDefinition,
AlertDefinitionCriteria>() {
+ @Override
+ public PageList<AlertDefinition> execute(AlertDefinitionCriteria
criteria) {
+ return alertDefinitionMgr.findAlertDefinitionsByCriteria(subject,
criteria);
+ }
+ };
- Integer[] templateIds = new Integer[templates.size()];
+ CriteriaQuery<AlertDefinition, AlertDefinitionCriteria> templates = new
CriteriaQuery<AlertDefinition, AlertDefinitionCriteria>(
+ criteria, queryExecutor);
+
+ ArrayList<Integer> templateIdList = new ArrayList<Integer>();
int i = 0;
for (AlertDefinition template : templates) {
- templateIds[i++] = template.getId();
+ templateIdList.add(template.getId());
}
+ Integer[] templateIds = new Integer[templateIdList.size()];
+ templateIds = templateIdList.toArray(templateIds);
+
// Alert definitions associated with individual resources and with groups
// are deleted as part of resource deletion. This commit adds support for
// templates which are alert definitions associated with the resource
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java
index cd54bf0..6ebdc20 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java
@@ -24,9 +24,12 @@ import
org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.content.PackageType;
import org.rhq.core.domain.criteria.BundleCriteria;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.bundle.BundleManagerLocal;
import
org.rhq.enterprise.server.configuration.metadata.ConfigurationMetadataManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
@Stateless
public class ContentMetadataManagerBean implements ContentMetadataManagerLocal {
@@ -230,7 +233,7 @@ public class ContentMetadataManagerBean implements
ContentMetadataManagerLocal {
}
}
- private void deleteBundles(Subject subject, ResourceType resourceType) throws
Exception {
+ private void deleteBundles(final Subject subject, ResourceType resourceType) throws
Exception {
BundleType bundleType = resourceType.getBundleType();
if (bundleType == null) {
@@ -239,9 +242,18 @@ public class ContentMetadataManagerBean implements
ContentMetadataManagerLocal {
BundleCriteria criteria = new BundleCriteria();
criteria.addFilterBundleTypeId(bundleType.getId());
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- List<Bundle> bundles = bundleMgr.findBundlesByCriteria(subject, criteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<Bundle, BundleCriteria> queryExecutor = new
CriteriaQueryExecutor<Bundle, BundleCriteria>() {
+ @Override
+ public PageList<Bundle> execute(BundleCriteria criteria) {
+ return bundleMgr.findBundlesByCriteria(subject, criteria);
+ }
+ };
+
+ CriteriaQuery<Bundle, BundleCriteria> bundles = new
CriteriaQuery<Bundle, BundleCriteria>(criteria,
+ queryExecutor);
+
for (Bundle bundle : bundles) {
bundleMgr.deleteBundle(subject, bundle.getId());
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
index 6f0c9df..95b5f9d 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
@@ -56,6 +56,7 @@ import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceSubCategory;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.group.ResourceGroup;
+import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.authz.RequiredPermission;
@@ -63,6 +64,8 @@ import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.resource.group.ResourceGroupDeleteException;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* This class manages the metadata for resources. Plugins are registered against this
bean so that their metadata can be
@@ -270,7 +273,7 @@ public class ResourceMetadataManagerBean implements
ResourceMetadataManagerLocal
c.addFilterInventoryStatus(null);
List<Resource> resources = resourceManager.findResourcesByCriteria(subject,
c);
//Chunk through the results in 200(default) page element batches to avoid
excessive
- //memory usage for large deployments
+ //memory usage for large deployments. No need to use CriteriaQuery here as this
loop is more efficient at catching stragglers
while ((resources != null) && (!resources.isEmpty())) {
Iterator<Resource> resIter = resources.iterator();
while (resIter.hasNext()) {
@@ -678,13 +681,22 @@ public class ResourceMetadataManagerBean implements
ResourceMetadataManagerLocal
private void moveResourcesToNewParent(ResourceType existingType, ResourceType
obsoleteParentType,
Set<ResourceType> newParentTypes) {
- Subject overlord = subjectManager.getOverlord();
+ final Subject overlord = subjectManager.getOverlord();
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterResourceTypeId(existingType.getId());
criteria.addFilterParentResourceTypeId(obsoleteParentType.getId());
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- List<Resource> resources =
resourceManager.findResourcesByCriteria(overlord, criteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor = new
CriteriaQueryExecutor<Resource, ResourceCriteria>() {
+ @Override
+ public PageList<Resource> execute(ResourceCriteria criteria) {
+ return resourceManager.findResourcesByCriteria(overlord, criteria);
+ }
+ };
+
+ CriteriaQuery<Resource, ResourceCriteria> resources = new
CriteriaQuery<Resource, ResourceCriteria>(criteria,
+ queryExecutor);
+
for (Resource resource : resources) {
Resource newParent = null;
newParentTypes: for (ResourceType newParentType : newParentTypes) {
commit 74602ae63e196bbbf3e4c6d156d6a385bd208c6f
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 08:20:28 2013 -0500
Update ResourceManagerBean criteria usage to CriteriaQuery where possible. Still
required to clearPaging in some cases.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
index 205252d..e8758ec 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
@@ -126,6 +126,8 @@ import
org.rhq.enterprise.server.resource.disambiguation.DisambiguationUpdateStr
import org.rhq.enterprise.server.resource.disambiguation.Disambiguator;
import org.rhq.enterprise.server.resource.group.ResourceGroupDeleteException;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
import org.rhq.enterprise.server.util.QueryUtility;
@@ -853,7 +855,7 @@ public class ResourceManagerBean implements ResourceManagerLocal,
ResourceManage
return resourceLineage;
}
- public Map<Integer, String> getResourcesAncestry(Subject subject, Integer[]
resourceIds,
+ public Map<Integer, String> getResourcesAncestry(final Subject subject,
Integer[] resourceIds,
ResourceAncestryFormat format) {
Map<Integer, String> result = new HashMap<Integer,
String>(resourceIds.length);
@@ -861,12 +863,20 @@ public class ResourceManagerBean implements ResourceManagerLocal,
ResourceManage
return result;
}
- ResourceCriteria resourceCriteria = new ResourceCriteria();
+ final ResourceCriteria resourceCriteria = new ResourceCriteria();
resourceCriteria.addFilterIds(resourceIds);
resourceCriteria.fetchResourceType(true);
- resourceCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
- List<Resource> resources = findResourcesByCriteria(subject,
resourceCriteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor = new
CriteriaQueryExecutor<Resource, ResourceCriteria>() {
+ @Override
+ public PageList<Resource> execute(ResourceCriteria criteria) {
+ return findResourcesByCriteria(subject, resourceCriteria);
+ }
+ };
+
+ CriteriaQuery<Resource, ResourceCriteria> resources = new
CriteriaQuery<Resource, ResourceCriteria>(
+ resourceCriteria, queryExecutor);
if (ResourceAncestryFormat.RAW == format) {
for (Resource resource : resources) {
@@ -888,19 +898,36 @@ public class ResourceManagerBean implements ResourceManagerLocal,
ResourceManage
// In addition to the types of the result resources, get the types of their
ancestry
typesSet.addAll(getAncestryTypeIds(ancestries));
- ResourceTypeCriteria resourceTypeCriteria = new ResourceTypeCriteria();
+ final ResourceTypeCriteria resourceTypeCriteria = new ResourceTypeCriteria();
resourceTypeCriteria.addFilterIds(typesSet.toArray(new
Integer[typesSet.size()]));
- resourceCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
+
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<ResourceType, ResourceTypeCriteria> rtQueryExecutor
=
+ new CriteriaQueryExecutor<ResourceType, ResourceTypeCriteria>() {
+ @Override
+ public PageList<ResourceType> execute(ResourceTypeCriteria
criteria) {
+ return typeManager.findResourceTypesByCriteria(subject,
resourceTypeCriteria);
+ }
+ };
- List<ResourceType> types = typeManager.findResourceTypesByCriteria(subject,
resourceTypeCriteria);
+ CriteriaQuery<ResourceType, ResourceTypeCriteria> types =
+ new CriteriaQuery<ResourceType,
ResourceTypeCriteria>(resourceTypeCriteria, rtQueryExecutor);
for (Resource resource : resources) {
- String decodedAncestry = getDecodedAncestry(resource, types, format);
+ String decodedAncestry = getDecodedAncestry(resource,
loadAsList(types.iterator()), format);
result.put(resource.getId(), decodedAncestry);
}
return result;
}
+ private List<ResourceType> loadAsList(Iterator<ResourceType> iterator) {
+ PageList<ResourceType> list = new PageList<ResourceType>();
+ while(iterator.hasNext()){
+ list.add(iterator.next());
+ }
+ return list;
+ }
+
/**
* Get the complete set of resource type Ids in the ancestries provided. This is
useful for
* being able to load all the types in advance of generating decoded values.
commit 6f2a62643acafde67e9726219b2d358adcb0a60b
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 08:16:49 2013 -0500
Update more criteriaQuery usages with CriteriaQuery instead of unbounded.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftServerServiceImpl.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftServerServiceImpl.java
index 3eb83e0..4638e25 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftServerServiceImpl.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftServerServiceImpl.java
@@ -41,6 +41,8 @@ import org.rhq.core.domain.drift.DriftSnapshot;
import org.rhq.core.domain.drift.DriftSnapshotRequest;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
public class DriftServerServiceImpl implements DriftServerService {
@@ -80,10 +82,19 @@ public class DriftServerServiceImpl implements DriftServerService {
DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
criteria.addFilterResourceIds(resourceIds.toArray(new
Integer[resourceIds.size()]));
criteria.fetchConfiguration(true);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- Subject overlord = getSubjectManager().getOverlord();
- PageList<DriftDefinition> definitions =
getDriftManager().findDriftDefinitionsByCriteria(overlord, criteria);
+ final Subject overlord = getSubjectManager().getOverlord();
+
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<DriftDefinition, DriftDefinitionCriteria>
queryExecutor = new CriteriaQueryExecutor<DriftDefinition,
DriftDefinitionCriteria>() {
+ @Override
+ public PageList<DriftDefinition> execute(DriftDefinitionCriteria
criteria) {
+ return getDriftManager().findDriftDefinitionsByCriteria(overlord,
criteria);
+ }
+ };
+
+ CriteriaQuery<DriftDefinition, DriftDefinitionCriteria> definitions = new
CriteriaQuery<DriftDefinition, DriftDefinitionCriteria>(
+ criteria, queryExecutor);
Map<Integer, List<DriftDefinition>> result = new HashMap<Integer,
List<DriftDefinition>>();
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBean.java
index 39bda2c..5457e49 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBean.java
@@ -47,6 +47,8 @@ import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.authz.RequiredPermission;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeNotFoundException;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
@@ -120,7 +122,7 @@ public class DriftTemplateManagerBean implements
DriftTemplateManagerLocal, Drif
@RequiredPermission(Permission.MANAGE_SETTINGS)
@Override
@TransactionAttribute(NEVER)
- public void pinTemplate(Subject subject, int templateId, int driftDefId, int
snapshotVersion) {
+ public void pinTemplate(final Subject subject, int templateId, int driftDefId, int
snapshotVersion) {
templateMgr.createTemplateChangeSet(subject, templateId, driftDefId,
snapshotVersion);
DriftDefinitionTemplateCriteria templateCriteria = new
DriftDefinitionTemplateCriteria();
@@ -135,9 +137,18 @@ public class DriftTemplateManagerBean implements
DriftTemplateManagerLocal, Drif
criteria.addFilterTemplateId(templateId);
criteria.fetchConfiguration(true);
criteria.fetchResource(true);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- PageList<DriftDefinition> definitions =
driftMgr.findDriftDefinitionsByCriteria(subject, criteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<DriftDefinition, DriftDefinitionCriteria>
queryExecutor = new CriteriaQueryExecutor<DriftDefinition,
DriftDefinitionCriteria>() {
+ @Override
+ public PageList<DriftDefinition> execute(DriftDefinitionCriteria
criteria) {
+ return driftMgr.findDriftDefinitionsByCriteria(subject, criteria);
+ }
+ };
+
+ CriteriaQuery<DriftDefinition, DriftDefinitionCriteria> definitions = new
CriteriaQuery<DriftDefinition, DriftDefinitionCriteria>(
+ criteria, queryExecutor);
+
for (DriftDefinition def : definitions) {
if (def.isAttached()) {
int resourceId = def.getResource().getId();
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
index 72eb3e4..239cf35 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
@@ -82,6 +82,8 @@ import org.rhq.enterprise.server.agentclient.AgentClient;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.plugin.pc.drift.DriftChangeSetSummary;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
@@ -178,15 +180,24 @@ public class JPADriftServerBean implements JPADriftServerLocal {
}
@Override
- public PageList<DriftComposite> findDriftCompositesByCriteria(Subject subject,
DriftCriteria criteria) {
+ public PageList<DriftComposite> findDriftCompositesByCriteria(final Subject
subject, DriftCriteria criteria) {
JPADriftCriteria jpaCriteria = (criteria instanceof JPADriftCriteria) ?
(JPADriftCriteria) criteria
: new JPADriftCriteria(criteria);
jpaCriteria.fetchChangeSet(true);
- jpaCriteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
- PageList<JPADrift> drifts = findDriftsByCriteria(subject, jpaCriteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<JPADrift, JPADriftCriteria> queryExecutor = new
CriteriaQueryExecutor<JPADrift, JPADriftCriteria>() {
+ @Override
+ public PageList<JPADrift> execute(JPADriftCriteria jpaCriteria) {
+ return findDriftsByCriteria(subject, jpaCriteria);
+ }
+ };
+
+ CriteriaQuery<JPADrift, JPADriftCriteria> drifts = new
CriteriaQuery<JPADrift, JPADriftCriteria>(jpaCriteria,
+ queryExecutor);
+
PageList<DriftComposite> result = new PageList<DriftComposite>();
for (JPADrift drift : drifts) {
JPADriftChangeSet changeSet = drift.getChangeSet();
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/PlatformUtilizationManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/PlatformUtilizationManagerBean.java
index a7bd5c3..e114171 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/PlatformUtilizationManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/PlatformUtilizationManagerBean.java
@@ -50,6 +50,8 @@ import
org.rhq.core.domain.resource.composite.PlatformMetricsSummary.SwapMetric;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.collection.ArrayUtils;
import org.rhq.enterprise.server.measurement.MeasurementDataManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* @author jsanda
@@ -70,24 +72,42 @@ public class PlatformUtilizationManagerBean implements
PlatformUtilizationManage
private PlatformUtilizationManagerLocal platformUtilizationMgr;
@Override
- public PageList<PlatformMetricsSummary> loadPlatformMetrics(Subject subject) {
- ResourceTypeCriteria typeCriteria = new ResourceTypeCriteria();
+ public PageList<PlatformMetricsSummary> loadPlatformMetrics(final Subject
subject) {
+ final ResourceTypeCriteria typeCriteria = new ResourceTypeCriteria();
typeCriteria.addFilterCategory(PLATFORM);
typeCriteria.fetchMetricDefinitions(true);
- typeCriteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
- PageList<ResourceType> resourceTypes =
resourceTypeMgr.findResourceTypesByCriteria(subject, typeCriteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<ResourceType, ResourceTypeCriteria> queryExecutor =
new CriteriaQueryExecutor<ResourceType, ResourceTypeCriteria>() {
+ @Override
+ public PageList<ResourceType> execute(ResourceTypeCriteria criteria) {
+ return resourceTypeMgr.findResourceTypesByCriteria(subject,
typeCriteria);
+ }
+ };
+
+ CriteriaQuery<ResourceType, ResourceTypeCriteria> resourceTypes = new
CriteriaQuery<ResourceType, ResourceTypeCriteria>(
+ typeCriteria, queryExecutor);
+
Map<Integer, Set<Integer>> platformMetricDefs = new
HashMap<Integer, Set<Integer>>();
for (ResourceType resourceType : resourceTypes) {
platformMetricDefs.put(resourceType.getId(),
getPlatformMetricDefIds(resourceType));
}
- ResourceCriteria resourceCriteria = new ResourceCriteria();
+ final ResourceCriteria resourceCriteria = new ResourceCriteria();
resourceCriteria.addFilterResourceCategories(PLATFORM);
resourceCriteria.addFilterInventoryStatus(COMMITTED);
- resourceCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
- PageList<Resource> platforms = resourceMgr.findResourcesByCriteria(subject,
resourceCriteria);
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<Resource, ResourceCriteria> resourceQueryExecutor =
new CriteriaQueryExecutor<Resource, ResourceCriteria>() {
+ @Override
+ public PageList<Resource> execute(ResourceCriteria criteria) {
+ return resourceMgr.findResourcesByCriteria(subject, resourceCriteria);
+ }
+ };
+
+ CriteriaQuery<Resource, ResourceCriteria> platforms = new
CriteriaQuery<Resource, ResourceCriteria>(
+ resourceCriteria, resourceQueryExecutor);
+
PageList<PlatformMetricsSummary> summaries = new
PageList<PlatformMetricsSummary>();
for (Resource platform : platforms) {
commit 05224b4bd31adfec2a24a4892a90f104a5bce779
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 03:19:51 2013 -0500
i)remove incorrect page clearing on CliComponent
ii)update more usages of criteria to also use CriteriaQuery.
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
index b9ca613..9fd49a7 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
@@ -25,7 +25,6 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URI;
import java.nio.charset.Charset;
-import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -36,8 +35,11 @@ import org.rhq.core.domain.content.Repo;
import org.rhq.core.domain.content.composite.PackageAndLatestVersionComposite;
import org.rhq.core.domain.criteria.PackageCriteria;
import org.rhq.core.domain.criteria.RepoCriteria;
+import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.content.ContentManagerRemote;
import org.rhq.enterprise.server.content.RepoManagerRemote;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* The implementation of script source provider that is able to locate the script files
@@ -86,30 +88,45 @@ public class RepoScriptSourceProvider extends
BaseRhqSchemeScriptSourceProvider
String scriptName = path.substring(slashIdx + 1);
try {
- RepoManagerRemote repoManager = rhqFacade.getProxy(RepoManagerRemote.class);
+ final RepoManagerRemote repoManager =
rhqFacade.getProxy(RepoManagerRemote.class);
- RepoCriteria repoCrit = new RepoCriteria();
+ final RepoCriteria repoCrit = new RepoCriteria();
repoCrit.addFilterName(repoName);
- repoCrit.clearPaging();//disable paging as the code assumes all the results
will be returned.
- List<Repo> repos =
repoManager.findReposByCriteria(rhqFacade.getSubject(), repoCrit);
- if (repos.isEmpty()) {
+ //Use CriteriaQuery to automatically chunk/page through criteria query
results
+ CriteriaQueryExecutor<Repo, RepoCriteria> queryExecutor = new
CriteriaQueryExecutor<Repo, RepoCriteria>() {
+ @Override
+ public PageList<Repo> execute(RepoCriteria criteria) {
+ return repoManager.findReposByCriteria(rhqFacade.getSubject(),
repoCrit);
+ }
+ };
+
+ CriteriaQuery<Repo, RepoCriteria> repos = new CriteriaQuery<Repo,
RepoCriteria>(repoCrit, queryExecutor);
+
+ if (!repos.iterator().hasNext()) {
return null;
}
- ContentManagerRemote contentManager =
rhqFacade.getProxy(ContentManagerRemote.class);
+ final ContentManagerRemote contentManager =
rhqFacade.getProxy(ContentManagerRemote.class);
for (Repo repo : repos) {
- PackageCriteria pCrit = new PackageCriteria();
+ final PackageCriteria pCrit = new PackageCriteria();
pCrit.addFilterName(scriptName);
pCrit.addFilterRepoId(repo.getId());
- pCrit.clearPaging();//disable paging as the code assumes all the results
will be returned.
- List<PackageAndLatestVersionComposite> pvs =
contentManager.findPackagesWithLatestVersion(
- rhqFacade.getSubject(), pCrit);
+ //Use CriteriaQuery to automatically chunk/page through criteria query
results
+ CriteriaQueryExecutor<PackageAndLatestVersionComposite,
PackageCriteria> pQueryExecutor = new
CriteriaQueryExecutor<PackageAndLatestVersionComposite, PackageCriteria>() {
+ @Override
+ public PageList<PackageAndLatestVersionComposite>
execute(PackageCriteria criteria) {
+ return
contentManager.findPackagesWithLatestVersion(rhqFacade.getSubject(), pCrit);
+ }
+ };
+
+ CriteriaQuery<PackageAndLatestVersionComposite, PackageCriteria>
pvs = new CriteriaQuery<PackageAndLatestVersionComposite, PackageCriteria>(
+ pCrit, pQueryExecutor);
- if (!pvs.isEmpty()) {
- PackageAndLatestVersionComposite pv = pvs.get(0);
+ if (!pvs.iterator().hasNext()) {
+ PackageAndLatestVersionComposite pv = pvs.iterator().next();
byte[] bytes =
repoManager.getPackageVersionBytes(rhqFacade.getSubject(), repo.getId(), pv
.getLatestPackageVersion().getId());
diff --git
a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliComponent.java
b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliComponent.java
index 2c1f874..d73b42e 100644
---
a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliComponent.java
+++
b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliComponent.java
@@ -304,7 +304,6 @@ public class CliComponent implements ServerPluginComponent,
ControlFacet {
String packageId =
cliNotification.getConfiguration().getSimpleValue(CliSender.PROP_PACKAGE_ID, null);
if (packageId != null) {
crit.addFilterPackageId(Integer.valueOf(packageId));
- crit.clearPaging();//disable paging as the code assumes all the results
will be returned.
PageList<PackageVersion> res =
contentManager.findPackageVersionsByCriteria(overlord, crit);
count = res.getTotalSize();
diff --git
a/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/MongoDBDriftServer.java
b/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/MongoDBDriftServer.java
index 9d25a30..f80b111 100644
---
a/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/MongoDBDriftServer.java
+++
b/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/MongoDBDriftServer.java
@@ -84,6 +84,8 @@ import
org.rhq.enterprise.server.plugins.drift.mongodb.entities.MongoDBChangeSet
import org.rhq.enterprise.server.plugins.drift.mongodb.entities.MongoDBChangeSetEntry;
import org.rhq.enterprise.server.plugins.drift.mongodb.entities.MongoDBFile;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
import org.rhq.enterprise.server.util.LookupUtil;
public class MongoDBDriftServer implements DriftServerPluginFacet, ServerPluginComponent
{
@@ -397,12 +399,21 @@ public class MongoDBDriftServer implements DriftServerPluginFacet,
ServerPluginC
return new String(StreamUtil.slurp(file.getInputStream()));
}
- Map<Integer, Resource> loadResourceMap(Subject subject, Integer[] resourceIds)
{
+ Map<Integer, Resource> loadResourceMap(final Subject subject, Integer[]
resourceIds) {
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterIds(resourceIds);
- ResourceManagerLocal resourceMgr = getResourceManager();
- PageList<Resource> resources = resourceMgr.findResourcesByCriteria(subject,
criteria);
+ final ResourceManagerLocal resourceMgr = getResourceManager();
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor = new
CriteriaQueryExecutor<Resource, ResourceCriteria>() {
+ @Override
+ public PageList<Resource> execute(ResourceCriteria criteria) {
+ return resourceMgr.findResourcesByCriteria(subject, criteria);
+ }
+ };
+
+ CriteriaQuery<Resource, ResourceCriteria> resources = new
CriteriaQuery<Resource, ResourceCriteria>(criteria,
+ queryExecutor);
Map<Integer, Resource> map = new HashMap<Integer, Resource>();
for (Resource r : resources) {
commit 2100a34c6176ea5f11eab5fc09e68b87bb6e8a1d
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 02:29:32 2013 -0500
Update unbounded criteria usage to instead use CriteriaQuery to iterate through
result sets.
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
index e2738ee..773176b 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
@@ -74,6 +74,8 @@ import
org.rhq.enterprise.server.measurement.MeasurementDefinitionManagerRemote;
import org.rhq.enterprise.server.operation.OperationManagerRemote;
import org.rhq.enterprise.server.resource.ResourceManagerRemote;
import org.rhq.enterprise.server.resource.ResourceTypeNotFoundException;
+import org.rhq.enterprise.server.util.CriteriaQuery;
+import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
/**
* Implements a local object that exposes resource related data as
@@ -235,9 +237,18 @@ public class ResourceClientProxy {
private void initChildren() {
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterParentResourceId(resourceId);
- criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
- PageList<Resource> childResources =
remoteClient.getProxy(ResourceManagerRemote.class).findResourcesByCriteria(
- remoteClient.getSubject(), criteria);
+
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor = new
CriteriaQueryExecutor<Resource, ResourceCriteria>() {
+ @Override
+ public PageList<Resource> execute(ResourceCriteria criteria) {
+ return
remoteClient.getProxy(ResourceManagerRemote.class).findResourcesByCriteria(
+ remoteClient.getSubject(), criteria);
+ }
+ };
+
+ CriteriaQuery<Resource, ResourceCriteria> childResources = new
CriteriaQuery<Resource, ResourceCriteria>(
+ criteria, queryExecutor);
for (Resource child : childResources) {
this.children.add(proxyFactory.getResource(child.getId()));
@@ -247,14 +258,26 @@ public class ResourceClientProxy {
private void initMeasurements() {
MeasurementDefinitionCriteria criteria = new MeasurementDefinitionCriteria();
criteria.addFilterResourceTypeId(resource.getResourceType().getId());
-// criteria.addFilterResourceTypeName(resource.getResourceType().getName());
-// criteria.setStrict(true);
+ //
criteria.addFilterResourceTypeName(resource.getResourceType().getName());
+ // criteria.setStrict(true);
+
+ //Use CriteriaQuery to automatically chunk/page through criteria query results
+ CriteriaQueryExecutor<MeasurementDefinition, MeasurementDefinitionCriteria>
queryExecutor = new CriteriaQueryExecutor<MeasurementDefinition,
MeasurementDefinitionCriteria>() {
+ @Override
+ public PageList<MeasurementDefinition>
execute(MeasurementDefinitionCriteria criteria) {
+ return remoteClient.getProxy(MeasurementDefinitionManagerRemote.class)
+ .findMeasurementDefinitionsByCriteria(remoteClient.getSubject(),
criteria);
+ }
+ };
+
+ CriteriaQuery<MeasurementDefinition, MeasurementDefinitionCriteria>
measurementDefIterator = new CriteriaQuery<MeasurementDefinition,
MeasurementDefinitionCriteria>(
+ criteria, queryExecutor);
- this.measurementDefinitions =
remoteClient.getProxy(MeasurementDefinitionManagerRemote.class)
- .findMeasurementDefinitionsByCriteria(remoteClient.getSubject(), criteria);
+ this.measurementDefinitions = new PageList<MeasurementDefinition>();
this.measurementMap = new HashMap<String, Measurement>();
- for (MeasurementDefinition def : measurementDefinitions) {
+ for (MeasurementDefinition def : measurementDefIterator) {
+ this.measurementDefinitions.add(def);
Measurement m = new Measurement(def);
String name = def.getDisplayName().replaceAll("\\W",
"");
commit 53f0e721c12eac53044893bb0cd6778791a80b29
Author: Simeon Pinder <spinder(a)spinder.csb>
Date: Tue Feb 12 01:06:44 2013 -0500
i)Fixes nasty bug with CriteriaQuery that cause iteration to fail after two pages
ii)Added new unit test for regression testing of the fix.
iii)Added basic javadoc for CriteriaQuery.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
index be5b5a3..0a4509d 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQuery.java
@@ -27,10 +27,26 @@ import org.rhq.core.domain.criteria.BaseCriteria;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
+/** This class provides a way to make PageList results easily iterable for 'for
each' loops
+ * and importantly automatically handles iteration through all PageControl results.
This
+ * means that with a CriteriaQuery instance once can do:
+ *
+ * for (Resource entity : query) {
+ *
+ * and automatically page through the results in PageControl.getPageSize(def. 200)
chunks.
+ *
+ * @author John Sanda
+ * @author Simeon Pinder
+ *
+ * @param <T> The return type included by the PageList.
+ * @param <C> The Criteria subclass used to generate/execute the query.
+ */
public class CriteriaQuery<T, C extends BaseCriteria> implements Iterable<T>
{
+ //Criteria instance used by Executor to page through results
private C criteria;
+ //Executor
private CriteriaQueryExecutor<T, C> queryExecutor;
public CriteriaQuery(C criteria, CriteriaQueryExecutor<T, C> queryExecutor) {
@@ -38,6 +54,10 @@ public class CriteriaQuery<T, C extends BaseCriteria> implements
Iterable<T> {
this.queryExecutor = queryExecutor;
}
+ /** Returns iterator for a single page of results as defined by
+ * i)the Criteria instance
+ * ii)the paging details applied to the Criteria instance
+ */
@Override
public Iterator<T> iterator() {
return new QueryResultsIterator(executeQuery());
@@ -47,6 +67,11 @@ public class CriteriaQuery<T, C extends BaseCriteria> implements
Iterable<T> {
return queryExecutor.execute(criteria);
}
+ //Defines the iterator that:
+ // i)creates page sized chunks results
+ // ii)at the end of each pageList, moves the iterator to next page and continues
iteration
+ //
+ //NOTE: Assumes criteria page iteration starts with page 0. If that is not the case
private class QueryResultsIterator implements Iterator<T> {
private int count;
@@ -54,6 +79,9 @@ public class CriteriaQuery<T, C extends BaseCriteria> implements
Iterable<T> {
private Iterator<T> iterator;
+ /**The first pageList returned by the criteria instance is where iteration
begins.
+ * @param firstPage
+ */
public QueryResultsIterator(PageList<T> firstPage) {
currentPage = firstPage;
iterator = currentPage.iterator();
@@ -66,6 +94,7 @@ public class CriteriaQuery<T, C extends BaseCriteria> implements
Iterable<T> {
@Override
public T next() {
+ //define logic for the end of a pagelist to move the iterator onto next page
if (!iterator.hasNext()) {
if (count == currentPage.getTotalSize()) {
throw new NoSuchElementException();
@@ -73,7 +102,9 @@ public class CriteriaQuery<T, C extends BaseCriteria> implements
Iterable<T> {
PageControl pc = currentPage.getPageControl();
criteria.setPaging(pc.getPageNumber() + 1, pc.getPageSize());
+ //move the current pagelist forward one
currentPage = queryExecutor.execute(criteria);
+ currentPage.setPageControl(new PageControl(pc.getPageNumber() + 1,
pc.getPageSize()));
iterator = currentPage.iterator();
}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
index cdccd6c..5d64970 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/util/CriteriaQueryTest.java
@@ -57,12 +57,16 @@ public class CriteriaQueryTest {
private static class FakeCriteriaQueryExecutor implements
CriteriaQueryExecutor<FakeEntity, FakeEntityCriteria> {
+ //list of pagelists
private List<PageList<FakeEntity>> pages = new
ArrayList<PageList<FakeEntity>>();
+ //total size
private int totalSize;
+ // the pageControl instance to use
private PageControl pc;
+ //
public FakeCriteriaQueryExecutor(int totalSize, PageControl pc) {
this.totalSize = totalSize;
this.pc = pc;
@@ -122,4 +126,60 @@ public class CriteriaQueryTest {
assertEquals(actual, expected);
}
+ /** This is like executeQueryThatReturnsMultiplePagesOfResults(), creates more
+ * that two pages of ordered entries and iterates over them. This is to test
+ * a nasty bug in CriteriaQuery where results beyond the first two pages were
+ * not being parsed.
+ */
+ @Test
+ public void executeQueryThatReturnsTotalPagesOfResults() {
+ //create page control to browse entries 100 at a time and start at page 0
+ int pageSize = 100;
+ PageControl pc = new PageControl(0, pageSize);
+
+ //Total size of result set is 500.
+ int totalSize = 500;
+
+ //Create list and populate with all entries.
+ List<FakeEntity> total = new ArrayList<FakeEntity>();
+ for (int i = 0; i < totalSize; i++) {
+ total.add(new FakeEntity(i));
+ }
+
+ //build executor to parse a given list with using PageControl passed in
+ FakeCriteriaQueryExecutor queryExecutor = new
FakeCriteriaQueryExecutor(totalSize, pc);
+
+ //add pages of results to simulate PageList results as returned by db queries
+ //todo: spinder, modify to support fractional results below and add last page.
+ int bucketCount = totalSize / pageSize;//number of full pages to list
+ int start = 0;
+ int end = pageSize;
+ //add bucketCount pages of data to read from.
+ for (int i = 0; i < bucketCount; i++) {
+ //Ex. first two pages (0, 100), (100,200), etc.
+ queryExecutor.addPage(total.subList(start, end));
+ start += pageSize;
+ end += pageSize;
+ }
+
+ //build criteria and attach pageControl
+ FakeEntityCriteria criteria = new FakeEntityCriteria();
+ //DO NOT use criteria.setPageControl(pc) here as it causes ignore of
pageNumber/pageSize
+ criteria.setPaging(pc.getPageNumber(), pc.getPageSize());
+
+ //?? So which pageControl has the right details? Criteria.pageControl? OR
PageControl passed into the QueryExecutor.
+
+ //Start off the initial query to page through the items in chunks defined by the
pageControl instance
+ CriteriaQuery<FakeEntity, FakeEntityCriteria> query = new
CriteriaQuery<FakeEntity, FakeEntityCriteria>(
+ criteria, queryExecutor);
+
+ //Now iterate over the list and make sure that iteration happens in order as
expected
+ //monotonically increasing.
+ int last = -1;
+ for (FakeEntity entity : query) {
+ //this fails with earlier bug in CriteriaQuery
+ assertEquals(true, (last < entity.getId()));
+ last = entity.getId();
+ }
+ }
}
commit a782494672c097804bedbee316bd42a75f033975
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Tue Feb 5 16:43:11 2013 -0500
Update default criteria usages for i)ScriptUtil and
ii)for ContentManagerBean.findPackagesWithLatestVersion usages as is a criteria
search but does not
include 'Criteria' in the method name as all the other criteria methods.
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
index 607263a..b9ca613 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
@@ -103,6 +103,7 @@ public class RepoScriptSourceProvider extends
BaseRhqSchemeScriptSourceProvider
PackageCriteria pCrit = new PackageCriteria();
pCrit.addFilterName(scriptName);
pCrit.addFilterRepoId(repo.getId());
+ pCrit.clearPaging();//disable paging as the code assumes all the results
will be returned.
List<PackageAndLatestVersionComposite> pvs =
contentManager.findPackagesWithLatestVersion(
rhqFacade.getSubject(), pCrit);
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptUtil.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptUtil.java
index bd121e7..6b86b61 100644
--- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptUtil.java
+++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ScriptUtil.java
@@ -79,6 +79,8 @@ public class ScriptUtil {
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterName(string);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
return resourceManager.findResourcesByCriteria(getSubjectFromEngine(),
criteria);
}
commit b5983f41c53750286601a16e2fca0eb17d31366e
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Tue Feb 5 16:34:28 2013 -0500
Update default criteria usages for ConfigurationMangerBean.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
index 50e5fd4..141b910 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
@@ -89,7 +89,6 @@ import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceError;
import org.rhq.core.domain.resource.ResourceErrorType;
import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.resource.group.GroupCategory;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
@@ -2576,6 +2575,7 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
if (tt == PropertyOptionsSource.TargetType.RESOURCE || tt ==
PropertyOptionsSource.TargetType.CONFIGURATION) {
List<Resource> resources = null;
ResourceCriteria criteria = new ResourceCriteria();
+ criteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
if (tt == PropertyOptionsSource.TargetType.CONFIGURATION) {
// split out expression part for target=configuration
@@ -2631,6 +2631,7 @@ public class ConfigurationManagerBean implements
ConfigurationManagerLocal, Conf
// for groups we need to talk to the group manager
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
criteria.setSearchExpression(expression);
+ criteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
resourceGroupManager.findResourceGroupCompositesByCriteria(subject,
criteria);
}
commit 4655782edfffe9706abe97948002d35b71d5d624
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Tue Feb 5 16:29:06 2013 -0500
Update more default criteria usages by SubjectManager bean and for Bundles as that
logic already assumes as much.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
index c9002ba..efe86fb 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
@@ -216,6 +216,8 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
if (newLdapRoles != null) {
RoleCriteria subjectLdapRolesCriteria = new RoleCriteria();
subjectLdapRolesCriteria.addFilterLdapSubjectId(subjectToModify.getId());
+ subjectLdapRolesCriteria.clearPaging();//disable paging as the code assumes
all the results will be returned.
+
PageList<Role> currentLdapRoles =
roleManager.findRolesByCriteria(whoami, subjectLdapRolesCriteria);
ldapRolesModified = !(currentLdapRoles.containsAll(newLdapRoles) &&
newLdapRoles
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
index a6302de..4fabe9a 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
@@ -376,6 +376,8 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
criteria.addFilterDestinationId(bundleDestination.getId());
criteria.addFilterIsLive(true);
criteria.fetchBundleVersion(true);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
List<BundleDeployment> liveDeployments =
bundleManager.findBundleDeploymentsByCriteria(subject, criteria);
BundleDeployment liveDeployment = (liveDeployments.isEmpty()) ? null :
liveDeployments.get(0);
@@ -450,6 +452,8 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
BundleCriteria criteria = new BundleCriteria();
criteria.addFilterBundleTypeId(Integer.valueOf(bundleTypeId));
criteria.addFilterName(bundleName);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
PageList<Bundle> bundles = findBundlesByCriteria(subject, criteria);
Bundle bundle;
if (bundles.getTotalSize() == 0) {
@@ -630,6 +634,8 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
criteria.setStrict(true);
criteria.addFilterBundleTypeId(bundleType.getId());
criteria.addFilterName(bundleName);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
PageList<Bundle> bundles = bundleManager.findBundlesByCriteria(subject,
criteria);
Bundle bundle;
if (bundles.getTotalSize() == 0) {
@@ -699,6 +705,8 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
BundleFileCriteria bfCriteria = new BundleFileCriteria();
bfCriteria.addFilterBundleVersionId(bundleVersion.getId());
bfCriteria.fetchPackageVersion(true);
+ bfCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
+
PageList<BundleFile> bfs =
bundleManager.findBundleFilesByCriteria(subjectManager.getOverlord(),
bfCriteria);
bundleFiles.clear();
@@ -1477,6 +1485,8 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
Bundle bundle = version.getBundle();
BundleDestinationCriteria destinationCriteria = new
BundleDestinationCriteria();
destinationCriteria.addFilterBundleId(bundle.getId());
+ destinationCriteria.clearPaging();//disable paging as the code assumes all
the results will be returned.
+
List<BundleDestination> destinations =
findBundleDestinationsByCriteria(subject,destinationCriteria);
List<BundleDeployment> resultingDeployments = new
ArrayList<BundleDeployment>(version.getBundleDeployments().size());
// We now have visible destinations - go over the resultingDeployments and
only include the ones with vis. destinations
@@ -1534,6 +1544,8 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
for (Bundle bundle : bundles.getValues()) { // TODO clone the bundle and return
the modified clones
BundleDestinationCriteria destinationCriteria = new
BundleDestinationCriteria();
destinationCriteria.addFilterBundleId(bundle.getId());
+ destinationCriteria.clearPaging();//disable paging as the code assumes all
the results will be returned.
+
List<BundleDestination> destinations =
findBundleDestinationsByCriteria(subject,destinationCriteria);
bundle.setDestinations(destinations);
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleServerServiceImpl.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleServerServiceImpl.java
index 65a1209..0ca5b82 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleServerServiceImpl.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleServerServiceImpl.java
@@ -71,6 +71,8 @@ public class BundleServerServiceImpl implements BundleServerService {
bfc.addFilterBundleVersionId(bundleVersionId);
bfc.fetchPackageVersion(true);
+ bfc.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
List<BundleFile> bundleFiles = bm.findBundleFilesByCriteria(subject,
bfc);
List<PackageVersion> packageVersions = new
ArrayList<PackageVersion>(bundleFiles.size());
PackageVersion packageVersion = null;
commit 12dca890e6f2d53405a3f440f214d4020a315982
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Tue Feb 5 12:46:40 2013 -0500
i)Update several more instances of default criteria where logic assumed all results
returned.
ii)small cosmetic fix in rest description.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
index c75246f..a957d00 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java
@@ -1593,7 +1593,9 @@ public class ContentManagerBean implements ContentManagerLocal,
ContentManagerRe
throw new IllegalArgumentException("The criteria query has to have a
filter for a specific repo.");
}
- criteria.fetchVersions(true);
+ criteria.fetchVersions(true);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
PageList<Package> packages = findPackagesByCriteria(subject, criteria);
PageList<PackageAndLatestVersionComposite> ret = new
PageList<PackageAndLatestVersionComposite>(packages.getTotalSize(),
packages.getPageControl());
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
index 775a1e8..e6bdf1b 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
@@ -749,6 +749,8 @@ public class ContentSourceManagerBean implements
ContentSourceManagerLocal {
RepoCriteria reposForContentSource = new RepoCriteria();
reposForContentSource.addFilterContentSourceIds(contentSourceId);
reposForContentSource.addFilterCandidate(false); // Don't sync
distributions for candidates
+ reposForContentSource.clearPaging();//disable paging as the code assumes all
the results will be returned.
+
Subject overlord = LookupUtil.getSubjectManager().getOverlord();
List<Repo> repos = repoManager.findReposByCriteria(overlord,
reposForContentSource);
log.debug("downloadDistributionBits found " + repos.size() + "
repos associated with this contentSourceId "
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java
index c8234bb..64dde49 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java
@@ -582,6 +582,7 @@ public class RepoManagerBean implements RepoManagerLocal,
RepoManagerRemote {
RepoCriteria candidateReposCriteria = new RepoCriteria();
candidateReposCriteria.addFilterContentSourceIds(contentSourceId);
candidateReposCriteria.addFilterCandidate(true);
+ candidateReposCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
PageList<Repo> candidatesForThisProvider = findReposByCriteria(subject,
candidateReposCriteria);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
index f9143ce..ebaf451 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
@@ -54,7 +54,6 @@ import com.wordnik.swagger.annotations.ApiParam;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jboss.resteasy.annotations.Form;
import org.jboss.resteasy.annotations.GZIP;
import org.jboss.resteasy.annotations.cache.Cache;
@@ -115,6 +114,8 @@ public class GroupHandlerBean extends AbstractRestBean {
if (q!=null) {
criteria.addFilterName(q);
}
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
List<ResourceGroup> groups =
resourceGroupManager.findResourceGroupsByCriteria(caller, criteria);
List<GroupRest> list = new ArrayList<GroupRest>(groups.size());
@@ -372,6 +373,8 @@ public class GroupHandlerBean extends AbstractRestBean {
if (q!=null) {
criteria.addFilterName(q);
}
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
PageList<GroupDefinition> gdlist =
definitionManager.findGroupDefinitionsByCriteria(caller, criteria);
List<GroupDefinitionRest> list = new
ArrayList<GroupDefinitionRest>(gdlist.getTotalSize());
for (GroupDefinition def: gdlist) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
index 92287d5..fbf81fb 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
@@ -343,6 +343,7 @@ public class OperationsHandlerBean extends AbstractRestBean {
ResourceOperationHistoryCriteria criteria = new
ResourceOperationHistoryCriteria();
JobId jobId = new JobId(jobName);
criteria.addFilterJobId(jobId);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
ResourceOperationHistory history ;//=
opsManager.getOperationHistoryByJobId(caller,jobName);
List<ResourceOperationHistory> list =
opsManager.findResourceOperationHistoriesByCriteria(caller,criteria);
@@ -386,6 +387,7 @@ public class OperationsHandlerBean extends AbstractRestBean {
criteria.addFilterResourceIds(resourceId);
criteria.addSortEndTime(PageOrdering.DESC);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
List<ResourceOperationHistory> list =
opsManager.findResourceOperationHistoriesByCriteria(caller,criteria);
@@ -413,6 +415,8 @@ public class OperationsHandlerBean extends AbstractRestBean {
ResourceOperationHistoryCriteria criteria = new
ResourceOperationHistoryCriteria();
criteria.addFilterJobId(new JobId(jobName));
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
List<ResourceOperationHistory> list =
opsManager.findResourceOperationHistoriesByCriteria(caller,criteria);
if ((list != null && !list.isEmpty())) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
index 8142f17..b748833 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
@@ -88,7 +88,12 @@ import org.rhq.enterprise.server.measurement.AvailabilityManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementScheduleManagerLocal;
import org.rhq.enterprise.server.resource.ResourceAlreadyExistsException;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
-import org.rhq.enterprise.server.rest.domain.*;
+import org.rhq.enterprise.server.rest.domain.AvailabilityRest;
+import org.rhq.enterprise.server.rest.domain.Link;
+import org.rhq.enterprise.server.rest.domain.MetricSchedule;
+import org.rhq.enterprise.server.rest.domain.ResourceWithChildren;
+import org.rhq.enterprise.server.rest.domain.ResourceWithType;
+import org.rhq.enterprise.server.rest.domain.StringValue;
/**
* Class that deals with getting data about resources
@@ -324,6 +329,8 @@ public class ResourceHandlerBean extends AbstractRestBean {
criteria.addFilterInterval(start,end);
criteria.addFilterResourceId(resourceId);
criteria.addSortStartTime(PageOrdering.DESC);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
List<Availability> points =
availMgr.findAvailabilityByCriteria(caller,criteria);
List<AvailabilityRest> ret = new
ArrayList<AvailabilityRest>(points.size());
for (Availability avail : points) {
@@ -517,6 +524,8 @@ public class ResourceHandlerBean extends AbstractRestBean {
public List<Link> getAlertsForResource(@ApiParam("Id of the resource to
query") @PathParam("id") int resourceId) {
AlertCriteria criteria = new AlertCriteria();
criteria.addFilterResourceIds(resourceId);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
List<Alert> alerts = alertManager.findAlertsByCriteria(caller, criteria);
List<Link> links = new ArrayList<Link>(alerts.size());
for (Alert al : alerts) {
@@ -638,9 +647,9 @@ public class ResourceHandlerBean extends AbstractRestBean {
@POST
@Path("/")
- @ApiOperation("Create a new resource as a child of an existing resource¡")
+ @ApiOperation("Create a new resource as a child of an existing
resource<A1>")
public Response createResource(
- @ApiParam("THe info about the resource. You need to supply resource name,
resource type name, plugin name, id of the parent") ResourceWithType resource,
+ @ApiParam("The info about the resource. You need to supply resource name,
resource type name, plugin name, id of the parent") ResourceWithType resource,
@Context UriInfo uriInfo)
{
return
createResourceInternal(resource.getResourceName(),resource.getPluginName(),resource.getParentId(),resource.getTypeName(),uriInfo);
commit 5b4db0d3246d9e43da722d4dd6a679481e17023a
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Tue Feb 5 10:29:58 2013 -0500
Update some more default criteria usages to disable paging where logic already
assumes it.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java
index b59ca8b..134dedf 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java
@@ -140,6 +140,8 @@ public class RoleManagerBean implements RoleManagerLocal,
RoleManagerRemote {
// Make sure there's not an existing role with the same name.
RoleCriteria criteria = new RoleCriteria();
criteria.addFilterName(newRole.getName());
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
PageList<Role> roles = findRolesByCriteria(whoami, criteria);
if (!roles.isEmpty()) {
throw new EntityExistsException("A user role [" + newRole.getName()
+ "] already exists.");
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
index d5d7128..63cb44d 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
@@ -1080,6 +1080,8 @@ public class DiscoveryBossBean implements DiscoveryBossLocal,
DiscoveryBossRemot
ResourceTypeCriteria criteria = new ResourceTypeCriteria();
criteria.addFilterPluginName(plugin);
criteria.addFilterName(name);
+ criteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
+
List<ResourceType> result =
resourceTypeManager.findResourceTypesByCriteria(
subjectManager.getOverlord(), criteria);
@@ -1266,6 +1268,8 @@ public class DiscoveryBossBean implements DiscoveryBossLocal,
DiscoveryBossRemot
ResourceCriteria resourceCriteria = new ResourceCriteria();
resourceCriteria.addFilterParentResourceId(parentResource.getId());
resourceCriteria.addFilterResourceTypeId(resourceType.getId());
+ resourceCriteria.clearPaging();//Doc: disable paging as the code assumes all
the results will be returned.
+
PageList<Resource> childResourcesOfType =
resourceManager.findResourcesByCriteria(
subjectManager.getOverlord(), resourceCriteria);
if (childResourcesOfType.size() >= 1) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/inventory/InventoryManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/inventory/InventoryManagerBean.java
index c159275..9f7fc00 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/inventory/InventoryManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/inventory/InventoryManagerBean.java
@@ -1,10 +1,6 @@
package org.rhq.enterprise.server.inventory;
-import java.util.HashSet;
import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedSet;
import javax.ejb.EJB;
import javax.ejb.Stateless;
@@ -14,9 +10,7 @@ import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
-import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.criteria.ResourceTypeCriteria;
-import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
@@ -78,6 +72,7 @@ public class InventoryManagerBean implements InventoryManagerLocal {
public List<ResourceType> getDeletedTypes() {
ResourceTypeCriteria criteria = new ResourceTypeCriteria();
criteria.addFilterDeleted(true);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
return resourceTypeMgr.findResourceTypesByCriteria(subjectMgr.getOverlord(),
criteria);
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/execution/SearchAssistManager.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/execution/SearchAssistManager.java
index bfc2164..1629926 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/execution/SearchAssistManager.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/execution/SearchAssistManager.java
@@ -606,6 +606,7 @@ public class SearchAssistManager {
criteria.setCaseSensitive(false);
criteria.addSortName(PageOrdering.ASC);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
List<SavedSearch> savedSearchResults =
savedSearchManager.findSavedSearchesByCriteria(subject, criteria);
@@ -636,6 +637,7 @@ public class SearchAssistManager {
criteria.setCaseSensitive(false);
criteria.addSortName(PageOrdering.ASC);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
List<SavedSearch> savedSearchResults =
savedSearchManager.findSavedSearchesByCriteria(subject, criteria);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/tagging/TagManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/tagging/TagManagerBean.java
index a7e05a2..944f799 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/tagging/TagManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/tagging/TagManagerBean.java
@@ -84,6 +84,8 @@ public class TagManagerBean implements TagManagerLocal, TagManagerRemote
{
criteria.addFilterSemantic(tag.getSemantic());
criteria.addFilterName(tag.getName());
criteria.setStrict(true);
+ criteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
+
List<Tag> found = findTagsByCriteria(subject, criteria);
if (!found.isEmpty()) {
assert found.size() == 1; // should never be more than one
commit 9b0f4a401362baed1e1a0b0d171195403b31a554
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Tue Feb 5 09:36:09 2013 -0500
Update criteria usage by job to explicitly return all the results and not the
default.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
index 574dea2..08a4775 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
@@ -117,6 +117,8 @@ public class ContentProviderSyncJob implements StatefulJob {
RepoCriteria repoCriteria = new RepoCriteria();
repoCriteria.addFilterContentSourceIds(contentSource.getId());
repoCriteria.addFilterCandidate(false);
+ repoCriteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
+
RepoManagerLocal repoManager = LookupUtil.getRepoManagerLocal();
PageList<Repo> repos = repoManager.findReposByCriteria(overlord,
repoCriteria);
Integer[] repoIds = new Integer[repos.size()];
commit 122db27657ac9b66573c2695cd38de76b42045c6
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Tue Feb 5 09:19:56 2013 -0500
Update Resource type and metadata default usages of criteria to return all results as
assumed by logic.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/PlatformUtilizationManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/PlatformUtilizationManagerBean.java
index 0e4c2c9..a7bd5c3 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/PlatformUtilizationManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/PlatformUtilizationManagerBean.java
@@ -21,6 +21,11 @@
package org.rhq.enterprise.server.resource;
+import static java.util.Arrays.asList;
+import static javax.ejb.TransactionAttributeType.REQUIRES_NEW;
+import static org.rhq.core.domain.resource.InventoryStatus.COMMITTED;
+import static org.rhq.core.domain.resource.ResourceCategory.PLATFORM;
+
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -39,18 +44,13 @@ import org.rhq.core.domain.measurement.MeasurementDefinition;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.composite.PlatformMetricsSummary;
+import org.rhq.core.domain.resource.composite.PlatformMetricsSummary.CPUMetric;
+import org.rhq.core.domain.resource.composite.PlatformMetricsSummary.MemoryMetric;
+import org.rhq.core.domain.resource.composite.PlatformMetricsSummary.SwapMetric;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.collection.ArrayUtils;
import org.rhq.enterprise.server.measurement.MeasurementDataManagerLocal;
-import static java.util.Arrays.asList;
-import static javax.ejb.TransactionAttributeType.REQUIRES_NEW;
-import static org.rhq.core.domain.resource.InventoryStatus.COMMITTED;
-import static org.rhq.core.domain.resource.ResourceCategory.PLATFORM;
-import static org.rhq.core.domain.resource.composite.PlatformMetricsSummary.CPUMetric;
-import static
org.rhq.core.domain.resource.composite.PlatformMetricsSummary.MemoryMetric;
-import static org.rhq.core.domain.resource.composite.PlatformMetricsSummary.SwapMetric;
-
/**
* @author jsanda
*/
@@ -74,6 +74,7 @@ public class PlatformUtilizationManagerBean implements
PlatformUtilizationManage
ResourceTypeCriteria typeCriteria = new ResourceTypeCriteria();
typeCriteria.addFilterCategory(PLATFORM);
typeCriteria.fetchMetricDefinitions(true);
+ typeCriteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
PageList<ResourceType> resourceTypes =
resourceTypeMgr.findResourceTypesByCriteria(subject, typeCriteria);
Map<Integer, Set<Integer>> platformMetricDefs = new
HashMap<Integer, Set<Integer>>();
@@ -84,6 +85,7 @@ public class PlatformUtilizationManagerBean implements
PlatformUtilizationManage
ResourceCriteria resourceCriteria = new ResourceCriteria();
resourceCriteria.addFilterResourceCategories(PLATFORM);
resourceCriteria.addFilterInventoryStatus(COMMITTED);
+ resourceCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
PageList<Resource> platforms = resourceMgr.findResourcesByCriteria(subject,
resourceCriteria);
PageList<PlatformMetricsSummary> summaries = new
PageList<PlatformMetricsSummary>();
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceFactoryManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceFactoryManagerBean.java
index ad81fb1..a7f7433 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceFactoryManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceFactoryManagerBean.java
@@ -717,6 +717,8 @@ public class ResourceFactoryManagerBean implements
ResourceFactoryManagerLocal,
ResourceCriteria resourceCriteria = new ResourceCriteria();
resourceCriteria.addFilterParentResourceId(parentResource.getId());
resourceCriteria.addFilterResourceTypeId(resourceType.getId());
+ resourceCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
+
PageList<Resource> childResourcesOfType =
resourceManager.findResourcesByCriteria(
subjectManager.getOverlord(), resourceCriteria);
if (childResourcesOfType.size() >= 1) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
index 0b06d92..205252d 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
@@ -814,6 +814,8 @@ public class ResourceManagerBean implements ResourceManagerLocal,
ResourceManage
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterParentResourceId(ancestor.getResource().getId());
criteria.addSortName(PageOrdering.ASC);
+ criteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
+
List<Resource> children = findResourcesByCriteriaBounded(subject,
criteria, 0, 0);
// Remove any that are in the lineage to avoid repeated handling.
children.removeAll(rawResourceLineage);
@@ -862,6 +864,8 @@ public class ResourceManagerBean implements ResourceManagerLocal,
ResourceManage
ResourceCriteria resourceCriteria = new ResourceCriteria();
resourceCriteria.addFilterIds(resourceIds);
resourceCriteria.fetchResourceType(true);
+ resourceCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
+
List<Resource> resources = findResourcesByCriteria(subject,
resourceCriteria);
if (ResourceAncestryFormat.RAW == format) {
@@ -886,6 +890,8 @@ public class ResourceManagerBean implements ResourceManagerLocal,
ResourceManage
ResourceTypeCriteria resourceTypeCriteria = new ResourceTypeCriteria();
resourceTypeCriteria.addFilterIds(typesSet.toArray(new
Integer[typesSet.size()]));
+ resourceCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
+
List<ResourceType> types = typeManager.findResourceTypesByCriteria(subject,
resourceTypeCriteria);
for (Resource resource : resources) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceTypeManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceTypeManagerBean.java
index f93a935..d4f9bb9 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceTypeManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceTypeManagerBean.java
@@ -525,6 +525,8 @@ public class ResourceTypeManagerBean implements
ResourceTypeManagerLocal, Resour
if (sawTopLevelServer) {
ResourceTypeCriteria criteria = new ResourceTypeCriteria();
criteria.addFilterCategory(ResourceCategory.PLATFORM);
+ criteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
+
List<ResourceType> platforms = findResourceTypesByCriteria(subject,
criteria);
results.addAll(platforms);
}
@@ -539,6 +541,8 @@ public class ResourceTypeManagerBean implements
ResourceTypeManagerLocal, Resour
if (first.getCategory() == ResourceCategory.PLATFORM) {
ResourceTypeCriteria criteria = new ResourceTypeCriteria();
+ criteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
+
List<ResourceType> allResourceTypes =
findResourceTypesByCriteria(subject, criteria);
List<ResourceType> results = new ArrayList<ResourceType>();
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
index 25ea666..a52c4c2 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBean.java
@@ -1,21 +1,20 @@
package org.rhq.enterprise.server.resource.metadata;
+import java.util.List;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.AlertDefinitionCriteria;
import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.alert.AlertDefinitionManagerLocal;
import org.rhq.enterprise.server.alert.AlertTemplateManagerLocal;
-import javax.ejb.EJB;
-import javax.ejb.Stateless;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import java.util.List;
-
@Stateless
public class AlertMetadataManagerBean implements AlertMetadataManagerLocal {
@@ -33,6 +32,8 @@ public class AlertMetadataManagerBean implements
AlertMetadataManagerLocal {
AlertDefinitionCriteria criteria = new AlertDefinitionCriteria();
criteria.addFilterAlertTemplateResourceTypeId(resourceType.getId());
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
List<AlertDefinition> templates =
alertDefinitionMgr.findAlertDefinitionsByCriteria(subject, criteria);
Integer[] templateIds = new Integer[templates.size()];
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java
index 6fc58d6..cd54bf0 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java
@@ -239,6 +239,7 @@ public class ContentMetadataManagerBean implements
ContentMetadataManagerLocal {
BundleCriteria criteria = new BundleCriteria();
criteria.addFilterBundleTypeId(bundleType.getId());
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
List<Bundle> bundles = bundleMgr.findBundlesByCriteria(subject, criteria);
for (Bundle bundle : bundles) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/MeasurementMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/MeasurementMetadataManagerBean.java
index 7b03d73..0ab7dee 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/MeasurementMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/MeasurementMetadataManagerBean.java
@@ -216,6 +216,8 @@ public class MeasurementMetadataManagerBean implements
MeasurementMetadataManage
MeasurementDefinitionCriteria criteria = new MeasurementDefinitionCriteria();
criteria.addFilterResourceTypeId(existingType.getId());
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
List<MeasurementDefinition> definitions =
measurementDefinitionMgr.findMeasurementDefinitionsByCriteria(
subjectMgr.getOverlord(), criteria);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginConfigurationMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginConfigurationMetadataManagerBean.java
index 841fe03..f833bc5 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginConfigurationMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginConfigurationMetadataManagerBean.java
@@ -76,6 +76,8 @@ public class PluginConfigurationMetadataManagerBean implements
PluginConfigurati
Subject overlord = subjectMgr.getOverlord();
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterResourceTypeId(existingType.getId());
+ criteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
+
List<Resource> resources =
resourceMgr.findResourcesByCriteria(overlord, criteria);
for (Resource resource : resources) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
index f3c7158..6f0c9df 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
@@ -682,6 +682,8 @@ public class ResourceMetadataManagerBean implements
ResourceMetadataManagerLocal
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterResourceTypeId(existingType.getId());
criteria.addFilterParentResourceTypeId(obsoleteParentType.getId());
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
List<Resource> resources =
resourceManager.findResourcesByCriteria(overlord, criteria);
for (Resource resource : resources) {
Resource newParent = null;
commit 91cd383c9b82499340009922e8ed6ba5db919760
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Tue Feb 5 08:51:30 2013 -0500
i)Update drift component criteria usage to use explicitly request resources as
already assumed by the logic.
ii)Updated one or two spots to explicitly request single result pagesets where
already assumed by logic.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
index 35339cc..dcc08d8 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
@@ -208,6 +208,7 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
DriftDefinitionCriteria driftDefCriteria = new DriftDefinitionCriteria();
driftDefCriteria.addFilterResourceIds(resourceId);
driftDefCriteria.addFilterName(driftDefName);
+ driftDefCriteria.clearPaging();//disable paging as the code assumes all the
results will be returned.
PageList<DriftDefinition> defs = findDriftDefinitionsByCriteria(overlord,
driftDefCriteria);
if (defs.isEmpty()) {
@@ -286,6 +287,7 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
criteria.setStrict(true);
criteria.fetchDrifts(true);
criteria.addSortVersion(PageOrdering.ASC);
+ criteria.setPageControl(PageControl.getUnlimitedInstance());//disable paging as
the code assumes all the results will be returned.
PageList<? extends DriftChangeSet<?>> changeSets =
findDriftChangeSetsByCriteria(subject, criteria);
for (DriftChangeSet<? extends Drift<?, ?>> changeSet : changeSets) {
@@ -303,6 +305,7 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
criteria.addFilterDriftDefinitionId(request.getDriftDefinitionId());
criteria.addFilterId(request.getTemplateChangeSetId());
criteria.fetchDrifts(true);
+ criteria.setPageControl(PageControl.getUnlimitedInstance());//disable paging as
the code assumes all the results will be returned.
PageList<? extends DriftChangeSet<?>> changeSets =
findDriftChangeSetsByCriteria(subject, criteria);
if (changeSets.isEmpty()) {
@@ -353,6 +356,8 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
criteria.addFilterName(driftDefName);
criteria.addFilterResourceIds(resourceId);
criteria.setStrict(true);
+ criteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
+
PageList<DriftDefinition> results =
driftManager.findDriftDefinitionsByCriteria(subject, criteria);
DriftDefinition doomedDriftDef = null;
if (results != null && results.size() == 1) {
@@ -503,6 +508,8 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
criteria.addFilterName(summary.getDriftDefinitionName());
criteria.addFilterResourceIds(resourceId);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
+
PageList<DriftDefinition> definitions =
findDriftDefinitionsByCriteria(subject, criteria);
if (definitions.isEmpty()) {
@@ -692,6 +699,8 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterId(driftId1);
+ criteria.setPageControl(PageControl.getSingleRowInstance());
+
List<? extends Drift<?, ?>> result =
driftServerPlugin.findDriftsByCriteria(subject, criteria);
if (result.size() != 1) {
throw new IllegalArgumentException("Drift record not found: " +
driftId1);
@@ -699,6 +708,8 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
Drift drift1 = result.get(0);
criteria.addFilterId(driftId2);
+ criteria.setPageControl(PageControl.getSingleRowInstance());
+
result = driftServerPlugin.findDriftsByCriteria(subject, criteria);
if (result.size() != 1) {
throw new IllegalArgumentException("Drift record not found: " +
driftId2);
@@ -889,6 +900,7 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterId(driftId);
criteria.fetchChangeSet(true);
+ criteria.setPageControl(PageControl.getSingleRowInstance());
DriftDetails driftDetails = new DriftDetails();
DriftServerPluginFacet driftServerPlugin = getServerPlugin();
@@ -946,6 +958,7 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
criteria.addFilterResourceId(drift.getChangeSet().getResourceId());
criteria.addFilterDriftDefinitionId(drift.getChangeSet().getDriftDefinitionId());
criteria.addFilterVersion(Integer.toString(drift.getChangeSet().getVersion() -
1));
+ criteria.setPageControl(PageControl.getSingleRowInstance());
PageList<? extends DriftChangeSet<?>> results =
findDriftChangeSetsByCriteria(subject, criteria);
// TODO handle empty results
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftServerServiceImpl.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftServerServiceImpl.java
index b206b54..3eb83e0 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftServerServiceImpl.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftServerServiceImpl.java
@@ -80,6 +80,7 @@ public class DriftServerServiceImpl implements DriftServerService {
DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
criteria.addFilterResourceIds(resourceIds.toArray(new
Integer[resourceIds.size()]));
criteria.fetchConfiguration(true);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
Subject overlord = getSubjectManager().getOverlord();
PageList<DriftDefinition> definitions =
getDriftManager().findDriftDefinitionsByCriteria(overlord, criteria);
@@ -119,6 +120,7 @@ public class DriftServerServiceImpl implements DriftServerService {
DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
criteria.addFilterResourceIds(resourceId);
criteria.addFilterName(drfitDefName);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
DriftManagerLocal driftMgr = getDriftManager();
SubjectManagerLocal subjectMgr = getSubjectManager();
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
index 5d149a1..72eb3e4 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/JPADriftServerBean.java
@@ -184,6 +184,8 @@ public class JPADriftServerBean implements JPADriftServerLocal {
: new JPADriftCriteria(criteria);
jpaCriteria.fetchChangeSet(true);
+ jpaCriteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
+
PageList<JPADrift> drifts = findDriftsByCriteria(subject, jpaCriteria);
PageList<DriftComposite> result = new PageList<DriftComposite>();
for (JPADrift drift : drifts) {
commit 7fd0b56fcaa9a506ad409d52636a8dbf8b405e7b
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 4 17:21:14 2013 -0500
Update criteria usage to explicitly support all or one search resource where
applicable as already expected by the code.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBean.java
index 528fd7a..39bda2c 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBean.java
@@ -41,6 +41,7 @@ import org.rhq.core.domain.drift.DriftSnapshot;
import org.rhq.core.domain.drift.DriftSnapshotRequest;
import org.rhq.core.domain.drift.dto.DriftChangeSetDTO;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.authz.RequiredPermission;
@@ -125,6 +126,7 @@ public class DriftTemplateManagerBean implements
DriftTemplateManagerLocal, Drif
DriftDefinitionTemplateCriteria templateCriteria = new
DriftDefinitionTemplateCriteria();
templateCriteria.addFilterId(templateId);
templateCriteria.fetchDriftDefinitions(true);
+ templateCriteria.setPageControl(PageControl.getSingleRowInstance());
PageList<DriftDefinitionTemplate> templates =
templateMgr.findTemplatesByCriteria(subject, templateCriteria);
DriftDefinitionTemplate template = templates.get(0);
@@ -133,6 +135,7 @@ public class DriftTemplateManagerBean implements
DriftTemplateManagerLocal, Drif
criteria.addFilterTemplateId(templateId);
criteria.fetchConfiguration(true);
criteria.fetchResource(true);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
PageList<DriftDefinition> definitions =
driftMgr.findDriftDefinitionsByCriteria(subject, criteria);
for (DriftDefinition def : definitions) {
commit f7e7b33e564c123750c5d40a7fbb4df2ab6e5a64
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 4 17:12:33 2013 -0500
Update measurementSchedule default criteria usage to support larger then default
result sets.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
index 934dcd1..9ca60bc 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
@@ -461,6 +461,8 @@ public class MeasurementChartsManagerBean implements
MeasurementChartsManagerLoc
criteria.addFilterAutoGroupResourceTypeId(context.resourceTypeId);
}
criteria.addFilterDefinitionIds(definitionId);
+ criteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
+
PageList<MeasurementSchedule> theSchedules =
scheduleManager.findSchedulesByCriteria(subject, criteria);
int totalScheduleCount = theSchedules.getTotalSize();
commit b7c248012959381e365b1afca4a01a373ed12755
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 4 16:54:58 2013 -0500
update default criteria instances in the server side plugins as code already assumes
as much.
diff --git
a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliComponent.java
b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliComponent.java
index d73b42e..2c1f874 100644
---
a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliComponent.java
+++
b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliComponent.java
@@ -304,6 +304,7 @@ public class CliComponent implements ServerPluginComponent,
ControlFacet {
String packageId =
cliNotification.getConfiguration().getSimpleValue(CliSender.PROP_PACKAGE_ID, null);
if (packageId != null) {
crit.addFilterPackageId(Integer.valueOf(packageId));
+ crit.clearPaging();//disable paging as the code assumes all the results
will be returned.
PageList<PackageVersion> res =
contentManager.findPackageVersionsByCriteria(overlord, crit);
count = res.getTotalSize();
diff --git
a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
index 5eb9360..2d2cd63 100644
---
a/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
+++
b/modules/enterprise/server/plugins/alert-cli/src/main/java/org/rhq/enterprise/server/plugins/alertCli/CliSender.java
@@ -397,6 +397,7 @@ public class CliSender extends AlertSender<CliComponent> {
RepoCriteria criteria = new RepoCriteria();
criteria.addFilterId(config.repoId);
+ criteria.clearPaging();//disable paging as the code assumes all the results
will be returned.
List<Repo> repos = rm.findReposByCriteria(overlord, criteria);
commit b42ab9daa335de32779daf8d0563f5720afe9dca
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 4 16:36:42 2013 -0500
update some more usages of Criteria to return all results as code already assumes
this.
diff --git
a/modules/enterprise/gui/content_http-war/src/main/java/org/rhq/gui/content/ContentHTTPServlet.java
b/modules/enterprise/gui/content_http-war/src/main/java/org/rhq/gui/content/ContentHTTPServlet.java
index cfcf1ec..9990bda 100644
---
a/modules/enterprise/gui/content_http-war/src/main/java/org/rhq/gui/content/ContentHTTPServlet.java
+++
b/modules/enterprise/gui/content_http-war/src/main/java/org/rhq/gui/content/ContentHTTPServlet.java
@@ -563,6 +563,7 @@ public class ContentHTTPServlet extends DefaultServlet {
criteria.addFilterFileName(fileName);
criteria.addFilterRepoId(repo.getId());
criteria.setStrict(true);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
log.debug("Created criteria for repoId = " + repo.getId() + ",
fileName = " + fileName);
List<PackageVersion> pkgVers =
contentMgr.findPackageVersionsByCriteria(LookupUtil.getSubjectManager()
.getOverlord(), criteria);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
index 7abdd49..35339cc 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java
@@ -222,6 +222,7 @@ public class DriftManagerBean implements DriftManagerLocal,
DriftManagerRemote {
criteria.addFilterDriftDefinitionId(driftDef.getId());
criteria.addFilterVersion(Integer.toString(version));
criteria.fetchDrifts(true);
+ criteria.setPageControl(PageControl.getUnlimitedInstance());//disable paging as
the code assumes all the results will be returned.
PageList<? extends DriftChangeSet<?>> changeSets =
driftServerPlugin.findDriftChangeSetsByCriteria(overlord,
criteria);
commit 6f83ea4895cf4fe44e569d0fd837a4c78353c2b5
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 4 16:09:35 2013 -0500
Modify criteria to return all instances as logic assumes as much.
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
index 2a1f944..607263a 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/script/RepoScriptSourceProvider.java
@@ -90,6 +90,7 @@ public class RepoScriptSourceProvider extends
BaseRhqSchemeScriptSourceProvider
RepoCriteria repoCrit = new RepoCriteria();
repoCrit.addFilterName(repoName);
+ repoCrit.clearPaging();//disable paging as the code assumes all the results
will be returned.
List<Repo> repos =
repoManager.findReposByCriteria(rhqFacade.getSubject(), repoCrit);
if (repos.isEmpty()) {
commit 0ffe7828cbd10a63142e1fa3b69b8bac05d61565
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 4 15:54:23 2013 -0500
modify ResourceClientProxy to now process all child resources.
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
index 7361fe8..e2738ee 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
@@ -235,6 +235,7 @@ public class ResourceClientProxy {
private void initChildren() {
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterParentResourceId(resourceId);
+ criteria.clearPaging();//disable paging as the code assumes all the results will
be returned.
PageList<Resource> childResources =
remoteClient.getProxy(ResourceManagerRemote.class).findResourcesByCriteria(
remoteClient.getSubject(), criteria);
commit 9fcf54993de428e43db31366345ab6fd25dddb5a
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Mon Feb 4 15:37:01 2013 -0500
Reverting " update ResourceClientProxy to handle larger metric definition
results." as this approach is particularly problematic to implement when i)the same
processed elements could be available in subsequent chunk queries and with ii)large
deployments when parsing full list or resources can take long enough to span other
transactions.
This reverts commit 42d955fc9e59c1ae0a1e69aead9c0d25fca60ba6.
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
index a9c272a..7361fe8 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
@@ -253,23 +253,14 @@ public class ResourceClientProxy {
.findMeasurementDefinitionsByCriteria(remoteClient.getSubject(), criteria);
this.measurementMap = new HashMap<String, Measurement>();
- //Chunk through the results in 200(default) page element batches to avoid
excessive
- //memory usage for large deployments
- while (!measurementDefinitions.isEmpty()) {
- for (MeasurementDefinition def : measurementDefinitions) {
- Measurement m = new Measurement(def);
+ for (MeasurementDefinition def : measurementDefinitions) {
+ Measurement m = new Measurement(def);
- String name = def.getDisplayName().replaceAll("\\W",
"");
- name = decapitalize(name);
+ String name = def.getDisplayName().replaceAll("\\W",
"");
+ name = decapitalize(name);
- this.measurementMap.put(name, m);
- this.allProperties.put(name, m);
- }
- //process next batch if available with new criteria instance
- criteria = new MeasurementDefinitionCriteria();
- criteria.addFilterResourceTypeId(resource.getResourceType().getId());
- this.measurementDefinitions =
remoteClient.getProxy(MeasurementDefinitionManagerRemote.class)
- .findMeasurementDefinitionsByCriteria(remoteClient.getSubject(),
criteria);
+ this.measurementMap.put(name, m);
+ this.allProperties.put(name, m);
}
}
commit 42d955fc9e59c1ae0a1e69aead9c0d25fca60ba6
Author: Simeon Pinder <spinder(a)fulliautomatix.conchfritter.com>
Date: Fri Feb 1 09:25:14 2013 -0500
update ResourceClientProxy to handle larger metric definition results.
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
index 7361fe8..a9c272a 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/ResourceClientProxy.java
@@ -253,14 +253,23 @@ public class ResourceClientProxy {
.findMeasurementDefinitionsByCriteria(remoteClient.getSubject(), criteria);
this.measurementMap = new HashMap<String, Measurement>();
- for (MeasurementDefinition def : measurementDefinitions) {
- Measurement m = new Measurement(def);
+ //Chunk through the results in 200(default) page element batches to avoid
excessive
+ //memory usage for large deployments
+ while (!measurementDefinitions.isEmpty()) {
+ for (MeasurementDefinition def : measurementDefinitions) {
+ Measurement m = new Measurement(def);
- String name = def.getDisplayName().replaceAll("\\W",
"");
- name = decapitalize(name);
+ String name = def.getDisplayName().replaceAll("\\W",
"");
+ name = decapitalize(name);
- this.measurementMap.put(name, m);
- this.allProperties.put(name, m);
+ this.measurementMap.put(name, m);
+ this.allProperties.put(name, m);
+ }
+ //process next batch if available with new criteria instance
+ criteria = new MeasurementDefinitionCriteria();
+ criteria.addFilterResourceTypeId(resource.getResourceType().getId());
+ this.measurementDefinitions =
remoteClient.getProxy(MeasurementDefinitionManagerRemote.class)
+ .findMeasurementDefinitionsByCriteria(remoteClient.getSubject(),
criteria);
}
}