EJB 2.1 -versioon verrattuna EJB 3.0 yksinkertaistaa Enterprise JavaBean -sovellusten luontiprosessia.
EJB 3.0 -määrityksen keskeinen perusta on Plain Old Java Object (POJO) -ohjelmointimalli, jossa Java-huomautuksiin tallennetaan tiedot, jotka aiemmin sisältyivät käyttöönoton kuvaajiin. Käyttöönoton kuvaajat ovat nyt useimmissa tapauksissa valinnaisia. Oletusarvojen runsas käyttö tarkoittaa myös, että tukikoodia tarvitsee kirjoittaa ja ylläpitää aiempaa vähemmän. Tämä yksinkertaistaa ohjelmointia huomattavasti EJB 3.0 -komponentteja luotaessa ja käytettäessä.
EJB 2.1 -versiossa lisättiin Web-palvelujen tuki, tehtiin muutoksia istunnon bean-komponenttien toteutukseen ja siihen, miten bean-yrityskomponentteja kutsutaan, sekä otettiin käyttöön uusi XML-skeema korvaamaan käyttöönoton kuvaajan ejb-jar.xml määrittävä DTD-tiedosto. EJB 3.0 -versiossa on tapahtunut lisää kehitystä. EJB 3.0 -versiossa on otettu käyttöön pelkistetty bean-oliokomponenttien pysyvyysmekanismi Java Persistence -ohjelmointirajapinnan kautta. Nämä oliot ovat POJO-pohjaisia, niitä voidaan ajaa EJB-säilön ulkopuolella, eikä niissä tarvita rajapintoja tai EJB-koodia. Myöskään istunnon bean-komponentit eivät enää edellytä EJB-kohtaisia komponenttirajapintoja.
EJB 2.1 -luokan ja käyttöönoton kuvaajatiedoston vertaaminen vastaavaan EJB 3.0 -luokkaan
Taulukon 1 esimerkit vastaavat toiminnallisesti toisiaan:
| EJB 2.1 | EJB 3.0 |
|---|---|
Java-luokka public class AccountBean
implements javax.ejb.SessionBean {
SessionContext ctx;
DataSource accountDB;
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}
public void ejbCreate() {
accountDB = (DataSource)ctx.lookup(
"jdbc/accountDB");
}
public void ejbActivate() { }
public void ejbPassivate() { }
public void ejbRemove() { }
public void setAccountDeposit(int empId,
double deposit) {
...
Connection conn = accountDB.getConnection();
...
}
...
}
|
Java-luokka @Stateless
public class AccountBean implements Account
{
@Resource private DataSource accountDB;
public void setAccountDeposit(int customerId,
double deposit) {
...
Connection conn = accountDB.getConnection();
...
}
...
}
|
Käyttöönoton kuvaaja <session>
<ejb-name>AccountBean</ejb-name>
<local-home>AccountHome</local-home>
<local>Account</local>
<ejb-class>com.example.AccountBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<resource-ref>
<res-ref-name>jdbc/accountDB</res-ref-name>
<res-ref-type>javax.sql.DataSource</res-ref-type>
<res-auth>Container</res-auth>
</resource-ref>
</session>
...
<assembly-descriptor>...</assembly-descriptor>
|