OSGi és barátai Modul alapú programozás Java környezetben avagy Hová tűnt a sok kereszthivatkozás? Biczók László
Miért pont a Blues?
Blues – a sikertörténet Gyökerek 19. század – afrikai gyökerek Déli államok - ültetvények Rabszolgák, ex-rabszolgák, leszármazottaik, stb. Spirituálék, balladák Vallási ujjongások (ring shout) Kántálások (chant) Munkadalok Kiáltások (field holler) Magány, szolgasors, kilátástalanság, önsajnálat Blues – melankólia, szomorúság
Blues – a sikertörténet Gyermekkor Mississippi Delta New Orleanshoz közel Jazz és Blues egymásra hatása A Blues nem terjedt messzire az 1930-40-es évekig Viszont utána ...
Blues – a sikertörténet A trónkövetelő Városi környezetbe kerülve gyorsan terjedt Megjelenik az elektromos gitár A blues szerteágazik Delta blues Chicago blues Texas blues Jazz blues Kansas City blues
A blues átkel a tengeren British blues, stb.
Blues – a sikertörténet A könnyűzene egyik alapja Rock and roll Rock Pop Heavy metal Stb.
A blues ott van mindenhol
Blues – a sikertörténet Mi a siker oka? Szubjektív vélemény Jól áttekinthető („átérezhető”) struktúra 12 ütemes blues 3 alap akkord az alap skála 1., 4. és 5. hangjaira (dó, fá, szó) épülő akkordok (pl. E, A, H)
Pentaton hangsor Mindhárom akkordhoz illeszkedik Dúr és moll formában is
Blues – a sikertörténet Peter Green's Fleetwood Mac 1968 I Loved Another Women Moll blues
Blues – Modul alapú programozás? Mi köze a két dolognak egymáshoz? A Blues sikerének okai tanulságosak lehetnek a szoftverfejlesztés terén is Jól áttekinthető struktúra Egységes folyamatkezelés
A probléma felvetése Mi is a gond a szoftverfejlesztéssel? Komplex kapcsolatok kódon belül Meglévő kód újrahasznosítása nehézkes, függőségek miatt bonyolult Módosítások mellékhatásait nehéz átlátni Tesztelés bonyolult
Megoldás keresése Struktúrált programozás, objektum orientált programozás, stb. Vagy: Önálló modulok, mint funkcionális egységek OSGi Neat
Megoldás keresése Miért jó a modul alapú programozás? A funkciók tesztelése modulonként végezhető Modulon belüli változtatások kevéssé érintenek más modulokat Modulok közötti interfészek csökkentik a „keresztbehivatkozások” számát Modulok verziózhatók ...
OSGi Dinamikus modul rendszer Java-hoz OSGi szövetség (www.osgi.org) OSGi szabvány – komponens alapú Közös problémák megoldására Integráció Verziózás Életciklus
OSGi
OSGi - architektúra
OSGi Bundle – jar, OSGi információ manifest-ben Services – Bundle-k dinamikus összekapcsolása (publish-find-bind) Service registry – Service management API Life-cycle – Bundle életciklus management (install, start, stop, update, uninstall) Modules – Bundle export/import szabályok (függőségek), láthatóság, verziózás
OSGi Security Execution environment Az egyes környezeteken elérhető osztályokat, metódusokat, konfigurációkat definiálja OSGi/Minimum-1.0 OSGI/Minimum-1.1 JRE-1.1 J2SE 1.2 – J2SE 1.6 Stb.
OSGi - Bundle Manifest.MF a jar-ban • Identifikáció: – Bundle-SymbolicName: org.eclipse.equinox.registry – Bundle-Version: 3.2.100.v20060918 – Bundle-Name: Eclipse Extension Registry – Bundle-Vendor: Eclipse.org • ClassPath: – Bundle-ClassPath: ., someOtherJar.jar • Életciklus: – Bundle-Activator: org.eclipse.core.internal.registry.osgi.Activator • Függőségek: – Import-Package: javax.xml.parsers, – org.xml.sax, – org.osgi.framework;version=1.3 – Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.2.0,4.0.0)" – Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3 • Kiajánlás (export) – Export-Package: org.eclipse.equinox.registry
OSGi - Modulok Indíthatók, leállíthatók (Bundle-Activator) A futó bundle-k szolgáltatásai kiajánlásra kerülnek
OSGi – Class loading Minden Bundle egy JVM-en belül fut Minden Bundle-nek saját class loader-e van A többi Bundle-tól függetlenül tölthet be jar-okat Különböző Bundle-k akár jar-ok különböző verzióit is használhatják Kód újrafelhasználást segíti
OSGi - életciklus
OSGi – Standard Services □
□
Logging – Fogadja a log-okat és továbbítja azoknak a bundle-oknak, amik feliratkoztak log információkért Configuration Admin bundle-kat
- Az operátorok ezen keresztül konfigurálhatják a
□
Device Access - Plug and Play – automatikus device felismerés és kapcsolás
□
User Admin
- Authentikáció, jogosultságkezelés
□
IO Connector
- Új protokoll sémákat kezelhetnek a bundle-k ezen keresztül
□
Preferences - Properties helyett
□
Component Runtime
□
Deployment Admin - Szabványos hozzáférés a deployment agent-hez
□
Event Admin
□
- a bundle függőségek XML alapú leírása
- Publish-subscribe inter bundle kommunikáció
Application Admin kezelését
- Egyszerűsíti az egyidejűleg elérhető alkalmazások
OSGi – Hol használják Eclipse Equinox – Open source OSGi implementáció (www.eclipse.org/equinox) Knopflerfish – Open source OSGi implementáció (www.knopflerfish.org) Oracle Weblogic 10.3 IBM WebSphere 6.1 JbossOSGi (1.0.0.Beta8) ...
Modul alapú programozás - Neat IQSYS fejlesztés - még az OSGi előtt Telco környezetben ~300.000 tr/nap Alap koncepció Funkcionális modulok Modul kommunikáció üzenet alapon Alkalmazás logika szkriptekben Alkalmazásszerver környezetben és önálló Java alkalmazásként is működjön
Modul alapú programozás - Neat Java Plugin Framework (jpf.sourceforge.net) Open source „Bundle” management framework Eclipse 2.x plugin koncepció alapján készült Hierarchikus plugin struktúra Minden plugin saját class loader-rel rendelkezik plugin.xml Java osztály export/import Verzió kezelés Class-path
Modul alapú programozás - Neat App1
WebService I/F
App2
HTTPS I/F
App3
Proxy
Provisioning Scripts
Gui
Browser
Acl Logging
Msg Broker
DB I/F
Timer Notification
DB NE1 I/F
NE1
NE2 I/F
NEx I/F
NE2
NEx
SMTP
Modul alapú programozás Mikor találkozunk vele? Derek and the Dominos 1970 Layla And Other Assorted Love Songs Eric Clapton, Bobby Whitlock - Anyday Előadó: Susan Tedeschi & Derek Trucks Band, Crossroads Guitar Festival 2007
[email protected]