![]() |
|||
![]() |
![]() ![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
![]() |
| ||||
The SyncManagerMultiV3 example essentially performs the same actions as the SyncManagerV3 example, except it creates two SNMP USM peers rather than just one. The two peer agents are each created in exactly the same way as in the single peer example. Both the peer agents are accessed using a common set of parameters, which are kept in the jdmk.security file for the session. This jdmk.security file contains two rows, one for each SNMP USM peer agent, as shown in the following example. Example 17-6 jdmk.security File for the SyncManagerMultiV3 Example
If you configure your manager to create a greater number of peers, then its associated jdmk.security file must contain a corresponding number of entries, one for each authoritative engine with which the manager will communicate. In this example, the only difference between the two userEntry rows is between the engine ID numbers. These engine IDs correspond to the engines of the two SNMP adaptor servers created by the MultipleAgentV3 example in 16.5 Multiple Agents.
|
$ cd examplesDir/current/Snmp/Agent $ java -classpath classpath -Djdmk.security.file=jdmk.security MultipleAgentV3 |
The MultipleAgentV3 example simulates two SNMPv3 agents in one process. We shall make these agents peers of SyncManagerMultiV3.
Be sure to run the multiple agent in its directory, otherwise it cannot find its jdmk.security and jdmk2.security files.
Start the manager application in another window to connect to these two agents.
If you want to run the manager on a different host from the one where the agents are running, replace localhost with the name of the host where you started the agents. Both the agents in the MultipleAgentV3 example run on the same host.
$ cd examplesDir/current/Snmp/Manager $ java -classpath classpath -Djdmk.security.file=jdmk.security SyncManagerMultiV3 localhost 8085 localhost 8087 |
Be sure to run the manager in its directory, otherwise it cannot find its jdmk.security file.
You should see sending a request to the first agent. Press Enter to send a request to the second agent.
You will now see the manager sending a second request to the agent on port 8087.
Press Enter to stop the manager
The asynchronous SNMP manager lets you handle more requests in the same amount of time because the manager is not blocked waiting for responses. Instead, it creates a request handler object that runs as a separate thread and processes several responses concurrently. Otherwise, the initialization of peers, parameters, sessions, options, and dispatcher is identical to that of a synchronous manager. This applies to all three versions of SNMP.
Example 17-7 The AsyncManager Example
// read the command line parameters String host = argv[0]; String port = argv[1]; // Use the OidTable generated by mibgen when compiling MIB-II. final SnmpOidTableSupport oidTable = new RFC1213_MIBOidTable(); // Sample use of the OidTable. SnmpOidRecord record = oidTable.resolveVarName("udpLocalPort"); java.lang.System.out.println( "AsyncManager::main: variable = " + record.getName() + " oid = " + record.getOid() + " type = " + record.getType()); // Initialize the SNMP Manager API. SnmpOid.setSnmpOidTable(oidTable); // Create an SnmpPeer object for representing the agent final SnmpPeer agent = new SnmpPeer(host, Integer.parseInt(port)); // Create parameters for communicating with the agent final SnmpParameters params = new SnmpParameters("public", "private"); agent.setSnmpParam(params); // Build the session and assign its default peer final SnmpSession session = new SnmpSession("AsyncManager session"); session.setDefaultPeer(agent); final DaemonTaskServer taskServer = new DaemonTaskServer(); taskServer.start(Thread.NORM_PRIORITY); // Same dispatcher and trap listener as in SyncManager example SnmpEventReportDispatcher trapAgent = new SnmpEventReportDispatcher(Integer.parseInt(port)+1, null,taskServer,null); trapAgent.addTrapListener(new TrapListenerImpl()); final Thread trapThread = new Thread(trapAgent); trapThread.setPriority(Thread.MAX_PRIORITY); trapThread.start(); // Build the list of variables to query SnmpVarbindList list = new SnmpVarbindList("AsyncManager varbind list"); list.addVariable("sysDescr.0"); // Create a simple implementation of an SnmpHandler. AsyncRspHandler handler = new AsyncRspHandler(); // Make the SNMP walk request with our handler final SnmpRequest request = session.snmpWalkUntil( handler, list, new SnmpOid("sysServices")); // Here you could do whatever processing you need. // In the context of the example, we are just going to wait // 4 seconds while the response handler displays the result. Thread.sleep(4000); [...] // Wait for user to type enter. Traps will be handled. // End the session properly and we're done. // session.destroySession(); java.lang.System.exit(0); |
The trap mechanism in this application is identical to the one presented in the SyncManager example. The event report dispatcher receives traps and calls the corresponding method of our SnmpTrapListener class.
In this example, the manager performs an snmpWalkUntil request that gives a response for each variable that it gets. The response handler is called to process each of these responses.
![]() ![]() |