SetPoint – implementación para el framework .NET

Introducción

La idea de esta implementación es servir como demostración de los conceptos planteados en el documento de la tesis. En ese sentido, la entrega está estructurada de forma tal que sea sencillo probar la aplicación de aspectos sobre una versión del juego Senku.

Básicamente, la implementación gira alrededor de una solución para Visual Studio 2003 que se encuentra en este mismo directorio (Tesis.sln).

 

Estructura de Tesis.sln

Una breve descripción de los proyectos C# que componen la solución:

 

Weaving

Al ejecutar simAddIn.exe (a mano o desde el propio IDE), se realiza el preproceso necesario para poder aplicar aspectos sobre los assemblies que componen el Senku (dotSenku.dll y dotSenkuView.exe). Vale destacar que ninguno de los preprocesadores chequea que el assembly en cuestión no haya sido procesado anteriormente, por lo que el proceso fallará si se ejecuta más de una vez sobre el mismo assembly.

Los assemblies resultantes pueden ser analizados usando la aplicación ILDASM que viene con el framework. De esta forma se puede comprobar cómo se ha inyectado código IL que reifica y deriva a un weaver todas las llamadas a métodos, así como también el agregado del recurso embebido “ontology.rdf”, que contiene una representación de la estructura interna del assembly en formato RDF/XML.

Ejecutando dotSenkuView.exe, se utilizarán los aspectos que vienen en el ejemplo. Vale destacar que para poder utilizar el aspecto de distribución, es necesario primero levantar el server asociado. En el directorio \dotSenku\dotSenku.server\ puede encontrarse un proyecto C# con su implementación.

 

Configuración de SetPoint

            Toda la información que indica qué aspectos y cuándo deben ser aplicados se encuentra en el assembly SetPoint.config.dll. En este ejemplo definimos el proyecto C# SampleConfiguration, contiene el archivo generado por el compilador de LENDL (LENDLConfig.cs) y una referencia al assembly con la implementación de los aspectos del ejemplo. Para poder modificar la configuración, es necesario recompilar el proyecto y detener la ejecución del Senku. La implementación de los aspectos puede ser modificada accediendo directamente al proyecto CrosscuttingConcerns. La declaración de pointcuts, advices, ontologías y reglas de inferencia puede ser modificada directamente en LENDLConfig.cs.

Una opción más sencilla es utilizar LENDLc, el compilador de nuestro lenguaje de definiciones. Dentro de la carpeta \LENDL\ se encuentra el código fuente de las definiciones usadas en el ejemplo (myConfig.lendl). En ese mismo directorio, se encuentra la definición de la ontología de la información en formato RDF/XML (Information.owl). Para recompilarlos, basta con ejecutar LENDLc.bat, que tomará todos los archivos con extensión lendl y owl y generará en el directorio \lendl\ un archivo con código C#. Por último, hace falta sobreescribir la versión de LENDLConfig.cs en el proyecto SampleConfiguration con la generada por LENDLc y recompilar el assembly de configuración.

 

Debugging (sólo para valientes)

            El proceso de preweaving no regenera el archivo .pdb que contiene la información necesaria para llevar a cabo el debugging del código. Una manera de generar nuevamente este archivo es ejecutando roundtrip.bat, un archivo batch que utiliza ILDASM e ILASM y genera un .pdb que apunta a un archivo de texto con el código IL. Si luego se ejecuta al Senku desde el Visual Studio (o usando el CLR debugger que viene con el framework .NET), es posible poner breakpoints en el weaver, los aspectos o cualquier otra parte del código que compone el SetPoint Engine.