ここにあるSNMP4J-AgentライブラリのJRubyラッパーの実装に取り組んでいます。
Web サイト: http://www.snmp4j.org/
JavaDocs: http://www.snmp4j.org/agent/doc/
ここまではとても楽しかったのですが、JRuby に実装する次の Java コードを解読するのに苦労しています。
server = new DefaultMOServer();
vacmMIB = new VacmMIB(new MOServer[] { server });
問題は、私が知る限り、(インターフェイスである) を使用してキャストnew
するとMOServer[]
、サーバー オブジェクトに渡される匿名関数が作成され、JRuby でそれを表現する正しい方法が見つからないようです。Java クラスに関する情報を含めました。
DefaultMOServer
と定義されている
public class DefaultMOServer implements MOServer {
public DefaultMOServer() {
...
}
...
}
JavaDoc: http://www.snmp4j.org/agent/doc/org/snmp4j/agent/DefaultMOServer.html
VacmMIB
と定義されている
public class VacmMIB implements MOGroup, MutableVACM {
public VacmMIB(MOServer[] server) {
this.server = server;
...
}
...
}
JavaDoc: http://www.snmp4j.org/agent/doc/org/snmp4j/agent/mo/snmp/VacmMIB.html
最後に、MOServer
は次のように定義されます。
public interface MOServer {
...
}
JavaDoc: http://www.snmp4j.org/agent/doc/org/snmp4j/agent/MOServer.html
JRubyで私がやっていることは大まかに次のとおりです。
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 = ...
。
TypeError: failed to coerce org.jruby.gen.InterfaceImpl792882806 to [Lorg.snmp4j.agent.MOServer;
これに関する方向性は大歓迎です!