Future of Java EE with Java SE 8

Post on 13-Jan-2015

4.409 views 4 download

Tags:

description

Happy Java SE 8 was released! But for the Java EE? This materials shows the current status of EE 6/7 with SE 8, and some limitation in current EE 7 app servers with 8. This session materials is for the Japan Java Users Group (JJUG) CCC 2014 Spring session. #jjgc_ccc #ccc_r11

Transcript of Future of Java EE with Java SE 8

Future of Java EE with SE 8

May 18, 2014Hirofumi IwasakiFinancial Service Department, Development Unit, Rakuten, Inc.http://www.rakuten.co.jp/

Twitter hashtag: #ccc_r11

2

Speaker Biography

Hirofumi Iwasaki– Group Manager, Technology Manager– Financial Service Department, Development Unit,

Rakuten, Inc. (Fukuoka Office) Carrier

– Planning, designing & implements for many huge enterprise systems for financial, manufacturer, public systems with enterprise middleware, especially Java EE & .NET in Japan for about 16 years.

Opus, Lectures, etc.– Magazine: @IT (2005-2010), CIO Magazine (2009), IT Architect

(2005-2009), Web+DB Press (2005), Java World (2001-2004), etc.

– Lectures: WebLogic key person roundtable (2012-2013), etc.– twitter: @HirofumiIwasaki (English)

3

8Happy Java 8 Release!

But for Java EE ?

Useful for EE?

4

Java EE Overview

5

Standard specifications for application servers(except for MS).

What's Java EE (1/2)

Commercial

Open Source

etc.

Java EE Specification

To make assurance double

sure

Liberty Profile etc.

+

6

For ENTERPRISE systems (Enterprise Edition) specifications (full profile)– 'Enterprise' means transactional.– Core architecture is EJB (JTA & CMT) with auto transaction

systems.– Transactional connectivity for other systems with JPA (JDBC),

JMS, RMI-IIOP.– Web architecture with JSF (Servlet & Facelet), JAX.

Each Java EE specification covers general enterprise requirements.– Not for personal usage. Use Java SE only.– Not for build-in usage. Use Java ME.– For your enterprise system Use Java EE with Java SE.

What's Java EE (2/2) To make assurance double

sure

7

The History of Java EE

J2EE 1.2

(1999)

J2EE 1.3

(2001)

J2EE 1.4

(2003)

Java EE 5

(2006)

Java EE 6

(2009)

Java EE 7

(2013)

Born! PandemicEra

IntegrationEra

Mess Era(for EE spec)

Unite to SingleStandard

Again!

9

Java EE Application Servers Versions

Vendor App Server EE 1.4(2003-)

EE 5(2006-)

EE 6(2009-)

EE 7(2013-)

Open Source GlassFish - 2.x 3.x 4.0

Oracle WebLogic 9.x 10.x 12.x -

IBM WebSphere 5.1 6.x, 7.x 8.x -

IBM Liberty Profile - - 8.5 -

Open Source Geronimo - 2.x 3.x -

Open Source TomEE+ - - 1.x -

Red Hat JBoss 4.x 5.1 7.1 -

Red Hat WildFly - - - 8.0

Fujitsu Interstage 9.0,9.1 9.2,10.x,11.0 11.1 -

Hitachi Cosminexus 7.x 8.x 9.x -

The de facto latest version

is still EE 6

10

Java SE Support Status of Java EE App Servers

Vendor App Server EE 6 (2009 -) EE 7 (2013-)

Ver. SE Ver. Ver. SE Ver.

Open Source GlassFish 3.x SE 7 4.0 SE 7

Oracle WebLogic 12.1.x SE 6, SE 7 - -

IBM WebSphere 8.x SE 6, SE 7 - -

Open Source Geronimo 3.x SE 6, SE 7 - -

Open Source TomEE+ 1.x SE 7 - -

Red Hat JBoss 7.x SE 6, SE 7 - -

Red Hat WildFly - - 8.0 SE 7

Fujitsu Interstage 11.1 SE 6, SE 7 - -

Hitachi Cosminexus 9.x SE 7 - -

SE 8 is not officially

supported yet

*

* WebLogic 12.1.1 only

11

That’s All !Thank you for listening !Just a

kidding

12

Nice!

13

Excellent!

14

By the Way,

15

Java SE 8 Updates Overview

Basic Topics

16

Java SE 8 New Functions

LambdaD

ate Tim

e AP

INew VM

JavaFX

DefaultMethod

Stream APITypeAnnotationImprovementJavaS

cript

En

gin

e

UNICODE6.2

…and others

17

Java SE 8 Deleted Functions

JDBC-ODBCBridge

com

.sun

.misc.*

So long..

18

SE 8 New Feature – Lambda with Stream API

List<String> aList = Arrays.asList(new String[]{"a", "b", "c", "d", "e"}); // Normalfor (String x : aList) {    System.out.println(x);}  // Lambda with parallel streamaList.parallelStream().forEachOrdered(x -> System.out.println(x));

Stream API(auto parallel threading)

Lambda Expression(just a syntax sugar)

Might not work with EE 7

19

SE 8 New Feature – Lambda with Stream API

Don’t worry.NetBeans supports you!

Automatic Conversion

20

SE 8 New Feature – New Date Time API (Basic)

