Magenta is a small package of Java sourcecode distributed under the GPL. It can be used as a framework for developing Agent systems. It is a re-implementation in Java of the original Magenta agent framework, developed by Babak Esfandiari in Smalltalk. The Magenta Pages are maintained by Aloke Mukherjee.

Project Page

  • Magenta’s Sourceforge project page – news, releases and CVS access


Go to Resources page


Hopefully this will serve as a guide not just to diagnosing and understanding Magenta’s anatomy but also for performing radical surgery upon its defenseless and shivering corpse.

– overview: list and briefly describe components,
interrelationships, typical flow of communication, applications

The ComManager, ObjectManagerand EventManager are the three most important classes for a Magenta Agent. If we make an analogy between an Agent and a human then these components correspond to body parts as follows:

The ComManager (which contains the helper class ComManagerThread) acts as both the mouth and the ears of the agent. As the Agent’s mouth: it is responsible for communicating messages to other agents and listening for the response. As the agent’s ears the ComManager is responsible for receiving messages from other agents and handling them intelligently.

The ObjectManager acts as the agent’s brain. It contains a database which is the storehouse for the agent’s knowledge of objects in its environment. Most of the messages received by the ComManager are handled here in the agent’s brain.

The EventManager acts as a kind of nervous system which senses changes in the environment (i.e. the objects in the ObjectManager) and triggers an automatic notification to other interested agents.

These three objects are encapsulated within an Agent. In a typical communication flow an agent’s ComManager receives a message which is parsed and dispatched to the appropriate ObjectManager API (create, delete, set, get). The ObjectManager then performs the requested operation and returns the result back to the requesting agent. Through an observer-observable relationship the EventManager is automatically notified of changes in the ObjectManager. The EventManager then causes eventreport messages to be dispatched to observer agents.

The other key Magenta class is the GdmoObject. Based loosely on the “Guideline for Definition of Managed Objects” standard (put a link here), a GdmoObject is the top class from which all Magenta managed objects must inherit. The GdmoObject class contains a few attributes common to all objects (name, path, instantiated) as well as encapsulating the code which causes the EventManager to be notified when a GdmoObject set or get method is called.

  • com manager: tcp vs. rmi, describe apis (send/processMessage), protocol,
    what is cmip?
  • event manager: observer/observable, apis (notify)
  • object manager: reflection, data structure for tree, apis (add,
    delete, get, set), addressing, object types – what is Gdmo
  • management application: apis (processNotification), gui/cli
  • issues: tcp vs. rmi, autodiscovery, connection vs. connectionless, passing
    info in notifies,

Common Tasks:

  • how to add new magenta objects (i.e. Printer, Computer, etc.) with
    their own set, get methods
  • how to extend Agent (i.e. n-queens, gui, cli)


Some examples to get you started (i.e. confused):

All Magenta users are welcome to add links or new pages below describing their courageous attempts to write useful applications using the Magenta framework or, more courageous still, their modifications and enhancements to it… (magenta can be enhanced? sacrilege.)


Another way you can contribute. Here is a place to report things that don’t work, things that don’t work the way you’d like, or things that don’t even exist but ought to. (preferrably Magenta-related, but hey, let your imagination run wild)

News and Updates

  • December 16, 2001: up2p-client 0.20 and Magenta 0.20 released
  • October 03, 2001: Version 0.11 imported, and released