#jdt2014-C4
Move from J2EE to Java EE
May 22, 2014
Hirofumi Iwasaki
Financial Service Department, Development Unit,
Rakuten, Inc.
http://www.rakuten.co.jp/
#jdt2014-C4
2
Speaker Biography
 Hirofumi Iwasaki
– Group Manager, Technology Manager
– Financial Service Department, Development Unit,
Rakuten, Inc.
 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: JJUG CCC Spring (2014), WebLogic roundtable (2012-2013), etc.
– twitter: @HirofumiIwasaki (English)
#jdt2014-C4
3
#jdt2014-C4
4
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!
#jdt2014-C4
5
#jdt2014-C4
6
#jdt2014-C4
7
#jdt2014-C4
8
#jdt2014-C4
9
J2SE 1.2.2
JDK 1.1.8
JDK 8
JDK 7
#jdt2014-C4
10
J2EE 1.2 Java EE 7
Java EE 6
#jdt2014-C4
11
#jdt2014-C4
12
Case Study of “J2EE” Era Systems in 2014
Developed in 2001 - 2006
Our systems is…
Based on J2EE 1.3 - 1.4
With many EOL open source libs
Working on EOL app server
Too old to move to latest Java EE
#jdt2014-C4
13
Not Too Late!!
Move On to Java EE!!
#jdt2014-C4
14
 Standard specifications for application servers (except for MS).
What's Java EE
Commercial
Open Source
etc.
Java EE
Specification
To make assurance
double sure
Liberty Profile etc.
+
#jdt2014-C4
15
Differences Between the Ages in Real Systems
2014 (To-Be) 2006 2001
EE Specs  Java EE 6, 7  J2EE 1.4  J2EE 1.2
SE Specs  JDK 7, 8  J2SDK 1.4  J2SDK 1.3
Web  JSF 2.0, 2.2
(inc. Facelet)
 Struts 1.3 / 2
+ JSP 2.0
+ JSTL 1.1
 Struts 1.1
+ JSP 1.1 +
commons taglib
Rich Client  JavaFX 8  SWT  Swing (JFC)
Business Logic  EJB 3.1, 3.2  Spring FW
 POJO
 Struts Action
 EJB 1.1
 POJO
 Struts Action
Data Access  JPA 2.0, 2.1  Hibernate
 iBATIS
 Original JDBC
wrapper
Logging  Apache Log4J
 SLF4J + Logback
 Apache Log4J
 commons logging
 Jakarta Log4J
Almost all can implement with standard specs,
except for logging.
#jdt2014-C4
16
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 version
is still EE 6
#jdt2014-C4
17
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, SE 8
Fujitsu Interstage 11.1 SE 6, SE 7 - -
Hitachi Cosminexus 9.x SE 7 - -
SE 8 is not ready
for almost all servers
*
* WebLogic 12.1.1 only
#jdt2014-C4
18
Changes of
the Components
#jdt2014-C4
19
Rich Clients
(with business logics)
Web Presentation
(with business logics)
Business Logic
(no presentations)
Typical Usage of J2EE 1.2 in 2001
Data Access
Original JDBC wrapper
EJBJakarta Struts
DBs
JTA
Automatic
Transaction
Messaging
JMS MQ
Connection
RMI-IIOP
Other
Servers
EMail
MTAJavaMail
Call
Call
Call
Call
Call
Call
Swing (JFC)
#jdt2014-C4
20
Business Logic
(no presentations)
Data Access
Web Presentation
Rich Clients
Typical Usage of J2EE 1.4 in 2006
Hibernate
Spring
Framework
Apache Struts
DBs
JTA
Automatic
Transaction
Messaging
JMS MQ
Connection
RMI-IIOP
Other
Servers
EMail
MTAJavaMail
JAX
Call
Call
Call
Call
Call
Call
SWT
#jdt2014-C4
21
Rich Clients
Web Presentation Business Logic
(no presentations)
Typical Usage of Java EE 6 – 7 in 2014
Data Access
JPA
EJBJSF
DBs
Java FX
JTA
Automatic
Transaction
Messaging
JMS MQ
Connection
RMI-IIOP
Other
Servers
EMail
MTAJavaMail
JAX
Call
Call
Call
Call
Call
Call
#jdt2014-C4
22
Changes of
the Development
Environments
#jdt2014-C4
23
Changes of the OS in Enterprise System Devs
J2EE 1.2
in 2001
J2EE 1.4
in 2006
Java EE 7
in 2014
#jdt2014-C4
24
J2EE 1.2
in 2001
J2EE 1.4
in 2006
Java EE 7
in 2014
Changes of the IDEs in Enterprise System Devs
Use NetBeans 8 or IntelliJ 13.1 for EE 7 + SE 8
#jdt2014-C4
25
Heavy Changes of
the Environments
from 2001 to 2014
#jdt2014-C4
26
Question:
Do you stay in still
J2EE 1.4 in 2006
In your systems?
#jdt2014-C4
27
Expected Answer:
No (of course not!)
#jdt2014-C4
28
Yes? Really?
Catch up to 2014 ASAP,
or die.
#jdt2014-C4
29
Zero-Day Vulnerabilities
In EOL Struts 1.3.10
* From http://www.lac.co.jp/security/alert/2014/04/24_alert_01.html
#jdt2014-C4
30
#jdt2014-C4
31
EOL
#jdt2014-C4
32
By the Way,
Move Forward
to 2014 Styles
TODAY!
#jdt2014-C4
33
Basic Case Study:
Struts 1.x  JSF 2.2
#jdt2014-C4
34
Rich Clients
(with business logics)
Web Presentation
(with business logics)
Business Logic
(no presentations)
Target Tier (in 2001)
Data Access
Original JDBC
wrapper
EJBJakarta Struts
DBs
Swing (JFC)
JTA
Automatic
Transaction
Messaging
JMS MQ
Connection
RMI-IIOP
Other
Servers
EMail
MTAJavaMail
Call
Call
Call
Call
Call
Call
#jdt2014-C4
35
Rich Clients
Web Presentation Business Logic
(no presentations)
Target Tier (in 2014)
Data Access
JPA
EJBJSF
DBs
Java FX
JTA
Automatic
Transaction
Messaging
JMS MQ
Connection
RMI-IIOP
Other
Servers
EMail
MTAJavaMail
JAX
Call
Call
Call
Call
Call
Call
#jdt2014-C4
36
The JavaServer Faces (JSF) 2 is
 Standard web framework of the Java EE 7 and 6
 Re-Born as JSF 2 in Java EE 6
