Spring ME Unleashing Spring to the Rest of the Platorm
J-Spring 2009 Wilfred Springer
Java is doing AWESOME!
2
Source: Tiobe Programming Community Index March
Spring is doing GREAT!
+
=
3
Source: Evans Data, 2008
But that's like... a freaking big number
4
… or is it?
SAN MATEO, Calif.—November 19, 2008 – SpringSource, a leading provider of infrastructure software and the company behind Spring, the de facto standard in enterprise Java, today announced that results from an extensive Evans Data research study reveal large scale adoption and penetration of Spring as a means of increasing developer productivity and combating complexity in today’s enterprise
application infrastructure market.
5
Java Nodes in the Cloud ● ● ● ●
3 Billion Java-Enabled Cards in 2007 1.8 Billion Java-Enabled Phones in 2007 7 Million Java Set-top Boxes 1 Million GWT downloads in 2007
6
Not all men are equal
Versus
7
We the people
“We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Creator with certain unalienable Rights, that among these are Life, Liberty, and the Pursuit of Happiness.”
8
We the people “We hold these truths to be self-evident, that all men... Java Developers are enttled to get their porton of Spring goodness.” Not just Java EE developers Not just Java SE developers But also Java ME developers And Java Card developers 9
Why Spring?
All Spring's goodness summarized in famous last words
10
IoC Container
“Trust us, we know what we're doing.” “Don't call us, we call you.”
11
Sanitized API
“Any problem in computer science can be solved with another layer of indirecton.” – David Wheeler
AOP
“Once you have a hammer, everything else is a nail.”
So why not use Spring itself? Platorm Limitatons ● Limited Java Runtme capabilites ● Limitatons imposed by deployment ● Limited computatonal resources – – –
Limitatons on heap Limitatons on applicaton size Limitatons on performance
Java Runtime Limitations
GWT Java ME Java Card
t c ) e ( l f e ) .( .. anc g.re g e t n trin s m a t l n a I . s S i a . N ew L r v g . l o a i n j t .f .n a r l u s s . . e r s s a a a h a a v v Cl Cl Ot ja ch ja n n n y y y y y n y y n n n n n n n
BeanFactory#getBean(String name)? BeanFactory#getBean(char[] name)?
Deployment Limitations (1)
<property name=”title” value=”Into the Wild”/>
1
OBFUSCATION package com.mgm; public class Movie { void setTitle(String title); } 2
package a.b; public class a { void a(String ...); } 3
<property name=”a” value=”Into the Wild”/>
4
Deployment Limitations (2) ● ●
GWT → JavaScript Java Card → CAP fles
Computational Resources (1) ● ●
Heap: Java SE –
●
Java ME – – –
●
Max heap approx. 1.5 GB Lower bound max. heap: 140 KB Upper bound max. heap: 128 MB Between factor 11 and 11,714 diference
Java Card –
16 K RAM
Computational Resources (2) ● ●
Applicaton size: Java ME: Upperbounds between 64 KB and 28 MB Spring Core Spring Beans Spring Context Total
267KB 467KB 455KB 1189KB
Throughput ●
Nokia E71: –
●
Gameboy Advance – –
●
369 MHz ARM 11 CPU 16 MHz ARM 7 CPU C-Ray Raytracing Benchmark 296108 s
Dell PowerEdge M710 – –
2.4 GHz Xeon Quad Core CPU C-Ray Raytracing Benchmark 201 s
Introducing Spring ME's IoC Do most of the hard work at build time
21
Assume this object model
22
And you want to create this
23
The Spring (ME) configuration
<property name=”movies”> <list> <property name=”title” value=”Bye Bye Blue Bird”/> <property name=”director” value=”Søren Kragh-Jacobsen”/> <property name=”year” value=”1999”/> …
24
… And with the Maven plugin <project>
me.springframework <artifactId>spring-me-maven-plugin 1.0-SNAPSHOT <executions> <execution> generate ....context.xml com.mgm.BeanFactory 25
You get this BeanFactory public class BeanFactory { public Object getBean(String name) { if (“movieFinder”.equals(name)) { return getMovieFinder(); } } private final Object getMovieFinder() { … }
}
…
26
DEMO ● ● ●
Spring ME on Java SE Spring ME on Java ME Spring ME on GWT
27
Spring ME ●
● ● ●
Compile tme validaton –
“Is 10e2 a valid int representaton?”
–
“Is an instance of Boeing747 assignable to a property of type Airplane?”
Minimal or no runtme dependencies Superfast (but no benchmarks to verify this) Small (1K?)
Under the hood
29
Spring ME Meta Model ● ● ●
Meta Model independent of Spring Typically Spring XML confguraton is used Meta Model supports other sources
Spring XML Configuration
Spring ME Meta Model
Spring ME BeanFactory 30
Other sources? @Autowired @PostConstruct @PostDestroy
@ProvidedBy @Inject @ImplementedBy
Annotations
Spring ME Meta Model Spring XML Configuration
Spring ME BeanFactory
31
Spring ME's Meta Model
32
Meta Model Instantiated
33
If not Spring ME, then what? ●
Java Card – –
●
None (Spring ME?)
Java ME – – – –
Signal Israfl IoC Fall ME Spring ME
●
GWT – – – – –
GWToolbox Rocket GWT GIN Spring ME Suco
Inversion of Control Galore
Rocket GWT Spring ME Israfil IoC Fall ME GWToolbox Signal
x it on rs nta ra lde Sy on i u t n t d atio nfig eho lian ec tion ds j o o n th d eth gur n co lac mp * or i njec e s s i s g o m nf tio y p Co n ct y i e m n i h o E ton ype i t t t r y o a r y t ru r m e i T va M gle otot zy ger ctor t me stro L c not ope ring as llec nst ope na typ tow i n i W G Ja Si Pr La Ea Fa In De XM An Pr Sp Al Co Co Pr By By Au y n y y y y y y y y n y n n all y y y n ? y y y y y y y y y y n n y n l/m y y y y ... n y y n n n n n n n n n n n ... y n n y y n y y n n n n n n n n n n n ... y n n n n y n y y y y ? y y n y y n n all n y n y y n n y y n n ? n n n y n y n all n y y ? ?
35
The Rest: Sanitized API ●
Java ME needs a lot more sanity –
●
●
J2ME Polish is your friend
Java Card is probably too limited to use wrapper API GWT is already addressed by a lot of frameworks
36
The Rest: AOP? ● ●
●
What about it? Using the metadata, proxies could be constructed at build tme The factory could construct these proxies instead of the actual objects
37
Current status ●
'Request' scope
●
'Session' scope
●
'Global session' scope
●
BeanFactoryAware, but ...
●
BeanPostProcessor (without refecton?)
●
BeanFactoryPostProcessor, but ...
●
FactoryBean, but ...
38
If there's only one thing ● ●
● ● ● ●
“ME” as in “supportng Java ME” “ME” as in “a microscopic small version of Spring” Useful for Java ME Useful for GWT Useful for Java SE Potentally useful for Java Card and Java EE 39
Roadmap ● ● ● ● ●
Version 1.0 (J109 release) end of May 2009 Integraton with J2ME Polish BOF-4470, June 4, JavaOne htp://springframework.me/ [email protected]
40