1 / 27

Problems with EJB 2.1

Problems with EJB 2.1. Deployment Descriptors. Complex Multiple Partly vendor dependent Lack adequate defaults Better graphical tools needed. Verbosity. Need two interfaces to specify one EJB. Remote and local interface Remote and local home interface

nathan
Download Presentation

Problems with EJB 2.1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Problems with EJB 2.1

  2. Deployment Descriptors • Complex • Multiple • Partly vendor dependent • Lack adequate defaults • Better graphical tools needed

  3. Verbosity • Need two interfaces to specify one EJB. • Remote and local interface • Remote and local home interface • Must implement special EJB classes. • Numerous callback methods required. • Even normally-empty callbacks like ejbPostCreate must be specified

  4. EJB Query Language • EJB QL is currently weak. • Strange “object-oriented” syntax • Does not implement full SQL language • Lacks functions and operations • Programmers are forced to resort to JDBC and SQL. • EJB 2.1 lacks vendor-independent object-relational mapping tools.

  5. Testing • Entity beans are abstract classes. • Consequently, they are completely untestable outside the context of the container.

  6. What’s Coming in EJB 3.0 “EJB 3.0 Public Review Draft” is on your CD (in three parts). ”Proposed Final Review Draft” due to be approved in 2006.

  7. Organization of the Specification Documents • “EJB 3.0 Simplified API” • “EJB 3.0 Core Contracts and Requirements” • “Java Persistence API”

  8. EJB 3.0 Overview • Purpose is to reduce complexity of the EJB architecture from the enterprise application developer’s point of view. • Replace deployment descriptors with annotations in the source code (like javadoc comments). • Specify defaults representing the expected behaviors (“configuration by exceptions”). • Backward compatibility with EJB 2.1 (can mix and match). continued

  9. EJB 3.0 Overview • Use of annotations to simplify JNDI lookup mechanisms and environmental dependencies. • Simplification of enterprise bean types. • Eliminate need for EJB component interfaces for session beans. Use plain old Java objects (POJOs) instead. • Eliminate need for home interfaces for session beans. continued

  10. EJB 3.0 Overview • Simplify entity bean persistence. • Object-relational persistence API will work with Hibernate, TopLink and JDO. • Eliminate all required interfaces for entities written to the new persistence API. • Enhancement of EJB QL. • Eliminate the requirement for the implementation of callback interfaces. • Improve ability for testing outside the container continued

  11. Acknowledgement • The following slides are based on code that was kindly provided by Bill Burke, Chief Architect at JBoss. • It will appear in his new O'Reilly book "Enterprise JavaBeans (Fifth Edition)".

  12. Developing an Entity Bean package com.titan.domain; import javax.persistence.*; @Entity @Table(name="CABIN") public class Cabin implements java.io.Serializable{ private int id; private String name; private int deckLevel; private int shipId; private int bedCount; @Id @Column(name="CABIN_ID") public int getId() { return id; } public void setId(int pk) { id = pk; } @Column(name="CABIN_NAME") public String getName() { return name; } Cabin: The Bean Class continued

  13. Developing an Entity Bean continued @Column(name="CABIN_NAME") public String getName() { return name; public void setName(String str) {name = str; } @Column(name="CABIN_DECK_LEVEL") public int getDeckLevel() { return deckLevel; } public void setDeckLevel(int level) { deckLevel = level; } @Column(name="CABIN_SHIP_ID") public int getShipId() { return shipId; } public void setShipId(int sid) { shipId = sid; } @Column(name="CABIN_BED_COUNT") public int getBedCount() { return bedCount; } public void setBedCount(int bed) { bedCount = bed; } }

  14. Developing an Entity Bean • Annotations are objects, for example: • @javax.persistence.Entity specifes a persistent entity managed by an EntityManager service. • @javax.persistence.Table specifies the database table to map to. • @javax.persistence.Column defines a field in the database table • @Id specifies the primary key of a row. • Setters and getters are no longer abstract methods as in EJB 2.1. required

  15. Developing an Entity Bean • Entity bean is a POJO. • Does not extend javax.ejb.EJBObject. • Bean class implements Serializable, therefore: • Entity classes can be used as parameters and return values. • Can be used as data transfer objects between client and server. • Can be persisted in a database.

  16. persistence.xml <persistence> <persistence-unit> <name>titan</name> <jta-data-source>java:/DefaultDS</jta-data-source> </persistence-unit> </persistence>

  17. Developing a Session Bean package com.titan.travelagent; import javax.ejb.Remote; import com.titan.domain.Cabin; @Remote public interface TravelAgentRemote { public void createCabin(Cabin cabin); public Cabin findCabin(int id); } TravelAgentRemote: The Remote Interface

  18. Developing a Session Bean package com.titan.travelagent; import javax.ejb.Stateless; import javax.persistence.*; import com.titan.domain.Cabin; @Stateless public class TravelAgentBean implements TravelAgentRemote{ @PersistenceContext(unitName="titan") private EntityManager manager; public void createCabin(Cabin cabin) { manager.persist(cabin); } public Cabin findCabin(int pKey) { return manager.find(Cabin.class, pKey); } } TravelAgentBean: The Bean Class

  19. Developing a Session Bean: Annotations • @javax.ejb.Remote: as opposed to Local. • @javax.ejb.Stateless: as opposed to Stateful. • @javax.persistence.PersistenceContext: gives access to the EntityManager.

  20. CABIN Table in the Database create table CABIN ( ID int primary key NOT NULL, SHIP_ID int, BED_COUNT int, NAME char(30), DECK_LEVEL int )

  21. Creating a Client Application package com.titan.clients; import com.titan.travelagent.TravelAgentRemote; import com.titan.domain.Cabin; import javax.naming.*; import java.util.Properties; import javax.rmi.PortableRemoteObject; public class Client_1 { public static void main(String [] args) { try { ontext jndiContext = new InitialContext(); // use the jndi properties file Object ref = jndiContext.lookup (TravelAgentRemote.class.getName()); TravelAgentRemote dao = ( TravelAgentRemote)PortableRemoteObject.narrow (ref,TravelAgentRemote.class); continued

  22. Creating a Client Application continued Cabin cabin_1 = new Cabin(); cabin_1.setId(1); cabin_1.setName("Master Suite"); cabin_1.setDeckLevel(1); cabin_1.setShipId(1); cabin_1.setBedCount(3); dao.createCabin(cabin_1); Cabin cabin_2 = dao.findCabin(1); System.out.println(cabin_2.getName()); System.out.println(cabin_2.getDeckLevel()); System.out.println(cabin_2.getShipId()); System.out.println(cabin_2.getBedCount()); } catch (javax.naming.NamingException ne) {ne.printStackTrace();} } }

  23. INSTALL.html

  24. Coming May 1, 2006 “Enterprise JavaBeans 3.0” by Bill Burke and Richard Monson-Haefel, O’Reilly, ISBN 059600978X

More Related