java a j2ee
DESCRIPTION
Java a J2EE. Peter Blšták. Obsah. Java charakteristika JavaBeans JDBC edície a verzie JEE (J2EE) špecifikácia JEE (JEE APIs) JEE kontajnery Java Servlets, JSP EJB. Java. Java. OO programovací jazyk (+ nástroje a knižnice) organizovanie programu do tried (objektov) - PowerPoint PPT PresentationTRANSCRIPT
Java a J2EE
Peter Blšták
2
Obsah
• Java• charakteristika • JavaBeans• JDBC• edície a verzie
• JEE (J2EE)• špecifikácia JEE (JEE APIs)• JEE kontajnery• Java Servlets, JSP• EJB
3
Java
4
Java
• OO programovací jazyk (+ nástroje a knižnice)• organizovanie programu do tried (objektov)
držia svoj stav (atribúty) vykonávajú funkčnosť, príp. menia svoj stav (metódy) interagujú s inými objektami (asociácie, referencie,
metódy)• syntax podobná C++
• interpretovaný (multiplatformový)• kompilovanie do tvaru Java bytecode
*.java -> *.class• JVM (Java Virtual Machine) – interpreter bytecode• Windows, Linux / Unix, MAC, mobilné
zariadenia, ...
5
Java (vs. C++)
• packages (balíky)• triedy sú organizované do namespace-ov (balíkov)
triede – súbor z názvom triedy balík – adresárová štruktúra
• java.lang.Object – trieda• /java/lang/Object.java (v src)• /java/lang/Object.class (v classes)
• všetky objekty dedia od java.lang.Object• takmer všetko je objekt
(okrem jednoduchých typov int, doube, ...)
6
Java (vs. C++)
• referencie (nemá pointre)
• garbage collection • bez destructor-ov a delete• JVM runtime – odstraňovanie objektov bez
referencie naň
• jednoduchá dedičnosť + interface-y
• všetky metódy ako „C++ virtual“• polymorfizmus (tak ako sa patrí)
• nemáme header súbory (*.h, *.hpp)• javadoc (generovanie)
7
Java trieda – príklad
package sk.tf.development.model;
import java.lang.RuntimeException;
import sk.tf.core.actions.*;
public class Kniha extends PersistentObject
implements Serializable, ContextListner {
private String ciarovyKod;
private BigDecimal cena;
private Vector vypozicky;
public void removeVypozicky(ActionContext context, Vector vypozicky) {
…
}
}
8
Java (vs. C++)
• štandardné knižnice• ADT (Vector, List, Collection, Set, Array, ...)• thread synchronization, networking, logging,
internationalization• reflection, dynamic-proxies• AWT, Swing (grafické komponenty)• XML (SAX, DOM, XSLT)• JavaBeans• JDBC, Corba, ... (enterprise features)• modifikácia bytecode (=> rutime enhancements)
• exceptions (checked, runtime)• java.lang.Exception• java.lang.RuntimeException
9
10
Java 5 – zaujímavé vlastnosti
• anotácie• dodatočné informácie k Java kódu• využívané pri preklade alebo runtime @Overrideprotected void renderComponent(...)
• generické (template) typy private Collection<Objednavka> objednavky;
• enumerácie ~ štruktúrovaný typ
• Scripting – podpora pre skriptovacie jazyky • jRuby, Groovy, Mozilla Rhino …
11
JAR – Java ARchive
• knižničný súbor• skompilované Java objekty• ďalšie zdroje (*.gif, *.properties, ...)
• ZIP s koncovkou jar
• classpath• vykonanie alebo skompilovanie programu• definuje cestu k triedam a ďalším zdrojom
(*.class, *.jar, ...)
12
JavaBeans
• POJO (Plain Old Java Object)• názvové a štrukturálne konvencie pre triedu
verejná trieda s verejným prázdnym konštruktorom atribúty:
private Type xxx; metódy:
public Type getXxx(); public void setXxx(Type xxx);
• Java poskytuje API na manipuláciu s vlastnosťami na základe mena (reflection)
13
JavaBeans – príklad
public class Kniha extends PersistentObject {
private String ciarovyKod;
private BigDecimal cena;
…
public Kniha() { … }
public String getCiarovyKod() { return ciarovyKod; }
public void setCiarovyKod(String ciarovyKod) {
this.ciarovyKod = ciarovyKod;
}
public BigDecimal getCena() { return cena; }
public void setCiarovyKod(BigDecimal cena) {
this.cena = cena;
}
…
}
14
JDBC
• Java DataBase Connectivity
• API – unifikovaný prístup k RDBMS• odtieňuje aplikáciu od použitého RDBMS a jeho
špecifických vlastností preklad SQL do natívnych SQL dotazov abstraktné volania a štruktúry (ResultSet, Connection)
• zvýšenie výkonu zabezpečuje connection pooling
• JDBC driver pre konkrétny RDBMS• JDBC-ODBC bridge• MS SQL Server – net.sourceforge.jtds.jdbc.Driver• MySQL – org.gjt.mm.mysql.Driver
15
JDBC – príklad
public Vector getBalances() throws AccountException {
try {
Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(“SELECT * FROM account WHERE balace > ?");
pstmt.setDouble(1, 20000.0);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
result.add(rs.getDouble(“balance"));
}
return result;
} catch (Exception e) {
throw new AccountException(e);
} finally {
try { if (pstmt != null) pstmt.close(); } catch (Exception e) {}
try { if (conn != null) conn.close(); } catch (Exception e) {}
}
}
16
JDBC – príklad
protected Connection getConnection() {
Class.forName(“org.gjt.mm.mysql.Driver”);
String url = "jdbc:mysql://localhost:3306/dbname";
return DriverManager.getConnection(url, “username", “password");
}
protected Connection getConnection() {
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/appDS");
return ds.getConnection();
}
17
Java edície a ich verzie
• JRE – Java Runtime Environment• JVM a základné knižnice potrebné pre
vykonávanie programov
• JSE – Standard Eddition• vývoj stand-alone (desktop) aplikácií• JRE, štandardné knižnice, zdrojové súbory a
nástroje (javac, javadoc, ...)
18
Java edície a ich verzie
• JME – Micro Eddition• vývoj aplikácií pre mobilné zariadenia (mobilné
zariadenia – mobilné telefóny, PDA) zariadenia majú predinštalované runtime prostredie
• nástroje pre simuláciu mobilných zariadení
• JEE – Enterprise Eddition• vývoj podnikových aplikácií• knižnice pre podnikové aplikácie, kontajnery, ...• nadstavba nad JSE (neobsahuje JRE, javac, jar)
19
Java edície a ich verzie
• JSE ~ JRE
• súčasnosť • Java ME
CLDC 1.1 - Connected Limited Device Configuration
CDC 1.1 - Connected Device Configuration• Java SE 1.4.x, 5 (1.5.x) a 6
JDK – Java Development Kit• Java EE 1.3, 1.4, 5
20
Java Platform Enterprise Eddition
21
JEE
• The mission of JEE is to provide a platform-independent, portable, multiuser, secure, and standard enterpriseclass platform for server-side deployments written in the Java language.
• JEE is a specification, not a product.
• JEE definuje• programové rozhrania (APIs)• runtime environment (JEE kontajner)
čo majú poskytovať ako sa majú používať
22
Architektúra JEE aplikácií
23
JEE kontajnery
24
25
JEE APIs – z JSE
• JDBC API 3.0• Java DataBase Connectivity
• RMI-IIOP• Remote Method Invocation over the Internet Inter-
ORB Protocol
• JNDI • Java Naming and Directory Interface
• JAXP 1.2 • Java API for XML Processing
• JAAS • Java Authentication and Authorization Service
26
JEE APIs – core
• EJB 3.0 (2.1) 001• Enterprise JavaBeans Technology
• Servlet 2.5 010• Java Servlet Technology
• JSP 2.1 010• JavaServer Pages Technology
• JMS 1.1 111• Java Message Service
• JTA a JPA 011• Java Transaction API a Java Persistance API
27
JEE APIs – WebServices
• JAX-WS 2.0 111• Java API for XML-Based Web Services
• JAX-RPC 1.1 111• Java API for XML-Based RPC
• JAXB 2.0 111• Java Architecture for XML Binding
• SAAJ 1.2 111• SOAP with Attachments API for Java
• JAXR 1.0 111• Java API for XML Registries (ebXML, UDDI)
28
JEE APIs – iné
• JavaMail 1.3 111• JavaMail API
• JAF 1.1 111• JavaBeans Activation Framework
• JCA 1.5 011• J2EE Connector Architecture
29
JEE APIs – iné
• J2EE Management 1.0 1011
• JMX 1.2 1011• Java Management Extensions
• JACC 1.0 0011• Java Authorization Contract for Containers
30
WEB aplikácie
31
WEB aplikácie
• Java Servlets• servlet• filter
• JavaServer Pages – JSP• JSP stránky• tag libraries
JSTL, Struts tag libs, ... custom tag libs
• JavaServer Faces – JSF• Komponentový prístup pre vývoj web aplikácií
• WEB (Servlet) kontajner
32
Servlet
• podobné CGI, perl, ...• obsluha požiadaviek na základe request-u a
generovanie response (HTML, XML, PDF, ...)
• tvorba WEB (prezentačnej vrstvy) aplikácie
• Java trieda odvodená od • javax.servlet.Servlet• javax.servlet.http.HttpServlet
• HttpServlet• metódy volané WEB (Servlet) kontajnerom
doGet(HttpServletRequest, HttpServletResponse) doPost(HttpServletRequest, HttpServletResponse) ...
33
HttpServletRequest
• reprezentuje HTTP request
• HTTP parametre (GET, POST), hlavičky, ...• getParameter(String name)• getHeaders()• getCookies() • getLocale(), getContentType()
• security• getRemoteUser()• getUserPrincipal()• isUserInRole(String role)
• informácie o klientovi a contexte (IP, URL)
34
HttpServletResponse
• reprezentuje HTTP response a jeho obsah• getWriter()• getOutputStream()• setContentType(String contentType)• addHeader(String name, String value)• addCookie(Cookie)
• redirection• setStatus(int status)• sendRedirect(String location)
35
Ďalšie objekty Servlet API
• HttpSession• perzistetné atribúty, ktoré sa vzťahujú k jednému
používateľovi (sedenie)• getCreationTime()• getLastAccessTime()• getId()
• ServletContext• globálne informácie pre danú aplikáciu
(nepoužívať static premenné)• informácie o serveri, kontexte a zdrojoch servera
36
Servlet – príklad
package examples;
public class SearchAlbumServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
List albums = Album.findNamed(request.getParameter("name"));
PrintWriter out = response.getWriter();
out.write(“<html><body><h1>Found albums:</h1>”);
for (int i = 0; i < albums; i++) {
Album album = (Album)albums.get(i);
out.write(“<li>” + album.getName() );
}
out.write(“</body></html>”);
}
}
http://www.site.sk/app/searchAlbum?name=Rounds
37
Filter
• wrapper requestov• doFilter(request, response, ...)
• realizácia aspektov (AOP ???)• Authentication• Logging and Auditing• Image conversion• Data compression• Encryption• XSL/T
38
Filter – príklad
public class AuditFilter implements Filter {
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
AuditHelper auditHelper = getAuditHelper(request);
if (auditHelper != null) {
auditHelper.audit(request);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
}
39
JSP – JavaServer Pages
• principiálne podobné k PHP, ASP, ...
• statické HTML s dynamicky generovanými časťami • scriptlety (časť JSP medzi <% … %>)
out, response, request premenné
• JSP tagy
• sprehľadnenie generovaného HTML
• zrýchlenie vývoja • GUI design (možnosť použiť WYSIWYG nástroje)• programovanie
• JSP je v runtime Servlet
40
JSP tag libraries
• knižnice (jar) špecializovaných JSP tagov
• sprehľadnenie kódu (JSP)
• zlepšenie udržiavateľnosti
• JSTL – Java Standard Tag Libraries• štandardná knižnica od Sun-u
• custom libraries• Struts (bean, logic, html, nested)• jakarta tag libraries (SQL, ...)
• definícia – *.tld súbor • class, name, attributes, scripting variables, ...
41
JSP – príklad
<%@ page import=“example.ArtistHelper" %>
<HTML>
…
static HTML
…
<UL>
<% ArtistHelper helper = (ArtistHelper) request.getAttribute("helper");
for (int i = 0; i < helper.getAlbums().size(); i++) {
out.print("<LI> ");
out.print(((Album)helper.getAlbums().get(i)).getTitle())
out.print("</LI> ");
}
%>
</UL>
</HTML>
42
JSP – príklad
<%@ taglib uri="/taglibs/struts-bean" prefix="bean" %>
<bean:define id="form" name="changePasswordForm" type="yonban.promasus.view.ChangePasswordForm" />
<html:form action="<%= form.getFormAction() %>“>
<h1><bean:message key="title.changePassword" /></h1>
<table cellpadding="5" cellspacing="0" border="0">
<nested:nest property="item">
<tr>
<td><bean:message key="text.oldPassword" />:</td>
<td><nested:password property="oldPassword" redisplay="false"/>
</td>
</tr>
...
</table>
</html:form>
43
WEB (Servlet) kontajner
• runtime prostredie pre servlety, JSP, filtre• mapovanie URL na komponenty• security• API
• WEB aplikácie• deployment v podobe .war súboru
.war (Web ARchive) – zip s koncovkou war web.xml – deskriptor WEB komponentov
• príklady kontajnerov – Tomcat, Resin
44
Štruktúra WAR
/ kontext rootJSP, HTML, obrázky
/META-INF/MANIFEST.MF
/WEB-INF/classes/ súčasť classpath
/WEB-INF/lib/ súčasť classpath
/WEB-INF/web.xml deskriptor
/WEB-INF/jboss-web.xml vendor specificdeskriptor
45
WEB deskriptor – web.xml
• definícia servletov a filtrov a ich inicializačných parametrov
• mapovanie URL – servlet
• mapovanie URL – filter
• definícia JSP tag libraries
• definícia security
• definícia parametrov contextu (aplikácie)
• ...
46
web.xml – príklad
<servlet>
<servlet-name>SearchAlbumServlet</servlet-name>
<servlet-class>examples.SearchAlbumServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SearchAlbumServlet</servlet-name>
<url-pattern>/searchAlbum</url-pattern> (/*.do, /secure/*)
</servlet-mapping>
...
<taglib>
<taglib-uri>/taglibs/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
</taglib>
...
47
EJB
48
EJB
• realizácia business logiky podnikových aplikácií
• komponentovo orientované riešenia• znovupoužitie komponentov (reusing)• komponent = Enterprise JavaBeans (EJB)
Session EJB Session Bean WebService Entity EJB MessageDriven EJB
• EJB kontajner
49
50
51
Explicit middleware
52
Implicit middleware (AOP)
53
Implicit middleware (AOP)
• jednoduchá údržba • oddelenie aplikačnej logiky od middleware• cross cutting concerns (centrálna definícia)• možnosť zmeny bez kompilácie
• čo rieši (môže riešiť) implicit middleware• riadenie (distribuovaných) transakcií• bezpečnosť• manažment zdrojov (resources – DB konekcie,
message queues)• perzistencia• remoting• logging, auditing
54
Implicit middleware (AOP)
• EJB kontajner sa správa ako layer of indirection medzi klientským kódom a beanom
• layer of indirection -> request interceptor
• request interceptor = EJB objekt (networkaware object)
• a layer of indirection solves every problem in computer science
55
Session EJB
• business process related logic• bank account transfer• perform order entry
• typy• Stateless
žiadny komunikačný stav pri každom requeste môže ísť o iný Enterprise Bean
• Statefull udržiava si komunikačný stav počas sedenia
(client session) počas sedenia vždy ten istý Enterprise Bean
56
57
Stateless Session Bean
58
Statefull Session Bean
59
Session EJB – príklad
package examples.ejb;
public interface Hello {
public String hello();
}
------------------------------------------------------------------
package examples.ejb;
@Stateless
@Remote(Hello.class)
public class HelloBean implements Hello {
public String hello() {
System.out.println("hello()");
return "Hello, World!";
}
}
60
Použitie Session EJB – príklad
package examples.ejb;
import javax.naming.*;
public class HelloClient {
public static void main(String[] args) throws Exception {
Context ctx = new InitialContext();
Hello hello =(Hello)ctx.lookup("examples.ejb.Hello");
System.out.println(hello.hello());
}
}
61
Realizácia EJB 2.x komponentov
• Enterprise Bean class (príp. PrimaryKey class)• obchodná logika (závisí od typu EJB)
• remote, local interface (EJB object)• klientské (remote / local) rozhranie pre volanie aplikačných
metód Enterprise Bean inštancií
• home, localhome interface (home object)• klientské (remote / local) rozhranie pre získanie
implementácie remote / local interfacu (EJB object)• Factory na získanie EJB objektov
• štandardný EJB deskriptor• previazanie Enterprise Bean triedy s interfacami• security, transakčnosť, ...
• špecifický EJB deskriptor• pooling policy, ...
62
Entity EJB
• business data structures• order, order entry, bank account
• data related logic• reduce account balance, modify order entry
• EQL - EJB Query Language
63
Entity EJB – RDBMS mapovanie
64
MessageDriven EJB
65
MessageDriven EJB
• podobné k Session Bean (obchodná logika)
• message oriented logic= asynchrónne volanie obchodnej logiky• receive stock trade message• nemá remote rozhranie
• vlastnosti • reliable, asynchronous, broadcasting
• spracovanie JMS (klientských) volaní• integrácia s inými systémami• dávkové spracovanie
66
67
EJB kontajner
• runtime prostredie EJB komponentov
• infraštruktúra (implicit middleware)• riadenie životného cyklu beanov + pooling• vzdialený prístup (remote access)• security, riadenie transakcií• perzistencia údajov, multiuser secure env.• monitoring, logging facility
• vertikálna a horizontálna škálovateľnosť• clustering (fault-tolerant – 24x7)• location transparency (distribuovanie komp.)
EJB komp. – EJB komp. WEB komp. – EJB komp.
68
EJB kontajner
• EJB aplikácie• (hot) deployment v podobe .ear súboru
.ear (Enterprise ARchive) – zip s koncovkou ear application.xml – deskriptor aplikácie ejb-jar.xml - deskriptor EJB modulu
• príklady EJB (WEB) kontajnerov• JBoss (+Tomcat)• BEA WebLogic• IBM WebSphere• Oracle AS (Orion)
69
Štruktúra EAR
/META-INF/application.xml deskriptor aplikácie
/META-INF/orion-application.xml
/lib/ súčasť classpath
/*.war WEB module
/*.jar EJB module
/*.jar:META-INF/ejb-jar.xml
deskriptor EJB modulu
70
application.xml
• zoznam WEB a EJB modulov danej Enterprise aplikácie
• mapovanie WEB modulov na context root name
http://www.site.sk/app/searchAlbum?name=Rounds
71
EJB deskriptor – ejb-jar.xml
• definicie EJB komponentov• spojenie EJB class, remote a home interfacov• pripojenie na message queues• transakčnosť
• definícia security
• definícia zdrojov • message queues, DataSource-ov
72
ejb-jar.xml - príklad
<session id="Hello_session">
<ejb-name>APP/ejb/Hello</ejb-name>
<ejb-class>examples.ejb.HelloBean</ejb-class>
<remote>examples.ejb.Hello</remote>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
...
</session>
73
Zhrnutie EJB
• výhody• škálovateľnosť (vertikálna / horizontálna)• failover / high availability• distribuovanosť (distribuované transakcie)
• nevýhody (EJB 2.x)• nízka úroveň abstrakcie
príliš veľa kódu
• príliš komplikované aj v jednoduchých prípadoch núti zložité riešenie všetko je distribuované feature delocalization
74
Zhrnutie EJB
• JEE 5 (J2EE 1.5)• rieši niektoré problémy J2EE
vylepšený EQL (podobné vlastnosti ako ORM) zjednodušenie EJB (použitie anotácií) ...
• náhrady za J2EE• open-source
remoting, transakcie (distribuované), security (AOP), ORM
Springframework + Hibernate
• ...
75
SOA a WebServices
76
77
SOA a WebServices
• SOA = Service Oriented Architecture• služba (komponent, jednotka IS)
definovaná svojím rozhraním
• IS integrácia vlastných a cudzích služieb orchestrácia služieb (chlievikové programovanie)
• WebService = služba• komunikačný protokol HTTP(S)• správy vo formáte XML = SOAP• definícia služby = WSDL súbor (XML)
obsahuje definície metód a ich argumentov (dátových štruktúry)
• "verejné" registre služieb (UDDI)
78
Session EJB – príklad
package examples.ws;
@Stateless
@WebService(serviceName="Greeter",portName="GreeterPort")
public class HelloBean {
@WebMethod
public String hello() {
System.out.println("hello()");
return "Hello, World!";
}
}
79
Použitie Session EJB – príklad
package examples.ws;
import javax.xml.ws.Service;
public class HelloClient {
public static void main(String[] args) throws Exception {
URL wsdlLocation = new URL(host + "/" + port "?WSDL")
Service service =
Service.create(wsdlLocation, serviceNameQ);
HelloBean hello = service.getPort(HelloBean.class);
System.out.println(hello.hello());
}
}
80
Zhrnutie
• Java• OO multiplatfomový interpretovaný jazyk• realizácia širokej škály typov aplikácií• bohaté knižnice (štandardné, thirdparty, ...)
• JEE• štandard na realizáciu podnikových server aplikácií• Servlet a EJB kontajnery• WEB komponenty
(Servlet, JSP)• EJB komponenty
(EJB – Session, Entity, MessageDriven)• WebServices
• http://java.sun.com/