Upload
wilfred-springer
View
951
Download
4
Embed Size (px)
DESCRIPTION
Citation preview
Spring MEUnleashing Spring to the Rest of the Platorm
J-Spring 2009Wilfred Springer
2
Java is doing AWESOME!
Source: Tiobe Programming Community Index March
3
Spring is doing GREAT!
Source: Evans Data, 2008
+ =
4
But that's like... a freaking big number
5
… 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.
6
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
7
Not all men are equal
Versus
8
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.”
9
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 developersNot just Java SE developersBut also Java ME developers
And Java Card developers
10
Why Spring?
All Spring's goodness summarized in famous last words
11
IoC Container
“Trust us, we know what we're doing.”“Don't call us, we call you.”
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 n n n y y yJava ME y y n y y nJava Card n n n n n n
Class.fo
rName(..
.)
Class.newInsta
nce()
Other java
.lang.re
flect
java.la
ng.Strin
g
char
java.util.
List
BeanFactory#getBean(String name)?BeanFactory#getBean(char[] name)?
Deployment Limitations (1)
<bean id=”movie1” class=”sample.Movie”> <property name=”title” value=”Into the Wild”/></bean>
package com.mgm;
public class Movie { void setTitle(String title);}
package a.b;
public class a { void a(String ...);}
<bean id=”movie1” class=”a.b.a”> <property name=”a” value=”Into the Wild”/></bean>
OBFUSCATION
1
2 3
4
Deployment Limitations (2)
● GWT → JavaScript
● Java Card → CAP fles
Computational Resources (1)
● Heap:
● Java SE
– Max heap approx. 1.5 GB
● Java ME
– 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 267KBSpring Beans 467KBSpring Context 455KBTotal 1189KB
Throughput
● Nokia E71:
– 369 MHz ARM 11 CPU
● Gameboy Advance
– 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
21
Introducing Spring ME's IoC
Do most of the hard work at build time
22
Assume this object model
23
And you want to create this
24
The Spring (ME) configuration
<beans xmlns=”…”> <bean id=”movieFinder” class=”….InMemoryMovieFinder”> <property name=”movies”> <list> <bean class=”….Movie”> <property name=”title” value=”Bye Bye Blue Bird”/> <property name=”director” value=”Søren Kragh-Jacobsen”/> <property name=”year” value=”1999”/> </bean> … </list> </property> </bean></beans>
25
… And with the Maven plugin
<project> <build> <plugins> <plugin> <groupId>me.springframework</groupId> <artifactId>spring-me-maven-plugin</artifactId> <version>1.0-SNAPSHOT</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <contextFile>....context.xml</contextFile> <className>com.mgm.BeanFactory</className> </configuration> </execution> </executions>
26
You get this BeanFactory
public class BeanFactory { public Object getBean(String name) { if (“movieFinder”.equals(name)) { return getMovieFinder(); } } private final Object getMovieFinder() { … } …}
27
DEMO
● Spring ME on Java SE
● Spring ME on Java ME
● Spring ME on GWT
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?)
29
Under the hood
30
Spring ME Meta Model
Spring XMLConfiguration
Spring MEMeta Model
Spring ME BeanFactory
● Meta Model independent of Spring
● Typically Spring XML confguraton is used
● Meta Model supports other sources
31
Other sources?
Spring MEMeta Model
Spring ME BeanFactory
Annotations
@Autowired@PostConstruct@PostDestroy
@ProvidedBy@Inject@ImplementedBy
Spring XMLConfiguration
32
Spring ME's Meta Model
33
Meta Model Instantiated
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
35
Inversion of Control Galore
Rocket GWT y n y y y y y y y y n y n n all y y y n ?Spring ME y y y y y y y y y y n n y n l/m y y y y ...Israfil IoC n y y n n n n n n n n n n n ... y n n y yFall ME n y y n n n n n n n n n n n ... y n n n nGWToolbox y n y y y y ? y y n y y n n all n y n y ySignal n n y y n n ? n n n y n y n all n y y ? ?
GWTJa
va M
E
Singletons
Prototyp
es
LazyEage
r
Factory
methods
Init method
Destroy m
ethod
XML config
uratio
n
Annotation co
nfigura
tion
Property
placeholders
Spring C
ompliant S
yntax
AliasColle
ctions
*
Constructo
r injec
tion
Property
injecti
on
By name
By typ
e
Autowiring
36
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
37
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
38
Current status
● 'Request' scope
● 'Session' scope
● 'Global session' scope
● BeanFactoryAware, but ...
● BeanPostProcessor (without refecton?)
● BeanFactoryPostProcessor, but ...
● FactoryBean, but ...
39
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
40
Roadmap
● Version 1.0 (J109 release) end of May 2009
● Integraton with J2ME Polish
● BOF-4470, June 4, JavaOne
● htp://springframework.me/