// Calendar.Calendar cal = Calendar.getInstance(); // Date.int year = cal.get(Calendar.YEAR);int month = cal.get(Calendar.MONTH) + 1;int day = cal.get(Calendar.DAY_OF_MONTH); // Time.int hour = cal.get(Calendar.HOUR);int minutes = cal.get(Calendar.MINUTE);int second = cal.get(Calendar.SECOND);int millisecond = cal.get(Calendar.MILLISECOND);

// Local Date Time.LocalDateTime dateTime = LocalDateTime.now();

// Local Date.LocalDate date = dateTime.toLocalDate();int year = date.getYear();int month = date.getMonthValue();int day = date.getDayOfMonth();DayOfWeek dayOfWeek = date.getDayOfWeek();

// Local Time.LocalTime time = dateTime.toLocalTime();int hour = time.getHour();int minute = time.getMinute();int second = time.getSecond();int nanoSecond = time.getNano();

Java 1.2 – Java 7 Java 8 –

-1

From Millisecond to Nanosecond(.000 .000000000)

21

SE 8 New Feature – New Date Time API (Calculation)

// Date CalculationCalendar threeWAfter = Calendar.getInstance();threeWAfter.setLenient(false);threeWAfter.add(Calendar.DAY_OF_MONTH, 7 * 3); Calendar fourMBefore = Calendar.getInstance();fourMBefore.setLenient(false);fourMBefore.add(Calendar.MONTH, -4); // Time CalculationCalendar sevenHAfter = Calendar.getInstance();sevenHAfter.setLenient(false);sevenHAfter.add(Calendar.HOUR, 7); Calendar threeMBefore = Calendar.getInstance();threeMBefore.setLenient(false);threeMBefore.add(Calendar.MINUTE, -3);

// Local Date Time.LocalDateTime dateTime = LocalDateTime.now();LocalDate date = dateTime.toLocalDate();LocalTime time = dateTime.toLocalTime();

// Date CalculationLocalDate threeWAfter = date.plusWeeks(3);

LocalDate fourMBefore = date.minusMonths(4);

// Time calculationLocalTime sevenHAfter = time.plusHours(7);

LocalTime threeMBefore = time.minusMinutes(3);

Java 1.2 – Java 7 Java 8 –

Simplified, sophisticated style!

22

SE 8 New Feature – New Date Time API (JDBC)

ANSI SQL Java SE 8

DATE java.time.LocalDate

TIME java.time.LocalDate

TIMESTAMP java.time.LocalDateTime

TIME WITH TIMEZONE java.time.OffsetTime

TIMESTAMP WITH TIMEZONE java.time.OffsetDateTime

http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html

Might not work with EE 7

23

SE 8 New Feature – Type Annotation Improvement

24

SE 8 New Feature – Type Annotation Improvement

25

Java SE 8 applying pointsfor EE 7

28

Basic of Applying SE 8 feature in EE 7 Apps

EE 7 didn’t consider the SE 8 in their specification.– EE 7 spec don’t know the SE 8.

Many SE 8 new functions might be work correctly if the app server supported the SE 8 as their VM.– Lambda expressions– Stream APIs (limited)– New date time APIs (limited)– etc.

29

Basic of Applying SE 8 feature in EE 7 Apps

But some conflicted specs might not be worked correctly– Stream API (multithreading with EJB 3.2, e.g. parallel stream)– New date time APIs (JDBC new mappings with JPA 2.1)– etc.

Wait the Java EE 8 for the full support of SE 8

30

Java SE 8 Updates Overview

Advanced Topics

31

Study of Limitation Casewith SE 8 in EE 7

32

Let’s take a lookof EJB 3.2 (EE 7)

with Parallel Stream,with Glassfish 4.0.1 beta.

33

Downloaded from here.

34

NetBeans 8 detected 4.0.1

35

NetBeans 8 supported JDK 8

36

Startup succeededwith NetBeans 8.

37

Sample Test Application

<EJB>LambdaLogic.java

<CDI Bean> *IndexBean.java

<JSF Facelet> *index.xhtml

*This is just a workaround due to not working Web Services / REST tester

in GlassFish 4.0.1b5.

38

Wrote Lambda with (Parallel)Stream in EJB

39

Wrote CDI Bean for Calling EJB

40

Wrote CDI Bean for Calling EJB

41

Results

Both Succeeded.

42

Really?

43

Tested Fork/Join Framework

withWebLogic Server 12.1.2

(yet Java EE 6)

44

Just a kiddingcodes…

45

???

46

Just removedthe EJB annotation,

turn to POJO

47

Works !?Why?????

48

Let’s Checkthe EJB 3.2 Specification

49

EJB 3.2 Spec don’t allowed Manual Multithreading

Still not allowed.Oh…

50

Parallel Stream isimplemented with

Fork/Join Framework !

Wow!!

51

Parallel Stream Uses Fork/Join Framework

Fork/Join framework was introduced in Java SE 7– Not supported in EJB container.

Parallel Stream uses fork/join framework in its implementation– Might not be supported in EJB 3.2 container in EE 7– Some complicated case might not be worked correctly

Exception management case JTA with container managed transaction in parallel loop case @Asynchronous method call in parallel loop Differed transaction isolation level method calling Security management etc.

52

Conclusion

All Java EE 7 app servers are not supported SE 8 yet, but some simple case are usable with 8.

Many limitation are still existing for applying SE toEE 7, but useful new functions must be improve the stage of your enterprise.

Go Ahead!

Ready to apply SE 8for the Java EE!

8

53

Information

Come and Join Us!

54

Thank you for listening

55

Q&A