Object Spaces Article Index for
Object
Website Links For
Object
 

Information About

Object Spaces




''Object Spaces'', as a computing paradigm, put forward by Dr. David Gelernter at Yale University . A language called Linda was developed to support the concept of global object coordination.


CONCEPT


''Object Space'' can be thought of as a virtual repository, shared amongst providers and accessors of network services, which are themselves abstracted as objects. Processes communicate among each other using these shared objects — by updating the state of the objects as and when needed.

An object, when deposited into a space, needs to be registered with a ''Object Directory'' in the ''Object Space''. Any processes can then identify the object from the ''Object Directory'', using properties lookup, where the property specifying the criteria for the lookup of the object be itsname or some other property which uniquely identifies it. A process may choose to wait for an object to be placed in the ''Object Space'', if the required object is not already present.

Objects, when deposited in an ''Object Space'' are passive, i.e., their methods cannot be invoked while the objects are in the ''Object Space''. Instead, the accessing process must ''retrieve'' it from the ''Object Space'' into its local memory, use the service provided by the object, update the state of the object and place it back into the ''Object Space''.

This paradigm inherently provides Mutual Exclusion . Because once an object is accessed, it has to be removed from the ''Object Space'', and is placed back only after its has been released. This means that no other process can access an object while it is being used by one process, thereby ensuring mutual exclusion.

The main advantages of using ''Object Spaces'' are listed below.
  • No explicit code needs to be written for a Service Provider to act as a server. The service needs to be encapsulated as an object and it needs to be put in an ''Object Space''. The server need not even explicitly maintain the ''Object Space''.

  • The client need not worry about how to communicate with the server.



USAGE

''Object Spaces'' paradigm has been implemented by Sun Microsystem's JavaSpaces , among others. To build applications using ''Object Spaces'', one needs to make ''Distributed Data Structures'', which is a data structure that consists of objects stored in one or more ''Object Spaces''. When these objects are accessed, the run-time support of the ''Object Space'' implementation automatically retrieves the object from its ''Object Space'', and puts it back when the object is used.

The following example shows an application made using JavaSpaces , which requires Jini . First, an object, to be shared in the ''Object Space'' is made. Such an object is called an ''Entry'' in JavaSpace terminology. Here, the ''Entry'' is used to encapsulate a service which returns a ''Hello World!'' string, and keeps track of how many times it was used. The server which provides this service will create an ''Object Space'', termed ''JavaSpace'' by JavaSpaces . The ''Entry'' is then ''written'' into the ''JavaSpace''. The client ''reads'' the entry from the ''JavaSpace'' and invokes its method to access the service, updating its usage count by doing so. The updated ''Entry'' is written back to the ''JavaSpace''.

//An Entry class
public class SpaceEntry implements Entry
{
public final string message = "Hello World!";
public Integer count = 0;

public String service()
{
count = new Integer(count.intValue() + 1);
return message;
}

public String toString()
{
return "Count: " + count.toString();
}
}

//Hello World! server
public class Server
{
public static void main(String {Link without Title} args)
{
try
{
SpaceEntry entry = new SpaceEntry(); //Create the Entry object
JavaSpace space = (JavaSpace)space(); //Create an Object Space
//Register and write the Entry into the Space
space.write(entry, null, Lease.FOREVER);

//Pause for 10 minutes and then retrieve the Entry and check its state.
  • 60---1000);

  • SpaceEntry e = space.read(new SpaceEntry(), null, Long.MAX_VALUE);

System.out.println(e);
}
catch (Exception e) {}
}
}

//Client
public class Client
{
public static void main(String {Link without Title} args)
{
try
{
JavaSpace space = (JavaSpace) space();
SpaceEntry e = space.take(new SpaceEntry(), null, Long.MAX_VALUE);
system.out.println(e.service());
space.write(entry, null, Lease.FOREVER);
}
catch (Exception e) {}
}
}


REFERENCES

  • ''Distributed Computing'' (First Indian reprint, 2004), M. L. Liu

  • [http://www.jiniworld.net/document/javaspace/The%20Nuts%20and%20Bolts%20of%20Compiling%20and%20Running%20JavaSpaces(TM).htm Jini World]