Osztott rendszerek, Java EE Általános bevezető
Osztott rendszerek • • • • • •
Hálózati alkalmazások (java.net, java.nio, Apache Mina, stb.) Web-programozás (Servlet, JSP, JSTL, JSF, JavaFX, GWT, Struts, stb.) Webszolgáltatások (Java EE XML API, SOAP, JAX-WS, stb.) Távoli metódushívások, osztott komponensmodellek (CORBA, RMI) Vállalati rendszerek (Java EE, EJB, JPA, JTA, JMS, stb.) Grid Computing, Cloud Computing, stb.
Fejlesztés • Paradigmák/nyelvek: • • • •
Objektumorientált programozás, interfészek jelentősége Komponens alapú szoftverfejlesztés Szolgáltatásorientált architektúrák Aspektusorientált programozás
• Minták • •
Alapvető minták (Iterator, Factory, Singleton, Observer, stb., stb.) MVC, Abstract DAO Factory, Multitier Architecture
• Eszközök • • • • • •
Alkalmazásszerverek (Glassfish, JBoss, stb.), webszerverek (Tomcat, Jetty, stb.) Platformok (Java EE, Spring, stb.) Keretrendszerek (Apache Mina, Apache Struts, Hibernate, iBatis, JUnit, stb.) API-k, eszköztárak (JDBC, JMF, JTA, JMS, JPA, JSP, JSTL, JSF, stb., stb.) Dinamikus komponensmodellek (pl. OSGi) és implementációk (pl. Equinox) Build eszközök (Ant, Maven), környezetek (Eclipse, NetBeans, stb.), tervező eszközök (StarUML, stb.) csapatmunka támogatása (CVS/SVN, Bugzilla, stb.)
• Stratégiák •
Waterfall, V-model, Spiral model, Agile strategies (Extreme Programming, Test Driven Development, stb.), stb.
Fejlesztési folyamat • A fejlesztési (development) folyamat tevékenységei: • Elemzés (analysis) • Tervezés (design) • Megvalósítás (implementation) • Összeállítás (assembly) • Telepítés (deployment) • Verifikáció és validáció • Karbantartás, support
Java EE • Java Platformok: Java Card, Java ME, Java SE, Java EE, Java FX • Java Enterprise Editon: komponens alapú fejlesztések, osztott rendszerek, többrétegű architektúrák, alkalmazásszerverek • Fontosabb csomagok, API-k: • Enterprise JavaBean (EJB) – javax.ejb • Java Servlet API – javax.servlet • Java Server Pages (JSP)– javax.servlet.jsp • JSP – Standard Tag Library (JSTL) – javax.servlet.jsp.jstl • JavaServer Faces (JSF) – javax.faces • Java Message Service API (JMS) – javax.jms • Java Persistence API (JPA) – javax.persistence • Java Transaction API (JTA) – javax.transaction • Stb. stb.
Alkalmazásszerverek • Alkalmazásszerverek: • Programok hatékony futtatása, a fejlesztési folyamat egyszerűsítése, támogatása • Szolgáltatások: tranzakció kezelés, biztonsági megoldások, központosított konfiguráció, stb. • Továbbá: feladatok szétosztása, párhuzamos végrehajtás (clustering), meghibásodott modulok automatikus helyettesítése (fail-over), terhelés elosztása (load-balancing) → a fejlesztő az alkalmazás-logikára (business logic) koncentrálhat
• Java alkalmazásszerverek • Glassfish (Sun, open source), Oracle Glassfish Server • JBoss (JBoss/Red Hat) •
Oracle Weblogic, IBM Websphere, Apache Geronimo, SAP Netweaver, JOnAS (open source), stb., stb.
• Java web-szerverek: alkalmazásszerverek (pl. Glassfish → Apache Tomcat változatát tartalmazza), Apache Tomcat, Jetty, stb.
Többrétegű webes alkalmazások • Kliens réteg: a kliens gépén futó komponensek • Alkalmazás réteg: • Web réteg: a Java EE szerveren futó webes komponensek, a szerver web-konténerben futnak (Servlet, JSP) • Business réteg: a Java EE szerveren futó üzleti logikát megvalósító komponensek, a szerver EJB konténerében futnak (EJB) • Adathozzáférési réteg: Enterprise Information System (EIS) szerver
Java EE alkalmazás részei • Webes kliens, vagy asztali kliensalkalmazás (kliens oldal) •
A web-kliens a szervertől érkező oldalakat mutatja meg (HTML, XML, stb. alapú dinamikus weboldalak, amelyeket a szerveroldali komponensek generálnak) (böngésző/browser)
• Java EE komponensek (szerver oldal): önálló funkcionalitásokat biztosító, egymással kommunikáló szoftverkomponensek. Java osztályok és erőforrás állományok, amelyek összerakásuk (assembly) után egy alkalmazásszerverre lesznek telepítve (deployment). Meg kell feleljenek a vonatkozó Java EE specifikációnak. • Web komponensek (Servlet, JSP): a Java EE szerver web-konténerében (pl. Tomcat) futnak • Servlet: a kéréseket dinamikusan feldolgozó és azokra dinamikusan választ generáló Java osztályok • JSP: a tartalom létrehozására, szöveg-alapú dokumentumok generálására szolgáló komponensek (a háttérben tulajdonképpen servlet-ként futnak)
• EJB (Enterprise JavaBeans): szerveroldali, üzleti logikáért felelős komponensek (entity beans, session beans, message-driven beans), az alkalmazásszerver EJB konténerében futnak •
Összeállítás: különböző konténer beállítások, konfigurációs állományokban → a szerver ezek alapján biztosítja szolgáltatásait (tranzakció-kezelés, biztonság, stb.)
Web-alkalmazás működése • • • •
A web-kliens egy http kérést (request) küld a szervernek A web-konténer a kérést egy HttpServletRequest objektumba alakítja Az objektumot megkapja a megfelelő web-komponens (Servlet/JSP) A web-komponens az EJB-ekkel (vagy más üzleti logikát megvalósító komponensekkel, osztályokkal) együttműködve elvégzi a megfelelő műveleteket • A web-komponens továbbíthatja a kérést más web-komponensekhez (forward) • A válasz felépítésekor a web-komponens dinamikus tartalmat generál, egy HttpServletResponse típusú objektumot épít fel • Az objektumot a web-szerver http válasszá (response) alakítja, és visszaküldi a kliensnek
Web-alkalmazás • Web-alkalmazás részei • Web-komponensek • Telepítés-leíró (deployment descriptor) • Java osztályok és jar csomagok • Statikus erőforrások (képek, statikus html oldalak, stb.) • Szerverfüggetlenség: bármilyen konténerbe telepíthető, ha az megfelel a Java Servlet/JSP specifikációnak • Létrehozás és futtatás: • Web-komponensek és segédosztályok implementációja • Telepítés leíró létrehozása • Az osztályok lefordítása, és a web-alkalmazás létrehozása, építő (build) eszköz (pl. Ant) segítségével • Az alkalmazás telepíthető egységbe (deployable unit) történő csomagolása (.war állomány) – opcionális • Az alkalmazás telepítése a web-konténerbe • Az alkalmazásra hivatkozó URL meghívása a böngészőből
Web-modul • A web-konténer megfelelő katalógusába lesz telepítve: egy könyvtár, vagy egy .war állomány • A gyökérben találhatóak a JSP oldalak és statikus erőforrások • A gyökér tartalmaz egy WEB-INF katalógust, melynek tartalma: • web.xml – a telepítés-leíró • classes könyvtár – szerver oldali osztályok (Servlet-ek és segédosztályok) • lib könyvtár – csomagok, amelyeket a szerver oldali komponensek használnak
Java web-alkalmazások: MVC • MVC: • • •
Modell: JavaBean-ek Nézet: JSP Vezérlés: Servlet • Fogadja a kérést és paramétereit, a paramétereket a megfelelő típusba alakítja és ellenőrzi helyességüket • Meghívja a megfelelő üzleti logikával kapcsolatos metódusokat • Az eredmény alapján továbbít a megfelelő nézethez (JSP)
• Működés: A kliens (böngésző) kérést (GET vagy POST) intéz a szerverhez A konfigurációs állomány alapján a szerver a kérést a megfelelő Servlet-hez továbbítja A Servlet a kérés URL alapján meghívja a megfelelő parancsobjektumot A parancsobjektum kommunikál az üzleti logikáért felelős komponensekkel, majd átirányít a megfelelő nézetre (JSP) • A nézet megjeleníti a megfelelő információkat a kliens browserében Mivel a JSP-ek tulajdonképpen a háttérben Servlet-ként futnak, elvileg felcserélhetőek, de az MVC elv szempontjából mindeniknek megvan a maga előnye: a Servletek alkalmasabbak a vezérlésre és adatfeldolgozásra, a JSP-eket szöveg alapú oldalak (html, xml, stb.) létrehozására alkalmasabbak További technológiák és keretrendszerek: JSTL, JSF, Struts, JavaFX, GWT, stb. • • • •
•
•