[rhq] modules/core modules/plugins

snegrea snegrea at fedoraproject.org
Fri Aug 10 20:32:20 UTC 2012


 modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/InventoryContext.java                   |   65 ++++++++++
 modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/ResourceContext.java                    |   14 ++
 modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/upgrade/ResourceUpgradeContext.java               |    6 
 modules/core/plugin-api/src/test/java/org/rhq/core/pluginapi/inventory/ResourceContextTest.java                |   12 -
 modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryContextImpl.java                |   57 ++++++++
 modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java                    |   49 ++++++-
 modules/core/plugin-container/src/test/java/org/rhq/core/pc/bundle/BundleManagerTest.java                      |    2 
 modules/plugins/ant-bundle/src/test/java/org/rhq/plugins/ant/AntBundlePluginComponentTest.java                 |    3 
 modules/plugins/database/src/test/java/org/rhq/plugins/database/ComponentTest.java                             |    7 -
 modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseServerComponent.java             |    1 
 modules/plugins/jboss-as-7/src/test/java/org/rhq/modules/plugins/jbossas7/itest/nonpc/UploadAndDeployTest.java |    6 
 modules/plugins/mysql/src/test/java/org/rhq/plugins/mysql/ComponentTest.java                                   |    5 
 modules/plugins/oracle/src/test/java/org/rhq/plugins/oracle/ComponentTest.java                                 |   12 +
 modules/plugins/snmptrapd/src/test/java/org/rhq/plugins/snmptrapd/ComponentTest.java                           |    5 
 14 files changed, 218 insertions(+), 26 deletions(-)

New commits:
commit ef1a7865118a3a76f7ee0ea1e119ba03f28c34ca
Author: Stefan Negrea <snegrea at redhat.com>
Date:   Fri Aug 10 15:31:52 2012 -0500

    [BZ 828329] Adding inventory context to a resource context.
    
    Squashed commit of the following:
    
    commit 14b7dd184880140d74d4658ffa0e62a575f27c4f
    Author: Stefan Negrea <snegrea at redhat.com>
    Date:   Tue Aug 7 16:03:33 2012 -0500
    
        [BZ 828329] Minor documentation updates and rewording.
    
    commit 7f5aa39c22688ee935b23d2dad767ff03c41dc96
    Author: Stefan Negrea <snegrea at redhat.com>
    Date:   Tue Aug 7 14:45:31 2012 -0500
    
        [BZ 828329] Removed plugin container specific classes. The regular will just block until the discovery processes completes, no data is returned to caller.
    
    commit 2b17808e9bff072776c7ecada992d33c34203155
    Author: Stefan Negrea <snegrea at redhat.com>
    Date:   Mon Aug 6 21:07:00 2012 -0500
    
        [BZ 828329] The inventory context has now a deferred and a blocking method for requesting discovery. Also included are various other updates based on community feedback.
    
    commit 816622e43c88c3b2bf751c1e2d9682d64556fdbb
    Author: Stefan Negrea <snegrea at redhat.com>
    Date:   Mon Aug 6 10:38:34 2012 -0500
    
        [BZ 828329] Added the possibility to start discovery scans from a resource context. The code executes a deffered service scan for children of the resource managed by the resource context.

