Duben 21st, 2008Informace o WebBeans
O víkendu jsem shlédl video, ve kterém Gavin King přednášel o WebBeans. Z daného videa mám vcelku dobrý pocit a pokusím se zjednodušeně sepsat, co v přednášce bylo a jak asi bude vypadat psaní takových Web Beans.
Web Beans jsou novou specifikací, která se objeví v Java EE 6. Mezi hlavní účel patří zjednodušení vývoje webových aplikací. Samotné Web Beans jsou inspirovány (kopie) webového frameworku Seam. Jelikož je autorem jeden a tentýž člověk (Gavin King), je vcelku jasné, že lidé, kteří znají Seam budou na Web Beans přecházet stejně jednoduše jako třeba v případě Hibernate → JPA.
Takže, co například Web Beans poskytují a nabízejí:- možnost psát komponenty jako Stateful EJB, které se anotací vystaví jako Web Beans se všemi vlastnostmi Stateful EJB
- dependency injection, jednoduché vstříknutí do JSF stránek; tak jako v Seamu
- konverzace
- ovládání persistence context, která může např. řešit lazy loading
- integrace s JSF, Servlety či JPA
- JSF backing beana může být vystavena jako Web Beana
- atd.
public class Komponenta {
public String pozdrav(String jmeno) {
return "Ahoj " + jmeno;
}
}
Dependency Injection
Při psaní definování závislosti mezi jednotlivými komponenty můžeme použít několik možností:public class Printer {
@Current Komponenta komponenta;
public void pozdrav() {
System.out.println(komponenta.pozdrav(„Ales“));
}
}
public class Printer {
private Komponenta komponenta;
public Printer(Komponenta komponenta) {
this.komponenta = komponenta;
}
public void pozdrav() {
System.out.println(komponenta.pozdrav(„Ales“));
}
}
public class Printer {
private Komponenta komponenta;
@Initializer
initKomponent(Komponenta komponenta) {
this.komponenta = komponenta;
}
}
Další věcí, která stojí za zmínku je definování „binding type“. Jde o to, že mohu vzít komponentu, tu podědit a při stríknutí závislosti chtít podědenou komponentu. No raději to předvedu :)
Definice vlastniho „binding type“:@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER}}
public @interface Casual{}
@Component
public class Cau extends Komponenta {
public String pozdrav(String jmeno) {
return "cau " + jmeno;
}
}
public class Printer {
@Casual Komponenta komponenta;
public void pozdrav() {
System.out.println(komponenta.pozdrav(„Ales“));
}
}
Věcí, které Gavin King představil je opravdu hodně. Já zde ukážu poslední věc, která je jistě neméně zajímavá.
Nazval bych to „zástupnými anotacemi“. Jak jsem na začátku psal, Web Beans jsou řízeny pomocí anotací, což ovšem může vyvolat určité rozpaky ve chvílích, kdy samotná Web Beana bude obsahovat hromadu anotací, které se často opakují.
Představme si, že máme takovouto Web Beanu: Výčet anotací může být i delší, což mě trochu děsí :)Je však možné použít následující:@Transactional
@Named
@Production
@Stereotype
@Retention(RUNTIME)
@Target(TYPE)
public @interface Action {}
Alespoň že tak :)
Všem, kteří se alespoň trochu zajímají o nové specifikace v oblasti J2EE by si měli dané video prohlédnout. Já osobně jsem si alespoň udělal lepší obrázek o tom, jak vlastně WebBeans budou vypadat.
Zatím musím uznat, že jsem nadmíru spokojen. Pokud bude vše tak, jak Gavin King ukazuje, asi pošlu jeho Seam do věčných lovisť :) Nenarazil jsem v podstatě na nic podstatného, co by Seam měl a WebBeans nikoli. Zatím to vypadá na pravý opak.
Duben 22nd, 2008 at 13.32
Ten preklad injection je opravdu hrozny… Jinak pekny clanek
Duben 28th, 2008 at 11.14
neni binding type obslehnute z google guice? :)
Duben 28th, 2008 at 15.12
Ano je :)
Dokonce i nakonci jako studijni material je prave uveden Google Guice, z ktereho se brala inspirace, stejne jako ze zminovaneho Seamu, z ktereho vychazi cely koncept.
Leden 9th, 2009 at 14.49
[…] se zabývat úvodem, radši se podívejte do originální dokumentace nebo sem (česky). Radši napíšu jen co mě zaujalo. No nejvíc asi to, že se díky WebBeans mohou stát EJB i JSF […]