2012 04-06-v2-tdp-1163-java e-evsspringshootout-final

Preview:

DESCRIPTION

Spring Framework

Citation preview

1

Java EE and Spring Framework Shootout

Rohit Kelapure

WebSphere Application Server Caching Architect

Apache OpenWebBeans Committer

IBM

http://wasdynacache.blogspot.com/

http://www.linkedin.com/in/rohitkelapure

http://twitter.com/rkela

Recording: http://www.parleys.com/#st=5&id=2819&sl=0

Session ID = TDP-1163

2

Please Note

IBM's statements regarding its plans, directions, and intent are subject to change or withdrawal at IBM's sole discretion. Information regarding potential future products is intended to outline our general product direction and it should not be relied on in making a purchasing decision. The information mentioned regarding potential future products is not a commitment, promise, or legal obligation to deliver any material, code or functionality. Information about potential future products may not be incorporated into any contract. The development, release, and timing of any future features or functionality described for our products remains at our sole discretion. Performance is based on measurements and projections using standard IBM benchmarks in a controlled environment. The actual throughput or performance that any user will experience will vary depending upon many factors, including considerations such as the amount of multiprogramming in the user's job stream, the I/O configuration, the storage configuration, and the workload processed. Therefore, no assurance can be given that an individual user will achieve results similar to those stated here.

3

Outline

Evolution of Java EE and Spring

Java EE 6 & Spring 3.0, 3.1 highlights

Spring 3.1 feature comparison with Java EE 6

CDI and Spring ecosystem

Spring and Java EE coexistence

Spring to Java EE migration

Conclusion

4

J2EE Java EE Specifications

* Introduced in spec.

5

Evolution of J2EEJava EE6 (Dec 09)

New specs (JAX-RS, CDI, Bean

Validation)

Prune dead wood

– EJB 2.x, JAX-RPC, JAXR, JEE App. Deploy, JEE App mgmt.

Extensibility

– Easy Framework Pluggability (web fragments & CDI Extensions)

Enhanced ease of development

– POJO annotation based Servlets,

– Asynchronous processing (Servlet 3.0 & EJB 3.1)

– EJB 3.1

• EJB-in-WAR, No-interface view, Singleton, EJB-lite, Timers

– Contextual Dependency Injection (CDI)

– RESTful services

– Portable JNDI names

– JSF2.0

• Facelets, built-in-AJAX, Skins, Annotations, Resource handling

• Simplified Navigation, Easier custom components, View & Page scopes

• Bookmarkable pages, Project Stage, Expanded event model

– JPA 2.0

• Mapping enhancements, JPAQL, Criteria Query API, Pessimistic locking

Profiles reduce platform size

– Web Profile 12 specs

Vendor support

– WebSphere AS 8

– JBOSS AS 7

– Oracle WebLogic 11g

– Glassfish 3

6

JSR 299 Contexts and Dependency Injection (CDI)

Adds dependency injection to JEE and

makes it type-safe.

– Hollywood principle - Don’t call us, we will call you

– No hard coded dependencies on other specifications

Assists in unifying the Bean model

Well defined contexts, the ability to bind

beans statefully to them & manage their

lifecycle.

Introduces an event notification system

to decouple producers & consumers

Uses interceptors to foster loose

coupling

– Extend behavior with type safe

interceptor bindings

– Refines interceptors into decorators for finer grained control

Integrates with the Unified EL to bridge

JSF

– Enables use of EJB 3.0 components as JSF managed beans

Introduces an SPI to extend JEE – Roll

your own JEE7!

– Not only an API but also a SPI

– Rich ecosystem of CDI extensions

Adds the Web conversation context

Spring does NOT provide support for

CDI

7

Spring Framework

Lightweight dependency injection

Aspect oriented

Layered application & container framework

Well defined modules on top of the core container

NOT an all-or-nothing solution

8

Evolution of Spring [ 1.0, 2.0, 2.5, 3.0, 3.1]

1.0

• Dependency injection

• POJO-oriented development

• Declarative AOP & transactions

• MVC framework

2.0

• Problem-specific XML

• Extensible configuration

• Bean scoping

• Groovy, JRuby, and BeanShell

• JSP tag library

• Java 5 autoboxing and generics

2.5

• Annotation-driven wiring

• Automatic bean configuration

• New annotation-driven MVC framework

• JUnit 4-based integration testing

3.0

• JSR-330 “at inject”

• New Spring Expression Language

• First-class REST support

• Java-based configuration

• Several new Spring MVC features

• Support for JSR-303 declarative validation

• Annotation-based background and scheduled jobs

3.1

• A new “c” namespace

• Configuration profiles

• Unified property resolution

• Java configuration features

• Servlet 3.0 support

• Declarative caching

• Spring MVC enhancements

9

Birds Eye View

10

Java EE vs. Spring Framework Features/APIs

11

Java EE vs. Spring Business Component

12

Spring XML for Business Component Injection

13

Spring XML for Business Component Injection

14

Spring Java Based Configuration

15

Spring Java Based Configuration

16

Java EE Interceptor vs. Spring Aspects

17

Java EE vs. Spring Injection

18

Java EE vs. Spring Injection

19

JSF 2 vs. Spring MVC Front Controller

Facelet Component

20

JSF 2 vs. Spring MVC Front Controller

Facelet

21

JSF 2 vs. Spring MVC Front Controller

Entity

22

