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
Jan 13, 2015
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!
8
Combinations of SE and 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)
J2SE 1.2
(1998)
J2SE1.3
(2000)
J2SE1.4
(2002)
J2SE 5
(2004)
Java SE 6
(2006)
Java SE 7
(2011)
Java SE 8
(2014)
One EE specification, with latest SE version
Java EE 7 relies on SE 7
Java EE 7 is not fit perfectly for SE 8 improved functions
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
26
Rich Clients(no business logics)
Web Presentation(no business logics)
Business Logic(no presentations)
Typical Usage of EE Specs
Data Access
JPA
EJBJSF
DBs
Java FXJTA
Automatic Transaction
Messaging
JMS MQ
Connection
RMI-IIOPOther
Servers
EMailMTAJavaMail
JAX
Call
Call
Call
Call
Call
Call
27
Rich Clients(no business logics)
Web Presentation(no business logics)
Business Logic(no presentations)
Typical Usage of EE Specs
Data Access
JPA
EJBJSF
DBs
Java FXJTA
Automatic Transaction
Messaging
JMS MQ
Connection
RMI-IIOPOther
Servers
EMailMTAJavaMail
JAX
Call
Call
Call
Call
Call
Call
Main stage is here!
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