Release
Notes for Aglets Workbench
These are the release notes for AWB Alpha 5. This
alpha 5 release with its following bug-fixed release will be the last release
of ALPHA stage. Below you will find a list of changes made since
the Alpha 4 release.
-
What's new
-
Changes
-
Experimental features
-
Temporary features
-
Expected Changes in the future release
-
Fixed bugs
-
Known Issues
What's new?
-
Delegation Event Model. The Delegation Event Model is introduced
in this release, which is well known as the event model of AWT1.1. The
programmer can use Listener interface/Adapter classes to implement the
actions needed to be taken before/after the event. Here is an example,
public class MyAglet extends Aglet {
Frame f = ....;
public void onCreation(Object init) {
// this automatically keep the state of frame and hide/show
// the frame in response to dispatch request.
addMobilityListener(new MobilityListener() {
boolean showing = false;
public void onDispatching(MobilityEvent ev) {
showing = f.isShowing();
}
public void onReverting(MobilityEvent ev) {
onDispatching(ev);
}
public void onArrival(MobilityEvent ev) {
if (showing) f.show();
}
});
}
public boolean handleMessage(Message msg) {
if(msg.sameKind("go")) {
// Here, you don't have to care about the state of Frame
dispatch(...);
}
}
}
Message delegation. An aglet can delegate incoming messages to other
aglets..
Aglets Server Development API. The Aglets Server Development API
allows an application to embed the Aglets Server in it and to control the
server to send/create/receive aglets.
Aglets Client API. The Aglets Client API allows an application to
create/control aglets remotely. With this API, an client application make
use of an aglet and/or obtains a variety of services without the AgletServer/Context
capabilities. Here is an example,
AgletProxy aglet = Aglets.createAglet("atp://aglet.server", null, "SearchAglet", "stockData");
Object result = aglet.sendMessage(new Message("startSearch"));
Applet based Aglet Server. The Aglet Server implemented as an Applet
without the capability of receiving aglets (listening port). This comes
with the server side "Router" which allows an aglet to move from browser
to arbitrary hosts other than the codebase of the Applet.
Easy configuration to enable RMI/JDBC. So far, it was difficult
for an aglet to use RMI/JDBC facilities because it requires complicated
security configuration. The improved security configuration in alpha
5 makes it easy to enable these facilities for aglets.
Improved message control. New message priority NOT_QUEUED, ACTIVATE_AGLET
has been added.
Changes
-
API Changes.
-
Delegation Event Model, Aglets Server Development API, Aglets Client API
are added
-
AgletInfo is introduced as a general way to access the information of aglet,
instead of defining methods for each attributes.
-
Some of the class names has been shortened so that the name length does
not exceed 31 characters. (for Mac)
-
Itinerary has been removed.
-
Property has been removed from Aglet and AgletProxy class.
-
ReplySet has been introduced to handle multiple future replies.
-
InvalidAgletException has been removed from Aglet class.
-
Deactivating an aglet does not remove its AgletProxy from the context.
-
Method calls via AgletProxy (dispose, dispatch, etc.) are integrated into
the messaging mechanism, which means that aglet events are not called unless
an aglet exists the monitor. For examle,
public class MyAglet extends Aglet implements MobilityListener {
public void onCreation(Object init) {
addMobilityListner(this);
}
public void onDispatching(MobilityEvent ev) {
// this will never be called
}
public void run() {
dispatch(this);
for(;;) {
doSomething();
}
}
}
The "-commandline" option for agletsd had been added to specify the command line mode.
The "-nogui" option for agletsd had been modified to specify the no user interface mode.
Experimental Features
These are experimental functions which are in the design phase and may
possibly be removed in the future.
-
Snapshot. Simple and light weight mechanism to recover an aglet's
state in case of server crash. When the server crashes and you had a snapshot
created before by using the Aglet.snapshot() method call, the aglet is
activated again (with the same state at the point in time of the snapshot
creation).
-
HTTP message handling. This adds a Servlet-like functionality to
receive an HTTP/CGI requests from a Web browser and send HTML pages back
to the browser.
Temporary Features
These features will be removed in the beta release.
-
ManualSerialization (since Alpha 4). This
will be removed once most of platforms support JDK1.1.
-
Migration Package. The migration package (called aglet.a4compatibility)
is provided to make it easy to migrate the programs written in Alpha 4
API to alpha 5 API. This will be removed in the beta release.
Expected changes in the future release.
-
Package names may have to be changed so that these starts with COM.ibm
.....
-
Exceptions defined in the J-AAPI will be redesigned.
-
You will have to explicitly "export" Aglet and AgletContext objects in
order to make them accessible/visible from remote hosts, either by calling
API or by specifying attributes.
-
Security related APIs will be added.
-
The deprecated/obsolete APIs will be removed
in the beta release.
-
Server Development API and Client API may have to be polished.
-
Beta version will not run on JDK1.0.2
Bugs fixed since Alpha 4c release
-
Most of methods on AgletProxy for a remote aglet did not work. The
"activate()" method still doesn't work and this will be fixed in the future.
-
Security configurations between aglets didn't work properly.
-
The aglets deactivated in multiple servers running in the same host but
using different port were activated in one server.
-
Creation of security profiles failed in some cases.
-
During dispatching, an aglet class is automatically reloaded if its class
definition is updated. You need to explicitly reload classes to CREATE
an aglet that uses new classes. This will be fixed in a future release.
-
And many minor bugs are fixed.
ManualSerialization: A temporary solution for platforms
which have no ObjectSerialization.
Aglets Workbench requires ObjectSerialization package which
is available in JDK1.1 or RMI-preBeta2 for JDK1.0.2. For those platforms
which have no ObjectSerialization, aglets provides ManualSerialization
as a temporary solution.
How to use our temporary serialization package
First of all, you must install the AWB and related packages. Please follow
installation guide in the packages.
When you start Tahiti, you must specify the "-manual" option to enable
ManualSerialization facilities.
All the classes that you want to transfer (or serialize) must implement
java.io.Externalizable and corresponding methods. In addition, these classes
must be public and must have public and zero-argument constructors without
any-side-effects (because our temporary serialization package is
written in pure Java :-) Please refer to the following demo programs.
-
examples.manual.TalkMaster
These programs work with our serialization package.
Our serialization package is not compatible with the
RMI's serialization stream format. This means that aglets created with
the RMI's serialization cannot be sent to servers running our serialization
and vice versa. But the same source code and binary is fully compatible
and will work with JDK1.0.2 + RMI environment and JDK1.1 environment.
To serialize your object with our serialization package, please make
sure that the class is *public* and have a public constructor with *no*
arguments. This constructor is used in our serialization package. Please
remember that it may cause some security problems.
Changes to J-AAPI (From Alpha 4 to Alpha 5)
Added APIs
-
aglet.Aglet#getAgletInfo
-
aglet.Aglet#addCloneListener
-
aglet.Aglet#removeCloneListener
-
aglet.Aglet#addMobilityListener
-
aglet.Aglet#removeMobilityListener
-
aglet.Aglet#addPersistencyListener
-
aglet.Aglet#removePersistencyListener
-
aglet.Aglet#waitMessage
-
aglet.Aglet#notifyMessage
-
aglet.Aglet#notifyAllMessages
-
aglet.Aglet#exitMonitor
-
aglet.Aglet#snapshot
-
aglet.AgletProxy#getAgletInfo
-
aglet.AgletProxy#activate
-
aglet.AgletPRoxy#delegateMessage
-
aglet.AgletContext#start
-
aglet.AgletContext#shutdown
-
aglet.AgletContext#addContextListener
-
aglet.FutureReply#getIntReply
-
aglet.FutureReply#getDoubleReply
-
aglet.FutureReply#getFloatReply
-
aglet.FutureReply#getBooleanReply
-
aglet.FutureReply#getCharReply
-
aglet.FutureReply#getLongReply
-
aglet.Message#sameKind
-
aglet.Message#getKind
-
aglet.Message#getTimeStamp
-
aglet.Message#getArg
-
aglet.MessageManager#destroy
Removed APIs
-
Classes
-
Itinerary (-> aglet.a4compatibility )
-
AgletClassNotFoundException
-
AgletInstantiationException
-
Methods
-
aglet.Aglet#setProperty
-
aglet.Aglet#getPropert
-
aglet.Aglet#getPropertyKey
-
aglet.Aglet#setItinerary
-
aglet.Aglet#unsetItinerary
-
aglet.AgletProxy#getProperty
-
aglet.AgletProxy#isRemote
-
aglet.AgletProxy#isActive
-
aglet.MessageManager#suspend
-
aglet.MessageManager#resume
Renamed APIs
-
Classes
-
MessageNotHandledException-> NotHandledException
-
ServerNotAvailableException -> ServerNotFoundException
Deprecated/Obsolete APIs
These remain in the APIs only for the purpose of backward compatibility.
Please do not use these methods.
-
Methods
-
aglet.Aglet#getAgletIdentifier
-
aglet.Aglet#getCodeBase
-
aglet.AgletID#constructor
-
aglet.AgletID#toByteArray
-
aglet.AgletInfo#constructor
-
aglet.AgletInfo#writeExternal
-
aglet.AgletInfo#readExternal
-
aglet.AgletProxy#getAgletIdentifier
-
aglet.AgletProxy#getCodeBase
-
aglet.AgletContext#activateAglet
-
aglet.AgletContext#getAgletProxy(URL, AgletID id)
-
aglet.AgletContext#retractAglet(URL)
-
Member Variables
-
aglet.Message#arg
-
aglet.Message#timestamp
-
aglet.Message#kind
Experimental features
Temporary features
Please note that these features will disappear in the future.
-
The ImageData class is provided for transferring image data.
[ TRL home page
|
IBM Research home page ]
[
IBM home page
|
IBM Japan
|
Order
|
Search
|
Contact
|
Legal
]