Spring ME
Unleashing Spring to the Rest of
the Platform

Wilfred Springer
Xebia, The Netherlands
Audience
Agenda
>   Why this talk?
>   Why Spring?
>   Why not Spring?
>   How Spring?
>   Under the hood
>   Alternatives
>   Curr...
Java is doing AWESOME!




          Source: Tiobe Programming Community Index March   4
Spring is doing GREAT!




             =
     +




                         Source: Evans Data, 2008   5
But that's like... a freaking big number




                                           6
… or is it?


     SAN MATEO, Calif.—November 19, 2008 –
     SpringSource, a leading provider of infrastructure
     soft...
Java Nodes in the Cloud
>   3 Billion Java-Enabled Cards in 2007
>   1.8 Billion Java-Enabled Phones in 2007
>   7 Million...
Not all men are equal




                versus




                         9
Spring ME Manifesto

 “We hold these truths to be self-evident, that
all men … Java Developers are entitled to get
      t...
Why Spring?




              11
IoC/Dependency Injection
Instead of this     Take hard-wired      And have a framework
                    dependencies ou...
AOP (Cross-cutting behavior)
Sanitized API




“Any problem in computer science can be solved with
            another layer of indirection.”
         ...
Why not Spring?




                  15
So why not have Spring?
Platform Limitations
>   Limited Java Runtime capabilities
>   Limitations imposed by deployment
>...
Java Runtime Limitations
                                               )      ct
                                      ) ...
Deployment Limitations
     <bean id=”movie1” class=”sample.Movie”>
       <property name=”title” value=”Into the Wild”/>
...
Heap
>   Java SE
     ●   Max heap approx. 1.5 GB
>   Java ME
     ●   Lower bound max. heap: 140 KB
     ●   Upper bound ...
Application Size
>   Java ME: Upperbounds between 64 KB and 28
     MB


          Spring Core        267KB
          Spri...
Throughput
>   Nokia E71:
     ●   369 MHz ARM 11 CPU
>   Gameboy Advance
     ●   16 MHz ARM 7 CPU
     ●   C-Ray Raytrac...
How Spring?




              22
Introducing Spring ME's IoC




                              23
Introducing Spring ME's IoC
                              Do most of the
                              hard work at
      ...
Suppose this is the object model




                                   25
And you want to create these instances




                                         26
Then this is the Spring ME Configuration
<beans xmlns=”…”>
  <bean id=”movieFinder” class=”….InMemoryMovieFinder”>
    <pr...
With this Maven plugin configuration
<project>
  <build>
    <plugins>
      <plugin>
        <groupId>me.springframework<...
Generates this BeanFactory
public class BeanFactory {

