34
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

Enterprise Java (BI-EJA) - edux.fit.cvut.cz · Ing. Zdeněk Troníček, Ph.D. Katedra softwarového inženýrství Fakulta informačních technologií ČVUT v Praze Enterprise Java

  • Upload
    vandieu

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

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

Web Application

Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 13

Rich Internet Application

Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 14

Rich Client Application

Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 15

Mobile Application

Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 16

Service Application

Ing. Zdeněk Troníček, Ph.D. BI-EJA 2: JEE, servlety, JSP 17

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

Znáte NetBeans API a chcete pracovat na

zajímavém projektu? Napište mi!

Otázky & odpovědi