In this page you will find the description of the main components of OsMoSes.
Each of the described components has is distributed in its own JAR file, some of which are OSGi bundles.
All of these are necessary in order to run JADE using OsMoSes.
This can be considered the heart of OsMoSes, this service is the one that makes the integration between JADE and OSGi and handles all other components.
The logic of this service is essentially the same as the intra-platform mobility service offered by default in JADE, the main difference comes in the handling of classes definitions.
JADE uses one classloader associated to a pair [agent name, source container id] to be able to avoid conflicts between classes of different agents. While this approach allows to prevent conflicts among classes from different agents, it also fails to take advantage of already transmitted definitions and, also, prevents an agent to change the definition of a class already transmitted.
To solve the aforementioned limitations, OsMoSes uses the power of OSGi to handle classes versions. Instead of explicitly maintaining multiple classloaders, OsMoSes includes with the agent transmission the pair [bundle symbolic name, bundle version] to indicate the bundle that defines the agent being migrated. Then, using other components of OsMoSes, the mobility service makes sure that the agent's bundle can be resolved and completes the migration. This way, OSGi is in charge of making sure the agent is using the correct class (version) and OsMoSes doesn't care if the bundle was previously transmitted as part of other's agent migration process or the same one, bundles already transmitted don't need to be transmitted again.
This service is like any other service of JADE. To use it instead of JADE's default mobility service, you only need to tell JADE so.
Refer to the JADE OSGi Based Mobility Service Configuration Properties page for the list of available configuration properties.
OsMoSes needs to transmit some information in order to be able to determine which bundles are necessary to resolve the one defining the agent to migrate and, once identified which ones are needed, to send those bundles to the destination container. To allow the use of an efficient channel for that purpose, it was a design decision to distinguish the channel used for that information exchange from the one used for JADE's administration (IMTP).
The transport connection definitions component defines a common interface that all OsMoSes communication channels must implement. By depending only on that interface, the JADE OSGi Based Mobility Service component is able to use the channel without needing to care about how the data transmission is being carried on.
A TCP based simple implementation of the interface defined by the Transport Connection Definitions is provided in the same bundle.
This implementation transmits the data provided by upper layers (other components of OsMoSes) directly (without adding any extra information) over a TCP connection.
Refer to the TCP Transport Connection Implementation Configuration Properties page for the list of available configuration properties.
An implementation of the interface defined by the Transport Connection Definitions that transmits data using the platform IMTP.
IMTP (Internal Message Transport Protocol) is the way different (JADE) containers in a platform communicates to each other. Each service in JADE transmits its related information to others by means of IMTP.
You may want to transmit OsMoSes related information mainly for two reasons:
The caveat is that this channel has a little overhead in transmission, since it adds to the OsMoSes data some extra information needed for IMTP to work.
This communication channel is implemented as a separated JADE service for two reasons:
A simple logging interface and service implemented to avoid adding a whole logging framework as a dependency in OsMoSes.
As OsMoSes mature this component probably is going to change a lot or disappear.
This component is implemented as a bundle.
A set of helper tools to handle OBR repositories.
This component is implemented as a bundle.
A set of common functions needed for the logic in charge of transmitting resources (bundles) between containers.
This component is implemented as a bundle.
Defines an interface and service that provides the functionality necessary for issuing requests for bundles and receiving the answers (bundles) for those requests.
This is part of the OsMoSes logic in charge of determining which bundles are necessary to resolve the one associated to the agent being migrated. This component implements only the logic necessary for data transmission.
The requests generated by this component will be received by the Resources Transmission Protocol Sender.
This component is implemented as a bundle.
Defines an interface and service that provides the functionality necessary for receiving requests for bundles and sending the answers (bundles) for those requests.
This is part of the OsMoSes logic in charge of determining which bundles are necessary to resolve the one associated to the agent being migrated. This component implements only the logic necessary for data transmission.
The requests received by this component are the ones generated by the Resources Transmission Protocol Requester.
This component is implemented as a bundle.
Defines a service that provides the functionality necessary for determining which bundles are required to resolve another and obtaining those bundles from a connection.
The service provided by this component is used by the mobility service in the destination container (where an agent is migrating to) to get the bundles necessary to resolve the one associated to the agent in migration.
This component uses the functionality provided by Apache Felix Bundle Repository to determine which bundles are available in the container and which packages are missing and required to resolve the bundle associated to the agent being received. Then, it uses the Resources Transmission Protocol Requester to issue the requests for those missing packages and to receive the bundles that will be used for resolution.
This component is implemented as a bundle.
Defines a service that provides the functionality necessary for determining which bundles are sufficient to satisfy a set of requirements received and to send those bundles through a connection.
The service provided by this component is used by the mobility service in the source container (where an agent is migrating from) to provide the bundles necessary to resolve the one associated to the agent in migration.
This component uses the functionality provided by Apache Felix Bundle Repository to determine which of the available bundles in the container will be enough to satisfy the set of requirements received from the Resolver Consumer in the destination container. To receive those requirements and to send the resulting bundles, it uses the Resources Transmission Protocol Sender.
This component is implemented as a bundle.
In the following diagram you can see the main components of OsMoSes together.