| Class | JMX::MBean |
| In: |
lib/jmx4r.rb
|
| Parent: | Object |
| JThread | = | java.lang.Thread |
| attributes | [R] | |
| object_name | [R] | |
| operations | [R] |
# File lib/jmx4r.rb, line 99 def self.connection(args={}) if args.has_key? :host or args.has_key? :port return create_connection(args) else MBean.establish_connection(args) unless @@mbsc return @@mbsc end end
Create a connection to a remote MBean server.
The args accepts 4 keys:
# File lib/jmx4r.rb, line 126 def self.create_connection(args={}) host= args[:host] || "localhost" port = args[:port] || 3000 username = args[:username] password = args[:password] credentials = args[:credentials] # 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 # 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 connector.getMBeanServerConnection 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 91 def self.establish_connection(args={}) @@mbsc ||= 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 174 def self.find_all_by_name(name, args={}) object_name = ObjectName.new(name) mbsc = args[:connection] || MBean.connection(args) object_names = mbsc.queryNames(object_name, nil) object_names.map { |on| MBean.new(on, mbsc) } 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 184 def self.find_by_name(name, args={}) mbsc = args[:connection] || MBean.connection(args) MBean.new ObjectName.new(name), mbsc end
| object_name: | a string corresponding to a valid ObjectName |
| mbsc: | a connection to a MBean server. If none is passed, use the global connection created by MBean.establish_connection |
# File lib/jmx4r.rb, line 39 def initialize(object_name, mbsc=nil) @mbsc = mbsc || @@mbsc @object_name = object_name info = @mbsc.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 @mbsc.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 @mbsc.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