• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Enterprise java beans(ejb)
 

Enterprise java beans(ejb)

on

  • 1,239 views

 

Statistics

Views

Total Views
1,239
Views on SlideShare
1,239
Embed Views
0

Actions

Likes
0
Downloads
61
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 06/23/10
  • 06/23/10

Enterprise java beans(ejb) Enterprise java beans(ejb) Presentation Transcript

  • Enterprise Java Beans(EJB) With EJBs, you can develop building blocks ‘ejb components ’ – that u and someone else can assemble and reassemble into different applications. For example , you might create a customer bean that represents a customer in database. You can use that Customer bean in an accouting program, an e-commerce shopping cart and a tech support application. One beauty of EJBs is that you take code reuse to a whole new level, instead of just code it reuses whole functionality and allows you modify that way bean behaves at runtime with touching its java code. 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Enterprise Java Beans: What really EJBs gives you
    • EJB lets you focus on the business logic for your business, and leave the underlying services (transaction,networking, security etc.) to the EJB server vender.
    • EJB let’s you customize and configure reusable components at deploy time with out touching the source code.
    • EJBs are portable not just to different JVM’s but to different EJB servers.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • How does it all works?
    • Beans run under the control of ejb server.
    • The server steps into the middle of every method call from a client to a bean and inserts the “services ” like security, transactions and persistence.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Type of Beans
    • Entity Bean - Use an entity bean to represent thing in persistent store. That almost always means something in a database, where an instance of an entity bean represents a row in a table.
    • Message driven bean- use a message driven bean only when you need a JMS Consumer. In other words, a bean that can listen for message from a JMS messaging service.
    • Session – use a session bean for … everything else. Where an entity bean represents a thing, a session bean typically represents a process.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Session Bean can be stateless or stateful
    • Session bean can be marked (at deployment time) as either stateless or stateful.
    • A stateful bean can remember conversational state between method calls, while stateless bean won’t remember anything about the client between method invocations.
    • Stateful session beans are less-scalable.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • FIVE THING YOU DO TO BUILD A BEAN
    • Code the bean class with all of the business methods,
    • Code two interfaces for the bean: home and component.
    • Create an XML deployment descriptor that tells the server what your bean is and how it should be managed. You must name it as ejb-jar.xml
    • Put the bean, the interfaces and the DD into an ejb-jar file.
    • Deploy the bean into the server, using the tools provided by the server vendor.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Write the Bean Class
    • Bean class provides the implementation of the business methods declared in the component inteface.
    • There are three types of beans, Session, Entity and Message – Driven.
    • Before making a bean, you must decide what type you need becoz your bean class must implement one of three interfaces, depending on the type you choose.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • AdviceGuy Bean
    • Advice Guy gives back an advice string when you invoke the getAdvice() method.
    • We’ve chosen a Session bean here becoz its perfect for AdviceGuy application.
    • So, our bean class implements the SessionBean interface and SessionBean has methods your bean class must implement.
    • The methods you implement from SessionBean interface are known as container callbacks, becoz the container uses then to notify you of important milestone in the bean’s life cycle.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • BEAN CLASS
    • import javax.ejb.*;
    • public class AdviceBean implements SessionBean{
    • private String[] adstring=“advice string goes here”;
    • public void ejbActivate(){}
    • public void ejbPassivate(){}
    • public void ejbRemove(){}
    • public void setSessionContext(SesssionContext sc){
      • }
    • public String getAdvice(){
    • return adstring;
    • }
    • public void ejbCreate(){}
    • }
    You need this package These four methos are from SessionBean interface, so you have to put them here,for now worry about what these are for! You must have an ejbCreate() method. Its an ejb rule we’ll learn about later. But it doesn’t come from SessionBean interface. You must implemet one of three bean type interfaces: 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Write two interfaces for the Bean
    • These are the two interfaces that client sees;
    • COMPONENT interface:
    • This is whre all the business methods are declared. In other words,it’s where yo put all the methods the client wants to call.
    • import javax.ejb.*;
    • import java.rmi.RemoteException;
    • public interface Advice extends EJBObject{
    • public String getAdvice() throws RemoteException;
    • }
    It must extend either the EJBObject or EJBLocalObject. This is the actual business method. It MUST correspond to a method in the bean class. 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Write two interfaces for the Bean
    • These are the two interfaces that client sees;
    • COMPONENT interface:
    • This is whre all the business methods are declared. In other words,it’s where yo put all the methods the client wants to call.
    • import javax.ejb.*;
    • import java.rmi.RemoteException;
    • public interface Advice extends EJBObject{
    • public String getAdvice() throws RemoteException;
    • }
    It must extend either the EJBObject or EJBLocalObject. This is the actual business method. It MUST correspond to a method in the bean class. 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Home Interface
    • The client uses the home interface to ask for a reference to the component interface. The home is the client’s starting point for getting hold of a reference to a bean.
    • import javax.ejb.*;
    • import java.rmi.RemoteException;
    • public interface AdviceHome extends EJBHome{
    • public Advice create() throws CreateException,RemoteException;
    • }
    The create() method must return your component interface type!! The home must extend either the EJBHome interface or EJBLocalHome 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Create an XML DD
    • <?xml version=&quot;1.0&quot;?> <!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>
    • <enterprise-beans>
    • <session>
    • <ejb-name>AdviceBean</ejb-name>
    • <home>AdviceHome</home>
    • <remote>Advice</remote>
    • <ejb-class>AdviceBean</ejb-class>
    • <session-type>Stateless</session-type>
    • <transaction-type>Bean</transaction-type>
    • <security-identity>
    • <description></description>
    • <use-caller-identity></use-caller-identity>
    • </security-identity>
    • </session>
    • </enterprise-bean>
    • </ejb-jar>
    Specify home interface name Remote interface 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Put the Bean, the interface and the DD into ejb-jar file META-INF EJB-JAR.XML MYPACKAGE AdvcieBean.class AdviceHome.class Advice.class MYEJB.JAR ejb-jar.xml must be in a directory named META-INF 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Deploy the bean into the server,using the tools provided by the server vendor 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • How to call a bean from Client Side?
    • Get a reference to a JNDI InitialContext
    • Use the InitialContext to do a lookup on the home interface of the Bean(that we named “Advisor” when we deployed)
    • Narrow and Cast the thing we get back from the lookup.(that thing is something that implements the AdviceHome interface).
    • Call Create on the home interface to get back a reference to the component interface.
    • Call getAdvice()(“the business method”) on the component interface and print the result.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • The Client Code(AdviceClient.java)
    • import javax.naming.*;
    • Import java.rmi.*;
    • Import javax.rmi.*;
    • Import javax.ejb.*;
    • Public class AdviceClient{
    • public static void main(String[ ] args){
    • new AdviceClient().go();
    • }
    • public void go(){
    • try{
    • Context ic=new InitialContext();
    • Object o=ic.lookup(“Advisor”);
    • AdviceHome home=(AdviceHome)PortableRemoteObject.narrow(o,AdviceHome.class);
    • Advice advisor=home.create();
    • System.out.println(advisor.getAdvice());
    • }catch(Exception ex){ ex.printStackTrace();}
    • }
    • }
    Finally we get to the actual business methods. Lookup the AdviseBean using the JNDI name we gave during deployment. Initialcontext is our entrypoint into JNDI directory 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • EJB ARCHITECTURE 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • EJB uses RMI 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • How EJB uses RMI 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • EJB uses RMI
    • In EJB, the Remote object(EJB Object) is the bean’s bodyguard. The Bean sits back, protected from all client invocations, while EJBObject implements the Remote interface and takes the remote calls.
    • Once the call gets to the EJBObject, the server jumps in with all the services.
    • The EJBObject implemens the Remote business interface, so the remote calls from the client come to the EJBObject. But it’s still the bean that has the business logic, even though the bean doesn’t implement the Remote interface.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • ***
    • Both the Remote object and the stub implement the same interface – the business interface(called a component interface) – but without the real business behavior.
    • The Bean class does NOT implement the business interface but the bean has the real business logic functionality.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • ***
    • In EJB, the business interface is called the component interface. This is where you expose your business to the client.
    • A Bean may have multiple business interfaces according to the client’s need.
    • A component inteface extends EJBObject interface that extends java.rmi.Remote interface.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Tricky Questions
    • Who writes the class that really DOES implement the component interface? In other words, who makes the EJBObject Class?
    • The Container creates four things:
    • The EJBObject class(implements your component interface)
    • The EJBObject stub class (implements component interface and knows how to talk to the EJBObject)
    • The Home class (implements the home interface)
    • The Home stub class(implements your home interface and knows how to talk to the home)
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • How EJB really Works? 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • How EJB really Works? 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • How EJB really Works? 06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • The Bean Home
    • Every Session and Entity Bean has a Home.
    • Message Driven Beans don’t have homes because message-driven beans don’t have a client view.
    • The Home object has one main job: to hand out references to a bean’s component interface.
    • Each deployed bean has its own Home object (only one ), and that Home is responsible for all bean instances of that type. If you deploy three beans as part of an application there will be three Homes in the server representing each of those three beans. It makes no differences how many EJBObjects and stubs the Home object hand out, there will still be only three Homes.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Architectural Overview: Session Beans
    • Client Share the home but never the bean.
    • Each client gets his own EJBObject reference and his own bean. The client never shares a bean with another bean, the meaning of “shares” depends on whether the bean is stateful or stateless.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Architectural Overview: Entity Bean
    • Clients share the Home and may share the bean.
    • If two clients are trying to access the same customer, then both clients have a reference to the same EJBObject. If a client wants to access two different customers, though, the client will have two stubs, and those stubs will be for two different EJBObjects, one for each customer.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Architectural Overview: Session Beans
    • Creating a stateful Session Bean
    • The home creates the bean and the EJBObject for the bean and hands back the EJBObject stub.
    • Creating a stateless Session Bean
    • The Home gives the client a stub to an existing EJBObject but does not associate a bean with this EJBObject instead, the bean stays in a pool until the client uses the EJBObject stub to call a business method.
    • Stateless session beans aren’t created until the container decides it needs on and that’s really up to the container.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Stateless session beans are more scalable
    • Clients don’t share EJBObjects but the same bean can service multiple EJBObjects. Just not at the same time. A single bean can handle multiple clients, as long as only one client at a time is in the middle of a business method invocations.
    • The stateful bean holds client conversational state. That means the bean has to save client specific state across multiple method invocations from the client.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Tricky Questions
    • How long does a stateful bean keep client specific state:
    • A session continues until the client tells the bean he’s done(by calling remove() on the bean’s component interface) or the server crashes or the bean times out.
    • How can a stateful session bean be scalable if you always need one bean for every client?
    • You do need a separate bean allocated for each client, but not every bean has to be actively consuming resources. If a stateful session bean client is taking a long time between method calls, a stateful session bean can be temporarily taken down and put in state called passivation.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • JNDI
    • JNDI stands for Java Naming and directory interface and its an API for accessing naming and directory services.
    • The JNDI API can work with many different services as long as that service has a JNDI driver (called service provider) . It’s a lot like JDBC.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
    • Getting a home interface stub
    • Get a InitialContext
    • Context ic=new InitialContext();
    • The InitialContext is your entry point into JNDI tree.it’s simly the first context from which you start navigating. Kind of like your current working directory.
    • Lookup the bean’s home using the initialContext
    • Object o=ic.lookup(“Advisor”);
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
    • Assign the result of the lookup to the Home interface reference
    • AdviceHome home=(AdviceHome)o;
    • The home stub returned from a JNDI lookup might not implement the home interface!
    • You might get an IIOP stub that isn’t castable to the home interface of your bean.
    • To get a stub that’s castable to the home interface, you have to first narrow() the object.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
    • Narrowing an object
    • AdviceHome home=(AdviceHome) PortableRemoteObject.narrow(o, AdviceHome.class);
    • Call Create on the home interface to get the EJB object stub.
    • Advice advisor=home.create();
    • Call the business method on the component interface.
    • System.out.println(advisor.getAdvice());
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Rules for the home interface
    • Writing the remote home interface for the session bean
    • For a stateless session bean there can be only one create() and it must NOT have arguments.
    • Stateful session beans can have multiple overloaded create() methods and don NOT need to have no-arg create()
    • All create() methods must declare a CreateException and RemoteException.
    • The name of create methods in stateful beans must begin with “create”.(createAccout() .. etc)
    • For stateful session beans arguments must be serializable.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • EJBHome interface
    • It has four methods
    • EJBMetaData getEJBMetaData()
    • HomeHandle getHomeHandle()
    • void remove(Handle h)
    • void remove(Object key)
    Get reflection like information about the bean. You can use to get more specific class information about the bean. 06/23/10 JavaTruths.com:A Portal for all java related stuff!!! Serialize the home so that you can get the home again later, without having to go through JNDI.
  • EJBHome interface
    • It has four methods
    • EJBMetaData getEJBMetaData()
    • HomeHandle getHomeHandle()
    • void remove(Handle h)
    • void remove(Object key)
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!! When u are done with session bean,you can tell the home by calling remove() and passing the EJB object’s handle. Tell the home to remove an entity bean. You can’t call remove(Object primarykey) method on session bean it will throw RemoveException.
  • Rules for the component interface
    • Extend EJBObject
    • Declare one or more business methods that throw a RemoteException.
    • The container implements the component interface and matching stub.
    • the container implements all the methods declared in EJBObject.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • EJBObject methods
    • getPrimaryKey()
    • getEJBHome()
    • getHandle()
    • remove()
    • isIdentical()
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!! Get the primary key of an entity bean This doesn’t apply to session bean and throws RemoteException.
  • EJBObject methods
    • getPrimaryKey()
    • getEJBHome()
    • getHandle()
    • remove()
    • isIdentical(object o)
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!! Get the bean’s home object. Save a reference to the EJBObject so that you can get back to your original EJB object. Tell the bean you are done with it. Container removes the resources held by the session bean. Compare the EJB object references to see if they reference the same bean.
  • The Handle
    • The handle is a serializable thing that knows how to get back to the stub. It has a single method:
    • EJBObject getEJBObject()
    • So when you call it you have to cast and narrow the stub that comes back!
    • Just becoz you still have a handle, doesn’t mean the server still has your bean.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • isIdentical?
    • Stateless session beans: returns true if both references came from the same home.
    • Stateful session beans: false, no matter what, for any two unique stubs, even if from the same home.
    • Entity Beans: returns true if the two stubs refer to two entities with the same primary key.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Session Bean life cycle
    • Stateful Session Beans
    • Creation
    • Use
    • Passivation
    • Activation
    • removal
    • Stateless Session Beans
    • Creation
    • Use
    • removal
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Container Callbacks
    • Life cycle event of beans are notified by container by calling callback methods
    • Session has four callback methods
        • ejbActivate()
        • ejbPassivate()
        • ejbRemove()
        • setSessionContext(SessionContext ctx)
        • ejbCreate()
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • ejbCreate method?
    • Every session bean must have at least one ejbCreate() method to match create() method declared in the home interface.
    • For stateless session there is only one no-arg create() method.
    • For stateful session bean there can be mutiple n overloaded create methods.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Container callbacks invocation 06/23/10 JavaTruths.com:A Portal for all java related stuff!!! Does not Exist Method ready Passivated setSessionContext() ejbCreate() ejbPassivate() ejbActivate() ejbRemove() or timeout Bean throw system exception timeout
  • Bean’s Context
    • A bean’s context is the bean’s only access to the containers. It lets you
    • Get a reference to the home
    • Get a reference to EJB object
    • Get security information about the client
    • For a transaction to rollback
    • Find out if the transaction has already been set to rollback
    • Get a transaction and call method on it.
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!! get EJBHome() getEJBLocalHome() getEJBObject() getEJBLocalObject() getCallerPrincipal() isCallerInRole(String s) setRollbackOnly(bollean b ) getRollbackOnly() getUserTransaction()
  • How to use setSessionContext(Sessioncontext sc)
    • setSessionContext method is overridden to save a reference to the sessioncontext object created by container.
    • private SessionContext context;
    • public void setSessionContext(SessionContext sc){
    • context=sc;
    • }
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • How to use ejbCreate()?
    • for stateful session beans, the create method has arguments and container pass those arguments to matching ejbCreate method, you can use these argument to INITIALIZE your session bean state.
    • private String name;
    • public void ejbCreate(String clientName){
      • Name=clientName;
    • }
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!
  • Use sessioncontext for 06/23/10 JavaTruths.com:A Portal for all java related stuff!!! setSessionContext() ejbCreate() Within business method Use your SessionContext for: Get a reference to your home Get a reference to home Get a reference to home Get a reference to your EJB Object Get a reference to your EJB Object Get security info about the client Get security info about the client Get a transaction reference and call methods on it(BMT Beans) For a transaction to rollback(CMT beans) Find out if the transaction has already been set to rollback(CMT beans) Get a transaction reference and call methods on it (BMT beans) Access : Your special JNDI Environment Your special JNDI Env. Your special JNDI Env. Another beans methods Another beans methods A resource manager(like a DB) A resource manager(like a DB)
  • Removing a stateful bean
    • Client calls remove() on an active (non-passivated) bean.
    • Bean times out while active.
    • Bean times out while passivated.
    • Bean throws a system exception.
    • ejbRemove() method?
    • Release any resources or do whatever clean up you need to do before the bean dies forever.
      • public void remove(){
      • try{
      • myResource.close();
      • }catch(Exception e){…}
      • }
    06/23/10 JavaTruths.com:A Portal for all java related stuff!!!