java komponens modellek
Download
Skip this Video
Download Presentation
Java komponens modellek

Loading in 2 Seconds...

play fullscreen
1 / 31

Java komponens modellek - PowerPoint PPT Presentation


  • 144 Views
  • Uploaded on

Java komponens modellek. avagy hány JSR kell egy használható komponens modell bevezetéséhez? Srágli Attila. Áttekintés. Fogalmak Miért kell nekünk komponens modell? A múlt Komponens modellek Komponens modell implementációk Összehasonlítás A jelen A jövő?. Fogalmak – komponens.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Java komponens modellek' - job


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
java komponens modellek

Java komponens modellek

avagy hány JSR kell egy használható komponens modell bevezetéséhez?

Srágli Attila

ttekint s
Áttekintés
  • Fogalmak
  • Miért kell nekünk komponens modell?
  • A múlt
  • Komponens modellek
  • Komponens modell implementációk
  • Összehasonlítás
  • A jelen
  • A jövő?
fogalmak komponens
Fogalmak – komponens

Ahány ház, annyi definíció.

A kedvenceim:

„A component is a unit of composition with contractually specified interfaces and fully context dependencies that can be deployed independently and is subject to third-party composition”

Clemens Szyperski: Component Software: Beyond Object-Oriented Programming, 1998.

„the smallest architecturally relevant building block, a piece of encapsulated application functionality”

Markus Völter

fogalmak komponens4
Fogalmak – komponens
  • Egy komponens tehát explicit módon deklarálja:
    • az általa nyújtott szolgáltatásokat
      • Java megfelelője: implementált interfészek
    • az általa igényelt szolgáltatásokat
      • Java megfelelője: ??
    • a kapcsolódási pontokat (portok) az igényelt szolgáltatások egyedei számára (referencia neve, kardinalitás)
      • Java megfelelője: ??
fogalmak komponens modell
Fogalmak – komponens modell

Definiálja a komponensek

  • struktúráját (Hogyan néz ki egy komponens?):
    • interfészek
    • konfiguráció
    • kompozíció (Hogyan építkezünk belőlük?)
  • viselkedését (Hogyan működnek?):
    • életciklus-kezelés
    • kommunikáció
    • ...

valamilyen formalizmust használva.

fogalmak komponens framework
Fogalmak – komponens framework
  • A komponens modell implementációja
  • Kezeli a komponensek
    • függőségeit
    • életciklusát (telepítés, indítás, leállítás, frissítés, eltávolítás)
    • nem-funkcionális követelményeit (QoS, perzisztencia, naplózás, kommunikáció, biztonság, tranzakciók stb.) -> fw. szolgáltatások.
fogalmak dependency injection di
Fogalmak – Dependency Injection (DI)
  • Tervezési minta
  • Egyéb elnevezése: Inversion of Control (IoC)
  • Adott objektum (szolgáltatás) létrehozását kiveszi a szolgáltatás igénylője (kliens) hatásköréből. A szolgáltatást a komponens konténer hozza létre, majd az arra mutató referenciát megfelelő módon (konstruktor, egyedváltozó, metódus vagy byte-kód beszúrással) átadja a kliensnek.
fogalmak dependency lookup
Fogalmak – Dependency Lookup
  • Tervezési minta
  • Egyéb elnevezései: Service Locator, Object Factory, Component Broker, Component Registry
  • Adott objektum (szolgáltatás) létrehozását kiveszi a szolgáltatás igénylője (kliens) hatásköréből. A szolgáltatást a komponens konténer hozza létre és tárolja (registry), a kliens a konténer API-n keresztül érheti el az arra mutató referenciát (lookup).
mi rt kell nek nk komponens modell
Miért kell nekünk komponens modell?
  • Mert lehetővé teszi
    • a komponens alapú szoftverfejlesztést
    • a komponens formátum szabványosítását, szabványos szolgáltatások kialakítását (COTS)
    • a Java nyelv és VM hiányosságainak pótlását:
      • kód-hordozhatóság (magasabb szintű absztrakció, konténerek között)
      • verziókezelés (JAR-hell)
      • alkalmazás-felügyelet
