Contents | Package | Class | Tree | Deprecated | Index | Help
PREV | NEXT SHOW LISTS | HIDE LISTS

Class cornell.slk.jkernel.core.Task

java.lang.Object
    |
    +----cornell.slk.jkernel.core.Task

public final class Task
extends java.lang.Object
A J-Kernel Task is a collection of classes, objects, and thread segments, clearly separated from other tasks.


Constructor Summary
 Task(Resolver resolver)
This creates a new task, which is a subtask of the current task.

The resolver maps class names to bytecode in cases where the system loader cannot find a class with a given name.

When a task is first created, it contains no objects, no classes, and and no threads.
 

Method Summary
static void  addResolver(Resolver resolver)
addResolver appends a resolver to the current task's list of resolvers.
static Task  currentTask()
Returns the current task.
void  enableNativeCode()
Enable a new task to load native code.
static java.lang.Class  getClass(java.lang.String className)
Returns the Class object associated with a name in the current task.
static java.io.PrintStream  getDebugStream()
For debugging purposes only.
static Repository  getRepository()
Return the system repository.
Capability  seed(java.lang.String className)
Creates an object in a new task, and returns a Capability to that object.

When a task is first created, it contains no objects and no threads.
static void  setErrorStream(java.io.PrintStream errStream)
Set the stream that errors generated by J-Kernel get dumped to.
static void  setRepository(Repository r)
 
static SharedClass  shareClass(java.lang.String className)
Creates a SharedClass object for a class so that other tasks can share the class.
void  terminate()
Shut down a task.
java.lang.String  toString()
 
 
Methods inherited from class java.lang.Object
 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Task

public Task(Resolver resolver)
This creates a new task, which is a subtask of the current task.

The resolver maps class names to bytecode in cases where the system loader cannot find a class with a given name.

When a task is first created, it contains no objects, no classes, and and no threads. The task must be seeded with an object in order for any objects to exist in the task, and the seed object must be invoked in order for control to pass into the task.
Method Detail

enableNativeCode

public void enableNativeCode() throws java.lang.SecurityException
Enable a new task to load native code. This method should be called immediately after a new task is created, before the new task is seeded. This method will only work if the current task also has the right to load native code. Otherwise, a SecurityException is thrown

seed

public Capability seed(java.lang.String className) throws RemoteException
Creates an object in a new task, and returns a Capability to that object.

When a task is first created, it contains no objects and no threads. The new task must be seeded with an object in order for any objects to exist in the new task, and the seed object must be invoked in order for control to pass into the new task.

The seed method creates a new object of the class given by the fully qualified class name "className" in the new task (this name is resolved in to a Class object in the new task). This class must be public, it must implement a remote interface, and it must have a public constructor taking no arguments. The seed method creates a capability for the new object and returns this capability. The seed method can only be called once for each task. Any calls to seed after the first call will result in a SecurityException.

currentTask

public static Task currentTask()
Returns the current task.

terminate

public void terminate() throws java.lang.SecurityException
Shut down a task. When a task is terminated, all of its child tasks are revoked, all of its capabilities are revoked, and all of its thread segments are killed.

getRepository

public static Repository getRepository()
Return the system repository. The repository is shared among all tasks, and is used to export capabilities from one task to another.

The following are standard entries in the repository:

setRepository

public static void setRepository(Repository r) throws java.lang.SecurityException

getClass

public static java.lang.Class getClass(java.lang.String className) throws java.lang.ClassNotFoundException
Returns the Class object associated with a name in the current task. In each task, a class name can be mapped to at most one Class object. If getClass does not have a Class object for a certain name, it will query the task's resolvers to find bytecode for the name, or to find an existing shared class. If it finds the bytecode, it will create a new Class object based on the bytecode and return it. If it finds a shared class, it will use the shared class. Otherwise, getClass throws a ClassNotFoundException "className" must be a fully qualified class name.

shareClass

public static SharedClass shareClass(java.lang.String className) throws java.lang.ClassNotFoundException
Creates a SharedClass object for a class so that other tasks can share the class. For any class in the current task, calling shareClass with the name of the class creates a SharedClass object that can be passed to other tasks. Other tasks' resolvers can use the SharedClass object to use the class.

Shared class cannot have static fields. In addition, any class referred to by a shared class must also be shared.

Shared classes generally fall into one of two categories: "className" must be a fully qualified class name.

addResolver

public static void addResolver(Resolver resolver)
addResolver appends a resolver to the current task's list of resolvers. When a task is looking for bytecode for a class name, it queries each of its resolvers in its list of resolvers, in order, until one of the resolvers returns bytecode for the given name. addResolver puts a new resolver at the end of this list, which means the new resolver only gets a chance to resolve a name if the previous resolvers could not find bytecode for the name.

getDebugStream

public static java.io.PrintStream getDebugStream()
For debugging purposes only. This method may be eliminated eventually.

setErrorStream

public static void setErrorStream(java.io.PrintStream errStream)
Set the stream that errors generated by J-Kernel get dumped to. By default, this is set to the system's System.out.

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

Contents | Package | Class | Tree | Deprecated | Index | Help
PREV | NEXT SHOW LISTS | HIDE LISTS