modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java | 1
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java | 1
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java | 29 +++-------
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftManagerBean.java | 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/drift/DriftServerServiceImpl.java | 7 +-
5 files changed, 17 insertions(+), 23 deletions(-)
New commits:
commit 73a33d50c1e1ce9f20e5023e0a4a31641d9c0754
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed Feb 6 15:06:53 2013 -0500
Make sure Criteria.setStrict(true) is set when using a Criteria search where
exact matches are expected and substrings could return unwanted results.
I found these just looking for the 'addFilter.*Name' in server jar. In most cases
a name filter will want to be exact.
Keep an eye out for other similar cases.
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..af4c81f 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,7 @@ 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.setStrict(true);
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/bundle/BundleManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
index a6302de..b2492cf 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
@@ -448,6 +448,7 @@ public class BundleManagerBean implements BundleManagerLocal, BundleManagerRemot
// 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);
PageList<Bundle> bundles = findBundlesByCriteria(subject, 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..1495710 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
@@ -206,6 +206,7 @@ public class DriftManagerBean implements DriftManagerLocal, DriftManagerRemote {
Subject overlord = subjectManager.getOverlord();
DriftDefinitionCriteria driftDefCriteria = new DriftDefinitionCriteria();
+ driftDefCriteria.setStrict(true);
driftDefCriteria.addFilterResourceIds(resourceId);
driftDefCriteria.addFilterName(driftDefName);
@@ -500,6 +501,7 @@ public class DriftManagerBean implements DriftManagerLocal, DriftManagerRemote {
}
DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
+ criteria.setStrict(true);
criteria.addFilterName(summary.getDriftDefinitionName());
criteria.addFilterResourceIds(resourceId);
PageList<DriftDefinition> definitions = findDriftDefinitionsByCriteria(subject, criteria);
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..35b77c2 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
@@ -115,10 +115,11 @@ public class DriftServerServiceImpl implements DriftServerService {
}
@Override
- public void updateCompliance(int resourceId, String drfitDefName, DriftComplianceStatus complianceStatus) {
+ public void updateCompliance(int resourceId, String driftDefName, DriftComplianceStatus complianceStatus) {
DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
+ criteria.setStrict(true);
criteria.addFilterResourceIds(resourceId);
- criteria.addFilterName(drfitDefName);
+ criteria.addFilterName(driftDefName);
DriftManagerLocal driftMgr = getDriftManager();
SubjectManagerLocal subjectMgr = getSubjectManager();
@@ -128,7 +129,7 @@ public class DriftServerServiceImpl implements DriftServerService {
if (definitions.isEmpty()) {
log.warn("Cannot update compliance for [resourceId: " + resourceId + ", driftDefinitionName: " +
- drfitDefName + "]. Could not find drift definition.");
+ driftDefName + "]. Could not find drift definition.");
return;
}
commit 20381597861b30716daecd4db9ad6ce88de98a78
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed Feb 6 15:00:55 2013 -0500
Fix a bug in the ResourceType pojo to ResourceType entity conversion code.
Criteria String matching is *fuzzy* (i.e. substring matching) by default. This
needs to have the Criteria.setStrict(true) added to make it exact.
In the end I got rid of the Criteria query in favor of an existing NamedQuery,
for a possible perf boost as the query could be executed many times during a
large inventory merge.
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..005e519 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
@@ -64,7 +64,6 @@ import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.criteria.ResourceCriteria;
-import org.rhq.core.domain.criteria.ResourceTypeCriteria;
import org.rhq.core.domain.discovery.MergeResourceResponse;
import org.rhq.core.domain.discovery.ResourceSyncInfo;
import org.rhq.core.domain.resource.Agent;
@@ -1077,28 +1076,18 @@ public class DiscoveryBossBean implements DiscoveryBossLocal, DiscoveryBossRemot
if (null == resourceType) {
try {
- ResourceTypeCriteria criteria = new ResourceTypeCriteria();
- criteria.addFilterPluginName(plugin);
- criteria.addFilterName(name);
- 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);