Commit cd19ef7e authored by Lionel Seinturier's avatar Lionel Seinturier
Browse files

Tagging version 1.4.6

parents 104136d0 ff910e52
OW2 FraSCAti Tinfi
Copyright (C) 2007-2013 Inria, Univ. Lille 1
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author: Lionel Seinturier
OW2 FraSCAti Tinfi
Copyright (C) 2007-2013 Inria, Univ. Lille 1
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author: Lionel Seinturier
Tinfi 1.4.6
Tinfi is a runtime kernel for the SCA component model. Tinfi provides an
infrastructure for running Java applications which comply with version 1.1 of
the OASIS SCA specifications. Tinfi generates at compile-time the containers
which host SCA components. Tinfi provides a dual support for OASIS SCA 1.1 and
OSOA SCA 1.0 annotated components. In addition, POJO components are also
supported. The generated code conforms with the API and the principles of the
Fractal component model. Tinfi is thus a SCA personality forthe Fractal
framework. Tinfi extends Juliac which is the Fractal compiler tool.
The name Tinfi stands for "Tinfi Is Not a Fractal Implementation".
Tinfi is a free software distributed under the terms of the GNU Lesser
General Public license. Tinfi is written in Java.
Table of content
1. Requirements
2. Introduction
3. Compiling and installing Tinfi
4. Running the Hello World application
5. Compiling and running your own applications
6. Running conformance tests
7. References
1. Requirements
Maven 2.0.x is required to compile and run Tinfi.
See for instructions on downloading and using Maven.
2. Introduction
Tinfi is composed of the following eight modules.
- all: the superset of all Tinfi Maven artifacts
- examples: sample applications and tests
- extension: extensions to Tinfi
- mixins: control logic for SCA/Tinfi components
- module: modules (SCA Assembly Language ADL parser, generators)
- runtime: runtime library
- tests: conformance tests for the SCA Specification
- tinfi-mixed: pre-mixed control membranes
The following basic sample application is available in the examples module.
- helloworld: the Tinfi Hello World application
In addition the examples/advanced directory contains some advanced samples. See
the README.txt in the corresponding directories to obtain more information about
these samples.
- foobar-cases: some FooBar examples
- helloworld-bin: binary components (compiled classes) with Tinfi
- helloworld-composite: SCA composite implementation
- helloworld-jdk13: Hello World example for JDK 1.3
- helloworld-light: light mode (no reflection, no intent controller)
- helloworld-pojo: POJO component implementations
- helloworld-tinfilet: Tinfilet optimization level source code generator
- helloworld-with-intent: policy sets
- osgi: some examples using the OSGi Equinox and Felix frameworks
- scala: components implemented with Scala (contributed by Romain)
- ultra-merge-helloworld: ultra-merge optimization level
The extension directory contains some extensions to Tinfi for the following
- osgi: the OSGi Equinox and Felix frameworks
3. Compiling and installing Tinfi
To compile and install Tinfi in your Maven local repository, from the root
directory of Tinfi, type:
mvn install
4. Running the Hello World application
To compile and run the helloworld sample application, type:
cd examples/helloworld
mvn -Ptinfi:run
5. Compiling and running your own applications
The quickest way for using Tinfi is to mimic the organization of the
examples/helloworld module. The source and the resources of your program should
be put under respectively, src/main/java and src/main/resources.
5.1 Compiling
A maven plugin is available for compiling your application with Tinfi. As
illustrated in the examples/helloworld module, the plugin can be configured as
01 <build>
02 <plugins>
03 <plugin>
04 <groupId>org.objectweb.fractal.juliac.plugin</groupId>
05 <artifactId>maven-juliac-plugin</artifactId>
06 <version>2.5</version>
07 <executions>
08 <execution>
09 <id>juliac-compile</id>
10 <phase>generate-sources</phase>
11 <goals>
12 <goal>compile</goal>
13 </goals>
14 </execution>
15 </executions>
16 <configuration>
17 <srcs><src>src/main/java</src></srcs>
18 <modules>
19 <module>JDT</module>
2O <module>SPOON</module>
21 <module>org.ow2.frascati.tinfi.emf.EMFParserSourceCodeGenerator</module>
22 <module>org.ow2.frascati.tinfi.opt.oo.FCOOCtrlSourceCodeGenerator</module>
23 </modules>
24 <mixins>
25 <mixin>org.ow2.frascati.tinfi:mixins:1.4.5:sources</mixin>
26 <mixin>org.objectweb.fractal.julia:julia-mixins:2.5.2:sources</mixin>
27 </mixins>
28 <adls><adl>HelloWorld</adl></adls>
29 <artifacts>
30 <artifact>org.ow2.frascati.tinfi:frascati-tinfi-oo:${project.version}</artifact>
31 <artifact>org.ow2.frascati.tinfi:frascati-tinfi-scaadl:${project.version}</artifact>
32 </artifacts>
33 </configuration>
34 </plugin>
35 </plugins>
36 </build>
Lines 16 to 33 in the <configuration> section particularily matter. The
following tags are supported.
- <srcs> list of directories containing the source code of the application,
- <mixins> list of source code artifacts for the implementation of control
- <adls> list of Fractal-ADL types to be compiled by Juliac,
- <modules> list of modules to be loaded by Juliac,
- <artifacts> list of artifacts containing the modules.
5.2 Running
Once compiled with Tinfi, applications can be runned with the
org.objectweb.fractal.juliac.runtime.Juliac Fractal provider class. The
<> and <> properties allow specifying
respectively, the component and the interface to invoke. These properties
configure the tinfi:run profile which is defined in tinfi/pom.xml.
For example, when configured with:
the command:
mvn -Ptinfi:run
launches the HelloWorld component by invoking the interface named r.
6. Running conformance tests
To run the conformance tests, type:
cd examples/advanced/tests-conf
mvn test
7. References
- Equinox :
- Felix :
- Fractal :
- Juliac :
- Maven :
- OSGi Alliance :
- OSOA :
- Scala :
For any question, please contact:
Date of creation of this file: 24 June 2007.
Last modified: 1 January 2013.
Tinfi 1.4.6
* bug fix for the implementation of the binding controller
* minor additional framework behavior when setting collection references
(requested by Philippe)
Tinfi 1.4.5
* new in the COMP mode
** Scala implementations for the Tinfi controllers
** .composite-based control membrane descriptions
* new removePromoter method in the SCAPropertyController
* bug fix for component interfaces with no method (reported by Philippe)
* move to Juliac 2.5
* support properties of type Class<?> in the .composite parser (requested by
* move to Juliac 2.5
Released on 3 December 2012
Tinfi 1.4.4
* move to a newer version ( of the artifact. The parent artifact of
version 1.0 is a SNAPSHOT. This is problematic when deploying stable versions
with no dependencies towards SNAPSHOTs (issued raised by Julien Lesbegueries
Petals Link.)
Released on 8 April 2011
Tinfi 1.4.3
* generate per content class SCAContentController implementations to enable
injection with static method invocations and field accesses. Use reflection
for private methods and fields.
* new setFcContent method in the SCAContentController for associating a content
instance to a composite-scoped component (requested by Philippe)
* .cfg membrane definition style replaced with Tinfilet
* all add and remove methods in SCABasicIntentController now throw
IllegalLifeCycleException and perform lifecycle checks to ensure that
reconfiguration operations are consistent with service operations (suggested
by Philippe)
* move to Juliac 2.4
* move to Fraclet 3.3
Released on 7 April 2011
Tinfi 1.4.2
* SCA property control interface refactored: containsDeclaredPropertyName,
getDeclaredPropertyNames, and getDeclaredPropertyType have been deprecated.
containsPropertyName, getPropertyNames, and getType have been extended to
include the behaviors which were previously associated with these methods
(suggested by Philippe)
* bug fixes
** join point introspection for intents on control interfaces (reported by
** intent on methods with varargs (contributed by Philippe)
* new @Provides annotation for declaring a factory method for component
instances in a content class (suggested by Philippe)
* move to Juliac 2.3
Released on 5 February 2011
Tinfi 1.4.1
* support the OASIS SCA 1.1, the OSOA SCA 1.0 and the Fraclet 3.2.2 annotations
* new module Tinfi API (runtime/api)
* control API refactoring
** package names changed
** ReconfigurationComponentContext removed
* annotation support refactoring
** component control interface injection with @Controller
** @ServiceName removed and replaced with @Service(name=) from OASIS SCA 1.1
** @Start removed and replaced with @Lifecycle(step=Step.START)
** @Stop removed and replaced with @Lifecycle(step=Step.STOP)
** in Tinfilet, membrane descriptor specification with @Membrane
* no-intent mode defined by configuration rather than programmatically
** new tinfi-no-intent.cfg file to be included when invoking Juliac
** FCOOCtrlNoIntentSource optimization level source code generator removed
* move to Juliac 2.2.6
Released on 23 October 2010
Tinfi 1.4
* move to Juliac
* support property promotion with different names in the promoter and promotee
* support @EndsConversation methods in non @Conversational annotated interfaces
* fix proxy generation for generic methods to enable compilation with javac
* new example with components implemented in Scala (contributed by Romain)
* fix the instance returned by method getService from ComponentContext and
ServiceReference: return an instance which implements the control logic
related to conversation management (reported by David Feliot)
* fix bug on intent for multiple references (contributed by Philippe)
Released on 3 September 2010
Tinfi 1.3.1
* move to Juliac 2.2.5
* support for reference re-injection
* new scaCompositeWithContent membrane to meet a requirement from EasyViper
* new scaContainer membrane which does not check that all subcomponents are
stopped before removing a subcomponent (requested by Philippe)
* SCA Assembly Language parser refactored to move the part specific to the
support of the OSGi implementation type in the extension/osgi module
* rename artifact frascati-tinfi-emf to frascati-tinfi-scaadl
* SCA property controller: check consistency between the type and the value
defined for a property (requested by Philippe)
Released on 20 July 2010
Tinfi 1.3
* move to Juliac 2.2.4
* fix for services and references with generic types (reported by Philippe)
* support inherited non public field injection point in component
implementations (requested by Philippe)
* support annotations defined in inherited classes (requested by Philippe)
* remove @EagerDestroy
* new @Start and @Stop annotations for triggering actions when a component is
started and stopped (requested by Philippe and Jonathan)
Released on 7 April 2010
Tinfi 1.2.1
* support property re-injection (requested by Christophe)
* new @EagerDestroy annotation for triggering actions when a composite-scoped
component is stopped (requested by Philippe)
Released on 15 January 2010
Tinfi 1.2
* bug fix for unwired optional component references: inject the null value
* move to a class-indexed map for the ContentClassMetaData repository in order
to enable the registering of classes with the same name loaded by different
class loaders
Released on 10 December 2009
Tinfi 1.1.2
* new ContentClassMetaData API to enable the dynamic declaration of injection
points for properties and references
* remove the metadata module
* new SCAPropertyController API for distinguishing between properties which are
declared by the content class and the ones which are dynamically set
* move to Juliac 2.2.3
* Equinox example for the OSGi implementation type
Released on 13 November 2009
Tinfi 1.1.1
* move to sca-model 2.0.0
* move to Juliac 2.2.2
* move back from EMF 2.4.1 to 2.4.0 due to the disappearance of the Eclipse EMF
Maven repository which was serving this version. Use the openArchitectureWare
Maven repository instead.
* FCOOCtrlNoIntentSourceCodeGenerator for scaPrimitive and scaComposite
membranes with no intent interceptor (requested by Nicolas P.)
* OSGi implementation type for the SCA Assembly Language EMF parser
* ultra-merge optimization level source code generator handles setter methods
for references
* size of the generated code reduced by moving some common tasks to the
frascati-tinfi-runtime module (suggested by Philippe)
* new API for the property controller (requested by Philippe and Christophe)
Released on 22 September 2009
Tinfi 1.1
* add a setFcContentClassName method in the SCA content control interface
(suggested by Valerio)
* SCA Assembly Language EMF parser
* new optimization level source code generator (ultra-merge) for inlining
* move to Juliac 2.2.1
Released on 11 July 2009
Tinfi 1.0.1
* move to the STP/SCA OSOA API module
Released on 18 June 2009
Tinfi 1.0 (renumbered from 0.6)
* sca-intent-controller control interface is now visible
* intercepted interfaces are now introspectable in intent join points
(these last two features have been requested by Nicolas D.)
* new example mixing SCA and OSGi components
* move to Juliac 2.2
* bug fix for @EagerInit (reported by Nicolas D.)
* SCA intent handler controller (requested by Philippe)
* method level granularity for adding, listing and removing an intent handler
* intent handler on control interfaces
* ReconfigurableComponentContext interface for accessing the reconfiguration API
(o.o.f.api.Component) for @Context annotated elements
Released on 5 June 2009 (version 1.0)
Released on 9 May 2009 (version 0.6)
Tinfi 0.4.4
* move to org.ow2.frascati for artifacts and Java packages
* support SCA annotations on private fields (suggested by Nicolas P.)
* support unannotated POJO component implementations
* support intent handlers on component with client interfaces
* move to Juliac 2.1.5
Released on 28 January 2009
Tinfi 0.4.3
* manage property promotions
* for the completion API, let the dynamically set metadata override annotations
* move to Juliac 2.1.4
* new metadata module
* bug fix for callback interfaces (reported by Guillaume)
Released on 20 November 2008
Tinfi 0.4.2
* move to Juliac 2.1.2
* remove the Tinfi Fractal provider class and rely on the Juliac one
Released on 11 October 2008
Tinfi 0.4.1
* bug fix for scaComposite membranes (reported by Damien)
Released on 2 October 2008
Tinfi 0.4
* AOP-based support for intents and policy sets
* intent handlers are implemented as regular SCA components
* intent handlers are woven to the business components
* per method intent handlers
* scaComposite membrane
* move to Juliac 2.1.1
* bug fix in code generation for methods throwing exactly Exception
Released on 28 September 2008
Tinfi 0.3.2
* move to Juliac 2.0.2
* bug fix in artifact version number for default optimization levels
(reported by Damien)
Released on 5 July 2008
Tinfi 0.3.1
* move to Juliac 2.0.1
* bug fix in code generation with inner types (reported by Fy)
* adding a tinfi-all artifact
Released on 4 July 2008
Tinfi 0.3
* new controller for handling policy sets and intents
* API for setting and retrieving custom metadata and annotations
Released on 30 June 2008
Tinfi 0.2.1
* org.scorware.tinfi.Tinfi is a full-fledged Fractal provider class
* bug fix (reported by Damien):
when a custom classloader is specified when invoking Tinfi, use this
classloader in the SCAContentController for loading component classes
Released on 19 May 2008
Tinfi 0.2
* move to Juliac 1.3
* as a consequence component source code is not needed for code generation
* pre-mixed object-oriented control membrane for scaPrimitive
* isolate the component-based version of the membrane in a dedicated module
* artifact identifiers renamed with a frascati-tinfi- prefix
Released on 14 May 2008
Tinfi 0.1
* first release
* scaPrimitive membrane: object-oriented and component-based
* forge and helloworld examples
* conformance tests
Released on 4 July 2007
* provide a scaOsgiPrimitive membrane which mixes the controllers (property,
intent) from the scaPrimitive membrane (suggested by Philippe)
* check the way callback references should be working with SCA 1.1 since
@Conversational is no longer part of the API
* when managing callback references, build the delegation chain
CallableReference > OutFcIf > InFcItf instead of CallableReference > InFcItf
* fix service reference class and SCA interceptor class generation for generic
interfaces with components from the BF which provide interfaces which are
generic, e.g. The mismatch occurs since the
generated proxy classes define also generic parameters, e.g. when extending
ServiceReference<B>. Check whether this bug has been fixed or not by r2312.
* generate per content class SCA content controller implementations
* support polymorphic setter methods in POJOs (see p12 of "SCA Service Component
Architecture Java Component Implementation Specification")
* provide a runtime-generic module which would be able to instantiate components
without relying on a generated initializer class. The idea would be that this
module would also rely on ASM to generate FcItf, FcOutIf, FcSR,
InterceptorLCSCAIntent (for scaPrimitive) and InterceptorIntent (for
scaComposite) classes. By this way, Tinfi could be used in a mode where it
would be independent of juliac-compiler and juliac-jdt. The assumption is that
it should not be so difficult to generate Fc* and Interceptor* classes with
ASM (not so sure for Interceptor*, but anyway...) whereas generating
initializer classes with ASM or julia-asm is significantly more difficult.
Having a generic initializer should bypass this difficulty.
* add a test for membrane scaCompositeWithContent
\ No newline at end of file
To generate a binary distribution of Tinfi:
mvn assembly:assembly
<!-- ================================================= -->
<!-- Files to be included in the distribution -->
<!-- ================================================= -->
<!-- ================================================= -->
<!-- LICENSE.txt and RELEASE_NOTES.txt -->
<!-- ================================================= -->
<!-- ================================================= -->
<!-- Hello World example -->
<!-- ================================================= -->