+ All Categories
Home > Documents > EJB: the details

EJB: the details

Date post: 21-Jan-2016
Category:
Upload: addison
View: 49 times
Download: 0 times
Share this document with a friend
Description:
EJB: the details. Actors:. Component Interface: Same role as in RMI Component Implementation: Same role as in RMI Home Interface: Implemented by the server, plays the role of a factory class for the component JNDI service: Plays the same role as the register in RMI. Directory Machine. - PowerPoint PPT Presentation
36
J0 1 Marco Ronchetti - ronchet @ dit . unitn .it “Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento EJB: the details
Transcript
Page 1: EJB: the details

J01

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

EJB: the details

Page 2: EJB: the details

J02

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Actors:

Component Interface:Same role as in RMI

Component Implementation:Same role as in RMI

Home Interface:Implemented by the server, plays the role of a factory class for the component

JNDI service:Plays the same role as the register in RMI

Page 3: EJB: the details

J03

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

NamingService

DirectoryMachine

Client

ClientMachine

The logical architecture

Pool

App server (container)Machine

HomeInterface

Trovami la Home interface

Dammi unaistanza

Istanza

Crea o recupera una istanza

Trova

Metodo()

Page 4: EJB: the details

J04

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Session Beans -) stateless -) stateful

Page 5: EJB: the details

J05

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful Example

Stateless Example: Euro Converter

Page 6: EJB: the details

J06

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful Example – suggested hierarchy

App

server client

srcsrc

META-INF

ejb-jar.xml

deploy

xHome.javaxHome.class

client.javax.java

xBean.java

x.class

xBean.class xHome.classx.class

Page 7: EJB: the details

J07

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateless example – The Component (Remote) Interface

package statelessDemo;

import java.rmi.*;import javax.ejb.*;

public interface Converter extends EJBObject { public double convert(int lire);}

Page 8: EJB: the details

J08

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateless example – The Home Interface

package statelessDemo;import java.rmi.*;import javax.ejb.*;

public interface ConverterHome extends EJBHome { public Converter create() throws RemoteException, CreateException;}

Page 9: EJB: the details

J09

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateless example – The bean

package statelessDemo;import java.rmi.*;import javax.ejb.*;

public class ConverterBean implements SessionBean { private SessionContext sessionContext; public void ejbCreate() {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; } private static double ratio=1936.27; public double convert(int lire) { return lire/ratio; }}

Page 10: EJB: the details

J010

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateless example – The descriptor

<?xml version="1.0" encoding="UTF-8"?><!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> <description>A simple demo of a stateless Bean</description> <display-name>An Euro Converter Bean</display-name> <enterprise-beans> <session> <description>A converter from Lire to Euro</description> <ejb-name>EuroConverter</ejb-name> <home>statelessDemo.ConverterHome</home> <remote>statelessDemo.Converter</remote> <ejb-class>statelessDemo.ConverterBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans>

Page 11: EJB: the details

J011

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateless example – The descriptor

<assembly-descriptor> <container-transaction> <method> <ejb-name>EuroConverter</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> <ejb-client-jar /></ejb-jar>

Page 12: EJB: the details

J012

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

structure of the jar file

META-INF

ejb-jar.xml

statelessDemo

Converter.class

In this directory, run jar cvf converter.jar *

ConverterBean.class ConverterHome.class

this directory(ies) reflect the package hierarchy

Watch out! Packages often make life complex.(it’s easy to make mistakes) Try first without packages.

Page 13: EJB: the details

J013

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Compile the sources, generate jar file

clsjavac Converter.javamove Converter.class statelessDemo\javac ConverterHome.javamove ConverterHome.class statelessDemo\javac ConverterBean.javamove ConverterBean.class statelessDemo\

cd ..\deploymentdel *.jardel statelessDemo\*.class

move ..\src\statelessDemo\* statelessDemo\jar cvf Converter.jar *cd ..\src

Page 14: EJB: the details

J014

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Start the container

We assume you installed the j2ee sdk distribution provided by

Sun in some %J2EE_HOME% directory.

1) Run %J2EE_HOME%/bin/j2ee.bat2) Run %J2EE_HOME%/bin/deploytool.bat

Page 15: EJB: the details

J015

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Start the container

FileNew Application…

FileAdd to Application… EJB-JAR(scegliere converter.jar)

Page 16: EJB: the details

J016

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

View the properties

Page 17: EJB: the details

J017

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Start deployment

ToolsDeploy

Check this box

Crea ConverterApp.ear

Page 18: EJB: the details

J018

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Start deployment

Choose a JNDI name

Page 19: EJB: the details

J019

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Start deployment

Crea ConverterAppClient.jar

Page 20: EJB: the details

J020

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateless example – The client

import javax.ejb.*;import javax.naming.InitialContext;

public class ConverterClient { public ConverterClient() { } public static void main(String[] args) { try { InitialContext ctx=new InitialContext(); Object objref=ctx.lookup("L2EConverter");

statelessDemo.ConverterHome home = (statelessDemo.ConverterHome) javax.rmi.PortableRemoteObject.narrow( objref,statelessDemo.ConverterHome.class);

statelessDemo.Converter bean=home.create();

Get naming context and object reference

Cast to correct type

Get a bean instance from container

JNDI name

Page 21: EJB: the details

J021

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateless example – The client

int lire=100000; System.out.println(lire+" Lire = "+

bean.convert(lire)+" Euro"); } catch (javax.naming.NamingException ex) { System.out.println("NamingException: "+ex); } catch (ClassCastException cc) { System.out.println(" ClassCastException : "+cc);} catch (javax.ejb.CreateException ce) { System.out.println("CreateException: "+ce); } catch (java.rmi.RemoteException re) { System.out.println("RemoteException: "+re); } }}

