<?xml version="1.0" encoding="utf-8"?> | |
<!--Arbortext, Inc., 1988-2006, v.4002--> | |
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" | |
"concept.dtd"> | |
<concept id="compareejb2" xml:lang="en-us"> | |
<title>Differences between EJB 3.0 and EJB 2.1</title> | |
<titlealts> | |
<navtitle>EJB 3.0 versus EJB 2.1</navtitle> | |
<searchtitle>Enterprise JavaBean version differences between EJB 3.0 and EJB | |
2.1</searchtitle> | |
</titlealts> | |
<shortdesc>Compared to EJB 2.1, EJB 3.0 simplifies the process of creating | |
Enterprise JavaBean applications.</shortdesc> | |
<prolog><metadata> | |
<keywords><indexterm>Enterprise JavaBeans 3.0</indexterm></keywords> | |
</metadata></prolog> | |
<conbody> | |
<p>The underlying concept of the EJB 3.0 specification centers on a plain | |
old <tm tmclass="special" tmowner="Sun Microsystems, Inc." tmtype="tm" trademark="Java">Java</tm> object | |
(POJO) programming model that uses <tm tmclass="special" tmowner="Sun Microsystems, Inc." | |
tmtype="tm" trademark="Java">Java</tm> annotations to capture information | |
that deployment descriptors used to contain. Deployment descriptors are now | |
optional in most cases. Using default values liberally also means that you | |
need to write and maintain less supporting code. This greatly simplifies the | |
programming experience in creating and using EJB 3.0 components.</p> | |
<p>While EJB 2.1 added support for Web services, changes in the implementation | |
of session beans, changes in how enterprise beans are invoked and a new XML | |
schema to replace the DTD that defined ejb-jar.xml deployment descriptor, | |
EJB 3.0 has taken this one step further. EJB 3.0 has introduced a lightweight | |
entity bean persistence mechanism through the <tm tmclass="special" tmowner="Sun Microsystems, Inc." | |
tmtype="tm" trademark="Java">Java</tm> Persistence API. These entities are | |
POJO based and can then be run outside of an EJB container and do not require | |
any interfaces or EJB code in them. Similarly, session beans also no longer | |
require EJB-specific component interfaces either.</p> | |
<p><b>Comparison of EJB 2.1 class plus Deployment Descriptor file with equivalent | |
EJB 3.0 class</b></p> | |
<p>The examples in Table 1 are functionally equivalent:</p> | |
<table><title>Comparison of EJB 2.1 and EJB 3.0</title> | |
<tgroup cols="2"><colspec colname="col1"/><colspec colname="col2"/> | |
<thead> | |
<row valign="bottom"> | |
<entry colname="col1">EJB 2.1 </entry> | |
<entry colname="col2">EJB 3.0</entry> | |
</row> | |
</thead> | |
<tbody> | |
<row> | |
<entry colname="col1"><p><b>Java Class</b></p><codeblock>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(); | |
... | |
} | |
... | |
}</codeblock></entry> | |
<entry colname="col2"><p><b>Java Class</b></p><codeblock>@Stateless | |
public class AccountBean implements Account | |
{ | |
@Resource private DataSource accountDB; | |
public void setAccountDeposit(int customerId, | |
double deposit) { | |
... | |
Connection conn = accountDB.getConnection(); | |
... | |
} | |
... | |
}</codeblock></entry> | |
</row> | |
<row> | |
<entry colname="col1"><p><b>Deployment Descriptor</b></p><codeblock><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> | |
</codeblock></entry> | |
<entry colname="col2"></entry> | |
</row> | |
</tbody> | |
</tgroup> | |
</table> | |
<p>The following four facets of <tm tmclass="special" tmowner="Sun Microsystems, Inc." | |
tmtype="tm" trademark="Java">Java</tm> EE 5 contributed the most to the changes | |
in EJB 3.0 from EJB 2.1:<ul> | |
<li>Plain old <tm tmclass="special" tmowner="Sun Microsystems, Inc." tmtype="tm" | |
trademark="Java">Java</tm> objects</li> | |
<li>Annotations</li> | |
<li>Implied values</li> | |
<li>Persistence</li> | |
</ul></p> | |
</conbody> | |
</concept> |