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@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@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>
rhq-commits@lists.fedorahosted.org