modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DatasourceComponent.java
| 74 ++++++++--
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/JVMDiscoveryComponent.java
| 53 +++++++
modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
| 21 ++
3 files changed, 129 insertions(+), 19 deletions(-)
New commits:
commit ee0af237ea589d4bacf2f6c3cd35867fce2d24cc
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Wed Feb 1 16:39:02 2012 +0100
We need to disable the datasource before making changes an re-enable it later.
Sub-resource properties are read-only for now
diff --git
a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DatasourceComponent.java
b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DatasourceComponent.java
index ee8c108..0543b81 100644
---
a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DatasourceComponent.java
+++
b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DatasourceComponent.java
@@ -10,6 +10,8 @@ import org.rhq.core.domain.configuration.Property;
import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.pluginapi.configuration.ConfigurationFacet;
+import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport;
import org.rhq.core.pluginapi.operation.OperationFacet;
import org.rhq.core.pluginapi.operation.OperationResult;
import org.rhq.modules.plugins.jbossas7.json.Address;
@@ -21,7 +23,7 @@ import org.rhq.modules.plugins.jbossas7.json.Result;
* Handle JDBC-driver related stuff
* @author Heiko W. Rupp
*/
-public class DatasourceComponent extends BaseComponent implements OperationFacet {
+public class DatasourceComponent extends BaseComponent implements OperationFacet,
ConfigurationFacet {
private static final String NOTSET = "-notset-";
private final Log log = LogFactory.getLog(DatasourceComponent.class);
@@ -143,4 +145,22 @@ public class DatasourceComponent extends BaseComponent implements
OperationFacet
void addOptionalToOp(Operation op, Configuration parameters, String property) {
addAdditionalToOp(op,parameters,property,true);
}
+
+ @Override
+ public void updateResourceConfiguration(ConfigurationUpdateReport report) {
+
+ Operation op = new Operation("disable",getAddress());
+ Result res = getASConnection().execute(op);
+ if (!res.isSuccess()) {
+ report.setErrorMessage("Was not able to disable the datasource for
config changes");
+ return;
+ }
+
+
+ super.updateResourceConfiguration(report); // TODO: Customise this generated
block
+
+ op = new Operation("enable",getAddress());
+ res = getASConnection().execute(op);
+
+ }
}
diff --git a/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
b/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
index a7f5b64..495c050 100644
--- a/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
@@ -1353,10 +1353,10 @@
<c:group name="children:xa-datasource-properties:key+"
displayName="XA Datasource Properties">
- <c:list-property name="*2"
displayName="Properties" required="false"
readOnly="false">
+ <c:list-property name="*2"
displayName="Properties" required="false"
readOnly="true">
<c:map-property name="*:key"
displayName="Name" readOnly="true">
<c:simple-property name="key"
displayName="Property-Name" readOnly="true"/>
- <c:simple-property name="value"
displayName="Value"/>
+ <c:simple-property name="value"
displayName="Value" readOnly="true"/>
</c:map-property>
</c:list-property>
</c:group>
commit 7daec9f1b83a4d16735ebb4004437f59f8d03a94
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Wed Feb 1 14:59:25 2012 +0100
Take care of changes in XA-DS land within AS7
diff --git
a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DatasourceComponent.java
b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DatasourceComponent.java
index 68c0bce..ee8c108 100644
---
a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DatasourceComponent.java
+++
b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DatasourceComponent.java
@@ -1,19 +1,20 @@
package org.rhq.modules.plugins.jbossas7;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.Property;
+import org.rhq.core.domain.configuration.PropertyList;
+import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.pluginapi.operation.OperationFacet;
import org.rhq.core.pluginapi.operation.OperationResult;
import org.rhq.modules.plugins.jbossas7.json.Address;
+import org.rhq.modules.plugins.jbossas7.json.CompositeOperation;
import org.rhq.modules.plugins.jbossas7.json.Operation;
-import org.rhq.modules.plugins.jbossas7.json.PROPERTY_VALUE;
import org.rhq.modules.plugins.jbossas7.json.Result;
/**
@@ -64,16 +65,41 @@ public class DatasourceComponent extends BaseComponent implements
OperationFacet
Address theAddress = new Address(address);
theAddress.add("xa-data-source",name);
- op = new Operation("add",theAddress);
- addRequiredToOp(op,parameters,"driver-name");
- addRequiredToOp(op,parameters,"jndi-name");
- addOptionalToOp(op,parameters,"user-name");
- addOptionalToOp(op,parameters,"password");
- addRequiredToOp(op,parameters,"xa-datasource-class");
-
- Map<String,Object> props = new HashMap<String, Object>(); //
TODO
- op.addAdditionalProperty("xa-data-source-properties",props);
-
+ op = new CompositeOperation();
+ Operation step1 = new Operation("add",theAddress);
+ addRequiredToOp(step1,parameters,"driver-name");
+ addRequiredToOp(step1,parameters,"jndi-name");
+ addOptionalToOp(step1,parameters,"user-name");
+ addOptionalToOp(step1,parameters,"password");
+ addRequiredToOp(step1,parameters,"xa-datasource-class");
+
+ ((CompositeOperation)op).addStep(step1);
+
+ // handling of xa-properties -- this is now a subresource in AS7 and at least
needs a connection url
+ String connectionUrl =
parameters.getSimpleValue("connection-url",null);
+ if (connectionUrl==null || connectionUrl.isEmpty())
+ throw new IllegalArgumentException("Connection-url must not be
empty");
+ Address cuAddress = new Address(theAddress);
+
cuAddress.add("xa-datasource-properties","connection-url");
+ Operation step2 = new Operation("add",cuAddress);
+ step2.addAdditionalProperty("value",connectionUrl);
+ ((CompositeOperation)op).addStep(step2);
+
+
+ PropertyList xaPropList = parameters.getList("xa-properties");
+ if (xaPropList != null) {
+ List<Property> xaProps = xaPropList.getList();
+ for (Property prop : xaProps) {
+ PropertyMap pMap = (PropertyMap) prop;
+ PropertySimple keyProp = pMap.getSimple("key");
+ PropertySimple valProp = pMap.getSimple("value");
+ Address propAddress = new Address(theAddress);
+
propAddress.add("xa-datasource-properties",keyProp.getStringValue());
+ Operation step = new Operation("add",propAddress);
+
step.addAdditionalProperty("value",valProp.getStringValue()); // TODO ??
+ ((CompositeOperation)op).addStep(step);
+ }
+ }
}
else {
/*
diff --git
a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/JVMDiscoveryComponent.java
b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/JVMDiscoveryComponent.java
new file mode 100644
index 0000000..aa870fb
--- /dev/null
+++
b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/JVMDiscoveryComponent.java
@@ -0,0 +1,53 @@
+package org.rhq.modules.plugins.jbossas7;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
+import org.rhq.core.pluginapi.inventory.ResourceComponent;
+import org.rhq.core.pluginapi.inventory.ResourceContext;
+import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
+import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
+
+/**
+ * Discovery component for special treatment of JVMs, which live below server=server-x
for managed servers
+ * @author Heiko W. Rupp
+ */
+public class JVMDiscoveryComponent extends SubsystemDiscovery {
+
+ @Override
+ public Set<DiscoveredResourceDetails> discoverResources(
+ ResourceDiscoveryContext<BaseComponent<?>> context) throws
Exception {
+
+ ResourceContext parentContext = context.getParentResourceContext();
+
+
+ if (!parentContext.getResourceType().getName().equals("Managed
Server"))
+ return super.discoverResources(context);
+
+ PropertySimple pathProp =
parentContext.getPluginConfiguration().getSimple("path");
+ String path = pathProp.getStringValue();
+ path = path.replaceAll("server-config=","server=");
+ path = path + ",core-service=platform-mbean";
+
+ Configuration config = new Configuration();
+ PropertySimple ps = new PropertySimple("path",path);
+ config.getProperties().add(ps);
+
+ DiscoveredResourceDetails detail = new DiscoveredResourceDetails(
+ context.getResourceType(),
+ path,
+ path, // dname, todo
+ null,
+ context.getResourceType().getDescription(),
+ config,
+ null
+ );
+
+ Set<DiscoveredResourceDetails> discoveredResourceDetails = new
HashSet<DiscoveredResourceDetails>();
+ discoveredResourceDetails.add(detail);
+ return discoveredResourceDetails;
+ }
+}
diff --git a/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
b/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
index 3ef70c9..a7f5b64 100644
--- a/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
@@ -558,12 +558,13 @@
<server name="JVM"
- discovery="SubsystemDiscovery"
+ discovery="JVMDiscoveryComponent"
class="BaseComponent"
description="Information about the underlying JVM"
singleton="true">
<runs-inside>
<parent-resource-type name="Managed Server"
plugin="jboss-as-7"/>
+ <parent-resource-type name="Host"
plugin="jboss-as-7"/>
<parent-resource-type name="JBossAS7 Standalone Server"
plugin="jboss-as-7"/>
</runs-inside>
@@ -619,9 +620,8 @@
<resource-configuration>
<c:simple-property
name="thread-contention-monitoring-enabled" required="false"
type="boolean" readOnly="false" description="Whether thread
contention monitoring is enabled."/>
<c:simple-property name="thread-cpu-time-enabled"
required="false" type="boolean" readOnly="false"
description="Whether thread CPU time measurement is enabled."/>
- <c:list-property name="all-thread-ids" description="All
live thread IDs. If a security manager is installed and the caller does not have
ManagementPermission('monitor'), the result will be und
- ." >
- <c:simple-property name="all-thread-ids" />
+ <c:list-property name="all-thread-ids" description="All
live thread IDs. If a security manager is installed and the caller does not have
ManagementPermission('monitor'), the result will be undefined."
readOnly="true">
+ <c:simple-property name="all-thread-ids"
readOnly="true"/>
</c:list-property>
<c:simple-property
name="thread-contention-monitoring-supported" required="false"
type="boolean" readOnly="true" description="Whether the Java
virtual machine supports thread contention monitoring."/>
<c:simple-property name="thread-cpu-time-supported"
required="false" type="boolean" readOnly="true"
description="Whether the Java virtual machine implementation supports CPU time
measurement for any thread."/>
@@ -1036,10 +1036,11 @@
<c:option-source target="resource"
expression="type=^Deployment$" filter=".*\.jar"/>
</c:simple-property>
<c:simple-property name="xa-datasource-class"
required="true" description="xa-datasource-class"/>
+ <c:simple-property name="connection-url"
required="true" description="Connection URL. Will be turned into an
Xa-property)"/>
<c:simple-property name="jndi-name"
description="JNDI-Name of the Datasource" required="true"/>
<c:simple-property name="user-name" description="User
name for DB-connections" required="false" />
<c:simple-property name="password"
description="Password" type="password"
required="false"/>
- <c:list-property name="xa-properties" displayName="XA
Properties" description="Additional XA Properties"
required="false">
+ <c:list-property name="xa-properties" displayName="XA
Properties" description="Additional XA Properties (connection url is set
above)" required="false">
<c:map-property name="xa-properties">
<c:simple-property name="key"
displayName="Key" description="Key of the property"/>
<c:simple-property name="value"
displayName="Value" description="Value of the property"/>
@@ -1349,6 +1350,16 @@
</c:map-property>
-->
<c:simple-property name="no-recovery"
required="false" type="boolean" readOnly="true"
description="if true no recovery are tried for this connection pool"/>
+
+
+ <c:group name="children:xa-datasource-properties:key+"
displayName="XA Datasource Properties">
+ <c:list-property name="*2"
displayName="Properties" required="false"
readOnly="false">
+ <c:map-property name="*:key"
displayName="Name" readOnly="true">
+ <c:simple-property name="key"
displayName="Property-Name" readOnly="true"/>
+ <c:simple-property name="value"
displayName="Value"/>
+ </c:map-property>
+ </c:list-property>
+ </c:group>
</resource-configuration>
</service>