EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session Façade Design Pattern EJB Test Client Seminar Session Bean Session Façade Design Pattern Session Bean EJB Session Bean( 1) Session Bean Entity Beans Beans Session Bean MVC Controller Session Bean Session Bean Session
Session Bean javax.ejb.sessionbean package Session Bean Stateless Session Bean Stateful Session Bean Bean Session Bean Stateless Session Bean (Data Member) Stateless Session Bean Session Bean Stateful Session Bean EJB Container EJB Container Session Bean Session Bean EJB Container 1 Stateless Session Bean (State Diagram) 2 Stateful Session Bean (State Diagram)
Stateless Session Bean EJB Container Instance Swapping EJB Container Stateful Session Bean EJB Container EJB Container Bean J2EE Server J2EE Application Server EJB Container Session Bean Deployment Descriptor EJB Container Session Bean Deployment Descriptor <session> </session> <display-name>scheduler</display-name> <ejb-name>scheduler</ejb-name> <home>praticalejbprogramming.schedulerhome</home> <remote>praticalejbprogramming.scheduler</remote> <ejb-class>praticalejbprogramming.schedulerbean</ejb-class> <session-type>stateless</session-type> <transaction-type>container</transaction-type> EJB Container Session Bean Session Bean (Instance) Session Bean Session Bean Stateless SB Stateful SB Shopping cart Session Bean Design Pattern-Session Façade Design Pattern Session Facade Design Pattern Session Bean Session Façade Design Pattern J2EE EJB Container (Business Objects) Value Object Entity Bean Java Class
Session Façade Design Pattern Session Façade Session Façade EJB Session Bean Session Bean Value Object Value Entity Bean Session Bean Façade Design Pattern JSP Servlet Java Application Session Bean Session Bean Session Façade Session Bean Class Diagram 3 Session Façade Class Diagram
Session Bean Session Façade Design Pattern Bean Scheduler Session Bean Stateless Session Bean Session Bean Planner Stateful Session Bean Seminar Stateful SB Planner SB Stateful SB Scheduler Session Bean JBuilder Session Bean EJB Designer Session Bean 4 JBuilder EJB Designer Session Bean Session Bean Bean Properties JBuilder EJB Bean
Session Type Session Type Session Bean Stateful Stateless 5 JBuilder EJB Session Bean Properties Bean Scheduler Bean Scheduler Bean private ejbcreate() private RoomManager roommanager; private SeminarManager seminarmanager; private AttendeeManager attendeemanager; private InstructorManager instructormanager; private RoomValueObjectFactory roomvaluefactory; private SeminarValueObjectFactory seminarvaluefactory; private AttendeeValueObjectFactory attendeevaluefactory; private InstructorValueObjectFactory instructorvaluefactory; public void ejbcreate() throws CreateException { try { roommanager = RoomManager.getInstance(); seminarmanager = SeminarManager.getInstance(); attendeemanager = AttendeeManager.getInstance(); instructormanager = InstructorManager.getInstance(); roomvaluefactory = RoomValueObjectFactory.getInstance(); seminarvaluefactory = SeminarValueObjectFactory.getInstance(); attendeevaluefactory = AttendeeValueObjectFactory.getInstance(); instructorvaluefactory = InstructorValueObjectFactory.getInstance();
catch(exception e) { throw new EJBException(e); Scheduler Session Bean business method Scheduler Bean JBuilder EJB Scheduler Bean Add method Scheduler Bean Remote Interface business methods public interface Scheduler extends javax.ejb.ejbobject { public String createroom(roomvalueobject roomvalue) throws RemoteException; public RoomValueObject findroom(string name) throws RemoteException; public Collection findallrooms() throws RemoteException; public void updateroom(roomvalueobject roomvalue) throws RemoteException; public void removeroom(string name) throws RemoteException; public void removeallrooms() throws RemoteException; public long createseminar(seminarvalueobject seminarvalue) throws RemoteException; public SeminarValueObject findseminar(long id) throws RemoteException; public Collection findseminarsofattendee(long id) throws RemoteException; public Collection findallseminars() throws RemoteException; public void updateseminar(seminarvalueobject seminarvalue) throws RemoteException; public void removeseminar(long id) throws RemoteException; public void removeallseminars() throws RemoteException; public long createattendee(attendeevalueobject attendeevalue) throws RemoteException; public AttendeeValueObject findattendee(long id) throws RemoteException; public AttendeeValueObject findattendeesbyname(string name) throws RemoteException; public Collection findallattendees() throws RemoteException; public void updateattendee(attendeevalueobject attendeevalue) throws RemoteException; public void removeattendee(long id) throws RemoteException; public void removeallattendees() throws RemoteException; public InstructorValueObject findinstructor(string name) throws RemoteException; public Collection findallinstructors() throws RemoteException; public void updateinstructor(instructorvalueobject instructorvalue) throws RemoteException; public void removeinstructor(string name) throws RemoteException; public void removeallinstructors() throws RemoteException;
public long createinstructor(instructorvalueobject instructorvalue) throws RemoteException; Session Bean EJB Local References BES EJB 2.0 Local Interface EJB Container EJB JNDI EJB Borland Enterprise Server Borland AppServer 4.5 EJB Local References Local Interface Scheduler Session Bean Transaction EJB Local References Scheduler Bean EJB JBuilder Project Pane PracticalEJBProgramming module Scheduler Bean JBuilder Content Pane 6 JBuilder Enterprise Java Bean Properties
(Tab) EJB Local References Add EJB Entity Bean Session Bean Link EJB IsLink Scheduler Bean EJB Local References 7 Scheduler Session Bean EJB Local References Properties EJB Local References Container EJB local reference EJB EJB EJB Container EJB EJB Local References Planner Session Bean Scheduler Stateless Session Bean Planner Stateful Session Bean Planner Bean Java TimeFinder class TimePeriod class Java Planner Bean Seminar TimeFinder TimeFinder TimePeriod
Planner Session Bean Scheduler Session Bean EJB Scheduler Bean Planner Bean Stateful Planner Bean method nextavailabletimeperiod() method Planner Bean nextstarttime nextavailabletimeperiod() nextstarttime nextstarttime Planner Bean public class PlannerBean implements SessionBean { SessionContext sessioncontext; private Date nextstarttime; private Collection attendees; transient TimeFinder timefinder;... // public TimePeriod nextavailabletimeperiod() { try { TimePeriod availableperiod = timefinder.firstavailabletime(attendees, nextstarttime); if(availableperiod!= null) { // nextstarttime nextstarttime = availableperiod.getfinishtime(); return availableperiod; catch (Exception e) { throw new javax.ejb.ejbexception(e); Planner Bean EJB Local References Planner Bean Attendee Bean TimeFinder TimeFinder Seminar Bean Planner Bean EJB Local References Attendee Seminar Entity Bean Planner Bean
8 Planner Session Bean EJB Local References Properties Test Client Session Bean PracticalEJBProgramming.EAR EJB Container PlannerClient Planner Session Bean Scheduler Bean PlannerClient public static void main(string[] args) { try { //get naming context Context ctx = new InitialContext(); System.out.println("Looking for PlannerHome"); //look up jndi name java.lang.object ref = ctx.lookup("planner"); //cast to Home interface PlannerHome plannerhome = (PlannerHome)
javax.rmi.portableremoteobject.narrow(ref, PlannerHome.class); System.out.println("Initializing meeting data"); java.util.collection attendeeids = new java.util.vector(2); attendeeids.add(new Long(1)); attendeeids.add(new Long(2)); Calendar cal = Calendar.getInstance(); cal.set(2002, Calendar.OCTOBER, 8, 0, 0, 0); Date starttime = cal.gettime(); System.out.println("Start time: " + starttime); System.out.println("Looking for periods of availability"); Planner planner = plannerhome.create(attendeeids, starttime); for(int i=0; i < 5; i++) { TimePeriod tp = planner.nextavailabletimeperiod(); if(tp == null) { break; System.out.println(tp.getStartTime() + ", " + tp.getfinishtime()); System.out.println("Done"); planner.remove(); catch(exception e) { System.err.println("Exception caught"); e.printstacktrace(); JNDI Planner Bean Home Interface reference create() method Seminar Vector Planner Bean for loop nextavailabletimeperiod()
9 PlannerClient Planner Bean BES Planner 10 Borland Enterprise Server Console Planner Session Bean
Session Bean Session Façade Design Pattern J2EE Design Patterns Session Façade Design Pattern Session Bean use cases use case Session Bean use case Session Bean use case Session Bean Stateless Stateful Session Façade Design Pattern Bean Transaction 1 EJB Session Bean Mastering Enterprise JavaBeans, 2nd Edition by Ed Roman, Scott W. Ambler, Tyler Jewell Enterprise JavaBeans, 3 rd Edition by Richard Monson-Haefel