a m lt
A múlt
  • Kezdetben nem definiáltak komponens modellt
  • Később: Java Beans, EJB 1.x, 2.x, …
  • Problémák:
    • túl specifikusak
    • hiányzó verziókezelés
    • nem alkalmazhatók széles körben (beágyazott eszközök – nagyvállalati felhasználás)
komponens modellek di framework k
Komponens modellek – DI framework-ök
  • Struktúra:
    • POJO/POJI modell (szolgáltatás = osztály [+ interfész])
  • Konfiguráció:
    • Java annotációk és/vagy konfigurációs file stb.
  • Kompozíció:
    • Dependency Injection
  • Életciklus-kezelés:
    • nincs vagy eltérő implementációk
komponens modellek osgi
Komponens modellek - OSGi
  • Struktúra:
    • POJO/POJI modell (szolgáltatás = osztály [+ interfész])
  • Konfiguráció:
    • MANIFEST.INF, XML (pl. Declarative Services, Spring-DM, Extension Registry), opcionálisan Java annotációk (pl. Spring-DM)
  • Kompozíció:
    • Dependency Lookup (BundleContext)
    • Dependency Injection: konstruktor, setter (Spring-DM), egyedváltozó, metódus (iPOJO)
  • Életciklus-kezelés:
    • szabványos (JSR 291)
    • állapotok: installed, resolved, starting, active, stopping, uninstalled
komponens modellek java module system
Komponens modellek – Java Module System
  • Struktúra:
    • POJO/POJI modell (szolgáltatás = osztály [+ interfész])
  • Konfiguráció:
    • MANIFEST.INF, opcionálisan Java annotációk
  • Kompozíció:
    • Dependency Lookup
  • Életciklus-kezelés:
    • szabványos (JSR 277)
    • állapotok: new, preparing, validating, resolved, ready, error
komponens modellek sca
Komponens modellek - SCA
  • Célja elsősorban a technológia-függetlenség és az interoperabilitás.
  • Struktúra:
    • POJO/POJI modell (szolgáltatás = osztály [+ interfész])
  • Konfiguráció:
    • Java annotációk és XML
  • Kompozíció:
    • Dependency Injection (vagy más, a szabvány említi, de nem definiálja)
  • Életciklus-kezelés:
    • a szabvány nem definiálja, implementáció-specifikus
spring programoz si modell
Spring - programozási modell

XML konfiguráció:

<bean id=„service” class=„com.acme.Service” />

<bean id=„consumer” name=„consumer”

class=„com.acme.ServiceConsumer”>

<property name=„service” ref=„service”/>

</bean>

vagy annotációk:

@Component

public class Service {

}

public class ServiceConsumer {

@AutoWired

private Service service;

}

POJO-k:

public class Service {

}

public class ServiceConsumer {

private Service service;

public void setService(Service service) {

this.service = service;

}

}

osgi programoz si modell
OSGi - programozási modell

package com.acme.service;

public class Service {

}

public class ServiceActivator implements BundleActivator {

public void start(BundleContext context) {

Service service = new Service();

context.registerService(Service.class.getName(), service, null);

}

public void stop(BundleContext context) {

}

}

package com.acme.client;

public class ConsumerActivator implements BundleActivator {

public void start(BundleContext context) {

Service service = (Service) context

.getService(Service.class.getName());

}

public void stop(BundleContext context) {

}

}

Service bundle - MANIFEST.INF

Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: Service Plug-in

Bundle-SymbolicName: Service

Bundle-Version: 1.0.0

Bundle-Activator: com.acme.service.ServiceActivator

Export-Package: com.acme.service

ServiceConsumer bundle - MANIFEST.INF

Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: ServiceConsumer Plug-in

Bundle-SymbolicName: ServiceConsumer

Bundle-Version: 1.0.0

Bundle-Activator: com.acme.client.ConsumerActivator

Import-Package: com.acme.service

sca programoz si modell
SCA – programozási modell

package services.account;

@Remotable

public interface AccountService{

public AccountReport getAccountReport(String customerID);

}

package services.account;

public class AccountServiceImpl implements AccountService {

@Property

private String currency = "USD";

@Reference

private AccountDataService accountDataService;

public AccountReport getAccountReport(String customerID) {

}

}

sca programoz si modell21
SCA – programozási modell

