Spice up your iSeries Applications with ABLE
Author: Jake Kugel - IBM
Working with the Agent Building and Learning Environment (ABLE) has given me a chance to learn about software agents and a wide range of Java topics. ABLE is a toolkit for creating software agents with Java, and it has many different components. The toolkit is flexible and can be applied to many different types of problems. You're sure to find something in ABLE that can be applied to your applications. ABLE 2.0 ships with i5/OS V5R3.
The ABLE 2.0 toolkit provides a building-block approach to creating software agents and comes with pre-made components to aid in the development of software agents. The toolkit also includes an integrated distributed agent platform, a framework for writing eServer agents, and an agent management console integrated into iSeries Navigator.
This article provides an overview of the different parts of ABLE including the distributed platform, eServer agent framework, and management console. It also explains where to find more information.
In 1999, a team at IBM Research started developing the ABLE Toolkit. The goal was to create a set of fast, scalable, and reusable components that could be used to help writing software agents and automate software.
The ABLE project consists of five main parts. The agent framework is the set of basic Java classes and interfaces that are used to build and connect agent components. The component library is a set of pre-made algorithms. The utility classes are based on Java Beans and can be used to build agents. The toolkit also includes development tools, such as an agent editor that you use to build agents graphically and a rule set editor. The agent platform is an environment for distributed agents. It can be used to build multiagent applications where the agents might collaborate to solve a problem. The ABLE project also includes applications. For example, ABLE has been used in an application to do automotive diagnostics and in an application to autotune an Apache web server. Agents also have been created to take and analyze iSeries communications traces.
Here's an example of how ABLE might be used. Suppose a System Administrator wants to automate some of the simple tasks he or she handles, such as managing disk usage on the company's servers. An ABLE agent could be created that could monitor storage usage and take some corrective actions if the storage levels are too high. Or using some of the more complex components, the agent could be trained to predict future storage usage (based on past history) to take actions sooner.
In V5R3, ABLE 2.0 was integrated into the i5/OS base operating system. Version 2.0 includes the new agent platform. In addition, iSeries Navigator V5R3 comes with a management console you can use to manage agents running on the agent platform. With the console, you can start and stop agents among other things.
Even though i5/OS V5R3 includes ABLE 2.0, the ABLE team is continually developing the project. You can try out newer versions on their Alphaworks website: http://www.alphaworks.ibm.com/tech/able .
Components are the heart of ABLE. The components are Java classes based on the Java Bean model that handle many of the kinds of tasks an agent would need to do. The idea is to combine these basic components to speed up the process of creating a software agent.
The components handle tasks such as data input and output, data transformation, machine learning (such as a neural network), and machine reasoning (rule-based processing), among others. The agent editor can be used to wire these components together, or they can be used in Java code just like any other Java class.
The components are easy to construct. You create new components by extending the AbleObject class. This class skeleton shows the main methods you need to override to create a new component: init(), reset(), and process(). Note that this example doesn't show the constructors, thrown exceptions and other useful methods. For more details, see the example bean included with the toolkit (able_2.0.0examplesablebeanSimpleAbleBean.java).
public class ExampleAbleBean extends AbleObject
public void init()
// Do any one time initialization here
public void reset()
// reset the agent to its beginning state
public void process()
// Perform the agent's function. (Called repetitively)
The distributed platform was a big addition to ABLE 2.0. The agent platform is an environment for creating remotely manageable agents or multiagent applications. The platform provides services that can be used by the agents to interact and to allow a remote console to manage them. Some of the services include an agent directory service for finding agents, a problem logging service to allow an agent to interact with a user, an agent naming service for creating unique names, and a transport service used for message passing.
Simple agents (non-platform agents) can be used inside any application. The application code would create an instance of the agent class and call methods to control its behavior. Platform agents, however, need a different environment. Platform agents are only run inside of the agent platform, which is a special application that provides the services for agents.
The agent platform is included with V5R3. You can use the STRAGTSRV, and ENDAGTSRV CL commands to start and stop the agent platform.
Agents that run on the distributed platform that comes with i5/OS are based on a special class called AbleEServerDefaultAgent. You develop platform agents by extending this class and overriding certain methods.
The agent platform was built on top of a reference implementation of a standard agent platform spec, but it was enhanced with security features and support for persistence.
A console for managing the agents is also included with iSeries Navigator V5R3. Using the console you can create an agent and start, stop, and suspend it. You also can set the capabilities or properties of the agent.
In your business, you might have many different systems running agents. The console lets you see the status of all of them in one place. The console also gives you a central place to handle any user interaction the agents may need. Agents can send requests for information to a user, and the console allows you to see the requests and respond to them.
The console has different views. The All Agents view shows a list of all of the agents running in the agent domain that is connected to (see Figure 1).
The All Agents view shows the status of the agent (stopped, started, suspended, or attention). When an agent is first created, it is in the stopped status until the user starts it.
As a platform agent runs, it may need help from the user. Agents can send requests for information to the user to let the user decide how to handle a problem. The Current Requests view shows a list of all the requests for which agents need a response. A request contains a multiple-choice response. Once the user responds to a request, the response is sent back to the agent to take the action the user wanted. Figure 2 shows the dialog used to respond to a request.
Platform agents also have an automation level or trust level. Ideally, an agent works without needing much interaction from a user, since that's the purpose of a good agent. The user delegates tasks to the agent, and the agent handles the task with a minimum of user interaction. But if you are using a new agent that you aren't familiar with, you might want to monitor the agent more closely to make sure it takes the actions you expect. The automation level of an agent controls how frequently the agent asks the user before it takes an action. This way, the user can monitor the agent's actions before letting it work independently. Figure 3 shows the dialog to change the agent's automation level:
Once an agent can be trusted to take the right action, the automation level can be increased. The agent then takes more actions automatically.
To get to the ABLE documentation, go to Systems Management > Performance > Applications for performance > Intelligent Agents.
I5/OS contains the agent runtime. It includes the Jar files, CL commands, and preference files needed to run agents. It doesn't, however, include the development tools or documentation. The runtime, development tools, and documentation are packaged into ZIP files and available for download from the iSeries Infocenter. Two zip files contain the ABLE toolkit and documentation: AbleAll_2.0.0.zip and doc.zip.
To find the ZIP files in the Infocenter, go to Programming > Java > ABLE 2.0.
Unzip the AbleAll_2.0.0.zip file first. After unzipping it, unzip the doc.zip file into the top level AbleAll_2.0.0 folder that was created from the first zip file.
The documentation for the ABLE toolkit is included in the doc.zip file. Once you have downloaded the toolkit, open AbleAll_2.0.0index.html. This page contains links to the rest of the HTML documentation included in doc.zip, including the Javadoc.
Along with the HTML documentation, the doc.zip file also has additional presentations and labs about ABLE. After unzipping doc.zip, look for a file called Able-Class.zip (it should be in the top-level AbleAll_2.0.0 folder).
Note that the distributed platform included with i5/OS contains support for an EServer agent super class called AbleEServerDefaultAgent. This type of agent supports the features in the console, such as problem requests, the automation level, and others. The EServer class isn't included with the toolkits downloadable from Alphaworks. If you plan on developing platform agents that run on an eServer platform and use the features of the console in iSeries Navigator, make sure you use the ZIP files from Infocenter.
You can find out more about newer ABLE versions on Alphaworks: http://www.alphaworks.ibm.com/tech/able.
The template code for an EServer agent is packaged with the ableplatform.jar file: AbleAll_2.0.0libableplatform.jar. You can extract the sample code by renaming the JAR file to ableplatform.zip, and using a normal ZIP utility to extract its contents. Five Java parts are all part of the template agent.
ABLE has a large variety of features and can be adapted to just about any type of problem you need to solve. You're sure to find something that can be applied to your work.
Jake Kugel is a Software Engineer at IBM in Rochester, MN, and works on i5/OS software. You can contact him at firstname.lastname@example.org.