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.