enterprise java (bi-eja) - edux.fit.cvut.cz · ing. zdeněk troníček, ph.d. katedra softwarového...
TRANSCRIPT
Ing. Zdeněk Troníček, Ph.D. Katedra softwarového inženýrství
Fakulta informačních technologií ČVUT v Praze
Enterprise Java (BI-EJA)
Technologie programování v jazyku
Java (X36TJV)
Letní semestr 2010/2011, přednáška č. 2
© Zdeněk Troníček, 2011
Příprava studijního programu Informatika je podporována
projektem financovaným z Evropského sociálního fondu a
rozpočtu hlavního města Prahy.
Praha & EU: Investujeme do vaší budoucnosti
Program
Seznámení s Java Enterprise Edition (JEE)
Aplikační server
Architektura aplikace v JEE
Servlety
Java Server Pages (JSP)
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 2
Java Editions
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 3
Java Standard Edition
Java Micro Edition
Java Enterprise Edition
Motivace
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 4
• User authentication
• Multi-user support
• Data persistence
• Data integrity (transactions)
• Client-tier communication
• Asynchronous communication
• Naming service
• Communication with legacy systems
Co mají podnikové aplikace společného?
Java Enterprise Edition 6
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 5
Java Server Faces (JSF) 2.0
Java Server Pages (JSP) 2.2
Enterprise Java Beans (EJB) 3.1
Java Persistence API (JPA) 2.0
Java API for XML-Based Web Services (JAX-WS) 2.2
Java API for RESTful Web Services (JAX-RS) 1.1
Java Architecture for XML Binding (JAXB) 2.2
Java Message Service API (JMS) 1.1
Java Transaction API (JTA) 1.1
…
Příklad aplikace v JEE
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 6
Database Web
Browser
Application Server
EJB
Container
EJB
EJB
Web
Container
JSP
Servlets
HTML
Applet
Prezentační
logika
Business
logika
Archive files
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 7
HTML
JSP
servlet
DD
tag
libraries
helper classes
Web Archive
(WAR)
DD
bean
helper classes
interface
EJB Archive
(JAR)
DD
EJB JAR
WAR JAR
JAR
Enterprise
Archive
(EAR)
DD = Deployment
Descriptor
Deployment
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 8
JAR
WAR EAR
Aplikační server
MainServlet.class
index.jsp
home.jsp
web.xml
Služby poskytované AS
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 9
Komunikace s klientem
Životní cyklus komponent (zahrnuje i řízení
souběžného přístupu)
Správa databázových spojení (Connection pool)
Transakční zpracování
Persistence objektů
Asynchronní komunikace
Přihlašování uživatelů a přidělování práv
…
Containers
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 10
Full EJB
EJB Container
servlets
JSP, JSF
EJB Lite
Web container Web
browser
Application
client
RMI
HTTP
(HTTPS)
Databáze
N-tier architecture
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 11
Client
Presentation tier
Business tier
EIS tier
servlets, JSP, HTML, XML
EJB, Plain Old Java Objects (POJO)
Relational Database Management
System (RDBMS), Enterprise
Resource Planning (ERP)
web browser
Integration tier EJB, Entity, POJO
Archetypy
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 12
Web application
Rich Internet application
Rich client application
Mobile application
Service application
Development
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 18
Analysis Architecture
Design Coding
Deployment
Descriptors
Assembly Deployment
Testing
Servlety & JSP
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 19
Web container
servlet
JSP
• Webové komponenty, které slouží pro dynamické generování stránek
• Pro daný servlet existuje v jednom kontejneru pouze jedna instance
• Každé JSP je před „provedením“ převedeno na servlet
Servlet
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 20
servlet
thread
pool
HTTP
request
web container
HTTP
request
new
init()
service()
service()
destroy()
web
container servlet
browser
1
browser
2
Servlet API
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 21
<<interface>>
Servlet
service()
GenericServlet
service()
HttpServlet
service( request, response )
doGet( request, response )
doPost( request, response )
...
public class HelloServlet
extends HttpServlet {
@Override
protected void doGet(
HttpServletRequest req,
HttpServletResponse resp )
throws ... {
resp.setContentType( "text/html" );
PrintWriter out = resp.getWriter();
...
}
}
Request & Response API
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 22
<<interface>>
ServletRequest
<<interface>>
HttpServletRequest
getHeader( name ): String
getHeaders( name ): Enumeration
getHeaderNames(): Enumeration
getIntHeader( name ): int
getDateHeader( name ): Date
<<interface>>
HttpServletResponse
<<interface>>
ServletResponse
setContentType( type )
getWriter(): PrintWriter
getOutputStream():
ServletOutputStream
addHeader( name, value )
addIntHeader( name, value )
addDateHeader( name, value )
Zpracování požadavku
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 23
web container
request request
response
response
servlet
<<create>>
<<create>>
service( req, resp )
<<destroy>>
<<destroy>>
doGet
Java Server Pages (JSP)
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 24
JSP
servlet
first access
or JSP has
been modified?
yes
no
transform
compile
request
response
<%@ page
import="java.util.Date" %>
<html>
<body>
<h1>EJA</h1>
<%= new Date() %>
</body>
</html>
JSP scripting elements
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 25
<%@ page import="..."%>
<%@ include file="..."%>
<%@ taglib uri="..." prefix="..."%>
Directives
<%! String url = "/account.jsp"%>
<%!
boolean numOfAccounts(Customer c) {
return c.getAccounts().size();
} %>
Declarations
<%= c.getAccounts().size() %>
Expressions
<%
out.println("Hi!");
%>
Scriptlets
<%-- not finished yet! --%>
Comments
Session API
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 26
<<interface>>
HttpServletRequest
getSession( create )
getSession()
<<interface>>
HttpSession
getID(): String
isNew(): boolean
getAttribute( name ): Object
setAttribute( name, value )
removeAttribute( name )
invalidate()
<session-config>
<session-timeout>10</session-timeout>
</session-config>
web.xml
Thread model
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 27
int x;
public void doGet(...) {
}
browser1 browser2
instance variables
class variables
external resources
synchronized keyword
Lock lock = new ReentrantLock();
lock.lock();
try {
...
} finally {
lock.unlock();
}
Thread interference
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 28
class Counter {
private int c = 0;
public void increment() { c++; }
public void decrement() { c--; }
public int value() { return c; }
}
Vlákno A volá increment(), vlákno B decrement():
1. vlákno A přečte c
2. vlákno B přečte c
3. vlákno A zvýší c o 1
4. vlákno B sníží c o 1
5. vlákno A uloží výsledek (v c je 1)
6. vlákno B uloží výsledek (v c je -1)
Model 2 (Model-View-Controller)
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 29
JSP
servlet
view controller
model
retrieves
data
retrieves data
updates model
sends events
selects view
sends data
Java Java class
Dispatcher View
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 30
servlet
JSP JSP
JSP
business
logic
browser 1
2
3
4
Service-to-Worker
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 31
servlet
JSP JSP
JSP
business
logic browser
1
3
2
4
Předávání dat
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 32
Customer c = ...
request.setAttribute( "customer", c );
RequestDispatcher rd =
request.getRequestDispatcher( "/view.jsp" );
rd.forward( request, response );
Controller
<jsp:useBean id="customer" class="bank.Customer" scope="request"/>
<jsp:getProperty name="customer" property="firstName"/>
<jsp:getProperty name="customer" property="lastName"/>
View
page
request
session
application
Scope
Rozdělení rolí
Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 33
servlet JSP
• přijme žádost
• zpracuje formulářová
data
• připraví data pro view
• předá řízení JSP
• přijme data od servletu
• vytvoří HTML odpověď
Java Server Faces
Struts
generic servlet