<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://pleiad.cl/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://pleiad.cl/feed.php">
        <title>PLEIAD research:software:reflex:documentation</title>
        <description></description>
        <link>http://pleiad.cl/</link>
        <image rdf:resource="http://pleiad.cl/lib/tpl/pleiad2/images/favicon.ico" />
       <dc:date>2026-04-06T17:13:23+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/argument_checking_aspect"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/a_brief_introduction_to_around_metaobject"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/behavioral_links_blinks"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/cache_aspect"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/cache_evaluation_aspect"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/call_descriptors_parameters"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/command_line_argument_handling"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/create_reflextive_objects"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/generating_your_own_custom_classes"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/hooksets"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/installation"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/link_providers_and_configuration_classes"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/metaobject_definitions"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/performance_things_to_know"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/reflex_elements_in_a_nutshell"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/reflex_launcher_eclipse_plugin"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/reflex_usage"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/runtime_links_rtlinks"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/singleton_aspect"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/standard_mop"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/structural_model"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/the_fibonacci_example"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/tracing_aspect"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/software/reflex/documentation/troubleshooting"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://pleiad.cl/lib/tpl/pleiad2/images/favicon.ico">
        <title>PLEIAD</title>
        <link>http://pleiad.cl/</link>
        <url>http://pleiad.cl/lib/tpl/pleiad2/images/favicon.ico</url>
    </image>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/argument_checking_aspect">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T21:07:45+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:argument_checking_aspect</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/argument_checking_aspect</link>
        <description>Argument Checking Aspect

Another interesting aspect that applies to several scenarios is to check the validity of the arguments of a method. This is a common practice in the so called “Design by Contract” methodology and as it is a crosscutting concern, it is subject to be implemented as an aspect.
In this section we will see how to implement an argument checking aspect using two different approaches: with a metaobject and with link&#039;s restrictions.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/a_brief_introduction_to_around_metaobject">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T22:17:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:a_brief_introduction_to_around_metaobject</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/a_brief_introduction_to_around_metaobject</link>
        <description>A Brief Introduction to Around Metaobjects

This short introduction is targered to people who want to create one or more arounds metaobjects in Reflex. It describes what should be done in order to create and configure them, and how they could be composed when interacting at some program point.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/behavioral_links_blinks">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-20T17:33:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:behavioral_links_blinks</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/behavioral_links_blinks</link>
        <description>Behavorial Links

Behavioral links are the relation between the hookset and the metaobject definition. Links are the most important element of Reflex. They have a serie of attributed related to: the cardinality of the relation, the protocol of the communication among others.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/cache_aspect">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T21:48:47+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:cache_aspect</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/cache_aspect</link>
        <description>Cache Aspect

In this section we will see how to add a cache to the fibonacci class. This aspect is very useful for a wide spectrum of applications, We will see two approaches: use a metaobject to hold the cached values and use the Fibonacci class itself to hold them. We will see the consequences of taking one or the other of these approaches.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/cache_evaluation_aspect">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T22:01:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:cache_evaluation_aspect</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/cache_evaluation_aspect</link>
        <description>Cache Evaluation Aspect

In the previous section we reviewed how to add a cache to our Fibonacci class. Now that we have the cache, a good question that may arise is: how effective is the cache?. In this section we will se how to define a new aspect: a cache evaluation aspect; that will monitor the execution of another aspect: the cache aspect.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/call_descriptors_parameters">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T22:16:32+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:call_descriptors_parameters</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/call_descriptors_parameters</link>
        <description>Call Descriptor &amp; Parameters

The importance of call descriptor and paramters is that they allow to specify the exact metaobject protocol (MOP) we want to use.
Using these elements we can see the metaobject programming as a task of connecting objects (as we did in the</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/command_line_argument_handling">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-13T19:58:07+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:command_line_argument_handling</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/command_line_argument_handling</link>
        <description>Command line arguments handling

Here is how argument handling works in Reflex as of today. 

Argument handlers register to the argument manager. Each handler specifies which arguments it can handle by implementing the supportedArgs() method, which returns an array of</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/create_reflextive_objects">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T22:09:11+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:create_reflextive_objects</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/create_reflextive_objects</link>
        <description>Create Reflective Objects

Up to this point of the tutorial, we have seen how to apply aspects to classes, altering their structure and/or behavior. But sometimes it is useful to alter the structure and/or behaviour of just one instance. If we only were limited to what we have seen we would have to create a empty subclass and apply the links to it. To avoid this kind of problems, Reflex provides an utility method Reflex.createObject, that is able to create a reflective instance of a class applyi…</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/generating_your_own_custom_classes">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-13T20:10:02+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:generating_your_own_custom_classes</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/generating_your_own_custom_classes</link>
        <description>Generating your own custom classes

In the case you need to generate custom classes, there are a few things to consider.

First, the class pool (of type RPool, obtained via API.getClassPool()) is the object offering the service of making a new class based on a string of source code. Look at the</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/hooksets">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-17T19:29:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:hooksets</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/hooksets</link>
        <description>Hooksets

Hooksets allow us to select _where_ an aspect will apply.

In Reflex, Hookset is an interface that defines two highly-related to the Reflex internals methods. This is the reason why two implementations are provided:

	*  PrimitiveHookset, that is able to match a set of points in the aplication according to a given operation.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/installation">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T20:43:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:installation</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/installation</link>
        <description>Installation

In order to run Reflex, there are two alternatives: get the precompiled binaries or get the latest sources and build the Reflex library from them. Once you have Reflex in a executable state, you can play with it. We will see all the necessary steps to bring Reflex to this state in this section.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/link_providers_and_configuration_classes">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-13T20:38:27+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:link_providers_and_configuration_classes</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/link_providers_and_configuration_classes</link>
        <description>Links providers &amp; configuration classes

The Reflex kernel hooks classes according to the currently defined set of links. A link defines:

	*  A hookset, which indicates the places in the code where control should be transfered to the meta-level.
	*</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/metaobject_definitions">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T22:09:49+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:metaobject_definitions</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/metaobject_definitions</link>
        <description>Metaobject Definitions

Metaobject definitions are a standard way to describe how Reflex will obtain a reference to a behavioral metaobject at runtime. 

The base (abstract) class for all metaobject definitions is MODefinition, that is declared as follows:


public abstract class MODefinition{
        public abstract String getCode(BLink aBLink, Operation aOperation);
}</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/performance_things_to_know">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-13T20:43:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:performance_things_to_know</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/performance_things_to_know</link>
        <description>Performance

This note is of interest to you if you want to fine-tune Reflex to optimize performance (or rather, limit the performance degradation ;-)). These points go beyond the standard recommendation of using spatial and temporal selection wisely (i.e. hooksets that match only where needed, activation conditions that shut down hooks when needed), and are typically less known. But they can make a great difference.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/reflex_elements_in_a_nutshell">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T20:44:31+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:reflex_elements_in_a_nutshell</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/reflex_elements_in_a_nutshell</link>
        <description>Reflex Elements in a Nutshell