Do your business

Page 22: EJB: the details

J022

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Compile the client

clscd client\statelessDemo\copy ..\server\deployment\statelessDemo\Converter.class .copy ..\server\deployment\statelessDemo\ConverterHome.class .cd ..javac ConverterClient.java

Questa è la directory che contiene i sorgenti del client

Page 23: EJB: the details

J023

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateless example – execution

java -classpath .;%J2EEHOME%\lib\j2ee.jar;…\ConverterAppClient.jar -Dorg.omg.CORBA.ORBInitialHost=localhost ConverterClient

100000 Lire = 51.64568990894865 Euro

Page 24: EJB: the details

J024

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful Example

Stateful Example: Dollar Converter

Page 25: EJB: the details

J025

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful example – The Component (Remote) Interface

import java.rmi.*;import javax.ejb.*;

public interface DollarConverter extends EJBObject {

public double convertInEuro(double dollar) throws java.rmi.RemoteException;

public double convertInDollar(double euro) throws java.rmi.RemoteException;

public void setRate(double euro_dollar_ratio) throws java.rmi.RemoteException;

}

Page 26: EJB: the details

J026

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful example – The Home Interface

import java.rmi.*;import javax.ejb.*;

public interface DollarConverterHome extends EJBHome { public DollarConverter create() throws RemoteException,

CreateException;}

Page 27: EJB: the details

J027

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful example – The bean

import java.rmi.*;import javax.ejb.*;

public class DollarConverterBean implements SessionBean { private SessionContext sessionContext; public void ejbCreate() {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; }

Page 28: EJB: the details

J028

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful example – The bean

private double euro_dollar_ratio=1;

public double convertInEuro(double dollar) throws java.rmi.RemoteException{

return dollar/euro_dollar_ratio; }

public double convertInDollar(double euro) throws java.rmi.RemoteException{

return euro*euro_dollar_ratio; }

public void setRate(double euro_dollar_ratio) throws java.rmi.RemoteException{

this.euro_dollar_ratio=euro_dollar_ratio; }}

Page 29: EJB: the details

J029

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful example – The descriptor

<?xml version="1.0" encoding="UTF-8"?><!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> <description>A simple demo of a stateful Bean</description> <display-name>An Euro to Dollar Converter Bean</display-name> <enterprise-beans> <session> <description>A converter from Euro to Dollar</description> <ejb-name>DollarConverter</ejb-name> <home>DollarConverterHome</home> <remote>DollarConverter</remote> <ejb-class>DollarConverterBean</ejb-class> <session-type>Stateful</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans>

Page 30: EJB: the details

J030

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful example – The descriptor

<assembly-descriptor> <container-transaction> <method> <ejb-name>DollarConverter</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> <ejb-client-jar /></ejb-jar>

Page 31: EJB: the details

J031

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful example – The client

import javax.ejb.*;import javax.naming.InitialContext;import javax.rmi.PortableRemoteObject;

public class ConverterClient { public ConverterClient() {} public static void main(String[] args) { Object objref=null; DollarConverterHome home=null; DollarConverter bean=null; try { InitialContext ctx=new InitialContext(); objref=ctx.lookup("EDC"); home =(DollarConverterHome)PortableRemoteObject.narrow(

objref,DollarConverterHome.class);

bean=home.create();

Get naming context and object reference

Cast to correct type

Get a bean instance from container

JNDI name

Page 32: EJB: the details

J032

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful example – The client

bean.setRate(0.978);

double euro=1000; System.out.println(euro+" Euro = "

+bean.convertInDollar(euro)+" Dollar");

double dollar=1000; System.out.println(dollar+" Dollar = "

+bean.convertInEuro(dollar)+" Euro");

} catch (Exception e) { e.printStackTrace(); } }}

Do your business

Page 33: EJB: the details

J033

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful example – execution

java -classpath .;%J2EEHOME%\lib\j2ee.jar;…\DollarConverterAppClient.jar -Dorg.omg.CORBA.ORBInitialHost=localhost ConverterClient

1000.0 Euro = 978.0 Dollar1000.0 Dollar = 1022.4948875255624 Euro

Page 34: EJB: the details

J034

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Session Beans Lifecycle: client’s view

Does not existIs not referenced

ExistsIs not referenced

ExistsIs referenced

Does not existIs referenced

Start

home.create()

Clientreleasesreference

Crash,Timeout

Clientreleasesreference

Clientobtainshandle

object.remove(),home.remove(),Crash, timeout

Clientinvokesmethod

Client invokes method (NoSuchObject Exception)

Page 35: EJB: the details

J035

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateless session Beans Lifecycle

ExistsIn the pool

Does not exist

ejbRemoved()

Client invokes method

Client invokes method (NoSuchObject Exception)

1) newInstance()2) setSessionContext(sc)3) ejbCreate()

Client invokes create()Container executes: Client invokes remove()

Container executes:

Page 36: EJB: the details

J036

Marc

o R

onch

ett

i

-

ronch

et@

dit

.unit

n.it

“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento

Stateful session Beans Lifecycle

Passive

ejbPassivate()

ejbActivate()

Exists, method ready

in the pool

Does not existClient invokes remove(), or timeout is reachedContainer executes:ejbRemoved()

Client invokes create()Container executes:1) newInstance()2) setSessionContext(sc)3) ejbCreate()

Client invokes non TX method

Exists, method ready

in TX

Client invokes TX method

Client invokes TX methodAfterBegin()

Client invokes commitbeforeCompletion()afterCompletion(true)

Client invokes rollbackafterCompletion(false)


Recommended