| Class | JMX::MBean |
| In: |
lib/jmx4r.rb
|
| Parent: | Object |
| JThread | = | java.lang.Thread |
| attributes | [R] | |
| connection | [R] | |
| object_name | [R] | |
| operations | [R] |
# File lib/jmx4r.rb, line 129 def self.connection(args={}) if args.has_key? :host or args.has_key? :port return create_connection(args) else @@connection ||= MBean.establish_connection(args) end end
Create a connection to a remote MBean server.
The args accepts the following keys:
# File lib/jmx4r.rb, line 163 def self.create_connection(args={}) host= args[:host] || "localhost" port = args[:port] || 3000 username = args[:username] password = args[:password] credentials = args[:credentials] provider_package = args[:provider_package] # host & port are not taken into account if url is set (see issue #7) standard_url = "service:jmx:rmi:///jndi/rmi://#{host}:#{port}/jmxrmi" url = args[:url] || standard_url unless credentials if !username.nil? and username.length > 0 user_password_credentials = [username, password] credentials = user_password_credentials.to_java(:String) end end env = HashMap.new env.put(JMXConnector::CREDENTIALS, credentials) if credentials # only fill the Context and JMXConnectorFactory properties if provider_package is set if provider_package env.put(Context::SECURITY_PRINCIPAL, username) if username env.put(Context::SECURITY_CREDENTIALS, password) if password env.put(JMXConnectorFactory::PROTOCOL_PROVIDER_PACKAGES, provider_package) end # the context class loader is set to JRuby's classloader when # creating the JMX Connection so that classes loaded using # JRuby "require" (and not from its classpath) can also be # accessed (see issue #6) begin context_class_loader = JThread.current_thread.context_class_loader JThread.current_thread.context_class_loader = JRuby.runtime.getJRubyClassLoader connector = JMXConnectorFactory::connect JMXServiceURL.new(url), env MBeanServerConnectionProxy.new connector ensure # ... and we reset the previous context class loader JThread.current_thread.context_class_loader = context_class_loader end end
establish a connection to a remote MBean server which will be used by all subsequent MBeans.
See MBean.create_connection for a list of the keys that are accepted in arguments.
Examples
JMX::MBean.establish_connection :port => "node23", :port => 1090 JMX::MBean.establish_connection :port => "node23", :username => "jeff", :password => "secret"
# File lib/jmx4r.rb, line 118 def self.establish_connection(args={}) @@connection ||= create_connection args end
Returns an array of MBeans corresponding to all the MBeans registered for the ObjectName passed in parameter (which may be a pattern).
The args accepts the same keys than create_connection and an additional one:
# File lib/jmx4r.rb, line 218 def self.find_all_by_name(name, args={}) object_name = ObjectName.new(name) connection = args[:connection] || MBean.connection(args) object_names = connection.queryNames(object_name, nil) object_names.map { |on| MBean.new(on, connection) } end
Same as find_all_by_name but the ObjectName passed in parameter can not be a pattern. Only one single MBean is returned.
# File lib/jmx4r.rb, line 228 def self.find_by_name(name, args={}) connection = args[:connection] || MBean.connection(args) MBean.new ObjectName.new(name), connection end
| object_name: | a string corresponding to a valid ObjectName |
| connection: | a connection to a MBean server. If none is passed, use the global connection created by MBean.establish_connection |
# File lib/jmx4r.rb, line 66 def initialize(object_name, connection=nil) @connection = connection || @@connection @object_name = object_name info = @connection.getMBeanInfo @object_name @attributes = Hash.new info.attributes.each do | mbean_attr | @attributes[mbean_attr.name.snake_case] = mbean_attr.name self.class.instance_eval do define_method mbean_attr.name.snake_case do @connection.getAttribute @object_name, "#{mbean_attr.name}" end end if mbean_attr.isWritable self.class.instance_eval do define_method "#{mbean_attr.name.snake_case}=" do |value| attr = Attribute.new mbean_attr.name, value @connection.setAttribute @object_name, attr end end end end @operations = Hash.new info.operations.each do |mbean_op| param_types = mbean_op.signature.map {|param| param.type} @operations[mbean_op.name.snake_case] = [mbean_op.name, param_types] end end
# File lib/jmx4r.rb, line 233 def self.pretty_print (object_name, args={}) connection = args[:connection] || MBean.connection(args) info = connection.getMBeanInfo ObjectName.new(object_name) puts "object_name: #{object_name}" puts "class: #{info.class_name}" puts "description: #{info.description}" puts "operations:" info.operations.each do | op | puts " #{op.name}" op.signature.each do | param | puts " #{param.name} (#{param.type} #{param.description})" end puts " ----" puts " description: #{op.description}" puts " return_type: #{op.return_type}" puts " impact: #{op.impact}" end puts "attributes:" info.attributes.each do | attr | puts " #{attr.name}" puts " description: #{attr.description}" puts " type: #{attr.type}" puts " readable: #{attr.readable}" puts " writable: #{attr.writable}" puts " is: #{attr.is}" end end