+ All Categories
Home > Documents > Java EE 6 Update - JUG EE is pushed to greatly simplify the Java EE programming model…» Spring...

Java EE 6 Update - JUG EE is pushed to greatly simplify the Java EE programming model…» Spring...

Date post: 29-May-2018
Category:
Upload: ngokhanh
View: 245 times
Download: 0 times
Share this document with a friend
40
VS. And the Winner is … Java User Group Switzerland, Bern, 23.05.2012 Simon Martinelli / @simas_ch simas GmbH - Moosentli 7 - 3235 Erlach - 032 544 88 88 - [email protected] - www.simas.ch
Transcript

VS.

And the Winner is …

Java User Group Switzerland, Bern, 23.05.2012

Simon Martinelli / @simas_ch

simas GmbH - Moosentli 7 - 3235 Erlach - 032 544 88 88 - [email protected] - www.simas.ch

Agenda

Introduction

Dependeny Injection

Differences

Conclusion

1995 2012 2001

COBOL/HOST J2EE / Java EE

2010 2004

Spring

1995 2012 2001

JCA

2010 2004

AD DS

2007

Java Persistence API

DB / DWH

AD JEE

Development

SBB

ACS

simas GmbH

Training

Berner Fachhochschule

Software Schule Schweiz

Medical Technology Center

AD JEE = Architektur und Design Java EE / AD DS = Architektur und Design verteilter Systeme

About me

Introduction

No Flame War

Poll on JAXenter in November 11

Spring oder Java EE?

Ich bevorzuge Java EE (46%)

Ich bevorzuge Spring (34%)

Je nach Anwendungsfall das eine oder das andere

(15%)

Es gibt bessere Alternativen (5%)

377 Teilnehmer

The Books

2002 2004

History

1999 2011 2009 2003

1.2

Servlets

JSP

EJB

JMS

2001

1.3

CMP

JCA

1.4

Web Services

Management

Deployment

Async JCA

2005

5

Ease of Dev

Annotations

JSF

EJB 3

JPA

WS

J2EE / Java EE Spring Framework

1.0

DI

2004 2006

6

Profiles

Pruning

Extensibility

EJB Lite

REST

CDI

1.2

Java

5

2.0

2007

2.5

Annotations

JEE5

3.0

JSR-330

REST

0.9

Spring vs. J2EE

Really versus?

Some Quotes

«Frameworks like Spring are really just a bridge

between the mistakes of the J2EE past and the

success of Java EE future» The age of frameworks is over, Cameron McKenzie

«Due to Springs early success and adaption,

Java EE is pushed to greatly simplify the Java EE

programming model…» Spring vs. Java EE and why I don’t care, Eberhard Wolff

Dependency Injection

Java EE 6 DI

JSR 330: Dependency Injection for Java

JSR 299: Contexts and Dependency Injection for the Java EE platform

JSR 318: Enterprise JavaBeans 3.1

CDI Injection

public class MyService {

}

public class AnotherService {

@Inject

private MyService myService;

}

The Bean

The Injection Point

Could also be a

constructor or a setter

CDI Qualifiers

@Asynchronous

public class AsyncService

implements MyService {

...

}

public class AnotherService {

@Inject @Synchronous

private MyService myService;

}

@Synchronous

public class SyncService

implements MyService {

...

}

Two Implementations of

the same interface

Two implementations of

the same interface

Injection must be

qualified

CDI Producers

public class MyService {

public MyService(A a) {

// ...

}

}

public class MyServiceProducer {

@Produces

public MyService createMyService(A a) {

return new MyService(a);

}

}

public class AnotherService {

@Inject

private MyService myService;

}

Producer Method to

create instance

A will be injected!

CDI Interceptors

@Interceptor

@Transactional

public class TransactionInterceptor {

@AroundInvoke

public Object manageTransaction(InvocationContext ctx) {

// ...

}

}

@InterceptorBinding

public @interface Transactional {

}

public class MyService {

@Transactional

public void foo() {

// ...

}

}

The Interceptor

The Annotation

A Transactional

Method

CDI Events

public class MyService {

@Inject

private Event<LoggedInEvent> loggedInEvent;

public void login(String username, String password) {

loggedInEvent.fire(new LoggedInEvent(username));

// ...

}

}

public class LoggedInObserver {

public void afterLogin(@Observers LoggedInEvent event) {

// ...

}

}

The Event Object

Fire the Event

The Listener

Called Synchronous!

Asynchronous Events

@Stateless

public class LoggedInObserver {

@Asynchronous

public void afterLogin(@Observers LoggedInEvent event) {

// ...

}

}

