Sammenliknet med EJB 2.1 forenkler EJB 3.0 opprettingen av Enterprise JavaBean-applikasjoner.
Det underliggende konseptet av EJB 3.0-spesifikasjonen sentrerer seg om programmeringsmetoden for Plain old Java-objekter (POJO), som bruker Java-annotasjoner til å registrere informasjon som distribusjonsdeskriptorer brukte å inneholde. Distribusjonsdeskriptorer er nå valgfrie i de fleste tilfeller. En liberal bruk av standardverdier betyr også at du må skrive og opprettholde mindre mengder av støttende kode. Dette er en stor forenkling av programmeringen når det skal opprettes og brukes EJB 3.0-komponenter.
Mens EJB 2.1 la til støtte for Web-tjenester, aktiveres endringer i implementeringen av sesjonsbønner, endringer i aktivering av Enterprise-bønner og et nytt XML-skjema som erstatter DTDen som definerte distribusjonsdeskriptoren ejb-jar.xml, har EJB 3.0 tatt dette et trinn videre. EJB 3.0 har introdusert en enkel persistensmekanisme for entitetsbønner ved hjelp av persistens-APIet for Java. Disse entitetene er POJO-baserte, og kan kjøres utenfor en EJB-container, og de må ikke inneholde noen grensesnitt eller EJB-kode. På en liknende måte krever heller ikke sesjonsbønner lenger EJB-spesifikke komponentgrensesnitt.
Sammenlikning av EJB 2.1-klasse pluss distribusjonsdeskriptorfil med tilsvarende EJB 3.0-klasse
Eksemplene i tabell 1 er funksjonelt ekvivalente:
| EJB 2.1 | EJB 3.0 |
|---|---|
Java Class 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 Class @Stateless
public class AccountBean implements Account
{
@Resource private DataSource accountDB;
public void setAccountDeposit(int customerId,
double deposit) {
...
Connection conn = accountDB.getConnection();
...
}
...
}
|
Distribusjonsdeskriptor <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>
|