<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Using Framework Introspection for a Deep Integration of Domain-Specific Models in Java Applications</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Thomas</forename><surname>Büchner</surname></persName>
							<email>buechner@in.tum.de</email>
							<affiliation key="aff0">
								<orgName type="department">Fakultät für Informatik</orgName>
								<orgName type="institution">Technische Universität München</orgName>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Florian</forename><surname>Matthes</surname></persName>
							<email>matthes@in.tum.de</email>
							<affiliation key="aff0">
								<orgName type="department">Fakultät für Informatik</orgName>
								<orgName type="institution">Technische Universität München</orgName>
							</affiliation>
						</author>
						<title level="a" type="main">Using Framework Introspection for a Deep Integration of Domain-Specific Models in Java Applications</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">1A9A2BA9A9D771A50521CD0F666DDDB1</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T23:31+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Domain-specific models and languages are an attractive approach to raise the level of abstraction in software engineering. In this paper, we first analyze and categorize the semantic dependencies that exist between domain-specific models and their generated implementations via frameworks and customization code in a target programming language. We then demonstrate that framework introspection allows a deeper integration of domain-specific models into statically and polymorphically typed objectoriented languages like Java. Using the example of an introspective persistence and query framework for Java, we demonstrate how programmer productivity and software quality can be improved substantially. Since the Java IDE captures the semantic dependencies between the Java application and its embedded domain-specific model(s), it is able to provide programmers with powerful consistency checking, navigation, refactoring, and auto-completion support also for the domain-specific models. Our introspective approach works for whitebox and blackbox frameworks and is particularly suited for the integration of multiple domain-specific models (e.g. data model, interaction model, deployment model) in one application. Due to space limitations, these benefits <ref type="bibr" target="#b1">[2]</ref> are not covered in detail in this paper. The paper ends with a discussion of future work on how introspective models can improve the maintenance of long-lived business applications.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>To cope with the increasing complexity and constant change of business applications, new abstractions have been developed which are intended to increase programmer productivity and software quality: Statically and polymorphically typed object-oriented programming languages like Java or C# provide a powerful basic abstraction. Today, they are supported with rich IDEs that provide programmers with powerful consistency checking, navigation, refactoring, and auto-completion support. Based on these languages and tools, frameworks provide architectural abstraction. In order to solve a concrete problem, a framework has to be customized. Modern software systems usually utilize several frameworks, for example for persistence management, web-based interaction or distributed computing. Developers of a complex system have to understand both, the frameworks and their customizations.</p><p>Model-driven development tries to raise the level of abstraction of the framework customization process. Customizations are represented as models of a domain-specific lan-guage. Model-driven hereby means, that there is a transformation between the models and the concrete customization artifacts <ref type="bibr" target="#b5">[6]</ref>.</p><p>As a consequence, there exist artifacts on two different levels of abstraction (framework core and handwritten customizations vs. models). Keeping these artifacts over the lifetime of business applications consistent is the key challenge to be met by model-driven approaches <ref type="bibr" target="#b11">[12]</ref>. The central question of this paper is how to better realize and integrate domain-specific languages. We put special emphasis on the issue of integration. Analogous to the approach of Proof Carrying Code <ref type="bibr" target="#b12">[13]</ref> we enable Java programs to provide model information through introspection. This paper is organized as follows: We first review related work on DSLs and roundtrip engineering (Section 2). In Section 3 we analyze and categorize semantic dependencies that exist between domain-specific models and their generated implementations via frameworks and customization code in a target programming language and identify three integration requirements specific to model-driven development. Section 4 gives an overview of our approach to introspective model-driven development (IMDD) based on framework introspection <ref type="bibr" target="#b1">[2]</ref> which supports introspective blackbox and whitebox frameworks. Due to space limitations, we only explain in Section 5 how our introspective modeling framework (IMF) provides introspection for whitebox frameworks. A specific example of whitebox framework introspection is the persistence and query framework described in Section 6. Using this example, we illustrate how model-core and model-code integration is achieved. Section 7 compares our approach with popular generative model-driven approaches and highlights its benefits in terms of programmer productivity and software quality. The paper ends with a discussion of future work on how introspective models can facilitate the realization and maintenance of long-lived business applications.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Related Work</head><p>Specifying the behavior of computer systems using domain-specific abstractions has a long tradition in computer science <ref type="bibr" target="#b2">[3]</ref>. One way to implement a DSL is to tailor an existing base language into a DSL. These kinds of DSLs are called embedded or internal DSLs <ref type="bibr" target="#b4">[5]</ref>. An advantage of this approach is that the whole programming environment available to the base language can be reused. The main disadvantage is, that mainstream statically typed object-oriented programming languages are not designed to be syntactically extensible and do not allow for the creation of powerful internal languages.</p><p>The prevalent way of implementing a DSL using a statically typed object-oriented language as a base language is building an external DSL <ref type="bibr" target="#b10">[11]</ref>. As already introduced, we see DSLs as means to specify solutions on a higher level of abstraction in combination with frameworks <ref type="bibr" target="#b3">[4]</ref>. Therefore, building an external DSL means building a transformation, which generates customizations from models. This is called generative model-driven development. In such a process a metamodel is created, which represents the extension points of the framework to be customized. Additionally, transformation rules which control how to transform the models, have to be created. Based on the metamodel, the framework user creates a model which solves the problem at hand. This model will then be transformed automatically into customization artefacts.</p><p>As already mentioned, the lower level artifacts (framework core, handwritten customizations) have to be maintained as well as the higher level models. This leads to the wish for roundtrip engineering, which means that artifacts on both levels of abstraction should be editable and changes to one of them should lead to an immediate synchronization of the affected one. Realizing roundtrip engineering in a generative model-driven process is a challenging task <ref type="bibr" target="#b8">[9]</ref>.</p><p>An approach similar to the one introduced in this paper proposes the use of Framework-Specific Modeling Languages <ref type="bibr" target="#b13">[14]</ref> that are defined on top of existing object-oriented frameworks. This approach tries to facilitate roundtrip engineering by defining transformations between the levels of abstraction in both directions.</p><p>The approach presented in this paper is based on introspective frameworks, in which the customization points are annotated explicitly and the customizations follow a constrained programming model. This enables the extraction of models as transient views and makes roundtrip engineering easily achievable.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Integration of Domain-Specific Models</head><p>In this paper, we call two elements integrated, if there exists a semantic dependency between these two, this dependency is stated explicitly <ref type="bibr" target="#b9">[10]</ref>, and it can be inferred easily by a tool.</p><p>Source code of a statically typed programming language is integrated, in that for example the connection between declarations and usages of methods and fields can be inferred at compile-time. Over the last years, the new class of post-IntelliJ-IDEs made excessive use of this property to increase developer productivity and changed the way developers perceive source code <ref type="bibr" target="#b18">[19]</ref>. Integration enables features like navigation, search for references, code assist, and refactoring.</p><p>As we want to realize domain-specific languages in an integrated way, we first identify three integration requirements specific to modeling approaches. As a first requirement, all artifacts related to the DSL should be integrated with the underlying framework core. These frameworks are usually written in an object-oriented programming language. We call this requirement model-core integration.</p><p>In another typical scenario, concepts defined in a model of a domain-specific language have to be referenced in handwritten code. This occurs because in most cases it is not possible to completely specify a complex system using a declarative DSL. In this case we require the domain-specific language to be integrated with the code of the base language. This is called model-code integration in the following. There are two aspects of modelcode integration, which differ regarding the location of the handwritten code. In one case, the code which references the model is part of the customizations of the framework. In this case, only parts of the framework can be customized declaratively using a DSL. In another scenario the code which accesses the model belongs to customizations of another framework. In both cases, the model artifact should be integrated with the handwritten code to improve the consistency of the overall system.</p><p>Many problems are solved using several frameworks in cooperation. In such a case, an additional requirement is the integration of different domain-specific languages with each other, which we call model-model integration.</p><p>Which benefits arise from a modeling approach, which realize these three integration requirements? The main benefit is the automatic checking and assurance of consistency between the artifacts involved. Since the connection between the artifacts in an integrated scenario is stated explicity, tools can help ensuring consistency. This improves the quality of the overall system. Another benefit as already mentioned is tool support for productivity enhancements like navigation, search for references, refactoring, and input assistance.</p><p>The prevailing generative model-driven approaches lack integration, since the relationships between the modeling artifacts and the underlying system are not stated explicitly. The underlying reason for this problem is the lack of symbolic integration <ref type="bibr" target="#b10">[11]</ref> between the artefacts involved. For instance it is not possible to navigate automatically from metamodel artifacts to the extension points of the framework core, reflected by them. The DSL is not integrated with the framework it is expected to customize (no model-core integration). The model-code and model-model integration requirements are not met either by generative model-driven approaches. As a consequence of this lack of integration it takes a lot of manual work to keep all artifacts consistent.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Introspective Model-Driven Development</head><p>In <ref type="bibr" target="#b0">[1]</ref> we proposed a bottom-up approach to model-driven development, which we call introspective model-driven development (IMDD). The main idea of IMDD is the construction of frameworks that can be analyzed in order to obtain the metamodel for customizations they define. The process in which the metamodel is retrieved is called introspection. The term introspection stems from the latin verb introspicere: to look within. Special emphasis should be put on the distinction between introspection and reflection in this context. We use both terms as they have been defined by the OMG <ref type="bibr" target="#b15">[16]</ref> (see table <ref type="table" target="#tab_0">1</ref>).</p><p>In analogy to the definition of reflective, introspective describes something that supports introspection. An introspective framework supports introspection in that its metamodel can be examined.</p><p>The whole process of introspective model-driven development is schematically shown in Figure <ref type="figure" target="#fig_0">1</ref>. The process is divided into the well known core development phase and the application development phase. The first result of the core development phase is an introspective framework. An introspective framework supports introspection by highlighting all declaratively customizable extension points through annotations <ref type="bibr" target="#b16">[17]</ref>. This enables the extraction of the metamodel by metamodel introspection. It is important to understand, that the metamodel is not an artifact to be created by the framework developer, but rather can be retrieved at any point in time from the framework.  The central artifact of the application development phase are the customizations to be made by the framework user. In IMDD it is possible to analyze these artifacts and to obtain their model representation. This is called model introspection. The model is an instance of the retrieved metamodel and can be visualized by different viewers (i.e. visualization tools). We implemented out of the box viewers which can visualize an introspective model in a generic way. In some cases it is desirable to develop special viewers which visualize the model in a specific way (e.g. as a UML model). This will be done by framework developers in the core development phase. The manipulation of the model can be either done by using the views or by manipulating the customization artifacts directly. In both cases an updated customization artifact leads to an updated model and subsequently to an updated view. As a result of this, the model and the views are always synchronized with the actual implementation and can never "lie". This kind of visualization is called roundtrip visualization <ref type="bibr" target="#b14">[15]</ref>.</p><p>Generative model-driven development and IMDD differ in the direction the transformation between the model and the customization artifacts takes place. There are similarities between our approach and that of internal DSLs. In both approaches, the models are represented in terms of the base language. The difference comes in how the user of the DSL perceives and manipulates models. Using an internal DSL, the user directly edits statements of the base language, whose syntax is tailored to the particular domain. Because of the inflexibility of statically typed object-oriented programming languages to be tailored syntactically, we have to visualize the customization artifacts on a higher level of abstraction.</p><p>The main idea of introspective model-driven development is the direct extraction of the model and the metamodel from the framework artifacts which represent them. There are two categories of frameworks: blackbox frameworks and whitebox frameworks. They differ in the way adaptation takes place. Due to space limitations we only give an overview of how introspection of whitebox frameworks works. Introspective blackbox frameworks are discussed in <ref type="bibr" target="#b0">[1]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Whitebox Introspection</head><p>The customization of whitebox frameworks is done by providing implementations of abstract classes of the framework core in the base programming language. More specifically, the framework user specifies the desired behavior by implementing methods. These methods are called hook methods and represent the extension points of the framework <ref type="bibr" target="#b6">[7]</ref>. Regarding introspective whitebox frameworks there are two kinds of hook methods -introspective and non-introspective hook methods. Customization code of introspective hook methods must use a constrained subset of the expressiveness of the base language. We call this subset an introspective programming model. Programming using an introspective programming model is of declarative nature and enables the extraction of the model. In contrast, the implementation of a non-introspective hook method can use the full expressiveness of the imperative base language.</p><p>The main idea of whitebox introspection is to annotate introspective hook methods in the framework core and to analyze the introspective method implementations. The analysis of the structure of the introspective methods results in the metamodel of the framework core, and the analysis of the method implementations leads to a model of the provided adaptations.</p><p>The conceptual idea of whitebox introspection described so far is very generic. To verify the idea, we identified important introspective methods and programming models. In <ref type="bibr" target="#b0">[1]</ref>, we introduced some basic introspective methods and their programming models. They form a meta-metamodel of whitebox introspection, in that they enable a concrete whitebox framework to draw on these methods. We also implemented generic tool support, which creates an introspective model for introspective whitebox frameworks. Our tools are based on the Eclipse IDE, which is available under an Open Source license and is easily extensible because of its plugin architecture. Specifically, we rely heavily on the Eclipse JDT subproject <ref type="bibr" target="#b19">[20]</ref>, which provides access to an abstract syntax tree representation of the source code.</p><p>On top of Eclipse we built a framework which supports introspection in a general way. This framework is called Introspective Modeling Framework -IMF and provides basic abstractions for analyzing source code, representing the models, and visualizing them.</p><p>Based on IMF there are tools which support blackbox and whitebox introspection with generic visualization. As previously mentioned, it is sometimes desirable to customize the way the introspective model is created and visualized (see Figure <ref type="figure" target="#fig_0">1</ref>). This can be done easily, using the existing generic tools as a starting point.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6">An Introspective Persistence and Query Framework</head><p>A core requirement of information systems is persistent storage and efficient querying of business objects. Usually this is implemented using a relational database. There is a conceptual gap between relational data and object-oriented modeling of business objects.</p><p>A persistence framework is used to bridge this gap with an object-relational mapping <ref type="bibr" target="#b17">[18]</ref>.</p><p>In this section we explain how to use an introspective whitebox framework for this purpose. The principal idea of our introspective whitebox framework is to explicitly represent the metamodel as introspective Java code. The framework provides abstract classes for all metamodel concepts, which have to be implemented and instantiated to model concrete business objects. For instance, there are abstract classes which can be used to specify persistent properties and persistent relationships between business objects. These abstract classes are introspective, because they have introspective methods. For example, these are value-methods which restrict the implementation to return a value literal or a reference to a final variable <ref type="bibr" target="#b0">[1]</ref>.</p><p>The schema of Person objects with a firstName property and a one-to-many relationship to Group objects is defined using inner classes that override (generic) framework classes. final ManyRole&lt;Group&gt; groups = new ManyRole&lt;Group&gt;() { @Override Role otherRole() { return Group.SCHEMA.prototype().members; }}; ... Because this is introspective code, the model can be analyzed and visualized. Figure <ref type="figure" target="#fig_1">2</ref> visualizes the model using a tree view. It is possible to edit the model in this view. On the other hand it is always possible to navigate to the corresponding code, which represents the model attribute. A graphical visualization as a UML class diagram is given in Figure <ref type="figure" target="#fig_2">3</ref>. More complex models used in industrial projects based on our IMF are presented in <ref type="bibr" target="#b1">[2]</ref>.</p><p>The following subsections use this example to explain the benefits of our introspective approach in terms of integration.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.1">Model-Core Integration</head><p>The way models are represented in the proposed introspective persistence framework fulfills the requirement of model-core integration as introduced in section 3. This means, that there is an explicit connection between the model attributes and the corresponding hooks of the customized framework. In the example presented above, the persistent model property firstName specifies its maximal length to be 100. This is done by overriding a method which is defined in the abstract super class StringProperty, which belongs to the framework core. The Java compiler knows about this relationship and additionally it is stated explicity through the use of the Override annotation. Therefore, the Java compiler already checks consistency constraints. On the other hand it is easily possible to navigate into the framework core and to find out in which context the attribute maximal length will be used. A post-IntelliJ-IDE like Eclipse can provide programmers with a list of available model attributes .</p><p>Another advantage of this model representation is the direct use of the refactoring capabilities of Eclipse to execute refactorings on both the framework and the models in one step.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.2">Model-Code Integration</head><p>Now we can specify and analyze types of business objects at a higher level of abstraction. But how does the programming model look like? Accessing business objects is done using the explicitly represented model. Setting the first name of a person is done as follows: person.firstName.set("Thomas"); Another important aspect concerning the programming model is navigation, also known as "traversal". This means moving from one business object to another along existing association relationships. As already shown, in our persistence framework relationships are defined by instantiating metamodel classes. In particular, this is done specifying the association ends by instantiating objects of type OneRole or ManyRole. The instantiated model instances are used to navigate relationships in a type-safe way. Accessing all groups a person has a member association with is expressed like this: Iterator&lt;Group&gt; groups = person.groups.getAssets();</p><p>Another aspect of a persistence framework is querying business objects for certain criteria. In our introspective persistence framework there is a query API to serve that purpose. The following query retrieves all persons with the first name "Thomas": Query q = new QueryEquals (Person.SCHEMA.prototype().firstName, "Thomas"); Iterator&lt;Person&gt; persons = Person.SCHEMA.queryAssets(q); These examples of the programming model show, that the handwritten customization code is integrated with the data model since it directly refers to the model definition. Also in this case type consistency is checked by the Java compiler and the IDE even for complex nested and join queries.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="7">A Comparison with Model-driven Generation of POJOs</head><p>To help the reader to better understand the benefits of our approach, we now compare the introspective persistence and query framework with the prevailing approach to objectrelational mapping using POJOs <ref type="bibr" target="#b7">[8]</ref> (Plain Old Java Objects). Similar benefits arise in other modeling situations (e.g. interaction models and configuration models) as discussed in <ref type="bibr" target="#b1">[2]</ref>. This is not exactly an adequate comparison, since representing persistent business objects using POJOs is not a model-driven approach. The model cannot be easily extracted and looked upon on a high level of abstraction. But most generative model-driven approaches using Java technologies generate POJOs <ref type="bibr" target="#b20">[21]</ref> [22] and therefore inherit the lack of integration which we will show is inherent to this approach.</p><p>In a POJO-based approach persistent business objects are represented as JavaBeans. Properties are represented as private fields with a getter and setter method. Associations are represented using collection fields and getter and setter methods. In both cases, additional metainformation might be provided with annotations or through an external configuration file. The introduced business object Person will be represented as follows: First lets have a look at model-core integration. Model attributes are represented here using annotations <ref type="bibr" target="#b16">[17]</ref>. Java annotations are syntactically elegant but only provide very limited automatic consistency checking capabilities. The scope of an annotation only can be restricted to very generic Java constructs as fields, types, methods, and constructors. The Column annotation used in the example could also be applied to the setGroups method, which would be an inconsistent modeling. This inconsistency cannot be checked by the Java compiler. Post-IntelliJ-IDEs cannot provide help answering questions about which modeling attributes are available in a specific situation.</p><formula xml:id="formula_0">public</formula><p>Now lets focus on model-code integration. The programming model for accessing properties and navigating associations is straight forward and uses the getter and setter methods.</p><p>Apart from aesthetic arguments of taste and style both programming models are equivalent and integrated, in that they provide a type-safe way of accessing properties and navigating associations.</p><p>But accessing fields and navigating associations is only one part of the overall usage scenarios. Another one is querying, as already introduced. In our introspective persistence framework, the metamodel instances can be referenced integrated to specify queries. This is not possible with a POJO-based persistence framework, because the metamodel instances are represented through Java fields and methods, which are not referenceable. This leads to an unsafe way of defining queries:</p><p>Criteria crit = session.createCriteria(Person.class); crit.add(Expression.eq("firstName", "Thomas")); List&lt;Person&gt; result = crit.list();</p><p>Unsafe means hereby, that the properties are identified using strings. This is an implicit binding which is not accessible for the compiler and the IDE. Renaming a property or association with a simple refactoring may lead to broken queries, which cannot be found automatically. This is not an issue with our introspective persistence framework.</p><p>Another advantage of our introspective modeling approach is, that it is very easy to access metadata at runtime. This enables generic services on business objects, e.g. generic visualization and manipulation. An asset can be asked directly for the model instances which define its schema, which in turn provide access to all available metadata. In a POJO-based persistence framework accessing metadata at runtime has to be done using Java reflection, which is cumbersome. Accessing more sophisticated metadata, like length restrictions as applied via annotations in our example, is even more complicated.</p><p>For the sake of completeness, we want to mention the high level modeling and visualization capabilities of our introspective persistence framework again. They come out of the box as an integral part of our framework. For POJO-based frameworks the same kind of tool support is theoretically possible, but the development of the framework core and the tooling do not go hand in hand.</p><p>The points mentioned so far concern the experience of the framework user. We believe, that also the framework developer benefits from introspection, because all metadata is directly accessible to the framework core.</p><p>Integration of domain-specific models with the underlying system is a desirable goal in model-driven development because it improves consistency and enables productivity features developers are used to nowadays. Existing generative approaches lack integration because of their character as an external DSL. We have shown, that the proposed approach of introspective model-driven development using whitebox frameworks integrates domainspecific models with the framework core and with handwritten customization code. Referring to the integration requirements proposed in section 3, we have shown that introspective whitebox frameworks enable model-core and model-code integration and solve a key maintenance problem in model-driven software engineering <ref type="bibr" target="#b11">[12]</ref>.</p><p>Furthermore, an introspective software engineering approach increases the maintainability of long-lived business application by explicitely stating adaptations in the system. These adaptations are made on a high level of abstraction using a domain specific language and a programming model that provides abstractions tailored to the problem domain.</p><p>In the future, we plan to continue our research on introspective models and address the following issues:</p><p>• How can introspective models be enriched to capture more business logic, for example through cascading deletes, derived attributes, declarative constraints on classes and relationships, temporal constraints, security constraints and other business rules?</p><p>• How can domain-specific models be visualized and navigated including their links with implementation artifacts?</p><p>• How can introspective models be accessed by standard tools used in industry, like configuration management databases (CMDBs), enterprise architecture management tools?</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: Introspective Model-Driven Software Development</figDesc><graphic coords="5,178.66,444.17,238.12,188.18" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Figure 2 :</head><label>2</label><figDesc>Figure 2: Visualization of the Data Model in a Tree View</figDesc><graphic coords="8,178.66,148.47,238.11,164.12" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Figure 3 :</head><label>3</label><figDesc>Figure 3: Visualization in UML Class Diagram Notation</figDesc><graphic coords="9,178.66,148.48,238.11,74.24" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head>Table 1 :</head><label>1</label><figDesc>Term Definitions introspection A style of programming in which a program is able to examine parts of its own definition.</figDesc><table /><note>reflection A style of programming in which a program is able to alter its own execution model. A reflective program can create new classes and modify existing ones in its own execution. Examples of reflection technology are metaobject protocols and callable compilers. reflective Describes something that uses or supports reflection.</note></figure>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Introspective Model-Driven Development</title>
		<author>
			<persName><forename type="first">Thomas</forename><surname>Büchner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Florian</forename><surname>Matthes</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of Third European Workshop on Software Architectures (EWSA 2006)</title>
				<meeting>of Third European Workshop on Software Architectures (EWSA 2006)<address><addrLine>Nantes, France</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="volume">4344</biblScope>
			<biblScope unit="page" from="33" to="49" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<author>
			<persName><forename type="first">Thomas</forename><surname>Büchner</surname></persName>
		</author>
		<title level="m">Introspektive modellgetriebene Softwareentwicklung</title>
				<imprint>
			<date type="published" when="2007-08">August 2007</date>
			<biblScope unit="volume">19</biblScope>
		</imprint>
		<respStmt>
			<orgName>TU-München ; Lehrstuhl für Informatik</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Dissertation</note>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Domain-specific languages: An Annotated Bibliography</title>
		<author>
			<persName><forename type="first">Arie</forename><surname>Van Deursen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Paul</forename><surname>Klint</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Joost</forename><surname>Visser</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM SIGPLAN Notices</title>
		<imprint>
			<biblScope unit="volume">35</biblScope>
			<biblScope unit="page" from="26" to="36" />
			<date type="published" when="2000">2000</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Domain-specific languages versus object-oriented frameworks: A financial engineering case study</title>
		<author>
			<persName><forename type="first">Arie</forename><surname>Van Deursen</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Smalltalk and Java in Industry and Academia, STJA&apos;97</title>
				<imprint>
			<date type="published" when="1997">1997</date>
			<biblScope unit="page" from="35" to="39" />
		</imprint>
		<respStmt>
			<orgName>Ilmenau Technical University</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Building Domain-Specific Embedded Languages</title>
		<author>
			<persName><forename type="first">Paul</forename><surname>Hudak</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Computing Surveys</title>
		<imprint>
			<biblScope unit="volume">28</biblScope>
			<biblScope unit="page">196</biblScope>
			<date type="published" when="1996">1996</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<monogr>
		<author>
			<persName><forename type="first">Markus</forename><surname>Völter</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Thomas</forename><surname>Stahl</surname></persName>
		</author>
		<title level="m">Model-Driven Software Development</title>
				<imprint>
			<publisher>John Wiley &amp; Sons</publisher>
			<date type="published" when="2006">2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Essential Framework Design Patterns</title>
		<author>
			<persName><forename type="first">Wolfgang</forename><surname>Pree</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Object Magazine</title>
		<imprint>
			<biblScope unit="volume">7</biblScope>
			<biblScope unit="page" from="34" to="37" />
			<date type="published" when="1997">1997</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Untangling Enterprise Java</title>
		<author>
			<persName><forename type="first">Chris</forename><surname>Richardson</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Queue</title>
		<imprint>
			<biblScope unit="volume">4</biblScope>
			<biblScope unit="page" from="36" to="44" />
			<date type="published" when="2006">2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Taming Model Round-Trip Engineering</title>
		<author>
			<persName><forename type="first">Shane</forename><surname>Sendall</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jochen</forename><surname>Küster</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of Workshop on Best Practices for Model-Driven Software Development (part of 19th Annual ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications)</title>
				<meeting>Workshop on Best Practices for Model-Driven Software Development (part of 19th Annual ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications)<address><addrLine>Vancouver, Canada</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2004">2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">To Be Explicit</title>
		<author>
			<persName><forename type="first">Martin</forename><surname>Fowler</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Software</title>
		<imprint>
			<biblScope unit="volume">16</biblScope>
			<biblScope unit="page" from="10" to="15" />
			<date type="published" when="2001">2001</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<monogr>
		<author>
			<persName><forename type="first">Martin</forename><surname>Fowler</surname></persName>
		</author>
		<ptr target="http://www.martinfowler.com/articles/languageWorkbench.html" />
		<title level="m">Language Workbenches: The Killer-App for Domain Specific Languages</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<title level="m" type="main">Design for Future -Legacy-Probleme von morgen vermeidbar? Informatik-Spektrum</title>
		<author>
			<persName><forename type="first">Gregor</forename><surname>Engels</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Michael</forename><surname>Goedicke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ursula</forename><surname>Goltz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Andreas</forename><surname>Rausch</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ralf</forename><surname>Reussner</surname></persName>
		</author>
		<idno type="DOI">10.1007/s00287-009-0356-3</idno>
		<imprint>
			<date type="published" when="2009">2009</date>
			<publisher>Springer Verlag</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Proof-carrying code: design and implementation PPDP&apos;00</title>
		<author>
			<persName><forename type="first">George</forename><forename type="middle">C</forename><surname>Necula</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2nd ACM SIGPLAN international conference on Principles and practice of declarative programming</title>
				<meeting>the 2nd ACM SIGPLAN international conference on Principles and practice of declarative programming<address><addrLine>New York</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2000">2000</date>
			<biblScope unit="page" from="175" to="177" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">Round-Trip Engineering of Framework-Based Software using Framework-Specific Modeling Languages</title>
		<author>
			<persName><forename type="first">Michal</forename><surname>Antkiewicz</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 21st IEEE International Conference on Automated Software Engineering (ASE&apos;06)</title>
				<meeting>the 21st IEEE International Conference on Automated Software Engineering (ASE&apos;06)</meeting>
		<imprint>
			<date type="published" when="2006">2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">The end of the line for Software Visualization?</title>
		<author>
			<persName><forename type="first">M</forename><surname>Stuart</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Nigel</forename><surname>Charters</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Malcolm</forename><surname>Thomas</surname></persName>
		</author>
		<author>
			<persName><surname>Munro</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">VISSOFT 2003: 2nd Annual &quot;DESIGNFEST&quot; on Visualizing Software for Understanding and Analysis</title>
				<meeting><address><addrLine>Amsterdam</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2003-09">September 2003</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<monogr>
		<ptr target="http://www.omg.org/docs/formal/03-03-44.pdf" />
		<title level="m">OMG -Object Management Group, Common Warehouse Metamodel (CWM)</title>
				<imprint/>
	</monogr>
	<note>1 -Glossary</note>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<author>
			<persName><forename type="first">Joshua</forename><surname>Bloch</surname></persName>
		</author>
		<ptr target="http://www.jcp.org/en/jsr/detail?id=175" />
	</analytic>
	<monogr>
		<title level="m">A Metadata Facility for the Java Programming Language</title>
				<imprint>
			<biblScope unit="volume">175</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Mapping Objects to Tables -A Pattern Language</title>
		<author>
			<persName><forename type="first">Wolfgang</forename><surname>Keller</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Conference on Pattern Languages of Programming (EuroPLoP)</title>
				<meeting><address><addrLine>Irsee, Germany</addrLine></address></meeting>
		<imprint>
			<date type="published" when="1997">1997</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">How Are Java Software Developers Using the Eclipse IDE?</title>
		<author>
			<persName><forename type="first">Gail</forename><forename type="middle">C</forename><surname>Murphy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Mik</forename><surname>Kersten</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Leah</forename><surname>Findlater</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Software</title>
		<imprint>
			<biblScope unit="volume">23</biblScope>
			<biblScope unit="page" from="76" to="83" />
			<date type="published" when="2006">2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<monogr>
		<ptr target="http://www.eclipse.org/jdt/" />
		<title level="m">Eclipse Java Development Tools (JDT) Subproject</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<monogr>
		<ptr target="http://witchcraft.sourceforge.net" />
		<title level="m">Witchcraft</title>
				<imprint/>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
