Change Log

Changes to FIPA-OS v2.2.0

FIPAOSFactory

The FIPAOSFactory is a factory for factories. The mapping for factories is contained within the fipaos-factory.properties. These mappings are used by the FIPAOSFactory to load the default factories that are to be made available to FIPAOS. It is then possible to request the FIPAOSFactory for a factory for a specific implementation. It is then possible to have different implementations of factories for particular configurations of FIPAOS that can alter the components or behaviour of components in a configurable manner.

FIPAOSException

Better error handling and support for wrapping multiple wrapped exceptions.

FIPAOSAgent

Method added for DF registration.

Updated to use the DataMapperFactory.

Conversation Manager

Contribution from Andres Ederra – hasActiveConversations()

ConversationImpl

Contributions from Andres Ederra(fix fipa-query), Yun Ding(fix not-understood loop)

FIPAOSAgent

Updated to make use of the DatamapperFactory

DefaultTransportProvider

Updated to use FIPAOSFactory

Message

SetEnvelope() method added

MTS

Updated to use FIPAOSFactory

SenderThread

Updated by Ovidiu-Valentin Drugan  to handle content-transfer-encoding

ConnectionThread

Updated by Ovidiu-Valentin Drugan  to handle content-transfer-encoding

TransportProvider

Updated to use FIPAOSFactory

ACL

String-ACL format code removed and moved into fipaos.parser.acl.string.Parser

SubscriptionAction

Base class useful for subscription.

DFSubscriptionAction

DF specific subscription actions

AgentID

References to ACLParser removed

AgentManagementAction

References to ACLParser removed

DFAgentDescription

Added setAgentID method

Deprecated get/setAgentName

Envelope

setPayloadLength() PAYLOAD_ENCODING changed to PAYLOAD_LENGTH

PropertyTemplate

 made serializable

ParserException

Now extends FIPAOSException with the functionality moved to the superclass

acl.bitefficient.Parser

Incorporated into the new Datamapping Architecture

acl.string.Parser

Byte-length encoding bug fixed

Reply-with bug fixed – reply-with slot was not being set when parsing a stringified ACL message

Incorporated into the new Datamapping Architecture

Abstract Datamapping Architecture

Abstract datamapping architecture developed from code contributed by Bob Krause. This is an abstract layer between the data representation and the concrete instance. The inteface presented is marshall and unmarshall and the architecture supports java properties, abstract script (with implementations of bat and sh binders) and XML(see fipaos.parser.databinding package).

sl0.ParserTokenManager & Parser

References to ACLParser removed

DF Subscription

Updated subscription mechanism in the DF to allow agents to subscribe to the DF and be informed of updates to the DF database for agents that register, deregister or modify their DFAgentDescription registered with the DF.

DFModifyTask

Basic functionality added to provide a task similar to DFSearchTask

AMSTask

Updated to make use of new FIPAOSFactory class to simplify addition of new TransportProvider instances

DFGUIAgent

Timing bug fixed

DFAgentDescriptionMapDialog

 

Modifications to make JDK1.1 compatible

FIPAOSClassLoader

FIPAOS now has its own class loader. This has been created to try and alleviate the problems encountered with setting of the classpath and configuration issues associated with the previous method of setting environment variable in the SetupFIPAOS.bat/sh files.

AgentLoader

Configurable aggressive garbage collection added to the AgentLoader.

StartFIPAOS

Concrete implementation that will interact with the datamapper(Script binder) for the StartFIPAOS.bat/sh scripts.

FIPAOSProperties

Concrete implementation that will interact with the datamapper(properties binder) for the fipa-os.properties file.

FIPAOSWizard

Updated inline with FIPAOSClassloader mechanism.

Updated to use the system property "user.dir" to locate the current directory rather than assuming OS has set current-dir correctly....

This allows better compatibility with the Installer, since the Installer can change the current-directory by simply specifying "-Duser.dir=x" as an option when launching the Wizard

Moved functionality from the Configurator into the Wizard:

Default Agent Profile

Agent Loader

Installation Properties

Aggressive Garbage Collection

DocumentRetriever

Bug fix by Bob Krause.

Updated inline with FIPAOSClassloader mechanism.

Dynamic Class

populate() and unpopulate() methods added to set/get all properties of an object to/from a Map

Changes to FIPA-OS v2.1.0

ACL

·         Added getReceiverAID() method to enable easy access to first entry in receivers field.

·         Added FIPA_OS_SERIALIZATION as an encoding mechanism.

·         Fixed auto-encoding/decoding mechanisms for XC00070F compliance.

Action, DoneAction, Result

New wrapper objects that allow SL-style context to be added to the content of an ACL message. A content action message can now be split into an actor and an action. A content result message can now contain the original action object plus a result object.

AgentCommunicationChannel

AgentID

Added getDynamicClassPropertyHints() method for use with the DynamicClass.getProperties() mechanism

Added public int hashCode() for obtaining a unique hashCode for an AgentID. This allows AgentID objects to be used correctly inside a Hashtable. When 2 unique AgentID objects are created from equivalent String objects, the hashCodes will be equal and so the AgentID’s will overwrite each other in the Hashtable.

AgentManagementSystem

Re-added public constructor for use with AgentLoader

Comparators

Updated to allow STRING_COMPARE to accept arbitrary objects and use toString() to obtain a Stringified representation to compare.

Content, ContentUtil, ContentValue, RDFContentHandler, XMLContentHandler

Deprecated due to introduction of XML data-binding.

ConversationImpl

Removed all notions of a Conversation occurring between more than two Agents at once, hence simplifying the logic of this class (since an Agent is either the initiator or participant within a conversation, all uses of findParticipant() have been removed).

                       

Multicast is still treated as a special case (since multicasts are assumed not to follow a protocol, these constraints on the Conversation are unnecessary).

Added better support for multicast messages. Removed case-sensitivity for AgentIDs and performatives.

ConversationManagerImpl

Added functionality to enable notification of message delivery abnormalities to ConversationListener.

Added guards to prevent un-expected NPE's (these are caused by a Conversation object being removed whilst checkState() is being invoked).

DatabaseFactory

Removed deprecated method getDatabase( String name, String classname ). A database must now be created using a name and a database profile object.

DFListenerTask

Incorporated fixes by Michael Dobisek. Conversation ID wasn't being saved correctly for use when ending the Task.

DFSearchTask

Updated content of messages to be sent to DF so they use AMA     objects rather than String's