– Please forget the useless JSF 1.x (Java EE 5) if you know.
 JSF 2.0 changes (in EE 6):
– Added @ViewScoped backing bean lifecycle.
– Introduced new HTML page renderer ‘Facelet’.
 JSF 2.2 changes (in EE 7):
– Updated with renewed HTML friendly tags.
– Changed the backing bean from JSF managed beans to CDI.
– Introduced auto XSRF avoiding functions
#jdt2014-C4
37
JSF 2.2! Welcome!!
37
 Finally we can make enterprise web applications only with Java EE
standard specifications, JSF.
– Good-bye, JSP!!
– So long, Struts!!
– Take care, Commons!!
* Recommended 2.2 or later
#jdt2014-C4
38
<Facelet>
Index.xhtml
IndexBean
- userName
+ load()
+ action()
Front View & Backing Bean
Page loading
Show the
property’s value
of backing bean
#jdt2014-C4
39
<Facelet>
Index.xhtml
IndexBean
- userName
+ load()
+ action()
Submit
(post back)
Front View & Backing Bean
#jdt2014-C4
40
Page Transition
<Facelet>
index.xhtml
IndexBean
- id
+ load()
+ submitClick()
<Facelet>
next.xhtml
NextBean
- id
+ load()
(1) Page
redirection
(2) Pass data
via ‘flash’
#jdt2014-C4
41
Page Transition
<Facelet>
index.xhtml
IndexBean
- id
+ load()
+ submitClick()
<Facelet>
next.xhtml
NextBean
- id
+ load()
Transit to
next page
#jdt2014-C4
42
So Easy to Make!
Try it TODAY!
#jdt2014-C4
43
Make new
project
Select
“Maven > Web Applications”
Select “Properties”
after project creation
#jdt2014-C4
44
Add the “JavaServer Faces”
and select up the JSF 2.2
Change pattern from “/faces/*.xhtml” to “*.xhtml”
for simple & easy operations
#jdt2014-C4
45
Open the “pom.xml”
Modify “javaee-web-api” (web profile)
to “javaee-api” (full profile)
#jdt2014-C4
46
Delete
old JSP
Add CDI
backing bean
from here
Make backing
bean for Facelet
#jdt2014-C4
47
Add backing bean annotations
and implement Serializable interface
Add getters and
setters
Add @PostConstruct
method for page
load operations
#jdt2014-C4
48
Set the placeholder
for backing bean property
Input Facelet using
code completion of NetBeans
Set the action method
for submit button
#jdt2014-C4
49
Press the button,
run the backing bean
Just push the run button,
compile, archiving and
deploying to Java EE server
automatically
#jdt2014-C4
50
Advanced Topics:
Differences Between
Struts 1.x and JSF 2.2
#jdt2014-C4
51
<<JSP>>
View1
<<JSP>>
View 2
Action1
+ action()
<<JSP>>
View 3
Action2
+ action()
ActionForm1
- fields
+ validate()
ActionForm2
- fields
+ validate()
Operate
Action
Build
Next View
Operate
Action
Build
Next View
Per Action Operation
struts
-config.xml
#jdt2014-C4
52
<Facelet>
View 1
Backing1
- fields
+ load()
+ action()
<Facelet>
View 2
Backing2
- fields
+ load()
+ action()
<Facelet>
View 3
Backing3
- fields
+ load()
+ action()
Front View
&
Backing Bean
Per View Operation
#jdt2014-C4
53
Paradigm Changing:
Action to Page
#jdt2014-C4
54
How to Migrate?
#jdt2014-C4
55
Paradigm Changing - Simple
<<JSP>>
View1
<<JSP>>
View 2
Action1
+ action()
<<JSP>>
View 3
Action2
+ action()
ActionForm1
- fields
+ validate()
ActionForm2
- fields
+ validate()
Operate
Action
Build
Next View
Operate
Action
Build
Next View
<Facelet>
View 1 Backing1
- fields
+ load()
+ action()
<Facelet>
View 2
Backing2
- fields
+ load()
+ action()
<Facelet>
View 3 Backing3
- fields
+ load()
+ action()
Front View
& Backing Bean
#jdt2014-C4
56
One Action Class
Paradigm Changing - Simple
Event Operation
Next Page
Initialization
Backing Bean
Action Method
Event Operation
Backing Bean
@PostConstruct Method
Page Initialization
Sprit to Two Parts
#jdt2014-C4
57
Paradigm Changing – Complicated
<JSP>
[Button1]
[Button2]
Button1Action
+ action()
Operate
Action
Build
Next View
<Facelet>
[Button1]
[Button2]
Backing1
- fields
+ load()
+ button1()
+ button2()
<Facelet>
View 2-1
<Facelet>
View 2-2
<JSP>
View 2-1
<JSP>
View 2-2
Button1Action
+ action()
#jdt2014-C4
58
Re-Architecture: JSP to Facelet
Sections Struts 1.1 JSF 2.2
HTML5 Don’t know Ready
Form tag <html:form
action=“/actionName”>
<form jsf:id=“form>
Text output <bean:write
name=“bean.prop”/>
#{bean.prop}
Hidden <html:hidden
property=“prop”/>
<input type=“hidden”
jsf:value=“#{bean.prop}”/>
Text Field <html:text
property=“prop”/>
<input type=“text”
jsf:value=“#{bean.prop}”/>
Password
Field
<html:password
property=“prop”/>
<input type=“password”
jsf:value=“#{bean.prop}”/>
Check Box <html:multibox
property=“prop”/>
<input type=“checkbox”
Submit <html:submit /> <input type=“submit”
jsf:action=“#{bean.action()}”/>
#jdt2014-C4
59
Re-Architecture: Common Processing
ActionServlet
+ process()
SpecialServlet
+ process()
Filter
+ process()
SpecialFilter
+ process()
PhaseListener
+ process()
SpecialPhLsnr
+ process()
Filter
+ process()
SpecialFilter
+ process()
faces
-config.xml
web.xml
No change
Override
Phase Listener,
NOT Faces Servlet
#jdt2014-C4
60
Slightly Complicated,
but Simple
Just try it!
#jdt2014-C4
61
Appendix: Additional Resources
For newbies
Awesome
for startups
Nice essential
references
#jdt2014-C4
62
Appendix: Additional Resources
http://www.slideshare.net/iwasakihirofumi/java-ee-7-jsf-22
How to use
JSF 2.2
correctly
#jdt2014-C4
63
Appendix: Additional Resources
http://www.slideshare.net/iwasakihirofumi/future-of-java-ee-with-java-se-8
EE 7 with SE 8
#jdt2014-C4
64
Conclusion
 J2EE era is so old to migrate, but with
many challenges you can do it.
 Differences between Struts 1.x and
JSF 2.2 are huge, the paradigm
changes
 Try it with NetBeans 8 and GlassFish 4
today! It’s FREE!
Go Ahead,
Ride the Wave!
Make our enterprise
future with Java EE!
#jdt2014-C4
65

Move from J2EE to Java EE

Editor's Notes

  • #65 Java EE 6 is suitable for huge financial systems. And we made new financial architecture with many education and measurements. Make our enterprise future with Java EE.