In this section we will briefly review the most important elements of Reflex from the user&#039;s point of view.
We will see what hooksets, metaobject definitions and behavioral links are. Besides we will review structural metaobjects and links. And Finally, a subsection to explain where to define these elements.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/reflex_launcher_eclipse_plugin">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-13T21:39:25+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:reflex_launcher_eclipse_plugin</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/reflex_launcher_eclipse_plugin</link>
        <description>Reflex Launcher Eclipse plugin

Introduction

The Reflex Launcher plugin for Eclipse permits to specify Reflex configurations through a GUI instead of using the command line. The plugin provides a new kind of launch configuration named “Reflex application</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/reflex_usage">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T20:53:11+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:reflex_usage</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/reflex_usage</link>
        <description>Reflex Usage

Reflex is implemented as a java.lang.instrument agent. Then, a special way to run it is necessary. In this section we will review how to use Reflex, which are the most relevant parameters and how to specify them. Finally, we will see an utility class ReflexRunner that allows us to programatically run Reflex.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/runtime_links_rtlinks">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-20T17:34:19+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:runtime_links_rtlinks</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/runtime_links_rtlinks</link>
        <description>Runtime Links

Runtime links are the complement of behavioral links that holds the information and methods that are only valid at runtime.

There are several methods in the RTLink class, all of them related to the metaobject and activation mechanism. We will review them in this section.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/singleton_aspect">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T21:41:17+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:singleton_aspect</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/singleton_aspect</link>
        <description>Singleton Aspect

In this section we will transform our application to avoid multiple instances of the Fibonacci class to be created (I bet that you have been thinking we should had used the singleton pattern from the beginning...).

This example is very useful as it shows how we can abstract of the application the fact we are using the singleton pattern.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/standard_mop">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T22:15:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:standard_mop</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/standard_mop</link>
        <description>Standar MOP

NOTE: The standard MOP is partially obsolete at present. We rather recommend using Call Descriptors.

Reflex provides a standard metaobject protocol (Standard MOP) for all the standard operations (Message send, message reception, instantiation, creation, field access and cast).  This MOP defines the exact call that should be done to communicate with the metaobject. There are three kinds of calls, one for before control, one for after control and one to around control. Each one of th…</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/structural_model">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-20T17:42:38+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:structural_model</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/structural_model</link>
        <description>Structural Model

The Reflex structural model is a set of classes that reifies the different structures of an application: RClass objects gives access to their members as RMember objects (either RField, RMethod|, or RConstructor), which in turn give access to their bodies as RExpr objects (with a specific type foreach kind of expression).</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/the_fibonacci_example">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T20:53:38+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:the_fibonacci_example</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/the_fibonacci_example</link>
        <description>The Fibonacci Example

As a base for the illustrations presented later in this chapter, we will use a simple utility class able to calculate fibonacci numbers.

The code of the class is:


  public class Fibonacci{

      public Fibonacci(){ }

      public long get(int n){
          if (n == 0 || n == 1){
              return (long) n;
          }

          return get(n - 1) + get(n - 2);
      }

      public static void main(String[] args){
          if (args.length == 0){
              Syst…</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/tracing_aspect">
        <dc:format>text/html</dc:format>
        <dc:date>2007-08-24T21:01:39+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:tracing_aspect</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/tracing_aspect</link>
        <description>Tracing Aspect

One of the most simple and well known aspects is the tracing aspect: an aspect that traces the method invocations that occur in the application. First we will see how to implement this using the Reflex standard metaobject protocol (MOP) making use of a special metaobject, and then, how to implement this tracing aspect using the the standard System.out object.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/software/reflex/documentation/troubleshooting">
        <dc:format>text/html</dc:format>
        <dc:date>2008-01-13T17:08:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:software:reflex:documentation:troubleshooting</title>
        <link>http://pleiad.cl/research/software/reflex/documentation/troubleshooting</link>
        <description>Classloading Issues

All the classloading issues you may have should be solved using the ReflexRunner class.  This class runs your main class using the java agent mode (this is part of the JVM since Java 5) which avoids the use of custom classloaders (like the one used by Reflex in the past).</description>
    </item>
</rdf:RDF>