DIAGNOSTICS

Added ability to completely disable DIAGNOSTICS by using the command line switch

-Ddebug.off=true.

Renamed variable _diagnostics_off to __diagnostics_off

Updated to cater for ThreadPool threads (DIAGNOSTICS get the ThreadGroup that they belong to).

DirectoryFacilitator

Added code to deregister with AMS when shutting down

Added constructor to enable instantiation within a MicroFIPAOS environment.

DocumentRetriever

Synchronized the methods to prevent problems with file sharing between multiple agents.

DynamicClass

Added ImmutableHint inner-class to allow representation of the fact than an object is immutable (assumes object takes a single String as an argument to its constructor, and has a toString() method which are related)

Envelope

Updated to allow messaging events to be propagated using the MessageListener interface.

FIPAOSAgent

FIPAOSConfiguratorGUI

Added control of thread management to the GUI and "NoDatabase" option to default agent profile.

FIPA-OS Configuration Wizard

Created TransportDefinition class to allow easier configuration of transports that do not use an external naming service program (such as Stefan Channing's HTTP transport).

Made JDK1.1 compatibility changes (i.e. updated java.util.Tree constructors to use fipaos.util.Comparators.* as comparators).

Updated so that CORBANAME protocol replaces use of IIOP protocol.

IOR

Added code to attempt to resolve IOR, to indicate if an IOR is usable by the JavaIDL implementation.

IOTestAgent

Updated send() method to accept Message objects rather than ACL messages to enable VisualACLParser to modify envelope parameters.

LoaderGUI

Made JDK1.1 compatibility changes (i.e. changed from JList.setListData( Vector ) to JList.setListData( Object[] ) )

New ACL Parser

A new ACL parser implementation has been created that does not rely on JavaCC.

New External HTTP Transport

Added a new external HTTP transport that has been contributed by Stefan Channing.

New FIPA-OS Tutorial: eMarkets

Added the eMarkets tutorial to FIPA-OS. This is an example framework for building electronic marketplaces using the FIPA-OS agent platform.

PingAgent

Updated code to correctly return the number of PingAgents found in initial DF query.

Changed the ping agent response message to use the same ACL encoding (plain or bit-efficient) as the initial query-ref message.

RMIComms

Removed caching of references (now taken care of in MTPBase), and added "live" check into sendMessage().

RuntimeProtocol

Updated to use an AgentID instead of a String for the ID of the agent that owns the conversation.

StartFIPAOS Script

Updated based upon Andrés Ederra's contribution.

SUNIIOPComms

Updated to handle use of CORBANAME URL's, and publish its own CORBANAME URL.

Task

TaskManager

ThreadPool

The run() method now resets local references to null as soon as possible to improve garbage collection.

Added support for:

TaskGenerator

Fixed a bug where NotUnderstood handler method did not contain protocol prefix.

URL.

Updated built-in test harness to check that the CORBANAME style URL can be handled

WaitTask

No longer blocks. Makes use of the TM timeout facility to provide the same functionality.

XMLDataBinding

Added cloneDataboundObject method to allow decoupling of copied data-bound objects.

XML Envelope Representation

Added an XML representation of the FIPA Envelope to support specification XC00085G.

Zeus data-binding is used to convert between the object and XML representations.

Changes to FIPA-OS v2.0.0

Support for RMI over SSL

The RMIComms implementation has been extended to make use of the Java Secure Socket Extension available from the JavaSoft website (http://www.javasoft.com/), enabling secure agent communication.  This can be enabled by specifying the protocol type to be “fipaos-rmi-ssl” rather than “fipaos-rmi” for internal MTP’s used by an Agent.

NOTE: This feature can only be used with Java 2 compatible VM’s.

Return of the DF GUI

A new abstract class called DFGUIAgent has been added to support different types of GUIs for DFs. The class (that fully functional DF GUI agents extend) implements basic functionality for subscribing to DFs, caching DF agent descriptions, listing them, adding in new DFs, informing the Agent about DF content changes and cancelling subscription when shutting down.

SwingDFGUIAgent

SwingDFGUIAgent extends DFGUIAgent and provides FIPA-OS a DF GUI implemented with JDK’s Swing classes. This agent provides basic GUI functionality for viewing DF contents by subscribing to home platform DFs and when wanted querying remote platforms, and also viewing agent registrations/modifications/deregistrations.

Configuration Wizard

In order to simplify the process of configuring FIPA-OS installations, a configuration wizard has been created to simplify the most common configuration issues.  The Configurator is still bundled since the wizard only provides the ability to configure a sub-set of the options available from the Configurator.

DF Subscription

A new feature has been added to the DF to support DFGUIAgent. Agents are now able to subscribe to a DF, and receive updates from the DF every time an agent is registered, modified or deregistered. Subscription only works inside a platform, and uses FIPA’s subscribe protocol.

AMS Rewritten

The AMS has been rewritten using modular Tasks to replace the current monolithic AMSIncomingTask. The AMS supports all the previous supported tasks including register, deregister, modify and search. A new GetDescriptionTask has also been written to handle get-description request. Currently, an empty transport description is returned but this will be addressed in a future release.

XML Databinding Support

Support for XML-specific databinding has been introduced.  In the future this will be generalised to provide generic databinding support for a number of content-encodings.  (Databinding provides a mechanism for stringifying objects into some content encoding).

Agent Loader

The AgentLoader GUI has been revamped to make it more intuitive, and has been updated to safely shutdown Agents when exiting, rather than just killing them immediately.  Agent can also be “activated” (i.e. have their activate() method invoked) by double-clicking their name in the Started-Agent list.

Synchronous Task Execution

Through the incorporation of a new API (fipaos.agent.task.SynchronousTask), Tasks can now be executed synchronously from an Agent implementation, rather than asynchronously.

Conversation, ConversationManager & Message bug-fixes

This hopefully resolves several issues relating to the coupling of Conversation objects, including NullPointerException’s in ConversationManager.checkState(), Conversation.getState(), and the cause of several ProtocolErrorException’s & subsequent intermittent not-understood messages.

Other fixes:

Other improvements:

FIPAOSAgent Shell

Decoupled registration callback methods from the actual Task making the call back to enable use of SynchronousTask within these methods.

Added an inner class TopLevelHandlerTask that allows doneX methods to be implemented at the agent level in order to handle completion of tasks that were created at the agent level.

Removed deprecated overloaded agent registration methods.

Added deregistration API calls:

FIPA-OS Exception Hierarchy

Created a superclass exception FIPAOSException in package fipaos. All future FIPA-OS exceptions will be subclassed under this exception structure.

Platform Registration Exceptions

Created new exceptions for failures in platform registration. The platform registration exception superclass fipaos.platform.RegistrationException has a getExceptionReason() method which allows the programmer to detect a non-critical “agent-already-registered” failure.

Two RegistrationException subclasses have been created to handle DF and AMS registration failure: fipaos.platform.ams.AMSRegistrationException and fipaos.platform.df.DFRegistrationException.

Platform Registration Tasks

Altered AMSRegistrationTask and DFRegistrationTask to simply invoke doneX on their parent task. This replaces the previous registrationX methods in the agent shell.

Platform Deregistration Tasks

Added fipaos.platform.ams.AMSDeregistrationTask and fipaos.platform.df.DFDeregistrationTask to allow agents to easily deregister with the platform agents.

Tutorial Agent Updates

The tutorial agents now override the FIPAOSAgent shutdown() method by using the new agent shell API calls to deregister the agent from the DF and AMS (if registered) before called super.shutdown() to close down the core agent components.

Configuration Tool Updates

Updated the configuration tool to support the new XML data binding profiles. Added support for editing ProtocolProfile objects to the agent profile tab. Added a new tab to allow editing of the AgentLoader profile.

Max-results search constraint implemented in DF

The max-result search constraint has been implemented in the Directory Facilitator. The max-result constraint specifies the number of results that can be returned to the sender.

Interoperability bug-fixes

Added extra DIAGNOSTICS output to SunIIOPComms / MTPBase to aid interoperability testing and debugging, and added error-strings to compliment Service error-codes.  The ACL.toString() method was updated to fix an issue with the format of the ACL message it produced

In order to aid compatibility with various CORBA implementations, the ability to disable the call to org.omg.CORBA.Object._non_existent() has been added when attempting to send a message to a remote ACC using the SunIDLComms MTP.  This can be achieved by adding –Dsunidl.use.non.existent=false to the options for the JVM.

Other miscellaneous changes

Changes to FIPA-OS v1.3.3

Updated Batch/Script files

The Windows Batch and Unix/Linux SH Scripts have been updated so that they automatically add all files with .jar or .zip extension in the imports directory to the classpath, enabling third-party components to be added to the classpath by simply copying them into this directory.

The requirement for the Linux SH Scripts to be executed in the same directory as the SetupFIPAOS script has also been removed (this assumes that the FIPA-OS “bat” directory is in your path).

Xerces XML Parser Updated

The version of the Xerces XML Parser now bundled with FIPA-OS has been upgraded to v1.2.1

Miscellaneous JDK1.1 Compatibility Changes

To enable a simplified process for reverting the FIPA-OS codebase to work with JDK1.1, a number of classes have been modified to rely only on JDK1.1 classes and methods (this excludes collections).

RMIComms

Updated to automatically change the transport address hostname to an IP address if “localhost” is used, and stubs have been re-built to allow use with JDK1.1 (hence these may not be backwardly compatible with previous FIPA-OS releases).

RMI Naming Service

The RMI NS now persistently stores references to Agents using the SerializationDatabase, enabling a NS to be restarted after failure without having to restart all of the Agents on a platform (and hence enabling them to re-register with the NS).  The NS systematically detects “invalid” references after it re-starts, removing them from the NS (where “invalid” indicates the Agent associated with the reference is no longer reachable for some reason).

This functionality requires that the RMI-NS is NOT executed within the same JVM as other Agents, and so no longer automatically starts when required – THE RMI-NS MUST NOW BE MANUALLY STARTED BEFORE AGENTS CAN COMMUNICATE USING RMI

Changes to FIPA-OS v1.3.2

Improved Efficiency (FIPA-OS v1.3.1 Patch 1)

All of the bug-fixes and efficiency improvements from FIPA-OS v1.3.1 Patch 1 have been incorporated into this release, including improved garbage collection for Task’s, Conversation’s, and the more efficient SerializationDatabase implementation:

TaskManager, ConversationManager & PlannerScheduler

Memory leaks involving these components of FIPA-OS have now been plugged - previously the ConversationManager and PlannerScheduler were not archiving Conversations once they were complete.  Task's were also not being removed from the TaskManager upon completion.  Thanks to Robert E Bruce for alerting us to this problem.

Monitor

This class was previously maintaining a reference to the last object retrieved from the Queue it was monitoring until the Queue produced another Object, hindering garbage collection.

PingAgent & DirectoryFacilitator

Some Task's of these Agents were not invoking the done() method upon completion, preventing them from being garbage collected.

SerializationDatabase

This Database implementation previously required the entire DB to be present in memory during a transaction - this has been re-implemented such that this is no longer the case.  The trade-off is that each object in the database is now stored in an individual file within the file-system.

RMIComms & CommMultiplexorService

When an Agent was shutdown and restarted, sometimes messages wouldn't reach it due to a problem introduced by the caching mechanism of the RMIComms object.  The CommMultiplexorService was also mis-using the Map.keySet() method, since it assumed that the Set returned was decoupled from the original Map – this resulted in "missing/unavailable" MTP's in certain circumstances.

AgentLoader

The AgentLoader can now operate without a GUI, either through specifying a command-line option of "-nogui", or by detecting that a GUI cannot be opened (i.e. in a Linux/UNIX OS where X-Windows is not available).

ConversationManager / PlannerScheduler

The existing PlannerScheduler has been amalgamated into the ConversationManager since the current implementation does nothing more than forward Conversation updates.

TaskManager

The TaskManager has been radically changed internally so that an event-based model is used, rather than the “ad-hoc” messaging mechanisms used previously.  The event-types used by the TaskManager can be found in the fipaos.agent.task.event package.

DirectoryFacilitator

Some of the Task’s within the fipaos.platform.df package were not invoking done() correctly – this has been fixed to enable these Task’s to be garbage collected.

Configurator

The ability to select whether the AgentLoader’s GUI should start-up has been built into the Configurator, along with the ability to specify the DIAGNOSTICS levels for output to screen and file.

The Configurator GUI labelling has also undergone the following changes to its labels in order to clarify their meaning:

ACC Profile tab:

"Internal Platform Addresses" => "Platform Transport Naming Services"

"External Platform Addresses" => "External Transport Naming Services"

"Local Address Location" => "Publish Transport Addresses To"

Default Agent Profile tab:

"Internal Platform Addresses" => "Platform Transport Naming Services"

Internal Addresses dialog:

"Internal Addresses" => "Naming Service URL"

External Addresses dialog:

"External Addresses" => "Naming Service URL"

Remote Platform Configuration dialog:

"Addresses" => "Location of published addresses"

"Home Agent Platform" => "Platform name"

JESSAgent

Improved error handling has been incorporated into the JESSAgent shell.

Tutorial Agents

The Tutorial Agents have now been split from the main FIPA-OS Distribution in order to prevent updating tutorials holding back releases of FIPA-OS, and reduce the size of the main download for people simply upgrading.

PingAgent (Tutorial Agent)

A GUI has been added to the PingAgent to enable the current state of the ping’s the Agent performs to be viewed.

FIPAOSAgent class

Updated to make use of the updated TaskManager, and incorporates a new sendNotUnderstood() method which allows a reason to be specified.

SLParser class

This class has now been updated to implement the Parser interface in-line with the RDFContentHandler and XMLContentHandler.

Task class

Removed deprecated methods from the Task class.

DIAGNOSTICS class

The general efficiency of this component has been addressed through the use of StringBuffer’s to improve concatenation speed, the use of separate queues for output to screen and to file, checking of the level of a println() call BEFORE it is added to a queue and the removal of calls to flush() after every println() call.

PlatformProfile class

The getProfileDirectory() method now ensures that the value returned has a “/” or “\” appended as appropriate for the host OS.

StartLoader renamed to StartFIPAOS

This name change has been made in order to enable first-time users to easily identify which batch/script file should be executed to start a (simple) platform.

Improved object de-referencing within FIPA-OS core components

FIPAOSAgent, MTS, MTP’s, Service’s, TaskManager, and ConversationManager components have all been updated to improve the de-referencing of objects at Agent shutdown, in order to improve garbage collection of deceased Agents.

ACC

Bug fixes to the ACC bootstrapping code, which previously prevented initial recovery of remote platform addresses over HTTP.

IOTestAgent

The VisualACLParser and IOTestAgent classes have been re-written to improve the quality of there code, and remove a number of bugs in the UI (including the inability to save).

Changes to FIPA-OS v1.3.1

Tutorial Agents

Minor modifications done to ensure that the FIPAManagement objects constructed satisfy the mandatory attribute requirements.

FIPAOSAgent

A new method getAgentState has been added to FIPAOSAgent to return the state of the agent. Currently, only 2 states are supported: active and unknown.

The FIPAOSAgent String instance variable
_db_class_name has been replaced by a DatabaseProfile instance variable _database_profile. This change fixes the problem with agents ignoring the database location profile parameter.

TaskManager

The Exception handling for done methods and handle methods has been improved so that Exceptions are caught and displayed at diagnostics level 3.

ConversationManager

The ConversationManager constructor now takes a DatabaseProfile passed from the FIPAOSAgent instead of a String containing the database class name. This change fixes the problem with agents ignoring the database location profile parameter.

PlannerScheduler

The PlannerScheduler constructor now takes a DatabaseProfile passed from the ConversationManager instead of a String containing the database class name. This change fixes the problem with agents ignoring the database location profile parameter.

AgentManagementSystem

Changed AgentManagementSystem to reflect the use of a DatabaseProfile instead of just the database class name in order to support correct use of database locations.

DatabaseFactory

The DatabaseFactory method getDatabase(String name, DatabaseProfile profile) now correctly uses the database location from the profile.

DatabaseObject

The DatabaseObject now extends Serializable.

DIAGNOSTICS Object

Two improvements have been made to this class:

  1. The desired diagnostics level no longer has to be explicitly defined within Agent code (using DIAGNOSITCS.setMemoryLevel() or DIAGNOSITCS.setFileLevel()), but can instead be set from the command-line or batch/script file using the Java options -Ddebug.level.memory =x or -Ddebug.level.file=x respectively.
  2. The println() method now uses a buffer to allow Agent implementations to execute independently of how quickly debugging messages are printed.

AgentProfile

The profile wrapper class "AgentProfile" has been updated to allow the configuration tool to edit the default agent profile.

Configuration Tool

The configuration tool now uses the correct separator for the ACC database location on a non-Windows OS.

The configuration tool now displays the last known location instead of an empty box when trying to locate the configuration files

The configuration tool now allows the configuration of the default agent profile "default.profile". The user can set the internal platform addresses, database location, and database type to be used by agents that do not have their own profile.

Agent Loader

The Loader GUI polls the state of the agents stored in the Agent Loader once every 5 seconds to remove agents that have been shutdown.

FIPA Management objects

The FIPA Management objects in the package fipaos.ont.fipa.fipaman should now throw an IlegalArgument exception when a mandatory attribute is missing.

New Executable JAR Installer

A new platform-independant installer has been produced and incorporated into the distribution as an alternative to the plain ZIP and GZ archives

Changes to FIPA-OS v1.3.0

Package moves

The following two packages have moved:

fipaos.fipa => fipaos.ont.fipa

fipaos.ont.fipaman => fipaos.ont.fipa.fipaman

Some files that were previously in the original packages have changed package also, and some have been removed due to updates to meet the FIPA 2000 specifications (see below). New classes (such as Envelope, ACL and others) have been added to represent the relevant FIPA-defined objects within FIPA-OS.

In addition, the following packages have moved:

fipaos.comm => fipaos.mts

Tutorial Agents

Tutorial agents have been adapted to use the new FIPA Management objects and changes made due to package restructuring.

Layered Transport Services & MTS implementation

The underlying Agent transport service has been upgraded to support a layered/stack model for "services" that interact/modify incoming/outgoing messages, and has been upgraded to support the FIPA XC00067B (Message Transport Service) and XC00075C (IIOP Message Transport Protocol) specifications. In-line with the FIPA 2000 specification, the comm package has been renamed to mts (Message Transport Service).

Each MTP now has a transport-level address in the form of a URL, in order to simplify configuration of transports.

TaskManager functionality extended & simplified

Usage of Tasks and the TaskManager has been simplified through the automation of several tasks (such as registration of tasks against conversations, and initialisation of references to the TaskManager), and the addition of the notion of child-tasks. Tutorial 2 highlights use of the enhanced functionality.

Updated profile format

Due to changes within the FIPA-OS architecture, the information required from the platform.profile, acc.profile and various Agent profiles has changed. The most noticeable difference is that URL's are now used to specify transport specific details (such as the location of the NS), and that Agents no longer required to have a specialised profile (a default profile is loaded in the case where an Agent does not have a specific profile).

SLParser package

A SLParser has been written to handle SL Content parsing (SL grammar based on XC0008D). Parser was written using JavaCC and provides several public methods for parsing SL Content at different levels:

Public Methods

FIPA Management objects

All FIPA Management objects have been re-written according to FIPA 2000 standard as specified in XC00023F. All FIPA Management objects use the SL Parser for parsing and are moved to the package ont.fipa.fipaman.

The data type mapping used for the implementation is as follows:

Data Type

Java Type

Word

java.lang.String

String

java.lang.String

Boolean

java.lang.Boolean

Set

java.util.Set

Sequence

java.util.List

Directory Facilitator

DirectoryFacilitator has been rewritten to use the Task interface design mechanism. Four tasks have been written for DF that include RegisterTask, DeregisterTask, ModifyTask and SearchTask. All the tasks can be found in the platform.df package.

Agent Communication Channel

The FIPA 2000 specification has demoted the ACC from the status of Agent, hence the AgentCommunicationChannelAgent has been removed, and replaced by an AgentCommunicationChannel class in the fipaos.mts.service package

The boot-strapping mechanisms have been revised to include the publishing of multiple transport addresses by an ACC, to enable more robust inter-platform communication.

Jess Agent

The new version of JessAgent will be fundamentally different from the current version, and most of the API has been changed. This change takes advantage of the JESS OO Java API and make the JessAgent easier and more efficient to use.

In this version, JessAgent will no longer be a stand-alone agent, so to be able to get JESS functionality, agents will extend JessAgent (that extend FIPAOSAgent). The main reason for this change is that appears to be more appropriate to enable each agent requiring JESS functionality to have their own knowledge base unique to them that they can manipulate and access freely in preference to supporting a single "guru" agent.

There is a new tutorial agent called FactorialAgent, that will demonstrate the JessAgent functionality. A tutorial on how to use these is also included.

Database Interface

The database interface class has been updated to correct a typing mistake in a method signature and to add an overrided version of a method. The class is at : fipaos.skill.db.Database.

New Methods

·         void removeObject( String unique_id ) – allows an object to be removed from a database by specifying its unique identifier.

·         void deleteRelation( String relation ) – renamed from deleteReleation.

These changes have been reflected in the following classes that implement the database interface :

fipaos.skill.db.memorydatabase.MemoryDatabase

fipaos.skill.db.memorydatabase.SerializationDatabase

ACLMessage Object

A number of methods have been added to this class in order to provide in-built support for the String-Literal-Encoding and Byte-Length-Encoding mechanisms for content encoding.

New Constants

·         STRINGLITERAL_ENCODING – Specifies that the content should be encoded as a String-Literal

·         BYTELENGTH_ENCODING – Specifies that the content should be encoded using Byte-Length-Encoding

New Methods

·         void setContent( String content, int encode )– Set the content of the message, and encodes it using the specified method (as defined by the new constants).

Updated Methods

·         String getContent()– Get the content of the message, and decodes it if it appears to be encoded in a known encoding (i.e. String-Literal or Byte-Length encodings).

DirectoryFacilitator

·         Updated code so concatenation of Strings is changed to Strings being built via the use of StringBuffers. This is to increase the speed and efficiency of code.

AMSIncomingTask

·         Updated code so concatenation of Strings is changed to Strings being built via the use of StringBuffers. This is to increase the speed and efficiency of code.

FIPA-OS v1.2.0

General

New Functionality

·         IORViewer tool now supports viewing IORs directly from a URL. This allows IORs on a web server to be viewed without having to save them to a file first.

Agent States/Tasks

The state package and classes of FIPA-OS have now been renamed to Task. This is to reflect the intended use of the classes and to avoid confusion with state machines.

New Functionality

·         void forward( ACLMessage ) throws MessageSenderException – forwards an ACL message to its target agent. This should be used instead of _sm.forward(acl).

·         ACLMessage getNewConversation( String ) – this returns an ACL message that is the first message of a new conversation with the specified protocol. This should be used instead of _sm.getNewConversation(protocol).

·         ACLMessage void setContent( String content, int encode ) -sets the content of the ACLMessage to the specified content using the specified encoding mechanism.  The encoding can be on of the ACLMessage static variables NO_ENCODING, STRINGLITERAL_ENCODINGBYTELENGTH_ENCODING.  If NO_ENCODING is specified, then the call to this method is equivalent to setContent(String content).

·         boolean registerTask( String ) – registers the calling task in the Task Manager with the specified conversation ID. This has the effect of routing all incoming messages with that conversation ID to the calling task.

·         boolean searchDF( DFDescription )- performs a federated search of the local DF to a DF depth of 2, for any agents matching the specified DF description. Results are returned to a callback method, DFSearchResults(DFDescription[]). The return value is true if the search request was sent, not if the search was successful.

·         boolean searchDF( DFDescription, Constraint )- performs a federated search of the local DF using the specified search constraint, for any agents matching the specified DF description. Results are returned to a callback method, DFSearchResults(DFDescription[]). The return value is true if the search request was sent, not if the search was successful.

·         boolean searchDF( DFDescription, boolean )- performs a search of the local DF to a DF depth of 2 if the boolean parameter is true, or without federation if the parameter is false, for any agents matching the specified DF description. Results are returned to a callback method, DFSearchResults(DFDescription[]). The return value is true if the search request was sent, not if the search was successful.

·         boolean searchDF( String, DFDescription, boolean )- performs a search of the specified DF to a DF depth of 2 if the boolean parameter is true, or without federation if the parameter is false, for any agents matching the specified DF description. Results are returned to a callback method, DFSearchResults(DFDescription[]). The return value is true if the search request was sent, not if the search was successful.

·         boolean searchDF( String, DFDescription, Constraint, boolean )- performs a search of the specified DF using the specified constraint, federating the search if the boolean parameter is true, for any agents matching the specified DF description. Results are returned to a callback method, DFSearchResults(DFDescription[]). The return value is true if the search request was sent, not if the search was successful.

Agent Interaction Protocols

New Functionality

·         Added FIPAAuctionEnglish protocol (FIPA ’97).

·         Added FIPARecruiting protocol (FIPA ’99).

·         Added FIPABrokering protocol (FIPA ’99).

Modified Functionality

·         FIPAAuctionDutch now allows a CFP message to follow a CFP message as part of the same conversation, as specified in FIPA ’99.

Agent Management

The agent management constraint class has been updated to remove the use of class defined public integer constants to represent constraint types. The class is at fipaos.ont.fipaman.Constraint.

New Methods

·         boolean isConstraint( String type ) – returns true if the constraint object matches the type specified, and false if it does not.

·         String getConstraintString() – returns the constraint type as a FIPA defined string constant.

·         String getConstraintFnString() – returns the constraint function type as a FIPA defined string constant.

Deprecated Methods

·         int getConstraint() – it is preferable to use getConstraintString() and perform a string comparison with a FIPA constant.

·         int getConstraintFn() - it is preferable to use getConstraintFnString() and perform a string comparison with a FIPA constant.

Package Structure

The package structure has been changed from aw.* to fipaos.* - the details are listed below. A conversion tool (PackageRenamer) is provided with this release of FIPA-OS to automatically convert any code constructed for a previous version of FIPA-OS from the old structure to the new structure.

Class Name Changes

·         AgentWorldAgent -> FIPAOSAgent

·         State -> Task

·         StateManager -> TaskManager

·         *State -> *Task (for indivdual state/task classes)

Method Changes

(in class StateManager/TaskManager)

·         addState -> addTask

·         removeState -> removeTask

·         containsState -> containsTask

·         saveState -> saveTask

·         getState -> getTask

(in class AgentWorldAgent/FIPAOSAgent)

·         setIdleState -> setListenerTask

Package Changes

·         aw.tools.DIAGNOSTICS -> fipaos.util.DIAGNOSTICS

·         aw.agent.state -> fipaos.agent.task

·         aw.comms -> fipaos.comm

·         aw.tools -> fipaos.tool

·         aw.* -> fipaos.*

Agent Loader

New Functionality

·         An agent loader is included with this release. It will start the agents that have been specified within the loader.profile file in the same VM.

·         It has a thread viewer to enable visualisation of all threads running in the virtual machine.

·         Ability to shutdown an agent and kill off all threads associated with it ( the shutdown method within the agent is invoked, any clean up should be undertaken here and the super.shutdown() method called.).

JessAgent

New Functionality

§         There is a new Agent "shell" under fipaos.skill called JessAgent it uses the Java Expert System Shell (JESS) to allow an agent to have some intelligence. It subclasses the FIPAOSAgent class so that agent can make full uses of FIPA-OS messaging while using the JESS knowledge base to reason about the contents of FIPA messages.

Tutorials

New functionality

·         Step 3 – Platform Ping Agent has been added to show DF querying via the agent API, and pro-active agent tasks.

·         Step 4 – Tag Agent has been added to show registering and using agent services with the DF, and task collaboration.

·         Step 5 – Using the JessAgent shows how to run an example of the agent and describes the working of the agent.

Constraint Choice Language

New functionality

·         Code has been added to support the user of the Constraint Choice Language as described in [5].

·         This code has been added into the package fipaos.skill.constraint.ccl.

·         The code supports the creation and population of classes that correspond to the elements of the CCL Language Ontology. It also supports the parsing and deparsing of these objects using ContentHandlers. It should be noted here that only a subset of the elements of CCL have been implemented.

FIPA-OS v1.1.0

General

New Functionality

·         Added addDuration( String UTC ) and addDuration( int, int .... ) to UTCDuration.

·         Can now use any SAX 1.0 compliant parser - by default uses Apache’s Xerces XML parser, but by specifying the system property "aw.parser.xmlparser" with the name of an alternative class to use which has the SAX interface, other XML parser can be used.

·         Introduced guidelines to version numbers used for FIPA-OS releases.

State Manager

New Functionality

·         Introduced a new State management package (aw.agent.state) which incorporates:

·         State Manager;

·         State abstract superclass;

·         Predefined states for auto platform registration;

·         Extensions to AWA to incorporate state (new constructor, methods).
See the tutorial 2, Ping Agent for an introduction on using states.

AgentComms

New Functionality

·         InitialisationException's thrown by Comms implementations are now correctly passed back to the AgentComms class and displayed using DIAGNOSTICS.println().  Previously an exception wrapping the real exception was being thrown, but never unwrapped so the user would get "useful" error messages such as "Error initialising SunIDL: null".

Diagnostics

New Functionality

·         Diagnostics level to support information filters is more sophisticated: it can be set independently for persistence (file) output and in-line (memory) to another process such as a viewer.

·         Most messages apart from test harnesses main() methods are now channeled via the DIAGNOSTICS object.

·         Several key error messages generated within FIPA-OS  are now tagged with a diagnostics level.

·         More support for messages as structured Objects rather than 'flat text messages' to be sent to the DIAGNOSTICS object. In fact, println(String) and println(String,String) are replaced with println(Object message) and println(Object message,Object, source). The preferred method is however println(Object message,Object, source, int DiagnosticsLevel), i.e, the message is associated with a Diagnostics level.

·         DIAGNOSTICS object can receive message using a generic message receiver interface called Sink.

·         Post-processing objects such as message  viewers can be attached to the DIAGNOSTICS object using the setSink(Sink viewer) method.

·         DIAGNOSTICS object time-stamps message to persistent storage (not to memory).

·         Output to file is of the form: timestamp SP source SP level SP message converted to String (where SP is user-configurable field separater (defaults to ":").

·         Output to a post-processing object is of the form: Object message,Object, source. If no post-processing object is configured, post-processing object defaults to standard output.

AgentWorldAgent

New Functionality

·         Automatic registration with local and remote platforms (provided by a state).

·         Method calls available in AWA API (registerWithAMS and registerWithDF)

·         New AWA protected variables:

·         - _profile - Used to store the given agent's profile (internal store of data in the agent profile file).

·         - _my_guid - Used to store the given agent's GUID.

AMS

New Functionality

·         AMS is now state based (uses State Manager) and AMS sub-classes are in aw.platform.ams.

ACC

New Functionality

·         Updated to transparently change the specified receiver GUID in an incomming message from an IOR to a GUID when necessary and vice versa for an outgoing message - changes the sender GUID to agent_name@iiop://...... to agent_name@IOR:........ to enable interoperability with platforms not supporting the GUID concept specified by FIPA.

DF GUI Agent

New Functionality

·         When the DFGUI searches the DF at startup or when the options menu option is chosen, the DF description used is for active agents only - this is to comply with the FIPA specification which requires at least one attribute for the df-description when searching.

·         IORs can be handled within the address part of the GUID in the options menu.

·         Agent Type Index now works from the view menu - types supported are df, fipa and other.

·         Displays icons correctly for df, fipa and other and types in the main GUI.

·         Displays the toolbar correctly in the main GUI.

IOTestAgent

Modified Functionality

·         Updated to use the new State Manager.

·         File dialog opens by default at the /fipa-os/examples/ directory.

FIPA-OS v1.03

General

Numerous bug fixes and feature enhancements have been made to the core FIPA-OS code base.  The changes are summarised below.

New functionality

·         The entire FIPA-OS code base has been migrated to use Java 1.2.  It is now no longer possible to use FIPA-OS with earlier versions of Java as some new features introduced in Java 1.2 are exploited within parts of the code.

·         It is now possible to choice whether to start all of the platform agents (AMS, DF and ACC) in a single VM or in mulitple VMs.

·         Removed the dependency on Metamata Diagnostics by introducing a dedicated Diagnostics class (aw.tools.DIAGNOSTICS) that supports multiple debug levels.

·         Introduced guidelines for the package structure used in FIPA-OS to help developers navigate the code base and to determine where new classes should be added when developed.

·         The filename used for storing the stringified IOR of the platform has been changed to the form PlatformAddress-PortNo-Target.

·         A set of constants files have been introduced.  The constants files are as follows:

·         aw.fipa.FIPACONTANTS - this contains all FIPA defined constants, such as performatives, message types, protocol names and platform agent names.

·         aw.ont.BASETOKENS - this contains all base characters and symbols that can be used in the creation of messages and internally in agents. These constants include characters like ; : , ! ? { } [ ] ( ) * / \ . @ T Z, as well as constructs such as IOR:// and words like result, action and done.

·         aw.ont.fipaman.FIPAMANCONSTANTS - contains all fipa agent management ontology defined constants, such as DF, ACC and AMS actions, fipa exception names and DF/AMS description field names.

All ontologies will and should have their constants defined in a constants file in aw.ont.ontology.XCONSTANTS where ontology would reflect the actual name of the ontology.  The classes have capitalised names to indicate the fact that they are constants.

·         Introduced a new class aw.util.FlagHandler. The FlagHandler class provides a convenient method of storing many state flags in one place in an agent. If you need to set and check many boolean flags (for instance to record registration with the platform, initiation of a query, presence of some information etc.) then the flag handler provides a unified interface to an unbounded number of flags. The API provides methods to add, set, check and toggle flags. Support for mutually exclusive flags is also provided. The FlagHandler stores flags internally in a more efficient way than using a boolean for each flag, so use of this class for flag management in an agent reduces overhead. This class is used by the platform agents, and is therefore a required component of the FIPA-OS platform. For more information on the FlagHandler API, please consult the FIPA-OS javadocs.

·         Profiles now enable multiple transports to be listed.  The profiles also make better use of the RDF semantics.  The profile changes are discussed further, below.

·         The SL/ACL parsers have been updated to allow 0 as an acceptable number.

·         The SetupFIPAOS.bat file has been simplified as only a single list of supported transports is now required and there is no further need to reference the Metamata Diagnostics classes.

AgentWorldAgent

A number of changes have occurred to the AgentWorldAgent API due to the overhaul of the underlying Comms layer.  Details that developers should be aware of are described in the 'New Functionality' sub-section below.

New functionality

·          Certain methods have been depricated (i.e. setAgentGUID() and isPushing() ) since they are have been deemed inappropriate - the Agent's GUID cannot be changed for any reason at the moment for security reasons and the way that the Agent implementation is written will be based around whether is it using push or not.

·          In the new version of AgentComms push is the default message delivery mechanism, but pull is supported for backwards compatibility with pre-FIPAOSv1.03 implementations.

·          The agentcomms instance variable no longer exists in AgentWorldAgent - calls to agentcomms.getNextMessage() should change to getNextMessage(), which does the same thing when using pull without a ConversationManager.

·         Messages/Conversation's aren't pushed to the Agent implementation until startPushing() is invoked - this method should be invoked from the Agent implementation once it has been fully initialised.  The idea is that this prevents messages arriving at the Agent when using push before the Agent is ready for them.

AMS

The AMS has been updated to increase its functionality and to handle the Agent Management ontological rules more effectively.

New functionality

·         Includes the same functionality as described in FIPA97, Part 1 V2, Agent Management [1], but now also checks that the mandatory elements of a ams-description are included in action requests as specified in FIPA99, Part 1, Agent Management [4].  A mandatory-element-missing message is returned by the AMS if the check fails at any point.

·         AMS authenticates agents by checking that they were created on the local agent platform.

·         The register, deregister and modify actions can only be requested by the agent itself, its delegate or another AMS.

·         Support for the search-agent action as described in FIPA99, Part 1, Agent Management [4].

·         Support for the FIPA_exception keyword as described in FIPA99, Part 1, Agent Management [4] when failure or refuse messages are generated.

DF

The DF has been updated to ensure that the rules of the Agent Management ontology are followed.

New functionality

·         The DF checks to ensure that all of the mandatory components of the df-description in a register action request.

·         The test ACL message included in the Dfregister.txt file in the examples directory of the distribution has been updated to include a service description that contains all of the mandatory elements described in FIPA99, Part 1, Agent Management [4].

·         The DF GUI displays the previously registered agents if the agent is restarted (see issue V1.02-I7).

ACC

The ACC has been updated such that it is more consistent with the emergent ideas in the FIPA99 specification for Agent Transport.

New functionality

·         The ACC supports direct message parsing as described in FIPA99, Part 1, Agent Management [4] and the ability for agents to request that the forward action is performed as described in FIPA97, Part 1 V2, Agent Management [1].  Support for the forward action has been deprecated.

IOTestAgent

New features have been added to the IOTestAgent to support the added complexity of agent names that include non-persistent parts, such as some IORs.

New functionality

·         Support for the variable %GUID% %NAME% %ADDRESS% in the test strings when use in test ACL message files.  The variable will be instantiated with the actual agent GUID/NAME/ADDRESS when the message is sent.

·         New features with the startIOTestAgent batch file include:

·         Ability to specify the agent name to be adopted by the instance of IOTestAgent on startup.  If no name is specified, the default name of IOTestAgent@iiop://GUID will be used.

·         Specify /ior as a command line option, to use agentname@ior:… form.  If not specified agentname@iiop… is used.

Example usage is given below:

StartIOTestAgent [<agentname>] [/ior]

·          

Comms Transport

Greater flexibility has been added to the Comms Transport layer, such that multiple transports can be supported by agents.

New functionality

·         Support for Sun IDL as a transport.

·         Support for Voyager 3.11 as a transport, deprecating support for earlier versions of Voyager.

·         Support for RMI as a IPMT.

·         Ability for agents to support multiple transports in parallel e.g. the ACC could use RMI as the IPMT and Voyager as the inter-platform transport mechanism.

·         Support for the FIPA99 MTS has been incorporated in the Comms Transport layer, but cannot currently be used by AgentWorldAgent as support in the Agent Profile has not been completed.

Agent Naming Convention

To handle agent names which meet the original requirements of FIPA97 for the Agent GUID and the recommendations of the FIPA99 Interoperability Technical Committee, FIPA-OS now supports two forms of Agent GUIDs. The changes to the AgentGUID class are summarised below:

New functionality

·         AgentGUID object will now accept agent GUIDs of the form agentname@IOR:…. where the data following the IOR label is the stringified IOR which can be used to message the specified agent.

·         AgentGUID now has an equals( AgentGUID) method.

Method changes

·         AgentGUID( String ) constructor will check for the IOR field in the GUID and will construct the object accordingly. If the GUID uses IORs then the protocol field of the AgentGUID object will be set to 'IOR' and the target field will be set to the stringified IOR value. The host field is set to "", and the port is set to 0. The name is set if present.

·         AgentGUID() constructor will still construct an empty GUID of the agentname@iiop://host:port/target form.

·         toString() will return the correct string representation of IOR style GUIDs.

·         getAddress() will return an IOR style GUID address if an IOR is used.

·         getHost() will return a blank string ("") if the GUID uses an IOR.

·         getPort() will return 0 if the GUID uses an IOR.

Functionality for agentname@iiop://host:port/target style GUIDs remains unchanged from version 1.01.

New methods

·         isIOR() returns true if the GUID uses an IOR, false otherwise.

·         setIOR( String ) sets the AgentGUID object to use the specified stringified IOR. The protocol is set to 'IOR' by this method.

·         getIOR() returns the stringified IOR present in the GUID, including the 'IOR:' header (e.g. IOR:0000…..).

·         equals( AgentGUID ) returns true if the current object equals the AgentGUID parameter. This method checks each field of the GUIDs for equality. This method works for both forms of accepted GUIDs.

Agent and Platform Profiles

FIPA-OSv1_03 uses a new set of agent profiles.  This enables the agent profiles to be much more flexible.  Although FIPA-OSv1_03 will not work with earlier versions of agent profiles, the transition from the old version of agent profiles to the new version is fairly straight forward. 

New functionality

·         The Platform Profile has essentially remained the same as the old tag names are now preceded by the RDF namespace ap:

·         The Agent Profile has been updated to use the semantics of RDF.  The fields <transport-mechanism>, <transport-protocol>, <iiop> have been grouped into a transport object.  For example, suppose your current profile has the following settings:

<transport-mechanism> Voyager</transport-mechanism>

<transport-protocol>iiop </transport-protocol>

<iiop>9001</iiop>

In your new profile you need a Transport object with the following settings:

<!-- Transport object -->

<ap:Transport rdf:about="transport1">

    <ap:mechanism> Voyager </ap:mechanism>

    <ap:protocol> iiop </ap:protocol>

    <ap:port_number>9001</ap:port_number> 

</ap:Transport>

·         The field <agent1> has been replaced by a platform object that describes where the ACC publishes its IOR.  For example, suppose your current ACC profile has the following settings:

<agent1>c:\apache\wwwroot\fipa-os\platforms\</agent1>

In your new profile you need a Platform object with the following settings:

<!-- Platform object -->

<ap:Platform rdf:about="localPlatform">

    <ap:local_agent_platform_ior_location>

        c:\apache\wwwroot\fipa-os\platforms\

    </ap:local_agent_platform_ior_location>  

</ap:Platform>


·         The field <agent2> has been replaced by a platform object. .  For example, suppose your current profile has the following settings:

<agent2>iiop://234.234.234.234:9000/acc, http://www.agent2.co.uk/fipa-os/Platforms/234-234-234-234-9000-acc</agent2>     

In your new profile you need a Platform object with the following settings:

<!-- Platform object -->

<ap:Platform rdf:about="platformTinkywinky">

    <ap:remote_agent_platform>

        iiop:// 234.234.234.234:9000/acc

    </ap:remote_agent_platform>

    <ap:ior>

        http://www.agent2.co.uk/fipa-os/Platforms/234-234-234-234-9000-acc    </ap:ior>

</ap:Platform>

·         The fields <agent3> and <agent4> are not present anymore in the new profiles.  In fact, every agent specific field should now be specified in a separate object.

·         The <agent5> field has been replaced by a database object.  For example, suppose your current profile has the following settings:

<agent5>SerializationDatabase </agent5>

In your new profile you need a Database object with the following settings:

<!-- Database object -->

<ap:Database rdf:about="database1">

    <ap:database_type>SerializationDatabase</ap:database_type>

    <ap:database_location> </ap:database_location>

</ap:Database>

NOTE: the field database_location is reserved for future use of FIPA-OS.  Currently this field is not being used, therefore any value this field may contain will be ignored.

FIPA-OS v1.02

DF

New functionality

·         To partially address issue V1.01-I6 (see chapter 5 for details) the DF has been updated to support the depth-search min constraint.

Comms Transport

New functionality

·         The Voyager transport binding now supports the IIOP protocol for inter-platform communication.  Intra-platform communication using the Voyager transport binding remains unchanged.

ACC

New functionality

·         When the ACC is started it attempts to send inform messages to all remote platform ACCs, which it is aware of (e.g. specified in the ACC profile).  This ensures that if non-persistance IORs are used by its platform all remote platforms are updated with its current IOR.

·         Added a guard to ensure that if a remote platform's HTTP server cannot be accessed it does not attempt to use the potentially old (or unknown) platform IOR.  In the situation where a remote platform's IOR cannot be retrieved a warning diagnostics message is generated.

RDF Parser

New functionality

·         Added a guard to the RDF parser to ensure that an appropriate error message is produced if it is unable to dynamically load the required XML parser.