diff --git a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/InventoryContext.java b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/InventoryContext.java
new file mode 100644
index 0000000..ec1fab4
--- /dev/null
+++ b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/InventoryContext.java
@@ -0,0 +1,65 @@
+/*
+ * RHQ Management Platform
+ * Copyright 2012, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package org.rhq.core.pluginapi.inventory;
+
+
+/**
+ * @author Stefan Negrea
+ *
+ */
+public interface InventoryContext {
+
+    /**
+     * This method requests a deferred service discovery process for children of the resource. It requests the discovery
+     * process and returns immediately without waiting for results. The discovery process imports into inventory all discovered
+     * resources, so no further action is required from the caller.
+     *
+     * This method should be used by resources following an action (outside of create/delete children) that results
+     * in having additional children discoverable. A good example is an operation execution that enables extra functionality
+     * on the managed resource which in turn translates into having additional children available for management.
+     *
+     * Note: All services are discovered by the regular discovery process that runs every 24 hours. This method allows
+     * a resource to request an immediate run of the discovery process for child resources, rather than wait for the scheduled
+     * service discovery.
+     */
+    public void requestDeferredChildResourcesDiscovery();
+
+
+    /**
+     * This method requests a service discovery process for children of the resource. It schedules the discovery
+     * process and blocks until the discovery finishes. The discovery process imports into inventory all discovered
+     * resources, so no further action is required from the caller.
+     *
+     * This method should be used by resources following an action (outside of create/delete children) that results
+     * in having additional children discoverable. A good example is an operation execution that enables extra functionality
+     * on the managed resource which in turn translates into having additional children available for management. This method blocks
+     * until the discovery processes finishes, this includes committing resources to inventory. For additional processing,
+     * the calling resource can then request the list of child resources (it will include newly discovered resources too).
+     *
+     * Note: All services are discovered by the regular discovery process that runs every 24 hours. This method allows
+     * a resource to request an immediate run of the discovery process for child resources, rather than wait for the scheduled
+     * service discovery.
+     *
+     * @return discovered child resources
+     */
+    public void requestChildResourcesDiscovery();
+
+}
diff --git a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/ResourceContext.java b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/ResourceContext.java
index 4b21719..76ccf39 100644
--- a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/ResourceContext.java
+++ b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/inventory/ResourceContext.java
@@ -83,6 +83,7 @@ public class ResourceContext<T extends ResourceComponent<?>> {
     private final OperationContext operationContext;
     private final ContentContext contentContext;
     private final AvailabilityContext availabilityContext;
+    private final InventoryContext inventoryContext;
     private final PluginContainerDeployment pluginContainerDeployment;
     private final ResourceTypeProcesses trackedProcesses;
 
@@ -152,7 +153,7 @@ public class ResourceContext<T extends ResourceComponent<?>> {
     public ResourceContext(Resource resource, T parentResourceComponent, ResourceContext<?> parentResourceContext,
         ResourceDiscoveryComponent<T> resourceDiscoveryComponent, SystemInfo systemInfo, File temporaryDirectory,
         File dataDirectory, String pluginContainerName, EventContext eventContext, OperationContext operationContext,
-        ContentContext contentContext, AvailabilityContext availabilityContext,
+        ContentContext contentContext, AvailabilityContext availabilityContext, InventoryContext inventoryContext,
         PluginContainerDeployment pluginContainerDeployment) {
 
         this.resourceKey = resource.getResourceKey();
@@ -177,6 +178,7 @@ public class ResourceContext<T extends ResourceComponent<?>> {
         this.operationContext = operationContext;
         this.contentContext = contentContext;
         this.availabilityContext = availabilityContext;
+        this.inventoryContext = inventoryContext;
 
         String parentResourceUuid = "";
         if (resource.getParentResource() != null) {
@@ -505,6 +507,16 @@ public class ResourceContext<T extends ResourceComponent<?>> {
     }
 
     /**
+      * Returns an {@link InventoryContext} that allows the plugin to access inventory related functionality provided by the
+      * plugin container.
+      *
+      * @return the inventory context
+      */
+    public InventoryContext getInventoryContext() {
+        return inventoryContext;
+    }
+
+    /**
      * @deprecated Use {@link AvailabilityContext#createAvailabilityCollectorRunnable(AvailabilityFacet, long)}
      */
     public AvailabilityCollectorRunnable createAvailabilityCollectorRunnable(AvailabilityFacet availChecker,
diff --git a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/upgrade/ResourceUpgradeContext.java b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/upgrade/ResourceUpgradeContext.java
index 3c5b6a2..471978c 100644
--- a/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/upgrade/ResourceUpgradeContext.java
+++ b/modules/core/plugin-api/src/main/java/org/rhq/core/pluginapi/upgrade/ResourceUpgradeContext.java
@@ -23,13 +23,13 @@
 package org.rhq.core.pluginapi.upgrade;
 
 import java.io.File;
-import java.util.concurrent.Executor;
 
 import org.rhq.core.domain.configuration.Configuration;
 import org.rhq.core.domain.resource.Resource;
 import org.rhq.core.pluginapi.availability.AvailabilityContext;
 import org.rhq.core.pluginapi.content.ContentContext;
 import org.rhq.core.pluginapi.event.EventContext;
+import org.rhq.core.pluginapi.inventory.InventoryContext;
 import org.rhq.core.pluginapi.inventory.PluginContainerDeployment;
 import org.rhq.core.pluginapi.inventory.ResourceComponent;
 import org.rhq.core.pluginapi.inventory.ResourceContext;
@@ -60,11 +60,11 @@ public class ResourceUpgradeContext<T extends ResourceComponent<?>> extends Reso
         T parentResourceComponent, ResourceDiscoveryComponent<T> resourceDiscoveryComponent, SystemInfo systemInfo,
         File temporaryDirectory, File dataDirectory, String pluginContainerName, EventContext eventContext,
         OperationContext operationContext, ContentContext contentContext, AvailabilityContext availabilityContext,
-        PluginContainerDeployment pluginContainerDeployment) {
+        InventoryContext inventoryContext, PluginContainerDeployment pluginContainerDeployment) {
 
         super(resource, parentResourceComponent, parentResourceContext, resourceDiscoveryComponent, systemInfo,
             temporaryDirectory, dataDirectory, pluginContainerName, eventContext, operationContext, contentContext,
-            availabilityContext, pluginContainerDeployment);
+            availabilityContext, inventoryContext, pluginContainerDeployment);
 
         this.resourceConfiguration = resource.getResourceConfiguration();
         this.name = resource.getName();
diff --git a/modules/core/plugin-api/src/test/java/org/rhq/core/pluginapi/inventory/ResourceContextTest.java b/modules/core/plugin-api/src/test/java/org/rhq/core/pluginapi/inventory/ResourceContextTest.java
index fe194c9..118d514 100644
--- a/modules/core/plugin-api/src/test/java/org/rhq/core/pluginapi/inventory/ResourceContextTest.java
+++ b/modules/core/plugin-api/src/test/java/org/rhq/core/pluginapi/inventory/ResourceContextTest.java
@@ -86,7 +86,7 @@ public class ResourceContextTest {
 
         //create object to test and inject required dependencies
         ResourceContext<?> objectUnderTest = new ResourceContext(mockResource, null, parentResourceContext, null, null,
-            mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null);
+            mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null, null);
 
         //run code under test
         File result = objectUnderTest.getResourceDataDirectory();
@@ -152,7 +152,7 @@ public class ResourceContextTest {
 
         //create object to test and inject required dependencies
         ResourceContext<?> objectUnderTest = new ResourceContext(mockResource, null, parent1ResourceContext, null,
-            null, mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null);
+            null, mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null, null);
 
         //run code under test
         File result = objectUnderTest.getResourceDataDirectory();
@@ -206,7 +206,7 @@ public class ResourceContextTest {
 
         //create object to test and inject required dependencies
         ResourceContext<?> objectUnderTest = new ResourceContext(mockResource, null, parentResourceContext, null, null,
-            mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null);
+            mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null, null);
 
         //run code under test
         File result = objectUnderTest.getResourceDataDirectory();
@@ -260,7 +260,7 @@ public class ResourceContextTest {
 
         //create object to test and inject required dependencies
         ResourceContext<?> objectUnderTest = new ResourceContext(mockResource, null, parentResourceContext, null, null,
-            mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null);
+            mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null, null);
 
         //run code under test
         File result = objectUnderTest.getResourceDataDirectory();
@@ -314,7 +314,7 @@ public class ResourceContextTest {
 
         //create object to test and inject required dependencies
         ResourceContext<?> objectUnderTest = new ResourceContext(mockResource, null, parentResourceContext, null, null,
-            mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null);
+            mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null, null);
 
         //run code under test
         File result = objectUnderTest.getResourceDataDirectory();
@@ -377,7 +377,7 @@ public class ResourceContextTest {
 
         //create object to test and inject required dependencies
         ResourceContext<?> objectUnderTest = new ResourceContext(mockResource, null, parent1ResourceContext, null,
-            null, mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null);
+            null, mockTemporaryDirectory, mockDataDirectory, null, null, null, null, null, null, null);
 
         //run code under test
         File result = objectUnderTest.getFutureChildResourceDataDirectory(inputChildResourceKey);
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryContextImpl.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryContextImpl.java
new file mode 100644
index 0000000..460a827
--- /dev/null
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryContextImpl.java
@@ -0,0 +1,57 @@
+/*
+ * RHQ Management Platform
+ * Copyright 2012, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package org.rhq.core.pc.inventory;
+
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.pc.PluginContainer;
+import org.rhq.core.pluginapi.inventory.InventoryContext;
+
+/**
+ * @author Stefan Negrea
+ *
+ */
+public class InventoryContextImpl implements InventoryContext {
+
+    private final Resource resource;
+
+    /**
+     * @param resource resource
+     */
+    public InventoryContextImpl(Resource resource) {
+        this.resource = resource;
+    }
+
+    /* (non-Javadoc)
+     * @see org.rhq.core.pluginapi.inventory.InventoryContext#discoverChildResources()
+     */
+    @Override
+    public void requestDeferredChildResourcesDiscovery() {
+        PluginContainer.getInstance().getInventoryManager().executeServiceScanDeferred(resource);
+    }
+
+    /* (non-Javadoc)
+     * @see org.rhq.core.pluginapi.inventory.InventoryContext#requestChildResourcesDiscovery()
+     */
+    @Override
+    public void requestChildResourcesDiscovery() {
+        PluginContainer.getInstance().getInventoryManager().executeServiceScanImmediately(resource);
+    }
+}
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
index 8cd3859..b3f7fa9 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
@@ -108,6 +108,7 @@ import org.rhq.core.pluginapi.event.EventContext;
 import org.rhq.core.pluginapi.inventory.ClassLoaderFacet;
 import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
 import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
+import org.rhq.core.pluginapi.inventory.InventoryContext;
 import org.rhq.core.pluginapi.inventory.ManualAddFacet;
 import org.rhq.core.pluginapi.inventory.ProcessScanResult;
 import org.rhq.core.pluginapi.inventory.ResourceComponent;
@@ -575,10 +576,29 @@ public class InventoryManager extends AgentService implements ContainerService,
         }
     }
 
+    @NotNull
+    public InventoryReport executeServiceScanImmediately(Resource resource) {
+        try {
+            RuntimeDiscoveryExecutor discoveryExecutor = new RuntimeDiscoveryExecutor(this, this.configuration,
+                resource);
+            return inventoryThreadPoolExecutor.submit((Callable<InventoryReport>) discoveryExecutor).get();
+        } catch (InterruptedException e) {
+            throw new RuntimeException("Service scan execution was interrupted", e);
+        } catch (ExecutionException e) {
+            // Should never happen, reports are always generated, even if they're just to report the error
+            throw new RuntimeException("Unexpected exception", e);
+        }
+    }
+
     public void executeServiceScanDeferred() {
         inventoryThreadPoolExecutor.submit((Callable<InventoryReport>) this.serviceScanExecutor);
     }
 
+    public void executeServiceScanDeferred(Resource resource) {
+        RuntimeDiscoveryExecutor discoveryExecutor = new RuntimeDiscoveryExecutor(this, this.configuration, resource);
+        inventoryThreadPoolExecutor.submit((Callable<InventoryReport>) discoveryExecutor);
+    }
+
     /** this will NOT send a availability report up to the server! */
     public AvailabilityReport executeAvailabilityScanImmediately(boolean changedOnlyReport) {
         return executeAvailabilityScanImmediately(changedOnlyReport, false);
@@ -1296,7 +1316,7 @@ public class InventoryManager extends AgentService implements ContainerService,
     /**
      * Get the parent resource's children, ensuring we use the resource container version of the resource, because
      * the container's resource is guaranteed to be up to date.
-     *  
+     *
      * @param parentResource
      * @return the children. parentResouce children if there is no container. May be empty. Not null.
      */
@@ -1304,13 +1324,13 @@ public class InventoryManager extends AgentService implements ContainerService,
         return getContainerChildren(parentResource, getResourceContainer(parentResource));
     }
 
-    /** 
+    /**
      * Get the parent resource's children, ensuring we use the resource container version of the resource, because
      * the container's resource is guaranteed to be up to date.
-     *  
+     *
      * @param parentResource
      * @param parentContainer
-     * @return the children, empty if parentContainer is null or there are no children. not null. 
+     * @return the children, empty if parentContainer is null or there are no children. not null.
      * @return the children, may be empty, not null.
      */
     public Set<Resource> getContainerChildren(Resource parentResource, ResourceContainer container) {
@@ -1784,6 +1804,7 @@ public class InventoryManager extends AgentService implements ContainerService,
             getOperationContext(resource), // for operation manager access
             getContentContext(resource), // for content manager access
             getAvailabilityContext(resource, this.availabilityCollectors), // for components that want to perform async avail checking
+            getInventoryContext(resource),
             this.configuration.getPluginContainerDeployment()); // helps components make determinations of what to do
     }
 
@@ -1803,6 +1824,7 @@ public class InventoryManager extends AgentService implements ContainerService,
             getOperationContext(resource), // for operation manager access
             getContentContext(resource), // for content manager access
             getAvailabilityContext(resource, this.availabilityCollectors), // for components that want avail manager access
+            getInventoryContext(resource),
             this.configuration.getPluginContainerDeployment()); // helps components make determinations of what to do
     }
 
