A JavaBeans komponens modell Áttekintés Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék Ez a tananyag felhasználja a TEMPUS S_JEP-12495-97 Network Computing Chapter 8 Developing of Network Computing Applications Component Based System Development (Lajos Ficsor) egyes részeit, magyar nyelvre fordítva Utolsó módosítás: 2007. 10. 09. A JavaBeans komponens modell
Mi is az a Bean? Tartalom A JDK, mint komponens framework A Bean modell legfontosabb jellemzői Tervezési idejű és futásidejű Bean-ek Tervezési minták Bean készítése Hogyan működik? Ficsor Lajos A JavaBeans komponens modell JavaBeans / 2
Mi is az a Bean? A JavaBeans specifikáció egy Java alapú komponens architektúra Java komponens készítők és komponens felhasználók számára A Bean black-box komponens. Lehet látható vagy nem látható. A Bean egy ZIP formátumú archív file, amely tartalmaz: Java osztályokat Szerializált objektumok halmazát Opcionálisan HTML help file-t, lokalizációs információkat, ikont és egyéb erőforrásokat Opcionálisan egy manifest file-t Ficsor Lajos A JavaBeans komponens modell JavaBeans / 3
Mi is az a Bean? (folyt. folyt.) A JavaBean-ek (főként) a prezentációs rész komponensei Reprezentálhatnak GUI elemeket (a swing komponensek is bean-ek) Azonos címtérben helyezkednek el a kliensükkel ("lokális" komponensek) A kliensük képezi a konténerüket, azaz a működtető környezetüket, amely minden erőforrást biztosít számukra Eseményeket küldenek a konténerüknek Ficsor Lajos A JavaBeans komponens modell JavaBeans / 4
A Bean a programozó szempontjából BeanInfo Customizer Methods Events Properties Ficsor Lajos A JavaBeans komponens modell JavaBeans / 5
A JDK mint komponens frameworkf A JDK eszközeivel a fejlesztő képes: új Bean készítésére, előzmények nélkül új Bean készítésére már létező Bean-ek segítségével létező Bean-ek testreszabására alkalmazás készítésére tesztreszabott Bean-ekből Ficsor Lajos A JavaBeans komponens modell JavaBeans / 6
JDK Framework View of JavaBeans Visual Presentation Events Properties Introspection Persistence Customizer ORB Services Own Beans Ficsor Lajos A JavaBeans komponens modell JavaBeans / 7
Megjelenítés s (Visual( Presentation) Támogatja a komponensek elhelyezkedésének (visual layout) meghatározását Lehetővé teszi, hogy a komponensek vizuálisan együttműködjenek egymással Mindezeket az alábbiak felhasználásával valósítja meg: Java Foundation Classes (JFC) AWT 2-D grafika Swing komponensek Ficsor Lajos A JavaBeans komponens modell JavaBeans / 8
Események (Events( Events) A JavaBeans esemény modellje: event-delegation modell Ez ugyanaz a módszer, amit a JDK 1.1 az AWT számára bevezetett, de minden Bean használhatja Az események objektumok Egy komponens képes továbbítani (post) egy eseményt (esemény forrás) Más komponensek feliratkozhatnak (subscribe) egy esemény forráshoz Minden feliratkozott komponens (listeners) értesítést kap, amikor az esemény keletkezik (the event "fires") Ficsor Lajos A JavaBeans komponens modell JavaBeans / 9
Tulajdonságok (Properties( Properties) A Bean tulajdonságai: névvel ellátott attribútumok A programozó olvashatja és módosíthatja ezeket a tulajdonságokat egy tulajdonság szerkesztő (property editor) segítségével, ami egy vizuális fejlesztőeszköz része A prgram futásidőben is kezelheti a tulajdonságokat az interface "get" és "set" metódusai segítségével A tulajdonság változások eseményeket válthatnak ki A tulajdonság értékét, viselkedését lehet korlátozni Ficsor Lajos A JavaBeans komponens modell JavaBeans / 10
Feltárás s (Introspection( Introspection) Egy Bean környezete (konténere) képes információt szerezni a Bean tulajdonságairól és szolgáltatásairól Ehhez a készítés során elnevezési konvenciókat ("design patterns") kell betartani Egy vizuális fejlesztőeszköz képes arra, hogy a Bean testreszabható tulajdonságait felderítse Erre a célra minden Bean tartalmaz egy BeanInfo interfészt, amely ismeri a konvenciókat A komponens fejlesztője eltérhet a konvencióktól saját BeanInfo interfész definiálásával Ficsor Lajos A JavaBeans komponens modell JavaBeans / 11
Perzisztencia (Persistence) A Bean-ek a JDK szerializációs szolgáltatásait használják erre a célra A vizuális fejlesztőeszközök olyan komponenseket igényelnek, amelyek rendelkeznek perzisztens képességekkel Támogatja a verziókezelés egyszerű formáját Egy Bean soha nem tölt vissza egy régebbi verzió által írt állapotot Egy Bean sohasem írja ki az állapotát egy régebbi verzióval kompatibilis formában A Bean-ek JAR file-ok formájában terjeszthetők Ficsor Lajos A JavaBeans komponens modell JavaBeans / 12
Testreszabás (Customization) Biztosítja, hogy a Bean-ek külső eszközökkel kezelhetők (tulajdonságaik beállíthatók) legyenek A támogatás első szintje, hogy minden Bean rendelkezik property editor osztályokkal Ezek segítségével egy Bean tervezője vizuálisan szerkesztheti a tulajdonságok egy meghatározott részét (például font, szín stb.) Ficsor Lajos A JavaBeans komponens modell JavaBeans / 13
Testreszabás (folyt.) További lehetőséget adnak a Property sheet-ek. Ezek vizuális interfészek, amelyek csoportosítva mutatják a property editor segítségével kezelhető tulajdonságokat. Minden Bean rendelkezik egy beépített Costumizer interfésszel. Ezt saját verzióval implementálva a komponens tervezője tetszőleges tulajdonságot szerkeszthetővé tehet. Ficsor Lajos A JavaBeans komponens modell JavaBeans / 14
Tervezési idejű és s futásidej sidejű Bean-ek ek Egy Bean-nek egy szerkesztőben és egy futó alkalmazásban egyaránt működnie kell. A szerkesztő eszközön belüli működéshez számos többlet funkció szükséges. Design-Time Bean Bean classes Customizer class PropertyEditor class BeanInfo class BeanDescriptor classes Introspector class JAR + (.SER) Bean classes JAR + (.SER) Run-Time Bean Ficsor Lajos A JavaBeans komponens modell JavaBeans / 15
Bean készítésese A Bean egy olyan Java osztály, amely betartja az alábbi követelményeket Rendelkezik argumentum nélküli konstruktorral Implementálja a java.io.serializable interface-t. Betartja az elnevezési konvenciókat (design patterns) Ha a Bean egy vizuális komponens, valamelyik AWT osztályból kell származtatni. Célszerű thread safe módon implementálni, mert nem tudhatjuk előre, milyen módon fog futni Általában eseményekkel is kell foglalkoznia. Ficsor Lajos A JavaBeans komponens modell JavaBeans / 16
Tervezési minták k (Desing( Patterns) A JavaBeans architektúra szabványos elnevezési és típus konvenciókat specifikál a Bean azon metódusai számára, amelyek megmutatják a külvilágnak a Bean tulajdonságait, egyéb metódusait és az eseményeket. A Bean lehetőségeit ezek segítségével lehet kívülről feltárni. A komponens programozója megváltoztathatja ezeket a konvenciókat saját BeanInfo osztály implementálásával Ficsor Lajos A JavaBeans komponens modell JavaBeans / 17
Tervezési minták k (folyt.) Az alábbiakban XXX jelöli a fejlesztő által megadható azonosító-részt A <> zárójelpárban érvényes típusnevek vannak Alapvető konvenciók Egyszerű tulajdonság public <PropertyType> getxxx(); public void setxxx (<PropertyType> value) Ficsor Lajos A JavaBeans komponens modell JavaBeans / 18
Tervezési minták k (folyt.) Boolean tulajdonság public boolean isxxx(); public void setxxx(boolean value); Indexelt tulajdonság public <PropertyType>[] getxxx(); public void setxxx (<PropertyType>[] values) vagy public <PropertyType> getxxx(int index); public void setxxx (int index, <PropertyType> value) Ficsor Lajos A JavaBeans komponens modell JavaBeans / 19
Tervezési minták k (folyt.) Multicast esemény public void add<eventlistenertype> (<EventListenerType> a ) public void remove<eventlistenertype> (<EventListenerType> a ) Unicast esemény public void add<eventlistenertype> (<EventListenerType> a )throws java.util.toomanylistenersexception public void remove<eventlistenertype> (<EventListenerType> a ) Ficsor Lajos A JavaBeans komponens modell JavaBeans / 20
Tervezési minták k (folyt.) Módszerek A szokásos módon megadott public metódusok Ficsor Lajos A JavaBeans komponens modell JavaBeans / 21
Hogyan használhat lható egy Bean? Két módszer Egyszerű osztálynak tekintve, használhatjuk a példányai tulajdonságait elérő és egyéb és módszereit. Egy Bean eseményt generálhat, vagy eseményre figyelhet, azaz résztvevője lehet a Java esemény kezelési modelljének. Ficsor Lajos A JavaBeans komponens modell JavaBeans / 22
Az esemény kezelés Egy Bean lehet esemény forrás (eseményeket generálhat.) Egy Bean lehet esemény figyelő (listener). Minden figyelőt regisztrálni kell az esemény forrásnál. A regisztráció során átadja az eseménykezelője referenciáját az eseményforrásnak A források esemény objektumokat generálnak, és átadják azokat argumentumként a regisztrált figyelők esemény kezelőjének. Minden eseménytípushoz tartozik egy kezelő. Ficsor Lajos A JavaBeans komponens modell JavaBeans / 23
Az esemény kezelés s (folyt.) A folyamat szekvencia diagramja Listener addactionlistener(referencia) Bean Új figyelő regisztrálása actionperformed(objektum) Esemény kezelése removeactionlistener(referencia) Valami történik Esemény objektum létrehozása Figyelő eltávolítása a listáról Ficsor Lajos A JavaBeans komponens modell JavaBeans / 24
Tulajdonságok Egy tulajdonság egy setter/getter metódus párossal implementálódik Ha a páros valamelyike elmarad, csak olvasható vagy csak írható tulajdonságot definiálhatunk. Ficsor Lajos A JavaBeans komponens modell JavaBeans / 25
"Bounded properties" Kötött tt tulajdonágok Ha egy ilyen tulajdonság állapota megváltozik, az ezen tulajdonság változásához regisztrált figyelők eseményt kapnak. Segédosztályok vannak a kötött tulajdonságok létrehozásához és kezeléséhez. Ficsor Lajos A JavaBeans komponens modell JavaBeans / 26
Vétózható tulajdonságok "Constrained properties" A tulajdonság megváltozása előtt a regisztrált figyelők értesítést kapnak egy speciális esemény formájában. A tulajdonság csak akkor változik meg, ha egyetlen figyelő sem vétózta meg a változást. Segédosztályok vannak a vétózható tulajdonságok létrehozásához és kezeléséhez. Ficsor Lajos A JavaBeans komponens modell JavaBeans / 27
Egyszerű Bean példa package zib.hu.fabokzs.bean; import java.io.serializable; public class StrIntBean implements Serializable { // Properties private String strvalue; private int intvalue; Ficsor Lajos A JavaBeans komponens modell JavaBeans / 28
Egyszerű Bean példa (folyt.) // Konstruktorok public StrIntBean() { this.strvalue = new String(); this.intvalue = 0; } // StrIntBean() public StrIntBean(String strvalue, int intvalue) { setstrvalue(strvalue); setintvalue(intvalue); } // StrIntBean(String, int) Ficsor Lajos A JavaBeans komponens modell JavaBeans / 29
// Properties Egyszerű Bean példa (folyt.) public String getstrvalue() { return this.strvalue; } // getstrvalue() public void setstrvalue(string strvalue) { this.strvalue = strvalue; } // setstrvalue(string) Ficsor Lajos A JavaBeans komponens modell JavaBeans / 30
Egyszerű Bean példa (folyt.) public int getintvalue() { return this.intvalue; } // getintvalue() public void setintvalue(int intvalue) { this.intvalue = intvalue; } // setintvalue(int) } // class StrIntBean Ficsor Lajos A JavaBeans komponens modell JavaBeans / 31
Hivatkozások Robert Orfali, Dan Harkey: Client/Server Programming with JAVA and CORBA (2nd Ed.) John Wiley & Sons, Inc, 1998 Sok szerző: Java 2 útikalauz programozóknak 1.3 I. Kötet ELTE TTK Hallgatói Alapítvány, Budapest, 2001. java.sun.com: JavaBeans tutoriál Ficsor Lajos A JavaBeans komponens modell JavaBeans / 32