Modularity & Dynamism


A Tale of Two Sisters
Dr. Clement Escoffier
Time Travel
–R. Gauthier and S. Pont, Designing Systems Programs, 1970.
“Each task forms a separate, distinct program
module. At implementation time each module
and its inputs and outputs are well-defined. At
checkout time the integrity of the module is
tested independently. Finally, the system is
maintained in modular fashion.”
–D. Parnas, On the Criteria to Be Used in Decomposing Systems into
Modules, 1972.
“The major advancement in the area of
modular programming has been the
development of coding techniques and
assemblers which
(l) allow one module to be written with
little knowledge of the code in another
module, and
!
(2) allow modules to be reassembled and
replaced without reassembly of the whole
system.”
–R.S. Fabry, How to design a system in which modules can be changed on
the fly, 1976.
If the module does manage permanent
data structures which must be modified
and the system is one which is expected to
continue operation throughout the
change, the problem is more difficult, but
it can be solved. This paper discusses a
solution.
Modularity
a (not that) simple idea
The
trend…
Dependencies
Compatibility
Boot Sequence
&
Stabilization
Reuse / Generic
vs.
Performance
Dynamism
The forgotten sister
Dynamism
(Asynchronous)
Update
Event in the
surrounding
environment
Change in the
application

context
Very specific and
limited to 

particular domains
Ubiquitous
Computing
Machine

to

Machine
Internet

of

Things
Pervasive
Environment
Application
Servers
Set-top
Box
Enterprise
Server
(JavaEE)
Custom
App
Servers
Enterprise
Applications
Heavily
Distributed
Managed
by many
stakeholders
Malleable
Topology
Cloud, Mobile…
Ever-Changing Dynamic Resources
Disruptions
Dynamism breaks the
simplest assumptions
if (service != null) {
service.serve();
}
Simplification
of the development
model
All types
of dynamism
Adaptable ,
Flexible and
Customizable
Components
Interfaces
Required
Provided
Dependency
Injection
Lifecycle
Dynamic Availability
Dynamic Availability
X! X!
On the role of the Service Registry
Registry
1 - Publication
2 - Lookup,
Notifications,
Selection
3 - Binding
The new super-powers
Constructor injection
public Component (
@Requires ApplicationConfiguration configuration,
@Property(name="p",value="d") String prop, 

@Context BundleContext ctx) {
//…
}
Temporal => Timeout
Hold the line,

back in a sec
@Configuration
@Configuration
public class MyConfiguration {
!
Instance businessA =

instance()

.named("A")

.of(BusinessImpl.class)

.with("name").setto("A");
}
Context-Sources
filter=

“(version=${my.version})”
Stereotypes &
Manipulator Modules
@Controller
@Component
@Provides
@Instantiate
Interceptors
iPOJO 2.x
Roadmap
Manip@Runtime
Inheritance
New Manipulation
Machine
Interceptor Chains Indy ?
Intra-Bundle
Injection
End Of
File

Modularity and Dynamism - The tale of two sisters