Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
research:software:reflexd [2007/10/22 14:38] – etanter | research:software:reflexd [2011/09/20 08:29] (current) – etanter | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | <note warning> | ||
+ | ReflexD is not an actively-supported project anymore | ||
+ | </ | ||
+ | ===== What is ReflexD? ===== | ||
+ | |||
+ | ReflexD is a versatile kernel for distributed AOP in Java. ReflexD is implemented as an extension of [[research: | ||
+ | |||
+ | ReflexD allows distributed AOP providing means to specify: | ||
+ | * Distributed cut | ||
+ | * Distributed action | ||
+ | * Distributed binding | ||
+ | |||
+ | ===== Distributed cut ===== | ||
+ | |||
+ | Distributed cut means that execution points can be selected based on the host they occurr. We have extended both the reflective model and the hookset definition to provide distributed cut. | ||
+ | |||
+ | First, to extend the reflective model, we have added the RHost interface: | ||
+ | <code java> | ||
+ | public interface RHost{ | ||
+ | public String getName(); | ||
+ | |||
+ | public String getAddress(); | ||
+ | |||
+ | public Properties getProperties(); | ||
+ | } | ||
+ | </ | ||
+ | This interface gives access to certain characteristics of a Reflex-enabled VM (a //Host//): its name, its RMI address and its system properties. With these characteristics, | ||
+ | |||
+ | And finally, we have extended the notion of '' | ||
+ | <code java> | ||
+ | public interface HostSelector{ | ||
+ | public boolean accept(RHost aRHost); | ||
+ | } | ||
+ | </ | ||
+ | Which unique method '' | ||
+ | |||
+ | ===== Distributed action ===== | ||
+ | |||
+ | The action of an aspect may be possibly executed on a remote host, which is not necessatily the one where the cut is done. We have extended the parametrization, | ||
+ | |||
+ | First, the parametrization has been extended introducing two new parameters related to distribution: | ||
+ | |||
+ | Second, in order to reflect that metaobjects with '' | ||
+ | |||
+ | And finally, we have added means to remotely create objects allowing explicitly-created metaobjects to be placed anywhere. The API to create an object in a remote host is: | ||
+ | |||
+ | <code java> | ||
+ | RHost host = RHosts.get(" | ||
+ | Logger logger = (Logger) host.create(" | ||
+ | </ | ||
+ | |||
+ | The code above creates a '' | ||
+ | |||
+ | ===== Distributed binding ===== | ||
+ | |||
+ | The specification of the binding between the cut and the action of an aspect may be done in any host, which may not be the host where the cut is realized or the action is executed. | ||
+ | |||
+ | In order to do this, we have decoupled the link definition, link storage and link application. Hence, the ReflexD architecture consists in three kinds of hosts: | ||
+ | * Reflex hosts, where an application (possibly subject to links) runs | ||
+ | * Aspect hosts, where the links resides, exposed via link repositories | ||
+ | * Any Java program running on any host that can remotely populate link repositories | ||
+ | |||
+ | \\ For example, to start a link reposotiry: | ||
+ | < | ||
+ | % java reflex.StartLinkRep debugLinks | ||
+ | </ | ||
+ | Where debugLinks is the name of the repository. | ||
+ | |||
+ | \\ And to put links this repository: | ||
+ | < | ||
+ | % java reflex.ExportToRep reflex:// | ||
+ | </ | ||
+ | Where ConfDebug is the traditional config class. | ||
+ | |||
+ | \\ And finally, to run an application which is subject to the previously defined link: | ||
+ | < | ||
+ | % java " | ||
+ | </ | ||
+ | |||
+ | The above command runs the application retrieving the links from the link repository named '' | ||
+ | |||
+ | ===== Implementation ===== | ||
+ | |||
+ | To see implementation details, please visit the [[research: | ||
+ | |||
+ | |||
+ | ===== Publications ===== | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <div id=" | ||
+ | </ |