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
1. 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
2. 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)
5. 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. 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. 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! Pandemic
Era
Integration
Era
Mess Era
(for EE spec)
Unite to Single
Standard
Again!
8. 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)
J2SE
1.3
(2000)
J2SE
1.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. 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. 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
18. 18
SE 8 New Feature – Lambda with Stream API
List<String> aList
= Arrays.asList(new String[]{"a", "b", "c", "d", "e"});
// Normal
for (String x : aList) {
System.out.println(x);
}
// Lambda with parallel stream
aList.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. 19
SE 8 New Feature – Lambda with Stream API
Don’t worry.
NetBeans supports you!
Automatic Conversion
20. 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. 21
SE 8 New Feature – New Date Time API (Calculation)
// Date Calculation
Calendar 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 Calculation
Calendar 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 Calculation
LocalDate threeWAfter = date.plusWeeks(3);
LocalDate fourMBefore = date.minusMonths(4);
// Time calculation
LocalTime sevenHAfter = time.plusHours(7);
LocalTime threeMBefore = time.minusMinutes(3);
Java 1.2 – Java 7 Java 8 –
Simplified, sophisticated style!
22. 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. 23
SE 8 New Feature – Type Annotation Improvement
24. 24
SE 8 New Feature – Type Annotation Improvement
26. 26
Rich Clients
(no business logics)
Web Presentation
(no business logics)
Business Logic
(no presentations)
Typical Usage of EE Specs
Data Access
JPA
EJB
JSF
DBs
Java FX
JTA
Automatic
Transaction
Messaging
JMS MQ
Connection
RMI-IIOP
Other
Servers
EMail
MTAJavaMail
JAX
Call
Call
Call
Call
Call
Call
27. 27
Rich Clients
(no business logics)
Web Presentation
(no business logics)
Business Logic
(no presentations)
Typical Usage of EE Specs
Data Access
JPA
EJB
JSF
DBs
Java FX
JTA
Automatic
Transaction
Messaging
JMS MQ
Connection
RMI-IIOP
Other
Servers
EMail
MTAJavaMail
JAX
Call
Call
Call
Call
Call
Call
Main stage is here!
28. 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. 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
51. 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. 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 to
EE 7, but useful new
functions must be improve
the stage of your enterprise.
Go Ahead!
Ready to apply SE 8
for the Java EE!