我正在开发一个围绕SNMP4J-Agent库的JRuby包装器,可以在这里找到:
网站:http://www.snmp4j.org/
JavaDocs:http://www.snmp4j.org/agent/doc/
到目前为止它非常有趣,但是我无法破译下面的一段Java代码以在JRuby中实现:
server = new DefaultMOServer();
vacmMIB = new VacmMIB(new MOServer[] { server });
问题在于 - 据我所知 - 用new
({1}}(这是一个接口)来构建一个传递服务器对象的匿名函数,我似乎无法理解找到用JRuby表达的正确方法。我已经包含了有关Java类的信息:
MOServer[]
定义为
DefaultMOServer
JavaDoc:http://www.snmp4j.org/agent/doc/org/snmp4j/agent/DefaultMOServer.html
public class DefaultMOServer implements MOServer {
public DefaultMOServer() {
...
}
...
}
定义为
VacmMIB
JavaDoc:http://www.snmp4j.org/agent/doc/org/snmp4j/agent/mo/snmp/VacmMIB.html
最后,public class VacmMIB implements MOGroup, MutableVACM {
public VacmMIB(MOServer[] server) {
this.server = server;
...
}
...
}
被定义为
MOServer
JavaDoc:http://www.snmp4j.org/agent/doc/org/snmp4j/agent/MOServer.html
这大致是我在JRuby中所做的:
public interface MOServer {
...
}
运行上面的代码会为我设置require 'java'
require 'snmp4jruby'
require 'lib/snmp4j-agent-1.4.3.jar'
module Agent
include_package 'org.snmp4j.agent'
module MO
include_package 'org.snmp4j.agent.mo'
module SNMP
include_package 'org.snmp4j.agent.mo.snmp'
end
end
end
class SnmpAgent < Agent::BaseAgent
# Setup the agent
def init
... everything works fine up here ...
# Server is created early on without issue
self.server = Agent::DefaultMOServer.new
# Having trouble here
_server = Agent::MOServer.new { self.server }
self.vacmMIB = Agent::MO::SNMP::VacmMIB.new(_server)
end
end
:
self.vacmMIB = ...
任何方向都将非常感谢!
答案 0 :(得分:1)
您的问题似乎是VacmMIB
构造函数将MOServer
数组作为参数,并且您正在传递MOServer
的实例。
试试这个:
_server = Agent::MOServer.new { self.server }
# your code
# self.vacmMIB = Agent::MO::SNMP::VacmMIB.new(_server)
# updated code
self.vacmMIB = Agent::MO::SNMP::VacmMIB.new([_server])