EJB Rabie A. Ramadan What is EJB? Specification defines an architecture for the development and deployment of transactional, distributed object applications-based, server-side software components 2 What is the difference between Two-tier and three-tier environments? two-tier applications access database services or transaction services directly from the client. Three-tier client-server applications employ an intermediary, or middle-tier, application server, which operates between client applications and the back-end databases. The middle tier houses the business logic of the system and coordinates the interaction of the presentation on the client with the back-end databases. 3 What is a Fat – Client? the application logic resides on the client, making the clients large and complex. 4 What are the fundamental motivations for using a three-tier architecture? Improved scalability, availability, and performance Improved flexibility and extensibility of business systems 5 Differentiate between Pooling and Clustering in three tier architecture? Pooling makes three-tier systems more effective by allowing many clients to share scarce resources like database connections, which reduces the workload on back-end servers. Clustering makes three-tier systems more available and scalable because multiple servers and resources can support fail-over and balance the loads of a growing client population. 6 What is the difference between Javabeans and Enterprise JavaBeans ? An enterprise bean is not the same as a JavaBean. A JavaBean is developed using the java.beans package, which is part of the Java 2 Standard Edition. JavaBeans are components that run on one machine, within a single address space. JavaBeans are process components. An enterprise bean is developed using the javax.ejb package, a standard JDK extension, which is a part of the Java 2 Enterprise Edition. Enterprise beans are components that run on multiple machines, across several address spaces. Enterprise beans are thus interprocess components. JavaBeans are typically used as GUI widgets, while enterprise beans are used as distributed business objects. 7 What is EJB Container and why it is needed ? Enterprise beans are software components that run in a special environment called an EJB container. The container hosts and manages an enterprise bean in the same manner that the Java Web server hosts a servlet or an HTML browser hosts a Java applet. The container isolates the enterprise bean from direct access by client applications. 8 Describe a possible scenario of bean call from the client? Pages 7 and 8 9 The enterprise bean interacts with its container through one of three mechanisms which are : 10 The enterprise bean interacts with its container through one of three mechanisms which are : 11 What is the meaning of portability of EJB ? Page 8 12 What is Entity Bean? Page 11 13 What is a session bean ? Page 11 14 EJB Architecture and Design What is EJB? An EJB is just a collection of Java classes and XML file, bundled into a single unit. The Java classes must follow certain rules and provide certain callback methods. EJB is just a specification. It is not a product. EJBs are reusable components. What is EJB? EJB is a widely-adopted server-side component architecture for J2EE. EJB components are designed to encapsulate business logic, and to protect the application developer from having to worry about system level issues. Contents Services provided by EJB container Circumstances of EJB component usage How an EJB component looks like? View of an EJB component by client programmer and EJB developer Mechanisms by which EJB container provides its services Rules an EJB developer must follow and how to use EJBs in a web architecture? Key features of EJB technology EJB components are server-side components written entirely in the Java programming language EJB components contain business logic only - no System-level programming System-level services (i.e. "plumbing") such as transactions, security, Life-cycle, threading, persistence, etc. are automatically managed for the EJB component by the EJB server Key features of EJB technology EJB architecture is inherently transactional, distributed, portable, multi-tier, scalable and secure EJB components are fully portable across any EJB server and any OS, work with any client. Components are declaratively customized There are four major parts to every bean: the home interface, the remote interface, the implementation class and the XML deployment descriptor EJB vs JavaBeans The JavaBeans architecture is meant to provide a format for general-purpose components whereas the EJB architecture provides a format for encapsulation and management of business logic. JavaBeans has tier of execution at Client and EJB has at Server (specifically business logic tier) EJB vs JavaBeans In JavaBeans the runtime execution environment provides services like Java libraries, Java application etc. The EJB runtime environment provides services of Persistence, declarative transactions and security, connection pooling and lifecycle services. Varieties of Beans Session Beans Stateful session bean Stateless session bean Entity Beans With container-managed persistence With bean-managed persistence Message-Driven Beans Why use EJBs in your design? EJB specification provides enterpriselevel services, that is, it provides software services that are fundamental to an organization’s purpose. EJB’s API was designed to keep the application programmer from having to provide systems-level services, so that they are free to concentrate on business logic. Why use EJBs in your design? A requirement of any of the services provided by an EJB container like transactions, scalability, persistence, security, future growth possibilities is an appropriate reason to use EJB in the design of the application. EJB Architecture Client Application Logic Data J2EE Application Server RDBMS EJB Container Corba Client Application JMS JTA Java Mail JDBC RMI Session Bean Mail Entity Bean Roles in EJB Development EJB provider - a person who develops EJB Components EJB Deployer - a person responsible for deploying EJB’s in EJB server Application Server/ EJB Container Vendor one who provides application server on which the application is deployed Roles in EJB Development Application assembler - one who combine the EJB components with other software to make a complete application System administrator - one who manages the application after it has been deployed into a target environment. Roles in EJB Development EJB Provider Application Assembler Deployer App Server/ EJB Container Provider System Administrator EJB Container and its Services A container is an execution environment for a component. The component lives in the container and the container provides the services for the component. Similarly, a container lives in an application server, which provides an execution environment for it and other containers. Services provided by an EJB container Persistence Ex: simple connection pooling, automatic persistence, etc. EJBs created with application development tools will encapsulate data access in components. Services provided by an EJB container Declarative transactions Data caching Declarative Security Error Handling Component Framework for Business Logic Scalability and Fall-Over Portability Manageability How the Container Provides Services There are three basic ideas: First, there are clearly defined responsibilities between the various parts of an application using EJB component namely the client, the EJB container and the EJB component. The definition of these responsibilities is formally known as a contract. Second, the services that the container provides are defined in such a way that they are orthogonal to the component. In other words, security, persistence, transactions are separate from the Java files that implement the business logic of the component. How the Container Provides Services Third, the container interposes on each and every call to an EJB component so that it can provide its services. In other words, the container puts itself between the client and the component on every single business method call. Contracts EJB Container/Application Server Enterprise JavaBean Client Rules for the bean programmer The developer of the EJB component must implement the business methods in the implementation class The bean provider must implement the ejbCreate(), ejbPostCreate(),ejbRemove() methods and the ejbFind<METHOD>() methods if the bean is an entity with bean managed persistence The bean provider must define the enterprise bean’s home and remote interfaces For session beans, the bean provider must implement the container callbacks defined in the javax.ejb.SessionBean interface Rules for the bean programmer For entity beans, the provider must implement the container callbacks defined in the javax.ejb.EntityBean interface The bean provider must not use programming practices that would interfere with the container’s runtime management of the enterprise bean instances Interposition : method call to an EJB Container from a remote client First, the client makes a call on the RMI stub This RMI stub interposes on the method call in order to marshal parameters and send the information across the network A skeleton on the server side unmarshals the parameters and delivers them to the EJB Container Interposition diagram Client RMI Stub Network RMI Stub Container generated class Interposition class EJB Interposition : from EJB Container to EJBs The container will examine the security credentials of the caller of the method It will start or join with any required transactions It will make any necessary calls to persistence functions It will trigger various callbacks to allow the EJB Component to acquire resources Only after all this is done will the actual business method be called Once it is called, the container will do some more work with transactions, persistence, callbacks and returns data or exception to the remote client Working with EJBs The Enterprise JavaBeans specification is written for three audiences: The Client developer The EJB developer The EJB container developer EJB Clients EJB Clients are applications that access EJB components in EJB containers. There are two possible types. The first category is application clients which are stand-alone applications accessing the EJB components using the RMI-IIOP protocol. The second category of application clients are components in the web container. They are java servlets and JSPs which also access the EJB components via the RMI-IIOP protocol. The Client Developer’s View The client has a smaller set of concerns then a bean developer with regard to using EJBs. Basically, he need to know : how to find or create a bean, how to use its methods and how to release its resources The client need not worry about the implementation of the EJB, callbacks that the EJB container will make on the EJB or nature of the services provided to the EJB. EJB’s interface Home Interface : It is primarily for the life cycle operations of the bean: creating, finding, and removing EJBs. The home interface is not associated with a particular bean, just with a type of bean. Remote Interface : It is for business methods. Logically, it represents a particular bean on the server. The remote interface also provides some infrastructure methods associated with a bean instance, rather than a bean type. Sample client application pseudo code A client programmer will acquire an EJB’s home interface through JNDI, and they use this home interface to : Create or find Execute methods instance of bean Reference (Handle) Remove bean Client.java Package orderMgmt; import java.util.properties; import java.naming.Context; // for name-to-object findings import java.naming.InitialContext;// context for naming operations public class Client { try { Properties prop = new Properties(); // server dependent properties for InitialContext prop.put(Context.INITIAL_CONTEXT_FACTORY, “org.jnp.interfaces.NamingContextFactory”); prop.put(Context.PROVIDER_URL, “localhost:1099”); Context ctx = new InitialContext(prop); Object objref = ctx.lookup(“OrderManagement”); Client contd.. // casting home interface reference to the OrderManagementHome OrderManagementHome home = (OrderManagementHome) javax.rmi.PortableRemoteObject.narrow(objref, OrderManagementHome.class); // home interface to create an instance of the OrderManagement OrderManagement orderManagement = home.create(); // calling placeOrder() orderManagement.placeOrder("Dan OConnor", "Wrox books on programming", 1000); orderManagement.remove(); System.out.println("Order successfully placed."); } catch (Exception e) { e.printStackTrace(); } The Bean Programmer’s view Main responsibility is write business logic and structure the code in a particular structure. The structure has 4 files, the home interface, remote interface, business logic class file and the XML file. The XML file called the deployment descriptor, contains the structural information about the bean, declares the bean’s external dependencies and specifies certain information about how services such as transaction and security work. Interface EJBObject package javax.ejb; public interface javax.ejb.EJBObject extends java.rmi.Remote { EJBHome getEJBHome() throws java.rmi.RemoteException; Handle getHandle() throws java.rmi.RemoteException; Object getPrimaryKey() throws java.rmi.RemoteException; boolean isIdentical(EJBObject obj) throws java.rmi.RemoteException; void remove() throws java.rmi.RemoteException; } OrderManagement code.. package orderMgmt; import javax.ejb.*; public interface OrderManagement extends javax.ejb.EJBObject { public void placeOrder(String custName, String prodName, int quantity) throws java.rmi.RemoteException; public void cancelOrder(String custName, String prodName) throws java.rmi.RemoteException; public boolean isShipped(String custName, String prodName) throws java.rmi.RemoteException; } OrderManagementBean code.. package orderMgmt; import javax.ejb.*; public class OrderManagementEJB implements javax.ejb.SessionBean { public void placeOrder(String custName, String prodName, int quantity) { // ... Business logic ...} public void cancelOrder(String custName, String prodName) { // ... Business logic ...} public boolean isShipped(String custName, String prodName) { // ... Business logic … return true; } OrderManagementBean code.. public void ejbCreate() { // Can be empty } public void ejbRemove() { // Can be empty } public void ejbActivate() { // Can be empty} public void ejbPassivate() { // Can be empty} public void setSessionContext( SessionContext ctx ) { // Can be empty} } Interface EJBHome Package javax.ejb; public interface EJBHome extends java.rmi.Remote { EJBMetaData getEJBMetaData () throws java.rmi.RemoteException; HomeHandle getHomeHandle() throws java.rmi.RemoteException; void remove(Handle handle) throws java.rmi.RemoteException, java.ejb.RemoveException; void remove(Object primary key) throws java.rmi.RemoteException, java.ejb.RemoveException; } OrderManagementHome code.. package orderMgmt; import javax.ejb.*; public interface OrderManagementHome extends javax.ejb.EJBHome { public OrderManagement create() throws java.rmi.RemoteException, javax.ejb.CreateException; } The xml file : ejb-jar.xml <?xml version=“1.0”?> <ejb-jar> <enterprise-beans> <session> <ejb-name>OrderManagement</ejb-name> <home>orderMgmt.OrderManagementHome</home> <remote>orderMgmt.OrderManagement</remote> <ejb-class>orderMgmt.OrderManagementBean</ejbclass> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> The xml file : ejb-jar.xml <assembly-descriptor> <container-transaction> <method> <ejb-name>OrderManagement</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar> Structure of JAR file META -INF\ ejb-jar.xml orderMgmt\ OrderManagement.class OrderManagementHome.class OrderManagementBean.class What you can’t do in an EJB component? You cannot use Reflection API to access information inaccessible to you. You cannot create a class loader or replace a security manager. You cannot set the socket factory used by ServerSocket or Socket You cannot use the object substitution features of the serialization protocol What you can’t do in an EJB component? use Threads or the Threading API use the AWT Act as a Network Server use Read/Write static fields use java.io package Load a native library use “this” as an Argument or Return value use Loopback Calls EJB Components on the Web Three classes of objects in MVC architecture: Model : This is the data and business-logic component. It can serve multiple views. View : This is the presentation component or the user-interface component. There can be different presentations of a single model. Controller : This is the component that responds to user input. Translates userinterface events into changes to the model and defines the way the user-interface reacts to those events. Implementation of MVC in a web site Model 4 2 view1.jsp 3 Main.jsp view2.jsp Controller view3.jsp Views 5 Browser Client 1