@@ -1853,7 +1875,7 @@ public class InventoryManager extends AgentService implements ContainerService,
                     return this.platform;
                 }
             } else {
-                // don't use container children here, the caller is providing the desired resources 
+                // don't use container children here, the caller is providing the desired resources
                 for (Resource child : parent.getChildResources()) {
                     if (child != null && matches(resource, child)) {
                         return child;
@@ -2376,7 +2398,7 @@ public class InventoryManager extends AgentService implements ContainerService,
     /**
      * The resource upgrade should only occur during the {@link #initialize()} method and should be
      * switched off at all other times.
-     * 
+     *
      * @return true if resource upgrade is currently active, false otherwise
      */
     public boolean isResourceUpgradeActive() {
@@ -2644,6 +2666,21 @@ public class InventoryManager extends AgentService implements ContainerService,
         return availabilityContext;
     }
 
+    /**
+     * Create inventory context for a resource.
+     *
+     * @param resource the resource
+     * @return the inventory context
+     */
+    private InventoryContext getInventoryContext(Resource resource) {
+        if (null == resource.getUuid() || resource.getUuid().isEmpty()) {
+            log.error("RESOURCE UUID IS NOT SET! Inventory features may not work!");
+        }
+
+        InventoryContext inventoryContext = new InventoryContextImpl(resource);
+        return inventoryContext;
+    }
+
     private void updateResourceVersion(Resource resource, String version) {
         String existingVersion = resource.getVersion();
         boolean versionChanged = (existingVersion != null) ? !existingVersion.equals(version) : version != null;
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/bundle/BundleManagerTest.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/bundle/BundleManagerTest.java
index b6b39e0..4b37c89 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/bundle/BundleManagerTest.java
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/bundle/BundleManagerTest.java
@@ -478,7 +478,7 @@ public class BundleManagerTest {
     @SuppressWarnings("unchecked")
     private static class MockResourceContext extends ResourceContext {
         public MockResourceContext(Resource resource) {
-            super(resource, null, null, null, null, null, null, null, null, null, null, null, null);
+            super(resource, null, null, null, null, null, null, null, null, null, null, null, null, null);
         }
     }
 }
\ No newline at end of file
diff --git a/modules/plugins/ant-bundle/src/test/java/org/rhq/plugins/ant/AntBundlePluginComponentTest.java b/modules/plugins/ant-bundle/src/test/java/org/rhq/plugins/ant/AntBundlePluginComponentTest.java
index 05ebc2f..daf5463 100644
--- a/modules/plugins/ant-bundle/src/test/java/org/rhq/plugins/ant/AntBundlePluginComponentTest.java
+++ b/modules/plugins/ant-bundle/src/test/java/org/rhq/plugins/ant/AntBundlePluginComponentTest.java
@@ -101,7 +101,8 @@ public class AntBundlePluginComponentTest {
         resource.setUuid(UUID.randomUUID().toString());
         @SuppressWarnings({ "rawtypes", "unchecked" })
         ResourceContext<?> context = new ResourceContext(resource, null, null, null,
-            SystemInfoFactory.createJavaSystemInfo(), tmpDir, null, "antBundleTestPC", null, null, null, null, null);
+            SystemInfoFactory.createJavaSystemInfo(), tmpDir, null, "antBundleTestPC", null, null, null, null, null,
+            null);
         this.plugin.start(context);
     }
 
diff --git a/modules/plugins/database/src/test/java/org/rhq/plugins/database/ComponentTest.java b/modules/plugins/database/src/test/java/org/rhq/plugins/database/ComponentTest.java
index b9622c6..050aa2e 100644
--- a/modules/plugins/database/src/test/java/org/rhq/plugins/database/ComponentTest.java
+++ b/modules/plugins/database/src/test/java/org/rhq/plugins/database/ComponentTest.java
@@ -52,6 +52,7 @@ import org.rhq.core.pc.availability.AvailabilityContextImpl;
 import org.rhq.core.pc.content.ContentContextImpl;
 import org.rhq.core.pc.event.EventContextImpl;
 import org.rhq.core.pc.event.EventManager;
+import org.rhq.core.pc.inventory.InventoryContextImpl;
 import org.rhq.core.pc.inventory.ResourceContainer;
 import org.rhq.core.pc.operation.OperationContextImpl;
 import org.rhq.core.pluginapi.availability.AvailabilityContext;
@@ -59,6 +60,7 @@ import org.rhq.core.pluginapi.configuration.ConfigurationFacet;
 import org.rhq.core.pluginapi.content.ContentContext;
 import org.rhq.core.pluginapi.event.EventContext;
 import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
+import org.rhq.core.pluginapi.inventory.InventoryContext;
 import org.rhq.core.pluginapi.inventory.PluginContainerDeployment;
 import org.rhq.core.pluginapi.inventory.ProcessScanResult;
 import org.rhq.core.pluginapi.inventory.ResourceComponent;
@@ -141,6 +143,7 @@ public abstract class ComponentTest {
     private List<ProcessInfo> processInfo = Collections.emptyList();
     private PluginDescriptor pluginDescriptor;
     private AvailabilityContext availabilityContext;
+    private InventoryContext inventoryContext;
 
 
     /**
@@ -277,11 +280,13 @@ public abstract class ComponentTest {
         ResourceComponent component = (ResourceComponent) Class.forName(rclassname).newInstance();
 
         availabilityContext = new AvailabilityContextImpl(cresource,availCollectorThreadPool);
+        inventoryContext = new InventoryContextImpl(cresource);
+
         EventContext eventContext = new EventContextImpl(resource);
         ResourceContext context = new ResourceContext(cresource, parentComponent,
                 null, rdc, systemInfo, temporaryDirectory, dataDirectory,
                 pluginContainerName, eventContext, operationContext, contentContext,
-                availabilityContext, pluginContainerDeployment);
+                availabilityContext, inventoryContext, pluginContainerDeployment);
 
         component.start(context);
         components.put(component, cresource);
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseServerComponent.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseServerComponent.java
index 8b85deb..9bc01f2 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseServerComponent.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseServerComponent.java
@@ -540,6 +540,7 @@ public abstract class BaseServerComponent<T extends ResourceComponent<?>> extend
                 + " server with key [" + context.getResourceKey() + "].");
 
         context.getAvailabilityContext().requestAvailabilityCheck();
+        context.getInventoryContext().requestDeferredChildResourcesDiscovery();
 
         return result;
     }
diff --git a/modules/plugins/jboss-as-7/src/test/java/org/rhq/modules/plugins/jbossas7/itest/nonpc/UploadAndDeployTest.java b/modules/plugins/jboss-as-7/src/test/java/org/rhq/modules/plugins/jbossas7/itest/nonpc/UploadAndDeployTest.java
index 8ddb308..28a8688 100644
--- a/modules/plugins/jboss-as-7/src/test/java/org/rhq/modules/plugins/jbossas7/itest/nonpc/UploadAndDeployTest.java
+++ b/modules/plugins/jboss-as-7/src/test/java/org/rhq/modules/plugins/jbossas7/itest/nonpc/UploadAndDeployTest.java
@@ -345,7 +345,8 @@ public class UploadAndDeployTest extends AbstractIntegrationTest {
         resource.setUuid(UUID.randomUUID().toString());
         StandaloneASComponent parentComponent = new StandaloneASComponent();
         parentComponent.setConnection(getASConnection());
-        ResourceContext context = new ResourceContext(resource,parentComponent,null,null,null,null,null,null,null,null,null,null,null);
+        ResourceContext context = new ResourceContext(resource, parentComponent, null, null, null, null, null, null,
+            null, null, null, null, null, null);
         bc.start(context);
 
         String bytes_value = uploadToAs(TEST_WAR_PATH);
@@ -379,7 +380,8 @@ public class UploadAndDeployTest extends AbstractIntegrationTest {
         resource.setUuid(UUID.randomUUID().toString());
         StandaloneASComponent parentComponent = new StandaloneASComponent();
         parentComponent.setConnection(getASConnection());
-        ResourceContext context = new ResourceContext(resource,parentComponent,null,null,null,null,null,null,null,null,null,null,null);
+        ResourceContext context = new ResourceContext(resource, parentComponent, null, null, null, null, null, null,
+            null, null, null, null, null, null);
         bc.start(context);
 
         String bytes_value = uploadToAs(TEST_WAR_PATH);
diff --git a/modules/plugins/mysql/src/test/java/org/rhq/plugins/mysql/ComponentTest.java b/modules/plugins/mysql/src/test/java/org/rhq/plugins/mysql/ComponentTest.java
index 511d686..610cb61 100644
--- a/modules/plugins/mysql/src/test/java/org/rhq/plugins/mysql/ComponentTest.java
+++ b/modules/plugins/mysql/src/test/java/org/rhq/plugins/mysql/ComponentTest.java
@@ -71,6 +71,7 @@ import org.rhq.core.pc.availability.AvailabilityContextImpl;
 import org.rhq.core.pc.content.ContentContextImpl;
 import org.rhq.core.pc.event.EventContextImpl;
 import org.rhq.core.pc.event.EventManager;
+import org.rhq.core.pc.inventory.InventoryContextImpl;
 import org.rhq.core.pc.inventory.ResourceContainer;
 import org.rhq.core.pc.operation.OperationContextImpl;
 import org.rhq.core.pluginapi.availability.AvailabilityContext;
@@ -78,6 +79,7 @@ import org.rhq.core.pluginapi.configuration.ConfigurationFacet;
 import org.rhq.core.pluginapi.content.ContentContext;
 import org.rhq.core.pluginapi.event.EventContext;
 import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
+import org.rhq.core.pluginapi.inventory.InventoryContext;
 import org.rhq.core.pluginapi.inventory.PluginContainerDeployment;
 import org.rhq.core.pluginapi.inventory.ProcessScanResult;
 import org.rhq.core.pluginapi.inventory.ResourceComponent;
@@ -294,12 +296,13 @@ public abstract class ComponentTest {
         ResourceComponent component = (ResourceComponent) Class.forName(rclassname).newInstance();
 
         AvailabilityContext availContext = new AvailabilityContextImpl(cresource,availCollectorThreadPool);
+        InventoryContext inventoryContext = new InventoryContextImpl(cresource);
 
         EventContext eventContext = new EventContextImpl(resource);
         ResourceContext context = new ResourceContext(cresource, parentComponent,
                 null, rdc, systemInfo, temporaryDirectory, dataDirectory,
                 pluginContainerName, eventContext, operationContext, contentContext,
-                availContext, pluginContainerDeployment);
+                availContext, inventoryContext,pluginContainerDeployment);
 
         component.start(context);
         components.put(component, cresource);
diff --git a/modules/plugins/oracle/src/test/java/org/rhq/plugins/oracle/ComponentTest.java b/modules/plugins/oracle/src/test/java/org/rhq/plugins/oracle/ComponentTest.java
index dfee1b6..569bd09 100644
--- a/modules/plugins/oracle/src/test/java/org/rhq/plugins/oracle/ComponentTest.java
+++ b/modules/plugins/oracle/src/test/java/org/rhq/plugins/oracle/ComponentTest.java
@@ -36,12 +36,14 @@ import org.rhq.core.pc.availability.AvailabilityContextImpl;
 import org.rhq.core.pc.content.ContentContextImpl;
 import org.rhq.core.pc.event.EventContextImpl;
 import org.rhq.core.pc.event.EventManager;
+import org.rhq.core.pc.inventory.InventoryContextImpl;
 import org.rhq.core.pc.operation.OperationContextImpl;
 import org.rhq.core.pc.upgrade.plugins.multi.base.NothingDiscoveringDiscoveryComponent;
 import org.rhq.core.pluginapi.availability.AvailabilityContext;
 import org.rhq.core.pluginapi.content.ContentContext;
 import org.rhq.core.pluginapi.event.EventContext;
 import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
+import org.rhq.core.pluginapi.inventory.InventoryContext;
 import org.rhq.core.pluginapi.inventory.PluginContainerDeployment;
 import org.rhq.core.pluginapi.inventory.ResourceComponent;
 import org.rhq.core.pluginapi.inventory.ResourceContext;
@@ -133,9 +135,11 @@ public abstract class ComponentTest {
             ResourceDiscoveryComponent resourceDiscoveryComponent = new NothingDiscoveringDiscoveryComponent();
             EventContext eventContext = new EventContextImpl(resource);
             AvailabilityContext availContext = new AvailabilityContextImpl(resource, Executors.newCachedThreadPool());
+            InventoryContext inventoryContext = new InventoryContextImpl(resource);
             ResourceContext context = new ResourceContext(resource, parentResourceComponent, parentResourceContext,
                 resourceDiscoveryComponent, systemInfo, temporaryDirectory, dataDirectory, pluginContainerName,
-                eventContext, operationContext, contentContext, availContext, pluginContainerDeployment);
+                eventContext, operationContext, contentContext, availContext, inventoryContext,
+                pluginContainerDeployment);
             component.start(context);
 
             resourceDiscoveryContext = new ResourceDiscoveryContext(resourceType, parentResourceComponent, context,
@@ -169,9 +173,10 @@ public abstract class ComponentTest {
 
         EventContext eventContext = new EventContextImpl(resource);
         AvailabilityContext availContext = new AvailabilityContextImpl(resource, Executors.newCachedThreadPool());
+        InventoryContext inventoryContext = new InventoryContextImpl(resource);
         ResourceContext context = new ResourceContext(resource, component, parentContext, resourceDiscoveryComponent,
             systemInfo, temporaryDirectory, dataDirectory, pluginContainerName, eventContext, operationContext,
-            contentContext, availContext, pluginContainerDeployment);
+            contentContext, availContext, inventoryContext, pluginContainerDeployment);
         ResourceDiscoveryContext resourceDiscoveryContext = new ResourceDiscoveryContext(resourceType, component,
             context, systemInfo, Collections.emptyList(), Collections.emptyList(), pluginContainerName,
             pluginContainerDeployment);
@@ -200,9 +205,10 @@ public abstract class ComponentTest {
 
         EventContext eventContext = new EventContextImpl(resource);
         AvailabilityContext availContext = new AvailabilityContextImpl(resource, Executors.newCachedThreadPool());
+        InventoryContext inventoryContext = new InventoryContextImpl(resource);
         ResourceContext context = new ResourceContext(cresource, parentComponent, parentContext,
             resourceDiscoveryComponent, systemInfo, temporaryDirectory, dataDirectory, pluginContainerName,
-            eventContext, operationContext, contentContext, availContext, pluginContainerDeployment);
+            eventContext, operationContext, contentContext, availContext, inventoryContext, pluginContainerDeployment);
 
         component.start(context);
         components.put(component, cresource);
diff --git a/modules/plugins/snmptrapd/src/test/java/org/rhq/plugins/snmptrapd/ComponentTest.java b/modules/plugins/snmptrapd/src/test/java/org/rhq/plugins/snmptrapd/ComponentTest.java
index b023609..cd90737 100644
--- a/modules/plugins/snmptrapd/src/test/java/org/rhq/plugins/snmptrapd/ComponentTest.java
+++ b/modules/plugins/snmptrapd/src/test/java/org/rhq/plugins/snmptrapd/ComponentTest.java
@@ -24,11 +24,13 @@ import org.rhq.core.pc.availability.AvailabilityContextImpl;
 import org.rhq.core.pc.content.ContentContextImpl;
 import org.rhq.core.pc.event.EventContextImpl;
 import org.rhq.core.pc.event.EventManager;
+import org.rhq.core.pc.inventory.InventoryContextImpl;
 import org.rhq.core.pc.operation.OperationContextImpl;
 import org.rhq.core.pc.upgrade.plugins.multi.base.NothingDiscoveringDiscoveryComponent;
 import org.rhq.core.pluginapi.availability.AvailabilityContext;
 import org.rhq.core.pluginapi.content.ContentContext;
 import org.rhq.core.pluginapi.event.EventContext;
+import org.rhq.core.pluginapi.inventory.InventoryContext;
 import org.rhq.core.pluginapi.inventory.PluginContainerDeployment;
 import org.rhq.core.pluginapi.inventory.ResourceComponent;
 import org.rhq.core.pluginapi.inventory.ResourceContext;
@@ -97,9 +99,10 @@ public abstract class ComponentTest {
         ContentContext contentContext = new ContentContextImpl(0);
         PluginContainerDeployment pluginContainerDeployment = null;
         AvailabilityContext availContext = new AvailabilityContextImpl(resource, Executors.newCachedThreadPool());
+        InventoryContext inventoryContext = new InventoryContextImpl(resource);
         ResourceContext context = new ResourceContext(resource, parentResourceComponent, parentResourceContext,
             resourceDiscoveryComponent, systemInfo, temporaryDirectory, dataDirectory, pluginContainerName,
-            eventContext, operationContext, contentContext, availContext, pluginContainerDeployment);
+            eventContext, operationContext, contentContext, availContext, inventoryContext, pluginContainerDeployment);
         Assert.assertNotNull(context.getEventContext());
         component.start(context);
     }




More information about the rhq-commits mailing list