modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertDefinition.java
| 2
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AlertDefinitionCriteria.java
| 8 ++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
| 5 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/GroupAlertDefinitionManagerBean.java
| 34 ++++++----
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java
| 8 ++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
| 10 ++
6 files changed, 45 insertions(+), 22 deletions(-)
New commits:
commit e0d9d1a44ecd4d42fc681eb0be0302578eb9191a
Author: Joseph Marques <joseph(a)redhat.com>
Date: Tue Jun 29 12:46:16 2010 -0400
do not update the resource type when importing/creating resources.
the group category used to be based off of the explicit membership,
but that assumption was changed for 1.2.0 release so we could support
a compatible left-nav tree with recursive access to descendant for
easy authorization. this method only modifies the implicit resource
membership, not the explicit, so setResourceType would be a no-op.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java
index 5e7707d..8e33ca1 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java
@@ -765,8 +765,13 @@ public class ResourceGroupManagerBean implements
ResourceGroupManagerLocal, Reso
* created, but which initially creates one or more resource groups of
size 1; if this happens, the
* group will be created as a compatible group, if resources are later
added via an inventory sync, and
* if this compatible group's membership changes, we need to
recalculate the group category
+ *
+ * NOTE: this is no longer true. the group category used to be based off
of the explicit membership,
+ * but that assumption was changed for 1.2.0 release so we could
support a compatible left-nav
+ * tree with recursive access to descendant for easy authorization.
this method only modifies
+ * the implicit resource membership, not the explicit, so
setResourceType would be a no-op.
*/
- setResourceType(implicitRecursiveGroupId);
+ //setResourceType(implicitRecursiveGroupId);
}
} catch (Exception e) {
throw new ResourceGroupUpdateException("Could not add resource[id="
+ resource.getId()
@@ -923,6 +928,7 @@ public class ResourceGroupManagerBean implements
ResourceGroupManagerLocal, Reso
}
@SuppressWarnings("unchecked")
+ @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void setResourceType(int resourceGroupId) throws ResourceGroupDeleteException
{
Query query =
entityManager.createNamedQuery(ResourceType.QUERY_GET_EXPLICIT_RESOURCE_TYPE_COUNTS_BY_GROUP);
query.setParameter("groupId", resourceGroupId);
commit 0beacaaa68b779b9677851568ed2e718b5c18d0d
Author: Joseph Marques <joseph(a)redhat.com>
Date: Tue Jun 29 12:44:44 2010 -0400
BZ-608898: prevent deadlock during dynagroup recalculation
* first add/remove resources to the recalculated group, commit that work
* then reset the ResourceType on the group as necessary, based off of new membership
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
index 9a11216..5570738 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
@@ -303,6 +303,14 @@ public class GroupDefinitionManagerBean implements
GroupDefinitionManagerLocal {
groupDefinitionId, result);
/*
+ * as a result of recalculation, the membership may have changed such that a
group which was previously
+ * marked as compatible now becomes a mixed group. if that happens, then the
GroupCategory needs to be
+ * updated and any compatible group constructs need to be removed from this
group. the following method
+ * will achieve both of those goals
+ */
+ resourceGroupManager.setResourceType(nextResourceGroupId);
+
+ /*
* remove all ids returned from the helper. by the time we're done
looping over all
* ExpressionEvaluator.Result objects, the remaining objects in
managedResourceGroupIds should represent
* groups that no longer managed by this definition (either due to an
inventory or expression change), and
@@ -374,8 +382,6 @@ public class GroupDefinitionManagerBean implements
GroupDefinitionManagerLocal {
resourceGroupManager.removeResourcesFromGroup(overlord, resourceGroupId,
ArrayUtils
.unwrapCollection(idsToRemove));
- resourceGroupManager.setResourceType(resourceGroupId);
-
long endTime = System.currentTimeMillis();
log.debug("calculateGroupMembership_helper took " + (endTime -
startTime) + " millis");
commit eaf523492da7127850506e4f5919b4b9ce253e24
Author: Joseph Marques <joseph(a)redhat.com>
Date: Tue Jun 29 12:43:15 2010 -0400
BZ-608898: when setting the ResourceGroup on an AlertDefinition, do not load existing
AlertDefinitions
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertDefinition.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertDefinition.java
index a64de62..94ae2fe 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertDefinition.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertDefinition.java
@@ -518,9 +518,11 @@ public class AlertDefinition implements Serializable {
public void setResourceGroup(ResourceGroup resourceGroup) {
this.resourceGroup = resourceGroup;
+ /*
if (this.resourceGroup != null) {
this.resourceGroup.getAlertDefinitions().add(this);
}
+ */
}
public ResourceType getResourceType() {
commit 9679c7a712fbeb644d4b01a52e347bba634195b7
Author: Joseph Marques <joseph(a)redhat.com>
Date: Tue Jun 29 12:42:21 2010 -0400
BZ-608898: when deleting/purging group alert definitions, only load ids
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AlertDefinitionCriteria.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AlertDefinitionCriteria.java
index e553ca8..8eb7efd 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AlertDefinitionCriteria.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AlertDefinitionCriteria.java
@@ -50,6 +50,7 @@ public class AlertDefinitionCriteria extends Criteria {
private Integer filterAlertTemplateResourceTypeId; // requires overrides
private String filterAlertTemplateResourceTypeName; // requires overrides
private List<Integer> filterResourceIds; // requires overrides
+ private List<Integer> filterResourceGroupIds; // requires overrides
private Boolean filterEnabled;
private String filterOperationName; // requires overrides
private Boolean filterDeleted;
@@ -66,11 +67,12 @@ public class AlertDefinitionCriteria extends Criteria {
filterOverrides.put("alertTemplateResourceTypeId",
"resourceType.id = ?");
filterOverrides.put("alertTemplateResourceTypeName",
"resourceType.name like ?");
filterOverrides.put("resourceIds", "resource.id IN ( ? )");
+ filterOverrides.put("resourceGroupIds", "resourceGroup.id IN ( ?
)");
filterOverrides.put("operationName", "operationDefinition.name
like ?");
}
@Override
- public Class getPersistentClass() {
+ public Class<?> getPersistentClass() {
return AlertDefinition.class;
}
@@ -106,6 +108,10 @@ public class AlertDefinitionCriteria extends Criteria {
this.filterResourceIds = Arrays.asList(filterResourceIds);
}
+ public void addFilterResourceGroupIds(Integer... filterResourceGroupIds) {
+ this.filterResourceGroupIds = Arrays.asList(filterResourceGroupIds);
+ }
+
public void addFilterEnabled(Boolean filterEnabled) {
this.filterEnabled = filterEnabled;
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/GroupAlertDefinitionManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/GroupAlertDefinitionManagerBean.java
index 57701ce..a2eb45e 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/GroupAlertDefinitionManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/GroupAlertDefinitionManagerBean.java
@@ -36,6 +36,7 @@ import org.jboss.annotation.IgnoreDependency;
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.InventoryStatus;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageControl;
@@ -45,6 +46,7 @@ import org.rhq.core.server.PersistenceUtility;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
/**
* @author Joseph Marques
@@ -330,16 +332,23 @@ public class GroupAlertDefinitionManagerBean implements
GroupAlertDefinitionMana
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void purgeAllGroupAlertDefinitions(Subject subject, int resourceGroupId) {
- List<AlertDefinition> groupAlertDefinitions =
findGroupAlertDefinitions(subject, resourceGroupId, PageControl
- .getUnlimitedInstance());
-
- int i = 0;
- Integer[] groupAlertDefinitionIds = new Integer[groupAlertDefinitions.size()];
- for (AlertDefinition groupAlertDefinition : groupAlertDefinitions) {
- groupAlertDefinitionIds[i++] = groupAlertDefinition.getId();
- }
+ Integer[] groupAlertDefinitionIdsForResourceGroup =
findGroupAlertDefinitionIds(resourceGroupId);
+ removeGroupAlertDefinitions(subject, groupAlertDefinitionIdsForResourceGroup);
+ }
- removeGroupAlertDefinitions(subject, groupAlertDefinitionIds);
+ @SuppressWarnings("unchecked")
+ private Integer[] findGroupAlertDefinitionIds(int resourceGroupId) {
+ AlertDefinitionCriteria criteria = new AlertDefinitionCriteria();
+ criteria.addFilterResourceGroupIds(resourceGroupId);
+ criteria.setPageControl(PageControl.getUnlimitedInstance());
+
+ CriteriaQueryGenerator generator = new CriteriaQueryGenerator(criteria);
+ generator.alterProjection("alertdefinition.id");
+ Query query = generator.getQuery(entityManager);
+ List<Integer> groupAlertDefinitionIds = query.getResultList();
+
+ Integer[] results = groupAlertDefinitionIds.toArray(new
Integer[groupAlertDefinitionIds.size()]);
+ return results;
}
public void removeGroupAlertDefinitions(Subject subject, int resourceGroupId, int[]
resourceIdsToRemove) {
@@ -347,13 +356,12 @@ public class GroupAlertDefinitionManagerBean implements
GroupAlertDefinitionMana
return;
}
- List<AlertDefinition> groupAlertDefinitions =
findGroupAlertDefinitions(subject, resourceGroupId, PageControl
- .getUnlimitedInstance());
+ Integer[] groupAlertDefinitionIdsForResourceGroup =
findGroupAlertDefinitionIds(resourceGroupId);
List<Integer> allChildrenDefinitionIds = new ArrayList<Integer>();
Subject overlord = subjectManager.getOverlord();
- for (AlertDefinition groupAlertDefinition : groupAlertDefinitions) {
- List<Integer> childDefinitions = getChildrenAlertDefinitionIds(subject,
groupAlertDefinition.getId());
+ for (Integer nextGroupAlertDefinitionId :
groupAlertDefinitionIdsForResourceGroup) {
+ List<Integer> childDefinitions = getChildrenAlertDefinitionIds(subject,
nextGroupAlertDefinitionId);
allChildrenDefinitionIds.addAll(childDefinitions);
alertDefinitionManager.removeAlertDefinitions(overlord, childDefinitions
.toArray(new Integer[childDefinitions.size()]));
commit 72f529c71dc2d472a225d84933108a9c836d2da8
Author: Joseph Marques <joseph(a)redhat.com>
Date: Tue Jun 29 12:34:24 2010 -0400
remove unused dependency
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
index 991eb57..a48cd85 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
@@ -32,8 +32,6 @@ import javax.persistence.Query;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jboss.annotation.IgnoreDependency;
-
import org.rhq.core.domain.alert.AlertCondition;
import org.rhq.core.domain.alert.AlertConditionCategory;
import org.rhq.core.domain.alert.AlertConditionLog;
@@ -76,9 +74,6 @@ public class AlertDefinitionManagerBean implements
AlertDefinitionManagerLocal,
private AuthorizationManagerLocal authorizationManager;
@EJB
private AlertDefinitionManagerLocal alertDefinitionManager;
- @EJB
- @IgnoreDependency
- private AlertNotificationManagerLocal alertNotificationManager;
@EJB
private StatusManagerLocal agentStatusManager;