XML konfiguráció:

<componentType xmlns=http://www.osoa.org/xmlns/sca/1.0

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<service name="AccountService">

<interface.java interface="services.account.AccountService"/>

</service>

<reference name="accountDataService">

<interface.java interface="services.accountdata.AccountDataService"/>

</reference>

<property name="currency" type="xsd:string">USD</property>

</componentType>

sszehasonl t s
Összehasonlítás

Szempontok, melyek szerint differenciálni lehet:

  • Hordozhatóság
  • Dinamikus modulkezelés (betöltés, eltávolítás, frissítés)
  • Framework szolgáltatások
  • Verziókezelés
  • Elterjedtség, szabvány
  • … javaslatok?
hordozhat s g
Hordozhatóság
  • OSGi:
    • beágyazott eszközök (otthon-automatizálás, járműipar, navigációs eszközök stb.), ME (JSR 232), SE (JSR 291), EE (pl. BEA)
  • DI framework-ök
    • SE, EE
  • Java Module System (JSR 277)
    • tervezés alatt, leginkább SE
  • SCA
    • EE
    • több implementáció (SpringSource, IBM, Oracle stb.)
dinamikus modulkezel s
Dinamikus modulkezelés
  • Spring, Guice, JSR 277: statikus, a framework/alkalmazás indításakor vagy alkalmazás által kezelt módon
  • OSGi: teljesen dinamikus (futás közben is), a framework alapszolgáltatása
  • SCA: implementáció-specifikus
framework szolg ltat sok
Framework szolgáltatások
  • DI framework-ök:
    • egyedi megoldások
  • OSGi:
    • szabványban rögzítve (JSR 232, JSR 291)
  • Java Module System:
    • a szabvány nem tartalmazza, más JSR-ek (pl. JSR 294) specifikálják majd
  • SCA:
    • nem része a szabványnak, implementáció-specifikus
verzi kezel s
Verziókezelés
  • Spring, Guice: nincs
  • OSGi, Java Module System: szabványos, modul szintű
  • SCA: nincs specifikálva, más absztrakciós szint (fw-implementáció)
elterjedts g szabv ny
Elterjedtség, szabvány
  • Spring:
    • nagy felhasználói bázis (SE/EE)
    • első verzió: 2002
    • kvázi szabvány (EE)
  • Guice:
    • terjedőben (SE/EE)
    • első verzió: 2007
  • OSGi:
    • viszonylag nagy felhasználói bázis (beágyazott/ME, SE, EE)
    • első implementáció: 2000
    • szabványosított: JSR 232 (ME), JSR 291 (SE)
  • Java Module System:
    • csak szabványtervezet (JSR 277, early draft)
    • nincs publikus implementáció
  • SCA:
    • több implementáció (leginkább EE)
    • OSOA szabvány, 2005 (v0.9, az első publikus specifikáció), 2007 (v1.0)
a jelen
A jelen
  • Nagyon hasonló megoldások
  • Spring, OSGi gyors térhódítása
    • együttműködés: Spring Dynamic Modules
  • Guice terjedése
    • együttműködés: Guice-OSGi, Spring
  • Java Module System szabványosítás alatt, publikus implementáció nincs
    • együttműködés: OSGi (javaslat)
  • Egyre több SCA implementáció
  • Szabványháború (JSR 291, JSR 277)
a j v
A jövő?
  • A komponens-alapú alkalmazások egyértelmű terjedése
  • Szabványosítás (JCP?) vagy kvázi-szabványok?
    • Java 7: JSR 277 vagy OSGi ?
  • Együttműködő implementációk (pl. SCA) vagy Universal Middleware?
hivatkoz sok
Hivatkozások
  • Google Guice (http://code.google.com/p/google-guice/)
  • Guice-OSGi (http://wiki.ops4j.org/confluence/display/ops4j/Guice-OSGi)
  • Java Module System (http://www.jcp.org/en/jsr/detail?id=277)
  • OSGi (http://www.osgi.org/)
  • Service Component Architecture (SCA) (http://www.osoa.org/display/Main/Service+Component+Architecture+Home)
  • Spring (http://www.springframework.org/)
  • Spring Dynamic Modules (http://www.springframework.org/osgi/)
ad