The Listener as EJB

Called Asynchronous!

CDI Extensions

Source: http://planet.jboss.org/post/seam_next_announcement

Spring DI: XML based

<beans>

<bean id="myService" class="service.MyService"/>

<bean id="anotherService" class="service.AnotherService">

<property name="myService" ref="myService"/>

</bean>

</beans>

public class AnotherService {

private MyService myService;

public void setMyService(MyService myService) {

this.myService = myService;

}

}

The Injection Point

Could also be a

constructor

Spring DI: Annotation based

public class AnotherService {

@Autowired

private MyService myService;

}

public class AnotherService {

@Inject

private MyService myService;

}

<beans>

<context:annotation-config/>

</beans>

The Injection Point

Could also be a

constructor or a setter

JSR-330

Spring Annotations

public class AnotherService {

@Resource

private MyService myService;

}

JSR-250

Spring DI: Java based

@Configuration

public class AppConfig {

@Bean

public MyService myService() {

return new MyService();

}

<beans>

<bean id="myService" class="service.MyService"/>

</beans>

Scopes Application

Session

Conversation

Request

Java EE Spring

EJB General

Stateful = Prototype

Stateless x

Singleton = Singleton

CDI Web

RequestScoped = Request

ConversationScoped (=) Spring Web Flow

SessionScoped = Session

ApplicationScoped = Singleton

Dependant x

x Global Session (only for Portlets)

Differences

Java EE is a Specification

Spring is an Ecosystem

Spring Framework

Sp

rin

g S

ecu

rity

Sp

rin

g In

teg

rati

on

Sp

rin

g B

atc

h

Sp

rin

g D

ata

Sp

rin

g W

eb

Flo

w

Sp

rin

g W

eb

Serv

ices

Sp

rin

g M

ob

ile

Sp

rin

g S

oci

al

Sp

rin

g A

nd

ori

d

Sp

rin

g R

oo

Sp

rin

g B

laze

DS In

teg

rati

on

Sp

rin

g A

MQ

P

Spring uses Java EE

Do you really need a wrapper around these APIs?

JPA

JMS

JMX

JCA

Mail

Defaults

@Stateless

public class MyService {

public void foo() {

...

}

}

@Service

public class MyService {

@Transactional

public void foo() {

...

}

}

Defaults to

@TransactionAttribute(REQUIRED)

Deployment

Java EE Applikation Spring Applikation

Java EE App

Server Tomcat

TomEE Spring Framework

Java EE App

Server

CDI Apache OpenWebBeans

EJB Apache OpenEJB

Javamail Apache Geronimo JavaMail

JPA Apache OpenJPA

JSF Apache MyFaces

JTA Apache Geronimo Transaction

Connector Apache Geronimo Connector

JMS Apache ActiveMQ

Web Services Apache CXF

TomEE TomEE Plus

Are App Servers still heavy?

Source: Antonio Goncalves

Size

Are App Servers still slow?

Source: Antonio Goncalves

Interoperability

Web

Spring Beans can be used with JSF

CDI

Integration through Spring Bridge to CDI

Metadata

Spring supports Java EE annotations

i.e. @PersistenceContext

Integration Testing

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration

public class MyTest {

@Autowired

private MyService myService;

}

@RunWith(Arquillian.class)

public class MyTest {

@EJB

private MyService myService;

} www.jboss.org/arquillian

+

Summary

Topic Java EE Spring Framework

Framework Specification based Ecosystem

Defaults Conventions over

Configuration

No Default Behavior

Dependency Injection CDI Spring Container

JSR 330 but not CDI!

Transactions EJB AOP / Annotations

Web Framework JSF Spring Web MVC

AOP Interceptors XML AspectJ

Integration Testing Arquillian (non standard) Spring Test Framework

Deployment Part of the Platform Part of the Application

Independency Several Vendors VMware

Conclusion

What is missing in Java EE?

Batch

Spring Batch

JSR-352

ACL based Security

Spring Security

No Java EE support planned

NoSQL (Big Data)

Spring Data

No Java EE support planned

It’s a Draw!

Java EE 6 is a mature, easy to use

framework inspired by Spring

Unfortunately a lot of companies are still using

application servers < Java EE 6

Spring offers solutions for common problems

like ACL based Security, Batch or NoSQL

The Future: Java EE 7

Batch

JSR-352 Java Batch

Cloud

Multitenancy

Clean Up

JSF and CDI

Simplification

JMS

Enhancements

CDI Java SE Bootstrap

and JPA Integration

Q&A


Recommended