A keretrendszer két forrásból szerez információkat a komponensek egymás közötti függéseir?l,
egyrészt van az úgy nevezett Registry,
amiben le van irva, hogy egy adott osztályból való komponenst hogyan kell inicalizálni, milyen más komponensekt?l függ.
Illetve vannak az egyes példányok konfigurációját leiró Repository, ami alapján a rendszer eldönti, hogy milyen
sorrendben kell létrehozni az egyes objektumokat, milyen settereket kell meghivni, valamint milyen konfigurációt kapjanak az egyes példányok.
Szóismétlés...
A bigyo müködtetéséhez értelemszerüen létre kell hozni el?ször a megfelel? Repository-t, valamint a tényleges futtatáshoz kellenek az egyes
példányok konfigurációjának leirása. Szerencsére az egész egyszerübb mint megcsinálni, mint elmagyarázni :).
A repository-t (jelenleg) egyetlen xml irja le, lehet kézzel szerkeszteni, de egyszerübb generálni megfelel? javadoc-al ellátott osztályokból.
Ami a példából majd rögtön látszódni is fog
Az els? komponensük konfigurációja álljon a következ? javabean -b?l:
public class MyConfig { List words; int number; String comment; ....mindenféle setter/getter }
S akkor az els? komponensünk legyen:
/** * @bigyo-component my-component */ public class MyComponent { private MyConfig config; /** * @bigyo-constructor */ public MyComponent(MyConfig config) { this.config = config; } /** * @bigyo-start */ public void init() { System.out.println("Component inited!"); } public void addToList(String line) { List result = config.getWords(); if (result==null) { result = new ArrayList(); } result.add(line); config.setWords(result); config.setNumber( config.getNumber() + line.length() ); System.out.println(config.getComment() + ':'+ config.getNumber()); } }
Most már csak pár példányt kell definiálni, ahhoz, hogy élvezhessük a bigyo el?nyeit :)
Az egyes objektumokat egy-egy xml irja le, amiket egy könyvtárba kell elhelyezni, s onnan fogja beolvasni.
Fontos:az xml fájloknak .conf.xml kiterjesztéssel kell rendelkezniük, a többi tipust nem veszi figyelembe!
<config classAlias="my-component" instanceName="myComp-0"> <configBean class-name="my-component" number="15" comment="My First Component" > <words> <string>elso</string> <string>masodik</string> </words> </configBean> </config>
Ezután csak az utolsó lépés van hátra: müködésre birni az egészet a következ? kódrészlettel:
import net.sf.bigyo.container.Main; . . . Main container = new Main("config/registry.xml"); // ennek magyarázata az ikszedik részben lesz :) container.setProfileChecker(new AllProfile()); // a config/components egy könyvtár container.loadConfigurations(new File("config/components")); container.startup(); . . . MyComponent myComp = (MyComponent) container.getComponent("myComp-0"); myComp.addToList("hello world!"); . . . container.stop();
Szeretnénk azt, ha minden 53. másodpercben a containerünk ellenörizné, hogy nem történt e valami változás a fájlrendszerben?
Mi sem egyszerübb, adjuk hozzá a következ? sorokat az inicalizáláshoz:
container.getRepository().setConfigurationStrategy(new PreGeneratedWrapperStrategy()); Thread t = new Thread(container.new ConfigurationChecker("src/demo-components",53000), "Configuration Checker"); t.setDaemon(true); t.start();