ServiceDiscoveryComponent.java
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:5k
源码类别:

中间件编程

开发平台:

Java

  1. /*
  2.  * RHQ Management Platform
  3.  * Copyright (C) 2005-2008 Red Hat, Inc.
  4.  * All rights reserved.
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation version 2 of the License.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19. package org.rhq.plugins.blacktie;
  20. import java.util.HashSet;
  21. import java.util.List;
  22. import java.util.Properties;
  23. import java.util.Set;
  24. import javax.management.MBeanServerConnection;
  25. import javax.management.ObjectName;
  26. import javax.management.remote.JMXConnector;
  27. import javax.management.remote.JMXConnectorFactory;
  28. import javax.management.remote.JMXServiceURL;
  29. import org.apache.commons.logging.Log;
  30. import org.apache.commons.logging.LogFactory;
  31. import org.jboss.blacktie.jatmibroker.core.conf.XMLEnvHandler;
  32. import org.jboss.blacktie.jatmibroker.core.conf.XMLParser;
  33. import org.rhq.core.domain.configuration.Configuration;
  34. import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
  35. import org.rhq.core.pluginapi.inventory.ProcessScanResult;
  36. import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
  37. import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
  38. import org.w3c.dom.Element;
  39. import org.w3c.dom.Node;
  40. import org.w3c.dom.NodeList;
  41. /**
  42.  * This can be the start of your own custom plugin's discovery component. Review
  43.  * the javadoc for {@link ResourceDiscoveryComponent}.
  44.  * 
  45.  * @author John Mazzitelli
  46.  */
  47. public class ServiceDiscoveryComponent implements ResourceDiscoveryComponent {
  48. private final Log log = LogFactory.getLog(ServiceDiscoveryComponent.class);
  49. private MBeanServerConnection beanServerConnection;
  50. private ObjectName blacktieAdmin = null;
  51. /**
  52.  * Review the javadoc for both {@link ResourceDiscoveryComponent} and
  53.  * {@link ResourceDiscoveryContext} to learn what you need to do in this
  54.  * method.
  55.  * 
  56.  * @see ResourceDiscoveryComponent#discoverResources(ResourceDiscoveryContext)
  57.  */
  58. public Set<DiscoveredResourceDetails> discoverResources(
  59. ResourceDiscoveryContext context) {
  60. String serverName = context.getParentResourceContext().getResourceKey();
  61. log.debug("Discovering service of " + serverName);
  62. // if your plugin descriptor defined one or more <process-scan>s, then
  63. // see if the plugin container
  64. // auto-discovered processes using those process scan definitions.
  65. // Process all those that were found.
  66. List<ProcessScanResult> autoDiscoveryResults = context
  67. .getAutoDiscoveredProcesses();
  68. for (ProcessScanResult autoDiscoveryResult : autoDiscoveryResults) {
  69. // determine if you want to include the result in this method's
  70. // returned set of discovered resources
  71. }
  72. List<Configuration> pluginConfigs = context.getPluginConfigurations();
  73. for (Configuration pluginConfig : pluginConfigs) {
  74. // pluginConfig contains information on a resource that was manually
  75. // discovered/entered by the user
  76. // take it and build a details object that represents that resource
  77. }
  78. // now perform your own discovery mechanism, if you have one. For each
  79. // resource discovered, you need to
  80. // create a details object that describe the resource that you
  81. // discovered.
  82. HashSet<DiscoveredResourceDetails> set = new HashSet<DiscoveredResourceDetails>();
  83. // key = this must be a unique string across all of your resources - see
  84. // docs for uniqueness rules
  85. // name = this is the name you give the new resource; it does not
  86. // necessarily have to be unique
  87. // version = this is any string that corresponds to the resource's
  88. // version
  89. // description = this is any string that you want to assign as the
  90. // default description for your resource
  91. try {
  92. Properties prop = new Properties();
  93. XMLEnvHandler handler = new XMLEnvHandler(prop);
  94. XMLParser xmlenv = new XMLParser(handler, "btconfig.xsd");
  95. xmlenv.parse("btconfig.xml");
  96. JMXServiceURL u = new JMXServiceURL((String) prop.get("JMXURL"));
  97. JMXConnector c = JMXConnectorFactory.connect(u);
  98. beanServerConnection = c.getMBeanServerConnection();
  99. blacktieAdmin = new ObjectName("jboss.blacktie:service=Admin");
  100. Element status;
  101. status = (Element)beanServerConnection.invoke(blacktieAdmin, 
  102. "listServiceStatus",
  103. new Object[] { serverName, null}, 
  104. new String[] {"java.lang.String", "java.lang.String"});
  105. NodeList services = status.getElementsByTagName("name");
  106. for(int i = 0; i < services.getLength(); i++) {
  107. Node node = services.item(i);
  108. String serviceName = node.getTextContent();
  109. if(!serviceName.equals(serverName)) {
  110. DiscoveredResourceDetails resource = new DiscoveredResourceDetails(
  111. context.getResourceType(), serviceName, serviceName, null,
  112. null, null, null);
  113. set.add(resource);
  114. }
  115. }
  116. } catch (Exception e) {
  117. log.error("get services error with " + e);
  118. }
  119. return set;
  120. }
  121. }