410 likes | 574 Views
Welcome To Enterprise Jave Beans (EJB) Training. Presented By Pradeep K Sahu. What will be the Contents of the Seminar ?. What is EJB ?. Differences between Java Bean and Enterprise Java Bean. Why EJB ?. EJB Architecture. Types of EJB. Session. Entity.
E N D
Welcome To Enterprise Jave Beans (EJB) Training Presented By Pradeep K Sahu
What will be the Contents of the Seminar ? What is EJB ? Differences between Java Bean and Enterprise Java Bean Why EJB ? EJB Architecture Types of EJB Session Entity Writing a Hello World Session EJB
Enterprise Java Beans (EJB) …. • Defines a standard to building distributed server side systems • Frees the EJB developer to only concentrate on programming the business logic • Handles the other “plumbing” to handle transactions, security connection /thread pooling etc., by delegating this to the vendor • It defines a framework for creating distributed enterprise middleware
Why Enterprise Java Beans? • Architectural Independence from middleware • Write Once Run Anywhere (WORA) for server side components • Establishes role for application development • Takes care of Transaction Management • Provides Distributed Transaction support • Helps create Portable and scalable solutions • Integrates seamlessly with CORBA • Provides vendor specific enhancements
The EJB Architecture Components of the EJB Architecture are • EJB server • EJB Container • The Home Interface and Home Object • The Remote Interface and EJBObject • EJBeans • Other services like JNDI,JTS & Security • EJB Client
The EJB Server • Provides an organized framework for EJB Containers to execute in • Provides system-services like multiprocessing, load balancing, device access, JNDI accessible naming and transaction services available to the container • Makes EJB Container visible
EJB Containers • Interface between EJBeans and outside world • EJB client never access an EJBeans directly –any access is done through container- generated methods which in turn invoke bean methods • Session containers contain session EJBs and Entity containers contain entity EJBs
The Home Interface and The Home Object • Contains Factory methods for locating creating and removing instances of EJBs • The EJB developer defines the Home Interface for his bean • The Home Object is generated by tools provided by the Container Vender • The Home Object is the implementation of the Home Interface
TheRemote Interface and the EJB Object • The Remote Interface lists the business methods present in an EJB class • The Remote Interface is defined by the EJB developer • The EJBObject which is the concern class for the Remote Interface is generated by the tools provided by the container vendor • EJB Clients use the methods present in the Remote Interface to invoke business methods of the EJBean
The EJB Client • Finds EJB containers using JNDI • Uses EJB containers to invoke EJB methods • Uses the Home Object to locate , create,or destroy an EJB class. • Uses the EJBObject instance to invoke business methods of the EJB instance
The Enterprise Java Bean • Contained within the EJB container and is only accesses through the container • There are two types of EJBeans • Session • Entity (3rd type Message Driven Bean is added in EJB 2.0) • Session Beans are again two types • Stateless and • Stateful
Steps involved in Developing an EJB • Define Home Interface • Define Remote Interface • Develop Entity or Session Bean • In the case of Entity Beans, define the Primary Key Class • Write the Deployment Descriptor / XML File. • Compile all classes and create the Jar file • Generate the container code by using the tools provided by the container provider • Deploy the EJB in the server • Develop the Client code • Start the server and execute the client
Lets Summarize….. We have covered • Why we need EJB and its advantages • Components of EJB Architecture • Types of EJB that is Session and Entity Bean • Difference between Session and Entity Bean Next Guess ?
Yes, you are right… Cofee Break . . . Next Session Bean…..
Introduction Session Beans • Represents a business process and business process related logics. • Are two types • Stateless Session Bean : are beans that holds conversations that span a single method call. • Stateful session bean : are beans that hold conversations with clients that may span many method calls. Now let’s write a “Hello World” Stateless Session Bean(We will deploy in Weblogic)
Writing the Home Interface Requirements for any Home Interface • Extend javax.ejb.EJBHome • Expose at least one create() method.
The Complete java Code for HelloHome.java import javax.ejb.*; import java.rmi.RemoteException; /** * This is the home interface for HelloBean. This interface * is implemented by the EJB Server's tools - the * implemented object is called the Home Object and serves * as a factory for EJB Objects. */ public interface HelloHome extends EJBHome { /* * This method creates the EJB Object. */ Hello create() throws RemoteException, CreateException; }
Writing the Remote Interface Requirements for any Remote Interface • Extend javax.ejb.EJBObject • Declare the business methods that are to be exposed.
The Complete java Code for Hello.java import javax.ejb.*; import java.rmi.RemoteException; import java.rmi.Remote; /** * This is the HelloBean remote interface. * * This interface is what clients operate on when * they interact with EJB objects. The container * vendor will implement this interface; the * implemented object is the EJB object, which * delegates invocations to the actual bean. */ public interface Hello extends EJBObject { /** * The one method - hello - returns a greeting to the client. */ public String hello() throws java.rmi.RemoteException; }
Writing the Bean Class Requirements for SessionBean • Extend javax.ejb.SessionBean public interface javax.ejb.SessionBean extends javax.ejb.EnterpriseBean { public abstract void setSessionContext(SessionContext ctx) throws java.rmi.RemoteException; public abstract void ejbPassivate() throws java.rmi.RemoteException; public abstract void ejbActivate() throws java.rmi.RemoteException; public abstract void ejbRemove() throws java.rmi.RemoteException; } • Implements the Business methods defined in the Remote interface. In our example hello().
The Complete java Code for HelloBean.java import javax.ejb.*; public class HelloBean implements SessionBean { // EJB-required methods public void ejbCreate() { System.out.println("ejbCreate()"); } public void ejbRemove() { System.out.println("ejbRemove()"); } public void ejbActivate() { System.out.println("ejbActivate()"); } public void ejbPassivate() { System.out.println("ejbPassivate()"); } public void setSessionContext(SessionContext ctx) { System.out.println("setSessionContext()"); } //Business methods public String hello{ System,out.println(“hello()”); return “Hello,World”; } }
Deployment Descriptor To Deploy any Session Bean on Weblogic server 5.1 we need 2 descriptor (XML) file. ejb-jar.xml :This XML file must conform to the DTD provided by JavaSoft in the EJB 1.1 specification. This XML file is not vendor specific. weblogic-ejb-jar.xml : specifies deployment properties required for deploying EJBs in WebLogic Server (For example defines timeout, pooling, and clustering behavior for EJBs)
Writing ejb-jar.xmlDeployment Descriptor <?xml version="1.0"?> <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'> <ejb-jar> <small-icon>images/green-cube.gif</small-icon> <enterprise-beans> <session> <small-icon>images/orange-cube.gif</small-icon> <ejb-name>HelloWorld</ejb-name> <home>HelloHome</home> <remote>Hello</remote> <ejb-class>HelloBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>HelloWorld</ejb-name> <method-intf>Remote</method-intf> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
Writingweblogic-ejb-jar.xmlDeployment Descriptor <?xml version="1.0"?> <!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 5.1.0 EJB//EN' 'http://www.bea.com/servers/wls510/dtd/weblogic-ejb-jar.dtd'> <weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>HelloWorld</ejb-name> <caching-descriptor> <max-beans-in-free-pool>10</max-beans-in-free-pool> </caching-descriptor> <jndi-name>HelloHome</jndi-name> </weblogic-enterprise-bean> </weblogic-ejb-jar> The name which will be shown in the server Max no of bean in pool The JNDI Name for the client to lookup
Creating EJB-jar After getting all the java files compiled and the 2 xml file written we have to create the jar file containing all the files with the required order.For our Hello World application the files should be in the following order <Root> Hello.class HelloHome.class HelloBean.class <META-INF> ejb-jar.xml weblogic-ejb-jar.xml <images> green-cube.gif orange-cube.gif Create the jar file with the following command Jar cf <Jar File Name to be created> *.* For Example jar cf HelloWorld.jar *.* If package is defined then the files should be in the respective package order Like MyPackage/Hello.class in the root Icon image files
Generating EJB Container classes and Deployment Once the HelloWorld.jar file is created next is to • Create the container classes • Generate the container classes with the help of ejbc Compiler. The Command is • ejbc <source jarFile> <The target jar file> • Source jar file : is the jar file created by us.(Contains 2 XML files and Home,Remote and Bean classes. • The target jar file :The jar file which will be created.This will contain all the required container classes. • For Example : ejbc HelloWorld.jar HelloWorldEJB.jar
Continue…. Once we get the jar file containing the Container classes we are ready to deploy the our EJB in Weblogic 5.1 server. We can deploy in a different ways.We will deploy by adding the jar file details to the weblogic.properties file so that the EJB will get automatically loaded when the application server starts. The format is weblogic.ejb.deploy=<The Complete jar file path> Note : The folder path separator is “/” not ‘\’ For example: weblogic.ejb.deploy=D:/Java/Programs/Examples/EJB/HeloWorldEJB.jar After adding the above line restart the WebLogic.So that the EJB will get loaded.
Lets Summarize….. • We have covered • EJB Architecture and its Components • Home Interface,Remote Interface • Session Bean Details • How to write a Stateless Session EJB • How to deploy an EJB in Weblogic server • Next • How to write the Client application.
Lets take a Break . . .
How to write the Client program • The Client code performs the following tasks : • Looks up a home object • Uses the home object to create an EJB Object. • Calls the business methods (hello() in our example) on the EJB object • Removes the EJB Object.
The Complete java Code for HelloClient.java import javax.ejb.*; import javax.naming.*; import java.rmi.*; import java.util.Properties; public class HelloClient { public static void main(String[] args) { try { // Get System properties for JNDI initialization Properties props = System.getProperties(); // Form an initial context Context ctx = new InitialContext(props); // Get a reference to the home object (the factory for EJB objects) HelloHome home = (HelloHome) ctx.lookup("HelloHome"); // Use the factory to create the EJB Object Hello hello = home.create(); //Call the hello() method, and print it System.out.println(hello.hello()); //Remove the EJB Object hello.remove(); } catch (Exception e) { e.printStackTrace(); } } }
Running the Client • The Client needs the following components or parameters • The J2EE class files in the classpath • The Home and Remote Interface in it’s classpath • The JNDI environment information • Running the Client • Run the setEnv.bat file present in the Weblogic root folder to set the class path and other environment settings • Run the Client with the JNDI parameters. • In case of weblogic we can run the command by the following command • java -Djava.naming.factory.initial=weblogic.jndi.TengahInitialContextFactory • -Djava.naming.provider.url=t3://localhost:7001 <ClientClassFile2Run > • For our HelloWorld application it is • java -Djava.naming.factory.initial=weblogic.jndi.TengahInitialContextFactory • -Djava.naming.provider.url=t3://localhost:7001 HelloClient
Output The Server-Side Output When we run the client, our container shows the folloeing output setSessionContext() ejbCreate() hello() ejbREmove() The Client-Side Output After running the client, we can see the following out put : Hello,World!
Stateless Session Bean Life Cycle Before Closing the Stateless Session Bean lets have a look on the Life Cycle and sequence diagram of Stateless Session Bean Each method call shown is an invocation from the container to the bean instance.
Thanks . . . For Your Patience…… Presented By Pradeep K Sahu