Future of Java EE with Java SE 8

55
Future of Java EE with SE 8 May 18, 2014 Hirofumi Iwasaki Financial Service Department, Development Unit, Rakuten, Inc. http://www.rakuten.co.jp/ Twitter hashtag: #ccc_r11

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

Page 1: 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

Page 2: Future of Java EE with Java SE 8

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)

Page 3: Future of Java EE with Java SE 8

3

8Happy Java 8 Release!

But for Java EE ?

Useful for EE?

Page 4: Future of Java EE with Java SE 8

4

Java EE Overview

Page 5: Future of Java EE with Java SE 8

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.

+

Page 6: Future of Java EE with Java SE 8

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

Page 7: Future of Java EE with Java SE 8

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!

Page 9: Future of Java EE with Java SE 8

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

Page 10: Future of Java EE with Java SE 8

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

Page 11: Future of Java EE with Java SE 8

11

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

kidding

Page 12: Future of Java EE with Java SE 8

12

Nice!

Page 13: Future of Java EE with Java SE 8

13

Excellent!

Page 14: Future of Java EE with Java SE 8

14

By the Way,

Page 15: Future of Java EE with Java SE 8

15

Java SE 8 Updates Overview

Basic Topics

Page 16: Future of Java EE with Java SE 8

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

Page 17: Future of Java EE with Java SE 8

17

Java SE 8 Deleted Functions

JDBC-ODBCBridge

com

.sun

.misc.*

So long..

Page 18: Future of Java EE with Java SE 8

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

Page 19: Future of Java EE with Java SE 8

19

SE 8 New Feature – Lambda with Stream API

Don’t worry.NetBeans supports you!

Automatic Conversion

Page 20: Future of Java EE with Java SE 8

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)

Page 21: Future of Java EE with Java SE 8

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!

Page 22: Future of Java EE with Java SE 8

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

Page 23: Future of Java EE with Java SE 8

23

SE 8 New Feature – Type Annotation Improvement

Page 24: Future of Java EE with Java SE 8

24

SE 8 New Feature – Type Annotation Improvement

Page 25: Future of Java EE with Java SE 8

25

Java SE 8 applying pointsfor EE 7

Page 28: Future of Java EE with Java SE 8

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.

Page 29: Future of Java EE with Java SE 8

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

Page 30: Future of Java EE with Java SE 8

30

Java SE 8 Updates Overview

Advanced Topics

Page 31: Future of Java EE with Java SE 8

31

Study of Limitation Casewith SE 8 in EE 7

Page 32: Future of Java EE with Java SE 8

32

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

with Parallel Stream,with Glassfish 4.0.1 beta.

Page 33: Future of Java EE with Java SE 8

33

Downloaded from here.

Page 34: Future of Java EE with Java SE 8

34

NetBeans 8 detected 4.0.1

Page 35: Future of Java EE with Java SE 8

35

NetBeans 8 supported JDK 8

Page 36: Future of Java EE with Java SE 8

36

Startup succeededwith NetBeans 8.

Page 37: Future of Java EE with Java SE 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.

Page 38: Future of Java EE with Java SE 8

38

Wrote Lambda with (Parallel)Stream in EJB

Page 39: Future of Java EE with Java SE 8

39

Wrote CDI Bean for Calling EJB

Page 40: Future of Java EE with Java SE 8

40

Wrote CDI Bean for Calling EJB

Page 41: Future of Java EE with Java SE 8

41

Results

Both Succeeded.

Page 42: Future of Java EE with Java SE 8

42

Really?

Page 43: Future of Java EE with Java SE 8

43

Tested Fork/Join Framework

withWebLogic Server 12.1.2

(yet Java EE 6)

Page 44: Future of Java EE with Java SE 8

44

Just a kiddingcodes…

Page 45: Future of Java EE with Java SE 8

45

???

Page 46: Future of Java EE with Java SE 8

46

Just removedthe EJB annotation,

turn to POJO

Page 47: Future of Java EE with Java SE 8

47

Works !?Why?????

Page 48: Future of Java EE with Java SE 8

48

Let’s Checkthe EJB 3.2 Specification

Page 49: Future of Java EE with Java SE 8

49

EJB 3.2 Spec don’t allowed Manual Multithreading

Still not allowed.Oh…

Page 50: Future of Java EE with Java SE 8

50

Parallel Stream isimplemented with

Fork/Join Framework !

Wow!!

Page 51: Future of Java EE with Java SE 8

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.

Page 52: Future of Java EE with Java SE 8

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

Page 53: Future of Java EE with Java SE 8

53

Information

Come and Join Us!

Page 54: Future of Java EE with Java SE 8

54

Thank you for listening

Page 55: Future of Java EE with Java SE 8

55

Q&A