Komponensek együttműködése web-alkalmazás környezetben
Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT
[email protected]
Komponensek a gyakorlatban A szoftverkomponenseket fejlesztő csoportoknak szüksége van olyan technológiákra, amelyek segítségével a csoportok által fejlesztett komponensek egymáshoz illeszthetők. Köztes komponenseket is használhatnak, amelyek vagy fontosak (security), vagy nem (logging, caching). Bináris illetve „third party” komponensek beépítése (log4j, jndi/ldap) A kommunikációval foglalkozó kódok szétterjednek az alkalmazás forrásában, így csaknem lehetetlen megválni a komponenstől. Hogyan tudjuk a komponensek közötti kommunikációt összefogni? Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
Aspektus-orientált programozás A style of programming that attempts to abstract out features common to many parts of the code beyond simple functional modules and thereby improve the quality of software. ...approaches to allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspectoriented programming.
Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
AspectJ: Fogalmak Egy join point, egy jól meghatározott pont a forrásprogramban. Jelölhet konstruktor, metódust, attribútumokat, osztályokat, stb.
Egy pointcut-tal, join point-ok segítségével eseményeket/feltételeket definiálhatunk. Jelölhet konstruktor-/metódushívást, attribútum értékének elérését, beállítását. Vajon egy osztályban, metódusban vagyunk-e? Vajon egy metódus végrehajtódása alatt vagyunk-e?
Egy advice egy kódrészlet, amely végrehajtódik, ha a pointcutban megadott feltételek teljesülnek. A végrehajtás történhet a pointcut-ban leírt esemény bekövetkezése előtt, után vagy helyett. Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
AspectJ: Join point példák public Connection DriverManager.getConnection(..) (1) public * ResultSet.*(..)
(2)
(1) Publikus, Connection-nel visszatérő, getConnection nevű metódusa a DriverManager osztálynak, tetszőleges formális paraméterlistával. (2) A ResultSet-et implementáló osztályok összes publikus metódusa, tekintet nélkül a nevükre, visszatérési típusukra. Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
AspectJ: Join point példák public void SomeBean.set*(String)
(3)
public int Number+.intValue()
(4)
(3) A SomeBean osztály példányainak összes publikus beállítómetódusai, amelyek egy String paramétert várnak. (4) Az intValue nevű, int-tel visszatérő, publikus metódusa azon objektumoknak, amely a Number típussal helyettesíthetők. Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
AspectJ: Pointcut példák call(public String ResultSet.getString(..))
(1)
execution(public int Number+.intValue())
(2)
(1) A ResultSet interfészt implementáló objektumok getString nevű, String-gel visszatérő, tetszőleges formális paraméterlistával rendelkező metódusainak hívását jelöli. (2) Az előbb említett metódusok végrehajtását jelöli. Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
AspectJ: Pointcut példák pointcut accessBean(Object bean) : (call(public * get*()) || call(public void set*(..))) && target(bean);
Egy accessBean nevű nevesített pointcut-ot definiál, egy bean nevű formális paraméterrel, melynek típusa Object. Olyan pontokban teljesül, ahol vagy a lekérdező vagy a beállító metódusok hívása történik. Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
Alkalmazás adatmanipulációra A kliens és az alkalmazás közötti kommunikáció előtt a GUI validálja az adatokat. hatására a szerverkomponensek megkapják az adatokat. után a kliens visszakaphatja az adatokat, további javítás céljából. Adatmanipulációs utasítások végrehajtása.
Nagyon hasonló kódok jelennek meg! A kód generálás nem segít! Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
Kérési paraméterek 1. interface RequestGetter { public ServletRequest getRequest(); public void setRequest(ServletRequest request); } aspect ParameterGetter { declare parents: Bean implements RequestGetter; private ServletRequest RequestGetter._rq; public ServletRequest RequestGetter.getRequest(){ return _rq; } ... // setRequest hasonló a getRequest-hez Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
Kérési paraméterek 2. ... after(Bean b, HttpServletRequest request): execution(public Bean.new(..)) && this(b) && cflow( execution(public void *.HttpJspBase._jspService( HttpServletRequest, HttpServletResponse) ) && args(request) ){ b.setRequest(request); } ... Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
Kérési paraméterek 3. ... String around(RequestGetter rg): get(String RequestGetter+.parameter*) && this(rg) { String attributeName = thisJoinPointStaticPart.getSignature().getName(); String parameterName = attributeName.substring(9); return rg.getRequest().getParameter(parameterName); } } Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
Kérési paraméterek 4. public class Bean { private String parameterInvoiceId; public void execute(){ ... ResultSet r = statement.executeQuery(“select * from invoice where id = '“ + parameterInvoiceId + “'”); ... } }
Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
További alkalmazások Interfészek automatikus implementálása. Adatmanipulációs kódok automatikus implementálása. add (insert into), mod (update), del (delete from) Jelölni kell, hogy a paraméter az elsődleges kulcs része-e! (A kulcsrészek neve aláhúzással kezdődik.) public void mod_invoice(String _invoiceId, Date createDate){ } update invoice set createDate = ? where invoiceId = ? Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004
Jelenlegi kutatások Az említett stratégiák egy kereskedelmi portálrendszerbe (MythoLogic) történő integrálása növelheti a fejlesztés hatékonyságát. (a forrás 4MB) A metadata eszközrendszer kiaknázása. (JSR-175 Metadata) Komponensek automatikus környzet-detektálása, automatikus adaptáció a környező komponensekhez. Teljesítménytesztekkel és további forráskód elemzésekkel növelhető az említett megoldás hatékonysága.
Richárd Jónás University of Debrecen
[email protected]
Komponensek együttműködése web-alkalmazás környezetben NetworkShop 2004