    public Object getBean(String name) {
      if (“movieFinder”.eq...
DEMO




       30
DEMO (Java ME)
>   Spring ME on Java ME




                           31
DEMO (Java ME)



                 >   A little more Spring alike




                                             32
DEMO (Java SE)




                 public interface MinimalBeanFactory
                 {
                     Object get...
DEMO (Java SE)




                 34
Additional benefits
>   Compile time validation
     ●   “Is 10e2 a valid int representation?”
     ●   “Is an instance of...
Under the hood




                 36
Spring ME Meta Model
>   Meta Model independent of Spring
>   Typically Spring XML configuration is used




       Spring...
Other sources?
                   @Autowired        @ProvidedBy
                   @PostConstruct    @Inject
             ...
Spring ME's Meta Model




                         39
Spring ME Meta Model Snapshot




                                40
Alternatives




               41
Inversion of Control Galore
                                                                                        ax
   ...
Sanitized API
>   Java ME needs a lot more sanity
     ●   J2ME Polish is your friend
>   Java Card is probably too limite...
AOP
>   What about it?
>   Compile team weaving?
>   Using the metadata, AOP proxies could be
     constructed at build ti...
Current Status and What's Next




                                 45
Current status
   >   'Request' scope
   >   'Session' scope
   >   'Global session' scope
   >   BeanFactoryAware, but .....
If there's only one thing you remember
>   “ME” as in “supporting Java ME”
>   “ME” as in “a microscopic small version of ...
Other than that
>   Version 1.0 just released
>   GPL + Classpath Exception
>   Integration with J2ME Polish
>   JSR 296 o...
Wilfred Springer
wilfred at flotsam.nl

http://springframework.me/
Upcoming SlideShare
Loading in …5
×

Spring ME JavaOne

1,906
-1

Published on

Slides of the BOF on Spring ME.

Published in: Technology, News & Politics
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,906
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
33
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Spring ME JavaOne

  1. 1. Spring ME Unleashing Spring to the Rest of the Platform Wilfred Springer Xebia, The Netherlands
  2. 2. Audience
  3. 3. Agenda > Why this talk? > Why Spring? > Why not Spring? > How Spring? > Under the hood > Alternatives > Current status & what's next? > Discussion 3
  4. 4. Java is doing AWESOME! Source: Tiobe Programming Community Index March 4
  5. 5. Spring is doing GREAT! = + Source: Evans Data, 2008 5
  6. 6. But that's like... a freaking big number 6
  7. 7. … 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. 7
  8. 8. 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 > Sun SPOT > Livescribe Smartpen 8
  9. 9. Not all men are equal versus 9
  10. 10. Spring ME Manifesto “We hold these truths to be self-evident, that all men … Java Developers are entitled to get their portion of Spring goodness.” Not just Java EE developers Not just Java SE developers But also Java ME, GWT developers and Java Card developers 10
  11. 11. Why Spring? 11
  12. 12. IoC/Dependency Injection Instead of this Take hard-wired And have a framework dependencies out connect them together “Trust us, we know what we're doing.” “Don't call us, we call you.” 12
  13. 13. AOP (Cross-cutting behavior)
  14. 14. Sanitized API “Any problem in computer science can be solved with another layer of indirection.” – David Wheeler
  15. 15. Why not Spring? 15
  16. 16. So why not have Spring? Platform Limitations > Limited Java Runtime capabilities > Limitations imposed by deployment > Limited computational resources ● Limitations on heap ● Limitations on application size ● Limitations on performance
  17. 17. Java Runtime Limitations ) ct ) e( refle ... anc g. e( s t n tring am In a.la .S is t o r N ew a v ng il.L s s.f ss.n er j a.la r a. ut a a h v a Cl Cl Ot ja ch jav GWT n n n y y y Java ME y y n y y n Java Card n n n n n n BeanFactory#getBean(String name)? BeanFactory#getBean(char[] name)?
  18. 18. Deployment Limitations <bean id=”movie1” class=”sample.Movie”> <property name=”title” value=”Into the Wild”/> </bean> 1 OBFUSCATION package a.b; package com.mgm; public class a { public class Movie { void a(String ...); void setTitle(String title); } } 2 3 <bean id=”movie1” class=”a.b.a”> <property name=”a” value=”Into the Wild”/> </bean> 4
  19. 19. 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 difference > Java Card ● 16 K RAM
  20. 20. Application Size > Java ME: Upperbounds between 64 KB and 28 MB Spring Core 267KB Spring Beans 467KB Spring Context 455KB Total 1189KB
  21. 21. 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
  22. 22. How Spring? 22
  23. 23. Introducing Spring ME's IoC 23
  24. 24. Introducing Spring ME's IoC Do most of the hard work at build time 24
  25. 25. Suppose this is the object model 25
  26. 26. And you want to create these instances 26
  27. 27. Then this is 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> 27
  28. 28. With this Maven plugin configuration <project> <build> <plugins> <plugin> <groupId>me.springframework</groupId> <artifactId>spring-me-maven-plugin</artifactId> <version>1.0</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <contextFile>....context.xml</contextFile> <className>com.mgm.BeanFactory</className> </configuration> </execution> </executions> 28
  29. 29. Generates this BeanFactory public class BeanFactory { public Object getBean(String name) { if (“movieFinder”.equals(name)) { return getMovieFinder(); } } private final Object getMovieFinder() { … } … } 29
  30. 30. DEMO 30
  31. 31. DEMO (Java ME) > Spring ME on Java ME 31
  32. 32. DEMO (Java ME) > A little more Spring alike 32
  33. 33. DEMO (Java SE) public interface MinimalBeanFactory { Object getBean(String name) throws BeansException; } 33
  34. 34. DEMO (Java SE) 34
  35. 35. Additional benefits > Compile time validation ● “Is 10e2 a valid int representation?” ● “Is an instance of Boeing747 assignable to a property of type Airplane?” > Minimal or no runtime dependencies > Superfast (but no benchmarks to verify this) > Small (1K?)
  36. 36. Under the hood 36
  37. 37. Spring ME Meta Model > Meta Model independent of Spring > Typically Spring XML configuration is used Spring XML Spring ME Spring ME Configuration Meta Model BeanFactory 37
  38. 38. Other sources? @Autowired @ProvidedBy @PostConstruct @Inject @PostDestroy @ImplementedBy Annotations Spring ME Spring ME Meta Model BeanFactory Spring XML Configuration 38
  39. 39. Spring ME's Meta Model 39
  40. 40. Spring ME Meta Model Snapshot 40
  41. 41. Alternatives 41
  42. 42. Inversion of Control Galore ax tion s ynt ra lder e S n n igu o bl tio n e ds o od rati onf ceh pati jec ctio e type nam ho h in s s et od met figu n c pla om ns* tor inje nam by by E ton ype r o y m eth oy con tati erty g C tio truc erty by wire wire T va M gle otot zy ger cto t m str L no op rin as llec ns op ire to to n r a a a ni e M n r p li o o r GW Ja Si P L E F I D X A P S A C C P W Au Au Rocket GWT y n y y y y y y y y n y n n all y y y n n Spring ME y y y y y y y y y y n n y n l/m y y y y* y* Israfil IoC n y y n n n n n n n n n n n ... y n n y y Fall ME n y y n n n n n n n n n n n ... y n n n n GWToolbox y n y y y y ? y y n y y n n all n y n y y Signal n n y y n n ? n n n n n y n all n y y ? ? 42
  43. 43. Sanitized API > Java ME needs a lot more sanity ● J2ME Polish is your friend > Java Card is probably too limited to use wrapper APIs > GWT is already addressed by a lot of frameworks 43
  44. 44. AOP > What about it? > Compile team weaving? > Using the metadata, AOP proxies could be constructed at build time > The factory could construct instances of these proxies instead of the actual objects 44
  45. 45. Current Status and What's Next 45
  46. 46. Current status > 'Request' scope > 'Session' scope > 'Global session' scope > BeanFactoryAware, but ... > BeanPostProcessor (without reflection?) > BeanFactoryPostProcessor, but ... > FactoryBean, but ... 46
  47. 47. If there's only one thing you remember > “ME” as in “supporting Java ME” > “ME” as in “a microscopic small version of Spring” > Useful for Java ME > Useful for GWT > Useful for Java SE > Potentially useful for Java Card and Java EE 47
  48. 48. Other than that > Version 1.0 just released > GPL + Classpath Exception > Integration with J2ME Polish > JSR 296 on ME > http://springframework.me/ > spring-me@googlegroups.com 48
  49. 49. Wilfred Springer wilfred at flotsam.nl http://springframework.me/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×