Programming with Metaglue

Slides:



Advertisements
Similar presentations
Introduction to Eclipse. Start Eclipse Click and then click Eclipse from the menu: Or open a shell and type eclipse after the prompt.
Advertisements

L C SL C S Programming with Metaglue How to create basic agents.
15-May-15 RMI Remote Method Invocation. 2 “The network is the computer” Consider the following program organization: If the network is the computer, we.
Advanced Programming Rabie A. Ramadan Lecture 4. A Simple Use of Java Remote Method Invocation (RMI) 2.
Remote Method Invocation
Road Map Introduction to object oriented programming. Classes
1 Frameworks. 2 Framework Set of cooperating classes/interfaces –Structure essential mechanisms of a problem domain –Programmer can extend framework classes,
Reza Gorgan Mohammadi AmirKabir University of Technology, Department of Computer Engineering & Information Technology Advanced design.
Remote Method Invocation Chin-Chih Chang. Java Remote Object Invocation In Java, the object is serialized before being passed as a parameter to an RMI.
Introduction to Remote Method Invocation (RMI)
1 Generics and Using a Collection Generics / Parameterized Classes Using a Collection Customizing a Collection using Inheritance Inner Classes Use of Exceptions.
OOP Languages: Java vs C++
Java Programming, 2E Introductory Concepts and Techniques Chapter 2 Creating a Java Application and Applet.
Programming Languages and Paradigms Object-Oriented Programming.
Java RMI Essentials Based on Mastering RMI Rickard Oberg.
CS 584 Lecture 18 l Assignment » Glenda assignment extended to the Java RMI Deadline » No Java RMI Assignment l Test » Friday, Saturday, Monday.
+ A Short Java RMI Tutorial Usman Saleem
15 - RMI. Java RMI Architecture Example Deployment RMI is a part of J2SE (standard edition), but is used by J2EE) A J2EE server is not nessesary for using.
Design Patterns Part two. Structural Patterns Concerned with how classes and objects are composed to form larger structures Concerned with how classes.
CSCE 2013L: Lab 1 Overview  Java Basics The JVM Anatomy of a Java Program  Object-Oriented Programming Overview  Example: Payroll.java JDK Tools and.
1 Generics and Using a Collection Generics / Parameterized Classes Using a Collection Customizing a Collection using Inheritance Inner Classes Use of Exceptions.
LAB 1CSIS04021 Briefing on Assignment One & RMI Programming February 13, 2007.
1 Java RMI G53ACC Chris Greenhalgh. 2 Contents l Java RMI overview l A Java RMI example –Overview –Walk-through l Implementation notes –Argument passing.
IBM TSpaces Lab 1 Introduction. Summary TSpaces Overview Basic Definitions Basic primitive operations Reading/writing tuples in tuplespace HelloWorld.
Spring/2002 Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads 1 RMI.
Working with arrays (we will use an array of double as example)
RMI Remote Method Invocation Distributed Object-based System and RPC Together 2-Jun-16.
 Remote Method Invocation  A true distributed computing application interface for Java, written to provide easy access to objects existing on remote.
Chapter 6 Introduction to Defining Classes. Objectives: Design and implement a simple class from user requirements. Organize a program in terms of a view.
Fall 2007cs4251 Distributed Computing Umar Kalim Dept. of Communication Systems Engineering 17/10/2007.
Chapter 5 Introduction to Defining Classes
Remote Method Invocation Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
Creating a Java Application and Applet
Remote Method Invocation A Client Server Approach.
UMBC Distributed Computing with Objects RMI/Corba CMSC 432 Shon Vick.
1 Lecture 15 Remote Method Invocation Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung Institute of Technology.
Java Object-Relational Layer Sharon Diskin GUS 3.0 Workshop June 18-21, 2002.
Netprog Java RMI1 Remote Method Invocation.
Coming up Implementation vs. Interface The Truth about variables Comparing strings HashMaps.
Chapter 5 Introduction to Defining Classes Fundamentals of Java.
Distributed Web Systems Distributed Objects and Remote Method Invocation Lecturer Department University.
University of Central Florida COP 3330 Object Oriented Programming
Java Remote Method Invocation (RMI)
RMI Packages Overview java.rmi java.rmi.server java.rmi.registry
Remote Method Invocation
What is RMI? Remote Method Invocation
University of Central Florida COP 3330 Object Oriented Programming
Programming Language Concepts (CIS 635)
Remote Method Invocation
Network and Distributed Programming in Java
CS2102: Lecture on Abstract Classes and Inheritance
Lesson 2: Building Blocks of Programming
C# Event Processing Model
Creating a Distributed System with RMI
Connecting Metaglue Spaces Together
Metaglue For Oxygen Partners
Creating a Distributed System with RMI
Creating a Distributed System with RMI
Constructors, GUI’s(Using Swing) and ActionListner
CS 240 – Advanced Programming Concepts
Connecting Metaglue Spaces Together
Object Oriented Programming in java
Java IDE Dwight Deugo Nesa Matic Portions of the notes for this lecture include excerpts from.
Review: libraries and packages
CS 584 Lecture 18 Assignment Glenda assignment extended to the Java RMI Deadline No Java RMI Assignment Test Friday, Saturday, Monday.
Java Remote Method Invocation
References Revisted (Ch 5)
Creating a Distributed System with RMI
Java Object-Relational Layer
Java Chapter 5 (Estifanos Tilahun Mihret--Tech with Estif)
Presentation transcript:

