2012-08-30 89 views
1

添加新行我試圖用Java實現的SNMP代理。 我用SNMP4J庫(http://www.snmp4j.org/)。 目前,我的經紀人工作在本地主機/ 4700。 我試圖SNMPGET請求感謝發送到以下要求:SNMP代理的Java:如何在MOTable

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1 

,但我只得到類似「沒有這樣的情況下目前存在於這個OID」 這裏是我的問題:我不知道如何創建一。我試圖添加行到我的MOTable,但它似乎不工作。

這裏是我的類實現MOGRoup

public class MyMIB 
//--AgentGen BEGIN=_EXTENDS 
//--AgentGen END 
implements MOGroup 
//--AgentGen BEGIN=_IMPLEMENTS 
//--AgentGen END 
{ 
    . 
    . 
    . 

public static final OID oidTableEntry = 
    new OID(new int[] { 1,3,6,1,4,1,1,99,5,4,1,3,1 }); 
    . 
    . 
    . 

private void createTableEntry(MOFactory moFactory) { 
// Index definition 
    . 
    . 
    . 

// Table model 
tableEntryModel = 
    moFactory.createTableModel(oidTableEntry, 
         tableEntryIndex, 
         tableEntryColumns); 
((MOMutableTableModel)tableEntryModel).setRowFactory(
    new TableEntryRowFactory()); 
tableEntry = 
    moFactory.createTable(oidTableEntry, 
        tableEntryIndex, 
        tableEntryColumns, 
        tableEntryModel); 

//Adding rows 
ArrayList<Integer> oidMon1List= new ArrayList<Integer>(); 
oidRow1List = this.getListFromArray(oidTableEntry.getValue()); 
oidRow1List.add(1); 

ArrayList<Integer> oidMon2List= new ArrayList<Integer>(); 
oidRow2List = this.getListFromArray(oidTableEntry.getValue()); 
oidRow2List.add(2); 

DefaultMOMutableTableModel model = 
       (DefaultMOMutableTableModel)tableEntry.getModel(); 

synchronized(model){ 
model.addRow(
     model.createRow(
       new OID(getArrayFromList(oidRow1List)), 
       new Variable[]{ 
        new Integer32(123) 
        })); 

model.addRow(
     model.createRow(
       new OID(getArrayFromList(oidRow2List)), 
       new Variable[]{ 
        new Integer32(456) 
        })); 
    } 
} 

的總結,但請求吼叫仍然不起作用。

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1 

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.0 

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.1 

我一定不明白如何正確創建行。你能解釋我應該怎麼做嗎?

非常感謝!

只是有點精密:我添加這些行到我的程序:

System.out.println("Get row count: " +tableEntryModel.getRowCount()); 

//first row 
System.out.println("TEST1: " +model.getRow(new OID(new int[] {1,3,6,1,4,1,1,99,5,4,1,3,1,1})).getValue(0)); 
System.out.println("TEST2: " +tableEntry.getValue(new OID(new int[] {1,3,6,1,4,1,1,99,5,4,1,3,1,1,0}))); 

第一返回:2(如預期)

第二返回:123(如預期)

第三個返回:null ...在這裏,我不明白爲什麼!

回答

3

我會說,代碼和要求不匹配。我猜的代碼是問題,因爲 在SNMP4J代理表的單元格的情況下OID由

內置
<tableEntryOID>.<columnSubID>.<rowIndexOID> 

因此,如果你的表對象具有OID 1.3.6.1.4.1.1.99.5.4 .1.3.1並且要在第一列的第一個實例有ID爲1,那麼你必須創建/添加與該行:

model.addRow(  
    model.createRow(  
      new OID(1), new Variable[]{ new Integer32(123) })); 

這種細胞可以再與

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.1 
檢索
0

好吧,我發現了什麼事。 其實,我的代碼工作,這只是我的請求,這是不正確的。

         | oidColumn 1.3.6.1.4.1.1.99.5.4.1.3.1.1 
oidRow1 1.3.6.1.4.1.1.99.5.4.1.3.1.1 |  oidColumn.oidRow1 
oidRow2 1.3.6.1.4.1.1.99.5.4.1.3.1.2 |  oidColumn.oidRow2 

所以,如果我想獲得ROW1的第一個值,我不得不做出這個請求:

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.1.3.6.1.4.1.1.99.5.4.1.3.1.1