Presentation is loading. Please wait.

Presentation is loading. Please wait.

JACQUARD2005, KNVB HOTEL Zeist 3 en 4 februari 2005 Composing Configurable Java Components Tijs van der Storm, CWI, Project Deliver.

Similar presentations


Presentation on theme: "JACQUARD2005, KNVB HOTEL Zeist 3 en 4 februari 2005 Composing Configurable Java Components Tijs van der Storm, CWI, Project Deliver."— Presentation transcript:

1 JACQUARD2005, KNVB HOTEL Zeist 3 en 4 februari 2005 Composing Configurable Java Components Tijs van der Storm, CWI, Project Deliver

2 Tijs van der Storm - CWI Introduction Project Deliver: Intelligent Knowledge Management for Software Delivery Focus on release and delivery for product lines This talk: Composing Configurable Java Components How to apply product line technology in a setting where components themselves are configurable?

3 Tijs van der Storm - CWI Two configurable components Trees with two implementations (array and list) and optional traversal

4 Tijs van der Storm - CWI Implementing variation Programming language imposes restrictions on variation mechanisms Use Java properties to select TreeFactory implementation Runtime configuration at program start-up. Use Aspect-Oriented Programming (AOP) to add Visitor design pattern Trees should implement Visitable interface AOP is used to add this interface

5 Tijs van der Storm - CWI Binding Factory implementation Property used to resolve concrete factory Example: treefactory=list.TreeFactory Dynamic loading and reflection are used to instantiate the factory Consequences: Property must be set according to requirements

6 Tijs van der Storm - CWI Enabling optional Tree traversal AOP is used to weave in Visitor design pattern public aspect TreeVisitor { declare parents: Tree extends Visitable; public void Tree.accept(Visitor v) { v.visit(this); } Consequences: Build process must call AspectJ There is a dependency on the Visitors component

7 Tijs van der Storm - CWI Towards automatic delivery of compositions Tree component has 4 variants: array with traversal, array without traversal list with traversal, list without traversal How to implement this component family? How do we set the factory property? Do we call AspectJ by hand? Moreover: propagation of variability What if Visitor component is configurable as well? How to verify inter-component configuration? Our approach: component description language Variability: feature descriptions Binding: (conditional) binding actions

8 Tijs van der Storm - CWI Description of variability Tree Implementation listarray traversal Tree: all(Implementation, traversal?) Implementation: one-of(list, array) Feature diagrams: Feature descriptions:

9 Tijs van der Storm - CWI Description of binding and composition (Conditional) binding actions Atomic features function as guards: if (array) { treefactory = array.TreeFactory; } if (list) { treefactory = list.TreeFactory; } if (traversal) { require(visitors); weave(TreeVisitor); if (list) { weave(list.TreeVisitor); } if (array) { weave(array.TreeVisitor); } } dependency property assignment aspect weaving

10 Tijs van der Storm - CWI Component description language (CDL) Feature descriptions + binding actions = CDL CDL can be formally analyzed Feature descriptions checked for consistency Binding checked against feature descriptions Correct configuration guaranteed!

11 Tijs van der Storm - CWI Benefits Configurable components are more reusable Locality of variability improves maintenance Consistency of configuration guaranteed Compositions are automatically derived

12 Tijs van der Storm - CWI Summary Configurable Java Components Composition becomes complex: Configuration correctness Binding of features CDL for automation: Feature descriptions Binding actions

13 Tijs van der Storm - CWI End Deliver project: http://www.cwi.nl/projects/deliverhttp://www.cwi.nl/projects/deliver Technical report available More info: http://www.cwi.nl/~stormhttp://www.cwi.nl/~storm Thank you!

14 Tijs van der Storm - CWI Loading the concrete factory String cls = System.getProperty(“treefactory"); ClassLoader cl = ClassLoader.getSystemClassLoader(); TreeFactory tf = (TreeFactory)cl.loadClass(cls).newInstance();


Download ppt "JACQUARD2005, KNVB HOTEL Zeist 3 en 4 februari 2005 Composing Configurable Java Components Tijs van der Storm, CWI, Project Deliver."

Similar presentations


Ads by Google