Programming with Metaglue How to create basic agents

Metaglue Overview – Basic Capabilities On-demand agent startup Automatic restarting of agents Direct call or publish-subscribe communication Service mapping Customization (Attributes) Persistent storage (Persistent Map, Icebox) Interfaces: speech, GUI, web On-demand agent startup Automatic restarting of agents Direct call or publish-subscribe communication Service mapping Customization (Attributes) Persistent storage (Persistent Map, Icebox) Interfaces: speech, GUI, web Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

society : occupation - designation Agent Naming Society – specific to people, spaces and groups Occupation – agent’s function as Java interface name agentland.device.Projector, agentland.software.StartInterface Designation – to differentiate among various instances of the same agent within a society society : occupation - designation Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

e21:agentland.device.Projector-rear Agent Naming – Example e21:agentland.device.Projector-rear Society e21 for the E21 conference room Specifies which projector Agent for controlling a projector Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing a Basic Agent

Writing Metaglue Agents File Naming Conventions Two files: the agent + the interface For agent agentland.device.display.Projector: Interface: agentland/device/display/Projector.java Agent: agentland/device/display/ProjectorAgent.java Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Oxygen Alliance Annual Meeting — June 12 - 13, 2002 Why separate files? The name of an object is not the object itself in RMI The Interface declares the name of the agent and what methods are available to other agents Some methods available through inheritance The Agent is the fully implemented class object Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing Metaglue Agents The most basic agent interface   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public interface Basic extends Managed { } // Basic The most basic agent   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public class BasicAgent extends ManagedAgent implements Basic { public BasicAgent() throws RemoteException { } } // BasicAgent The interface is of type interface Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing Metaglue Agents The most basic agent interface   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public interface Basic extends Managed { } // Basic The agent is of type class and will always implement the interface for which it is named The most basic agent   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public class BasicAgent extends ManagedAgent implements Basic { public BasicAgent() throws RemoteException { } } // BasicAgent Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing Metaglue Agents The most basic agent interface   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public interface Basic extends Managed { } // Basic The basic packages you always have to import The most basic agent   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public class BasicAgent extends ManagedAgent implements Basic { public BasicAgent() throws RemoteException { } } // BasicAgent Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing Metaglue Agents The most basic agent   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public class BasicAgent extends ManagedAgent implements Basic { public BasicAgent() throws RemoteException { } } // BasicAgent The most basic agent interface public interface Basic extends Managed { } // Basic ManagedAgent is a superclass of all agents capable of communicating with resource managers. Most of our agents now extend ManagedAgent. This is where the ManagedAgent lives Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing Metaglue Agents The most basic agent interface   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public interface Basic extends Managed { } // Basic The constructor, as well as all exported methods (i.e. the ones specified in the interface) have to either throw RemoteException, or this exception has to be caught inside the method. It’s an RMI thing. The most basic agent   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public class BasicAgent extends ManagedAgent implements Basic { public BasicAgent() throws RemoteException { } } // BasicAgent Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing Metaglue Agents The second most basic agent interface   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public interface Basic extends Managed { public void tellMe() throws RemoteException;  } // Basic An exported method is thus declared in an interface… Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing Metaglue Agents The second most basic agent   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public class BasicAgent extends ManagedAgent implements Basic { public BasicAgent() throws RemoteException { } public void tellMe() throws RemoteException { log(“I am “ + getAgentID()); log(“My society is “ + getSociety()); log(“My designation is “ + getDesignation(); log(“I am running on “ + whereAreYou()); } // BasicAgent An exported method is thus declared inside an agent itself… Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing Metaglue Agents The second most basic agent   package newbie.tutorial; import metaglue.*; import java.rmi.*; import agentland.resource.*; public class BasicAgent extends ManagedAgent implements Basic { public BasicAgent() throws RemoteException { } public void tellMe() throws RemoteException { log(“I am “ + getAgentID()); log(“My society is “ + getSociety()); log(“My designation is “ + getDesignation()); log(“I am running on “ + whereAreYou()); } // BasicAgent Primitives that allow the agent to find out about its own identity We will talk about logs later… Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Fundamental Metaglue Primitives reliesOn() returns a pointer to proxy representing an instance of the agent with specified AgentID; if necessary, the agent is first started. tiedTo() should only be called in the constructor! It ensures that the agent runs on a particular machine or on the same VM as another agent. Agent reliesOn(AgentID aid) Agent reliesOn(String occupation) Agent reliesOn(String occupation, Object designation) reliesOn is for direct communication void tiedTo(String hostName) void tiedTo(AgentID anotherAgent) void tieToDesignation() Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Fundamental Metaglue Primitives reliesOn() returns a pointer to proxy representing an instance of the agent with specified AgentID; if necessary, the agent is first started. tiedTo() should only be called in the constructor! It ensures that the agent runs on a particular machine or on the same VM as another agent. Agent reliesOn(AgentID aid) Agent reliesOn(String occupation) Agent reliesOn(String occupation, Object designation) These two methods take the society from the current agent void tiedTo(String hostName) void tiedTo(AgentID anotherAgent) void tieToDesignation() Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing Metaglue Agents – reliesOn() The not-so basic agent   package newbie.tutorial; import metaglue.*; import agentland.resource.*; import java.rmi.*; public class NotSoBasicAgent extends ManagedAgent implements NotSoBasic { Basic basic; public NotSoBasicAgent() throws RemoteException {   basic = (Basic) reliesOn( Basic.class ); } public void test() throws RemoteException { log( “calling tellMe() from the basic agent:” ); basic.tellMe(); } // BasicAgent Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing Metaglue Agents – reliesOn() Note that the whole reliesOn process happens in terms of interfaces and not actual agents. What you get back from reliesOn is an object that implements the same interface as the agent but you do not get the agent itself! The not-so basic agent   package newbie.tutorial; import metaglue.*; import agentland.resource.*; import java.rmi.*; public class NotSoBasicAgent extends ManagedAgent implements NotSoBasic { Basic basic; public NotSoBasicAgent() throws RemoteException {   basic = (Basic) reliesOn( Basic.class ); } public void test() throws RemoteException { log( “calling tellMe() from the basic agent:” ); basic.tellMe(); } // BasicAgent Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Writing Metaglue Agents – reliesOn() The not-so basic agent   package newbie.tutorial; import metaglue.*; import agentland.resource.*; import java.rmi.*; public class NotSoBasicAgent extends ManagedAgent implements NotSoBasic { Basic basic; public NotSoBasicAgent() throws RemoteException {   basic = (Basic) reliesOn( Basic.class ); } public void test() throws RemoteException { log( “calling tellMe() from the basic agent:” ); basic.tellMe(); } // BasicAgent But you talk to agents as if they were local objects… Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Logging Messages in Metaglue Better than System.out.println() void log(int logLevel, String message) void log(String logLevel, String message) void log(String message) (defaults to log(“INFO”, message)) Log levels: As ints: LogStream.DEBUG LogStream.INFO LogStream.WARNING LogStream.ERROR LogStream.CRITICAL String shortcuts: “DEBUG” “INFO” “WARNING” “ERROR” “CRITICAL” Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Oxygen Alliance Annual Meeting — June 12 - 13, 2002 More on Logging You can specify in your agent what kind of messages from a given agent should appear on the console window: void setLogLevel(int logLevel) Example: public BasicAgent() throws RemoteException {   setLogLevel(LogStream.DEBUG); } Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Why bother with Logging? In a distributed system, the console/launcher window can be the standard out <stdout> for many agents These logs will be very confusing to use if you want to track the progress of a particular agent Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Viewing Logs – agentland.debug.PowerTester Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Viewing Logs – agentland.util.LogMonitor The LogMonitor agent will bring up the same logging window as in the previous slide, but it does not need to use the PowerTester agent LogMonitor will list all agents which are currently running on the catalog currently in use Even itself ! Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Sending and Receiving Messages – metaglue.Notifier Producer of a message Subscriber Notifier Subscriber Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Oxygen Alliance Annual Meeting — June 12 - 13, 2002 Anatomy of a Message Messages are represented by instances of the object “Secret” Name device.light.stateUpdate.on Details – any Serializable object Source – AgentID of the sender Time stamp – the time when the secret was first created based on the clock of the machine where the sender is located Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Oxygen Alliance Annual Meeting — June 12 - 13, 2002 Naming of Messages Names based on the Agent’s full heirarchical name For the agent named device.Light device.Light.stateUpdate.on device.Light.stateUpdate.off When you subscribe to device.Light you will receive device.Light.stateUpdate messages as well The same as subscribing to device.Light.* When you subscribe to device.*.stateUpdate, you will receive state updates from all devices Subscribing to notifications should happen in the startup() method Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Subscribing to Notifications   package newbie.tutorial; import metaglue.*; import agentland.resource.*; import java.rmi.*; public class BasicAgent extends ManagedAgent implements Basic { public BasicAgent() throws RemoteException {   addSpy( “tutorial.basic.StateUpdate” ); } public void tell( Secret s ) throws RemoteException {   if ( s.isA( “tutorial.basic.StateUpdate” ) ) log( “Received new state “ + s.details() ); } // BasicAgent Processing notifications tell() is the default method for processing notifications Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Subscribing to Notifications   package newbie.tutorial; import metaglue.*; import agentland.resource.*; import java.rmi.*; public class BasicAgent extends ManagedAgent implements Basic { public BasicAgent() throws RemoteException {   } public void tell( Secret s ) throws RemoteException {   if ( s.isA( “tutorial.basic.StateUpdate” ) ) log( “Received new state “ + s.details() ); } public void startup () { addSpy( “tutorial.basic.StateUpdate” ); } // BasicAgent Check what kind of message has been received before working with it Subscribing to a family of notifications Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Subscribing to Notifications – cont.   package newbie.tutorial; import metaglue.*; import agentland.resource.*; import java.rmi.*; public class BasicAgent extends ManagedAgent implements Basic { public BasicAgent() throws RemoteException {   } public void action( Secret s ) throws RemoteException {   if ( s.isA( “tutorial.basic.Action” ) ) log( “Received an action notification “ + s.details() ); } public void startup () { addSpy( “tutorial.basic.Action”, “action” ); } // BasicAgent Processing notifications through a custom method Specifying the method to process notifications Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Sending Notifications   package newbie.tutorial; import metaglue.*; import agentland.resource.*; import java.rmi.*; public class BasicAgent extends ManagedAgent implements Basic { public BasicAgent() throws RemoteException { } public void doMyThing() throws RemoteException { // do something Object stateObject = getState(); notify( “tutorial.basic.StateUpdate”, stateObject ); } // BasicAgent Sending a notification Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Oxygen Alliance Annual Meeting — June 12 - 13, 2002 Building Agents These can be run from ~/metaglue or the source code area in ~/metaglue/newbie/tutorial/ Compile all of the java source files make javac Remember, Java is NOT Python. You must recompile after making changes! <edit to fix errors> Compile the implementation files make rmic Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Oxygen Alliance Annual Meeting — June 12 - 13, 2002 Running Agents First start the catalog: mg_catalog [-purge] purge will remove any previous maps and registered agents from the database when it starts the catalog. Only one of these is allowed on a computer. Then start a Metaglue platform: agent society catalogHost [agent name] Any agent can be started by providing the agent’s name (the package interface. This will never end with “Agent”) Not including an agent namewill start an empty Metaglue platform ready to receive agents. or the agent tester: mg_agent society catalogHost agentland.debug.PowerTester Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Oxygen Alliance Annual Meeting — June 12 - 13, 2002 Dialog boxes Many messages pop up asking for values. These are the part of the customization of Metaglue through remembered attributes The defaults for most of them are fine. Those that don’t have defaults: username for agentland.society.Society None needed for the class, but enter your name if you like. Others will be particular to the agents you are running. See the class material for information on those. Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002

Statistics on Metaglue 10 Tons of fun: There are over 450 agents that exist within Metaglue Between 50 and 80 agents are running the intelligent room You are using more than 10 agents just while running the X10BasicLightControl Test it! Use agentland.util.LogMonitor Metaglue has been in development since 1998 The system is used in several offices and homes including the office of the AI lab director, Rodney Brooks There are 2 full spaces at MIT (a 3rd is coming soon!) and one space in Australia running Metaglue Why not get your own? Presenter name goes here — MIT Artificial Intelligence Lab or Lab for Computer Science (delete one) Oxygen Alliance Annual Meeting — June 12 - 13, 2002