| <?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> |