Pull mode forwarding is necessarily a compromise between receiving notifications in a timely manner, not saturating the communication layer, and not overflowing the buffer. Notifications are stored temporarily in the agent-side buffer, but the manager-side listeners still need to receive them. Pull mode includes automatic pulling that retrieves all buffered notifications regularly.
The frequency of the pull forwarding is controlled by the pull period expressed in milliseconds. By default, when pull mode is enabled, the manager will automatically begin pulling notifications once per second. Whether or not there are any notifications to receive depends upon events in the agent.
Our manager application sets a half-second pull period and then triggers the notification broadcaster.
System.out.println(">>> Set notification forward mode to PULL."); connectorClient.setMode(ClientNotificationHandler.PULL_MODE); // Retrieve buffered notifications from the agent twice per second System.out.println(">>> Set the forward period to 500 milliseconds."); connectorClient.setPeriod(500); System.out.println(">>> Have our MBean broadcast 20 notifications..."); params = new Integer(20); signatures = "java.lang.Integer"; connectorClient.invoke(mbean, "sendNotifications", params, signatures); System.out.println(">>> Done."); // Wait for the handler to process all notifications System.out.println(">>> Receiving notifications...\n"); Thread.sleep(2000);
When notifications are pulled, all notifications in the agent-side buffer are forwarded to the manager and the registered listeners. It is not possible to set a limit on the number of notifications that are forwarded except by limiting the size of the buffer (see Agent-Side Buffering). Even in a controlled example such as ours, the number of notifications in the agent-side buffer at each pull period is completely dependent upon the agent's execution paths, and therefore unpredictable from the manager-side.