In vergelijking met EJB 2.1, vereenvoudigt EJB 3.0 het proces van het maken van Enterprise JavaBean-toepassingen.
Het onderliggende concept van de EJB 3.0-specificatie is gericht op het programmeermodel voor plain old Java™ object (POJO), dat Java-annotaties gebruikt om informatie vast te leggen wa arvoor vroeger ingebruiknamedescriptors werden gebruikt. Ingebruiknamedescriptors zijn nu in de meeste gevallen optioneel. Veelvuldig gebruik van standaardwaarden houdt ook in dat u minder ondersteunende code hoeft te schrijven en te onderhouden. Het programmeren wordt door het maken en gebruiken van EJB 3.0-componenten aanzienlijk vereenvoudigd.
In EJB 2.1 werd ondersteuning voor webservices toegevoegd, de implementatie van sessiebeans gewijzigd, het aanroepen van enterprisebeans gewijzigd en een XML-schema geïntroduceerd ter vervanging van de DTD die ingebruiknamedescriptor ejb-jar.xml definieert. In EJB 3.0 wordt de volgende stap gezet. EJB 3.0 introduceert een lichtgewicht persistentiemechanisme voor entiteitenbeans door middel van de Java Persistence API. Deze entiteiten zijn op POJO's gebaseerd, kunnen buiten een EJB-container worden uitgevoerd en hoeven geen interfaces of EJB-code te bevatten. Ook zijn voor sessiebeans geen specifieke componentinterfaces voor EJB meer vereist.
Vergelijking van EJB 2.1-klasse plus ingebruiknamedescriptorbestand met gelijkwaardige EJB 3.0-klasse
De voorbeelden in tabel 1 zijn functioneel gelijkwaardig:
| 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();
...
}
...
}
|
Ingebruiknamedescriptor <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>
|