spring me

Post on 18-Dec-2014

951 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

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/

● spring-me@googlegroups.com

top related