JSF 2 vs. Spring MVC Spring MVC JSP

23

Spring MVC Configuration

24

Spring Controller

25

Spring MVC web.xml configuration

26

Java EE vs. Spring Scheduling

27

Java EE vs. Spring Scheduling

28

Java EE vs. Spring Messaging

29

Spring JMS Configuration

30

Spring Message Producer

31

Java EE Message Producer & JMS Abstraction

32

Java EE Message Producer & JMS Abstraction

33

Hacking the Java EE Platform - CDI Extensions

Activated by dropping jars on the application classpath

Loaded by the java.util.ServiceLoader SPI

Integrate with container through container lifecycle events by

– Register additional beans, interceptors and decorators

– Injecting dependencies into its own objects

– Introduce custom scope with backing context

– Augment or override bean annotation-based metadata with other

source

Tools/utilities, extending Java EE, integration with Java EE

APIs, integrating with non-standard APIs, making Java EE

features available in non-Java EE

34

Spring Ecosystem

35

CDI Ecosystem Snapshot

Implementations

Weld CanDI

Runtimes Portable Extensions

Tools

36

Spring & Java EE Coexistence

Integration with Java EE APIs

– Spring beans can be injected into JSF Managed Beans

– Spring beans can be referenced in EL with no JSF Backing beans

– Spring JmsTemplate can be used on top of raw JMS API for convenience

– Spring Listeners similar to EJB MDBs especially JCA rather than JMS listeners

– Hibernate validator standardized as Bean Validation (JSR 303)

– Spring 3 supports excellent bi-directional integration with EJBs

– CDI and Spring Integration through the Spring Bridge to CDI

Native support for Java EE

– Java EE5 and Java EE6 annotations supported by Spring

– Spring can use JPA / Hibernate natively

Application server integration

– DataSources can use application server QoS like pooling, transactions, statement caching,

debugging, monitoring and security

37

Best Practices integrating Spring WAS

Presentation tier considerations

– Web MVC & Portlet

Data access considerations

– Using JDBC native connections

– Transactions, JPA & JMS

Spring Security Considerations

– Bypassing WAS security

Integration & Management considerations

– Registering Spring Mbeans in the application server

– Classloaders

Design Considerations

– Unmanaged threads

– Scheduling & Threadpools

38

Java EE coexistence with Spring

39

Migrating Spring to Java EE 6

1. Upgrade Spring version

2. Replace old frameworks (ORM, Web Framework) within Spring

3. Run Spring and Java EE container side by side

4. Replace Spring entirely

5. Remove Spring container

40

Myths of Java EE

EJBs are heavy weight

EJBs are hard to test

EJBs are not portable

EJBs are slow

EJBs are not scalable

EJBs are too complex

EJBs are hard to integrate with

Web Frameworks and POJOs

EJBs are hard to configure

EJBs are hard to migrate

EJBs are hard to develop

EE application servers are

"bloated“

J2EE and EJB2 sucked! “That

was eight years ago! Is this really

your best shot?”

Application server portability is a

myth!

41

Birds Eye View

42

References

Evolution of Java EE http://en.wikipedia.org/wiki/Java_EE_version_history

Java EE 6 Tutorial http://download.oracle.com/javaee/6/tutorial/doc/

Spring Docs http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/

Spring Projects http://www.springsource.org/projects

Miscellaneous CDI Extensions https://github.com/softwaremill/softwaremill-common

Migrating Spring to Java EE

– https://github.com/paulbakker/migrating-spring-to-javaee

– http://ocpsoft.com/java/spring-to-java-ee-a-migration-guide-cdi-jsf-jpa-jta-ejb/

CDI- Spring Bridge

– http://rick-hightower.blogspot.com/2011/04/cdi-and-spring-living-in-harmony.html

– http://niklasschlimm.blogspot.com/2011/08/jsr-299-cdi-interceptors-for-spring.html

– http://niklasschlimm.blogspot.com/2011/08/jsr-299-cdi-decorators-for-spring-beans.html

Best practices integrating Spring with WebSphere Application Server

– http://www.ibm.com/developerworks/websphere/techjournal/0609_alcott/0609_alcott.htm

What’s new in Spring 3.1 http://static.springsource.org/spring/docs/3.1.x/spring-framework-

reference/htmlsingle/spring-framework-reference.html#new-in-3.1

43

References continued

SEAM 3 http://seamframework.org/Seam3

CODI http://myfaces.apache.org/extensions/cdi/

Weld http://seamframework.org/Weld

CanDI http://www.caucho.com/resin/candi/

OpenWebBeans

http://openwebbeans.apache.org/owb/index.html

44

We love your Feedback!

Don’t forget to submit your Impact session and speaker

feedback! Your feedback is very important to us, we use it to

improve our conference for you next year.

Go to impactsmartsite.com from your mobile device

From the Impact 2012 Online Conference Guide:

– Select Agenda

– Navigate to the session you want to give feedback on

– Select the session or speaker feedback links

– Submit your feedback

45

© IBM Corporation 2012. All Rights Reserved.

IBM, the IBM logo, ibm.com are trademarks or registered

trademarks of International Business Machines Corp.,

registered in many jurisdictions worldwide. Other product and

service names might be trademarks of IBM or other companies.

A current list of IBM trademarks is available on the Web at

“Copyright and trademark information” at

www.ibm.com/legal/copytrade.shtml.

Copyright and Trademarks

Recommended