A JavaBeans komponens modell Áttekinté 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
Tartalom Mi is az a Bean? 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? 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? 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ó programozó szempontjá szempontjából BeanInfo
Methods
Customizer
Events
Properties
Ficsor Lajos
A JavaBeans komponens modell
JavaBeans / 5
A JDK mint komponens framework framework 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
ORB Services
Ficsor Lajos
Customizer
Own Beans A JavaBeans komponens modell
JavaBeans / 7
Megjelení Megjelenítés (Visual (Visual Presentation) 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é 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á 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á Feltárá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) 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á Testreszabás (Customization) 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á 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é Tervezési idejű idejű és futá futásidejű sidejű BeanBean-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
Ficsor Lajos
Bean classes Customizer class PropertyEditor class BeanInfo class BeanDescriptor classes Introspector class JAR + (.SER) A JavaBeans komponens modell
Bean classes JAR + (.SER) Run-Time Bean
JavaBeans / 15
Bean készí szítése 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é Tervezési mintá minták (Desing (Desing Patterns) 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é Tervezési mintá mintá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
getXXX(); public void setXXX ( value)
Ficsor Lajos
A JavaBeans komponens modell
JavaBeans / 18
Tervezé Tervezési mintá minták (folyt.) Boolean tulajdonság public boolean isXXX(); public void setXXX(boolean value);
Indexelt tulajdonság public [] getXXX(); public void setXXX ([] values) vagy public getXXX(int index); public void setXXX (int index, value) Ficsor Lajos
A JavaBeans komponens modell
JavaBeans / 19
Tervezé Tervezési mintá mintá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é Tervezési mintá minták (folyt.) Módszerek A szokásos módon megadott public metódusok
Ficsor Lajos
A JavaBeans komponens modell
JavaBeans / 21
Hogyan haszná használható lható egy Bean? 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é esemény kezelé 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é esemény kezelé kezelés (folyt.) A folyamat szekvencia diagramja Listener
addActionListener(referencia)
Bean Új figyelő regisztrálása Valami történik
actionPerformed(objektum)
Esemény objektum létrehozása
Esemény kezelése removeActionListener(referencia)
Ficsor Lajos
A JavaBeans komponens modell
Figyelő eltávolítása a listáról JavaBeans / 24
Tulajdonsá 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
Kötött tulajdoná tulajdonágok "Bounded properties" 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ó zható tulajdonsá 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
Egysze 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
Egysze 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
Egysze Egyszerű Bean példa (folyt.) // Properties 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
Egysze 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á 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