I forhold til EJB 2.1 forenkler EJB 3.0 den måde, Enterprise JavaBean-programmer udvikles på.
Det underliggende princip for EJB 3.0-specifikationen er baseret på POJO-programmeringsmodellen (Plain Old Java™ Object), der bruger Java-annotationer til at samle oplysninger, som tidligere var indeholdt i distributionsdeskriptorer. Distributionsdeskriptorer er nu valgfri i de fleste tilfælde. Udbredt brug af standardværdier betyder også, at der skal skrives og vedligeholdes mindre støttekode. Det gør programmeringen langt enklere ved oprettelse og brug af EJB 3.0-komponenter.
Hvor EJB 2.1 tilføjede understøttelse af webserviceprogrammer, ændring af implementeringen af sessions-beans, ændring af den måde, Enterprise-beans startes på, og et nyt XML-skema, der erstattede den DTD, som definerede ejb-jar.xml-distributionsdeskriptoren, går EJB 3.0 et skridt videre. EJB 3.0 indfører en simpel mekanisme til persistens for entitets-beans via Java Persistence-API'et. Disse entiteter er POJO-baserede (Plain Old Java Object) og kan udføres uden for et EJB-opbevaringssted, og de skal ikke indeholde grænseflader eller EJB-kode. På tilsvarende vis behøver sessions-beans ikke længere EJB-specifikke komponentgrænseflader.
Sammenligning af EJB 2.1-klasse plus distributionsdeskriptorfil med tilsvarende EJB 3.0-klasse
Eksemplerne i tabel 1 svarer funktionsmæssigt til hinanden:
| EJB 2.1 | EJB 3.0 |
|---|---|
Java-klasse 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-klasse @Stateless
public class AccountBean implements Account
{
@Resource private DataSource accountDB;
public void setAccountDeposit(int customerId,
double deposit) {
...
Connection conn = accountDB.getConnection();
...
}
...
}
|
Distributionsdeskriptor <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>
|