Presentation laddar. Vänta.

Presentation laddar. Vänta.

Enterprise Java Beans (EJB)

Liknande presentationer


En presentation över ämnet: "Enterprise Java Beans (EJB)"— Presentationens avskrift:

1 Enterprise Java Beans (EJB)
Föreläsning 6 Enterprise Java Beans (EJB)

2 Översikt Historik Introduktion till EJB
Hur har det sett ut fram till idag? Behovet av EJB Introduktion till EJB Grunderna Strukturen Ett EJB utvecklingsexempel

3 Historik Fas ett Fas två Fas tre Stordatorer, ”mainframes”
Dominerade 60-talet till 80-talet Fas två Klient/Server 80-talet och 90-talet Fas tre N-tier, komponentbaserat, webb-access, applikationsservrar 2000

4 Fas ett Terminal Affärs- DBMS SNA logik Ex. DB2 Terminal CICS
Mainframe

5 Fas ett Fördelar Nackdelar Skalar bra Relativt lätt att underhålla
Det enda alternativet Nackdelar Dyrt Teckenbaserade användargränssnitt Mycket omodernt Försök och hitta några som vill jobba med detta!

6 Fas ett: Dominerande tekniker
OS MVS(OS/390) Access Protokoll SNA Applikations stöd CICS, IMS Affärslogik utvecklingsspråk Cobol Databaser DB2, IMS ... Affärs- logik DBMS Ex. DB2 CICS Mainframe SNA Terminal Terminal

7 Fas två Fördelar Nackdelar GUI Billigare Mer flexibelt
Tillåter innovation Nackdelar Skalar sämre Ingen separat applikations stöd Mindre pålitligt än stordatorsystem Inte optimalt för webbaccess

8 Fas två: Dominerand tekniker
OS Klient Windows, OS/2 Server Unix, Windows NT, OS/2 Access protokoll Olika databasprotokoll Affärslogik utvecklingsspråk PowerBuilder, Visual Basic Databaser Oracle, SQL Server, Informix ... Affärs- logik Klient Affärs- logik DBMS Server

9 Fas tre DBMS Browser- klient Webb- server Affärs- logik DBMS
Applikations- server Objekt protokoll Icke browser klient Gammalt system

10 Fas tre Fördelar Nackdelar Lätt att distribuera Skalar bra Komplext
Ont om utvecklare

11 Komponenttekniker Common Object Request Broker Architechture (CORBA)
Java-baserade komponenter Microsofts Component Objekt Model (COM)                                                                                                                       Objekt Orientering har nästan blivit en självklarthet idag

12 CORBA Fördelar Nackdelar Många OS
Definierar IIOP, språk neutralt protokoll Nackdelar Skakig standard Små företag som är det stora spelarna Tappar mark till J2EE

13 Javabaserade lösningar
Maskin X Maskin Y Klient JavaBean Java Applikation Java Applikation JRMP,IIOP EJB Container EJB JRMP,IIOP

14 Utvärdering av Java Fördelar Nackdelar
Stöd för endast ett språk, gör valet enkelt Tillgängligt på många operativsystem Nackdelar Relativt nytt Kan vara långsammare än ”native” kod JavaBeans konceptet fick inte riktigt genomslag

15 COM-baserade lösningar
Maskin X Maskin Y Klient ActiveX Windows Applikation Remote Server COM DCOM COM+ Container COM DCOM

16 Utvärdering av COM Fördelar Nackdelar En komplett lösning
Den mest använda komponenttekniken idag Inte lika komplex som J2EE Nackdelar Man blir helt beroende av en leverantör

17 Datahantering Datan finns typiskt i något sorts ”database Management system (DBMS) Varje DBMS har sitt eget kommunikation system Widows DNA och J2EE har egna databasoberoende gränssnitt

18 De två alternativen Microsofts Universal Data Access (UDA) J2EE JDBC
En övergripande maknadsförings uttryck Inkluderar ODBC, OLE DB, AkiveX Data Objects (ADO) J2EE JDBC Motsvarar ADO Kan användas över ODBC

19 Object Transaction Monitors
Vanliga problem vid ”middle-tier” affärslogik Säkerhet Resurspoolning Persistens Trådning Transaktioner Skalbarhet

20 Transaction Processing Monitors
Så kallade TP monitorer ”Operativsystem” för affärssystem Transakstions stöd Resurshantering Tidigare varianter Mainframe-baserade: IBMs CICS (1968) Unix-baserade: BEAs Tuxedo Använder ofta Remote Procedure Call (RPC) Inte objektorienterat

21 Nutida TP monitorer Objekt dominerar mjukvaruutvecklingen
Tidigare varianter var inte designade för det Object Transaction Monitors (OTM) eller Component Transaction Monitors(CTM) Ledande tekniker Microsoft transaction Manager (MTS)/COM+ Enterprise JavaBeans (EJB)

22 MTS/COM+ Kom i slutet av 96 MTS är en standard-del i Windows NT
Byggt på COM Bara på Microsoft plattformen MTS är en standard-del i Windows NT COM+ är en standard-del i Windows 2000 COM+ är nästa version av MTS plus lite till

23 Enterprise JavaBeans EJB 1.0 specifikationen släpptes våren -98
EJB 1.1 i slutet av –99 Skapat av Sun, IBM, Oracle m.f. Stöd av många marknadsaktörer BEA WebLogic Server IBM WebSphere Application Server Oracle Application Server Sun/Netscape iPlanet Server SilverStream Application Server Orion... osv 85% av marknaden Write once, Run Anywhere

24 Fram till nu Fas ett Fas två Fas tre IBM stordatormiljö dominerade
Ingen enskild leverantör stod ut Fas tre Två möjligheter Windows DNA J2EE                                                                                                             

25 Grunderna om EJB En kombination av server-side komponentteknik och distribuerade objekthantering för att förenkla och standardisera utvecklingen av större affärskritiska applikationer EJB Containern tar hand om Säkerhet Resurspoolning Persistens Trådning Transaktioner Skalbarhet                                                                                                              Skriva en Trådad concurrent applikation vanligtvis ganska klurigt. Skriva en Distribuerad applikation också klurigt. Skriva en Trådad och Distribuerad applikation kan vara riktigt svårt.

26 EJB är middleware BrokerBean ber man om att göra en affär medan Den andra för att checka kreditvärdighet.

27 Vad är en Enterprise Java Bean?
En återanvändbar server-side komponent som innehåller affärslogik dvs utför beräkningar och tillhandahålla eller manipulerar data. Tillhandahåller tjänster Består av: En vanlig Java klass med business logik Två Java interface, mot klienten. Remote Home Precis som en Java klass finns det instanser av en bean.

28 Olika sorters böner Session Beans Entity Beans
objekt som representerar en konversation med en klienten Stateful Stateless Entity Beans Bean-Managed Container-Managed Oftast substantiv

29 Entity Beans Persistens Delad åtkomst Primär nyckel
Efter som en entity böna sparas i någon slags datakälla existerar den längre än applikationen Överlever system kraschar Delad åtkomst Primär nyckel

30 Bean-Managed Persistence
Med Bean-Managed Persistence skriver man själv SQL-satserna för bönan ejbCreate metoden kommer exempelvis att utföra en INSERT sats Detta illustreras med ett utvecklingsexempel myaccount                                                                                                                      

31 Container-Managed Persistence
Automatisk generering av SQL När klienten skapar en ny entity bean genererar containern en SQL INSERT-sats Koden Bean-utvecklaren skriver innehåller alltså ingen SQL Som ett resultat av detta är denna sortens böna oberoende av databasen vilket gör att den är helt portabel Fördelar Mindre kod Mindre beroenden -> mer portabel

32 myaccount-Exempel Myaccount tabellen skapade på följande sätt:
CREATE TABLE myaccount (id VARCHAR(3) CONSTRAINT pk_account PRIMARY KEY, firstname VARCHAR(24), lastname VARCHAR(24), balance DECIMAL(10,2)); För att skriva en Entity böna behövs följande: Entity Bean Klass (AccountEJB) Home Interface (AccountHome) Remote Interface (Account)

33 Entity Bean Class AccountEJB
exemplet AccountEJB uppfyller dessa entity bean krav Den implementerar EntityBean interface:et Klassen är public definierad Klassen får ej vara definierad abstract eller final Den impementerar en eller fler ejbCreate och ejbPostCreate metoder Implementerar ”finder” metoder (endast bean-managed persistence) Den har implementationen av affärslogiken. Den har en tom konstruktor

34 EntityBean Interface EntityBean interface:et ärver av EnterpriseBean interface:et, vilket i sin tur ärver av Serializable interface:et. EntityBean interface:et deklarerar ett gäng metoder,så som ejbActivate och ejbLoad, som man måste implementera i sin entity bean klass Entity Bean exemplet

35 Myaccount exempel (forts.)
ejbCreate metoden i AccountEJB stoppar in entity raden i databasen genom den privata insertRow metoden, som exekverar SQL insert satsen Regler om ebjCreate metoden Access modifieraren måste vara publik Retur typen skall vara primärnyckeln (bean-managed persistence) Argumenten måste vara godkännbara för Java RMI. Metod modifieraren kan inte vara final eller static Entity Bean exemplet

36 Myaccount exempel (forts.)
public String ejbCreate(String id, String firstName, String lastName, double balance) throws CreateException { if (balance < 0.00) { throw new CreateException ("A negative initial balance is not allowed."); } try { insertRow(id, firstName, lastName, balance); catch (Exception ex) { throw new EJBException("ejbCreate: " + ex.getMessage()); this.id = id; this.firstName = firstName; this.lastName = lastName; this.balance = balance; return id; } Möjligt med flera olika create metoder Entity Bean exemplet

37 Myaccount exempel (forts.)
ejbPostCreate Metoden För varje ejbCreate behövs en ejbPostCreate (tom) ejbRemove Metoden För att ta bort en böna Systemfel: throw javax.ejb.EJBException Applikationsfel: javax.ejb.RemoveException ejbLoad och ejbStore Synkroniserar instans variabler Kallas på av containern Vid en metod som använder en transaktion kallar containern först på ejbLoad för att uppdatera variablerna, utför logiken och avslutningsvis anropar ejbStore Entity Bean exemplet

38 Myaccount exempel (forts.)
public void ejbLoad() { try { loadRow(); } catch (Exception ex) { throw new EJBException("ejbLoad: " + ex.getMessage());} public void ejbStore() { storeRow(); javax.ejb.NoSuchEntityException. This exception is a subclass of EJBException. Because EJBException is a subclass of RuntimeException, you do not have to include it in the throws clause. When NoSuchEntityException is thrown, the EJB container wraps it in a RemoteException before returning it to the client. Entity Bean exemplet

39 Myaccount exempel (forts.)
Finder Metoder Hittar rätt böna åt klienter Account jones = home.findByPrimaryKey("836"); ... Collection c = home.findByLastName("Smith"); Collection c = home.findInRange(20.00, 99.00); Returnerar antingen primärnyckeln eller en Collection av primärnycklar Obligatorisk metod Entity Bean exemplet

40 Myaccount exempel (forts.)
I vårt exempel ser det ut på följande sätt public String ejbFindByPrimaryKey(String primaryKey) throws FinderException { boolean result; try { result = selectByPrimaryKey(primaryKey); } catch (Exception ex) { throw new EJBException("ejbFindByPrimaryKey: " + ex.getMessage()); } if (result) { return primaryKey; } else { throw new ObjectNotFoundException ("Row for id " + primaryKey + " not found."); } } The ejbFindByPrimaryKey method may look strange to you, because it uses a primaryKey for both the method argument and return value. However, remember that the client does not call ejbFindByPrimaryKey directly. It is the EJB container that calls the ejbFindByPrimaryKey method. The client invokes the findByPrimaryKey method, which is defined in the home interface Entity Bean exemplet

41 Regler för finder metoder
The ejbFindByPrimaryKey method must be implemented. A finder method name must start with the prefix ejbFind. The access control modifier must be public. The method modifier cannot be final or static. The arguments and return type must be legal types for Java RMI. The return type must be the primary key or a collection of primary keys. The throws clause may include the javax.ejb.FinderException, and other exceptions that are specific to your application. If a finder method returns a single primary key, it should throw the javax.ejb.ObjectNotFoundException if the requested entity does not exist. The ObjectNotFoundException is a subclass of FinderException. If a finder method returns a collection of primary keys and it does not find any objects, it should return null. Entity Bean exemplet

42 Affärslogiken De metoder som inte är obligatoriska brukar kallas för affärslogik Dessa metoder brukar vanligtvis inte använda databasen direkt Tillåter separation mellan affärslogik och databasaccess Entity Bean exemplet

43 Affärslogiken för AccountEJB
public void debit(double amount) throws InsufficientBalanceException { if (balance - amount < 0) { throw new InsufficientBalanceException(); } balance -= amount; }   public void credit(double amount) { balance += amount; }   public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public double getBalance() { return balance; } Entity Bean exemplet

44 Affärslogiken för AccountEJB (forts.)
Från AccountClient kan det se ut på detta vis: Account duke = home.create("123", "Duke", "Earl", 0.00); duke.credit(88.50); duke.debit(20.25); double balance = duke.getBalance(); Kraven på affärsmetoderna är samma för både session och entity Access modifieraren måste vara publik Argumenten måste vara godkännbara för Java RMI. Metod modifieraren kan inte vara final eller static The method name must not conflict with a method name defined by the EJB architecture. For example, you cannot call a business method ejbCreate or ejbActivate. Entity Bean exemplet

45 Sammanfattning av AccountEJB
Detta är de metoderna som använder databasen Affärsmetoderna gjorde inte det i detta exempel men det är en designfråga Entity Bean exemplet

46 Home Interface Entity Bean exemplet Home interface:et definierar de metoder som tillåter en klient att skapa och hitta en entity böna. import java.util.Collection; import java.rmi.RemoteException; import javax.ejb.*; public interface AccountHome extends EJBHome { public Account create(String id, String firstName, String lastName, double balance) throws RemoteException, CreateException; public Account findByPrimaryKey(String id) throws FinderException, RemoteException; public Collection findByLastName(String lastName) public Collection findInRange(double low, double high) }

47 Home Interface (forts.)
Varje create metod i home interface:et måste formas efter följande krav: Den har samma antal och typ av argument som dess matchande ejbCreate metod i enterprise beans klassen. Den returnerar remote interface:et av enterprise bönan. throws satsen har samma exceptions som throws satsen i motsvarande ejbCreate och ejbPostCreate metoder. throws satsen inneåller java.rmi.RemoteException och javax.ejb.CreateException Entity Bean exemplet

48 Home Interface (forts.)
Varje finder metod i home interface:et måste formas efter följande krav: Den har samma antal och typ av argument som dess matchande metod i enterprise beans klassen. Den returnerar remote interface:et av enterprise bönan eller en Collection av dylika. throws satsen har samma exceptions som throws satsen i motsvarande medod i bönan. throws satsen inneåller java.rmi. FinderException och javax.ejb. RemoteException Entity Bean exemplet

49 Remote Interface Remote interface:et ärver av javax.ejb.EJBObject och definierar affärsmetoderna. import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Account extends EJBObject { public void debit(double amount) throws InsufficientBalanceException, RemoteException; public void credit(double amount) throws RemoteException; public String getFirstName() public String getLastName() public double getBalance() } Entity Bean exemplet

50 Remote Interface (forts.)
Kraven för metoderna i remote interface är samma för både session och entity bönor: Varje metod i remote interface:et måste matcha en metod i enterprise bean klassen. Argumenten måste vara godkännbara för Java RMI. throws satsen måste innehålla java.rmi.RemoteException. Entity Bean exemplet

51 Session Beans En sessionböna representerar en enskild klient på J2EE servern. Klient anropar remote tjänster genom att kalla på metoder i sessionsbönan. Sessions bönan döljer komplext förfarand från klienten. Som indikeras av namnet så liknar sessionsbönan ett klient session. En sessionsböna delas inte av fler användare. Den är inte heller persistent. Session Beans beskriver ofta processer eller tjänster som använder sig av noll eller flera anrop till Entiy beans När klienten avslutar slutas bönan associeras med klienten

52 Session Beans(forts.) Stateful Session Beans Stateless Session Beans
Håller reda på information mellan förfrågningar Kan ha create metoder som tar argument Stateless Session Beans Skalar bättre home interface:et måste ha en create metod utan argument Stateless Böner erbjuder dessutom bättre prestanda eftersom servern inte sparar informationen Stateful kan ligga på sekundärt minne tillfälligt

53 Session Beans(forts.) Du bör välja en stateful böna om något av föjande är sant: Bönans tillstånd måste bli initialiserat när den skapas Bönan ska hålla information om klienten mellan anrop Klienten är en interaktiv tillämpning Eftersom det primära syftet för en sessionsböna är att representera en klient i en J2EE server, kommer de flesta bönerna vara stateful The bean performs a task that is not tailored to the needs of a particular client. For example, you might use a stateless session bean to fetch from a database a commonly used set of data. The bean doesn't need to hold information about the client across method invocations.

54 En Sessionsbönas livscykel
Stateful Stateless

55 Java Naming And Directory Interface (JNDI)
Alla distribuerade objekt använder någon sorts namntjänst En namntjänst är något som erbjuder en mekanism för att klienter skall kunna lokalisera objekt Object binding Lookup API

56 JNDI (forts.) javax.naming.Context ctx =
new javax.naming.InitialContext(properties); Object home = ctx.lookup(JNDI_NAME); TraderHome traderHome = (TraderHome) narrow(home, TraderHome.class); } catch (NamingException ne) {

57 Deployment descriptor
ejb-jar.xml <?xml version="1.0" ?>   <!DOCTYPE ejb-jar (View Source for full doctype...)> - <ejb-jar>   <small-icon>images/green-cube.gif</small-icon> - <enterprise-beans> - <session>   <small-icon>images/orange-cube.gif</small-icon>   <ejb-name>statelessSession</ejb-name>  <home>examples.ejb.basic.statelessSession.TraderHome</home> <remote>examples.ejb.basic.statelessSession.Trader</remote>   <ejb-class>examples.ejb.basic.statelessSession.TraderBean</ejb-class>   <session-type>Stateless</session-type>   <transaction-type>Container</transaction-type>   </session>   </enterprise-beans> - <assembly-descriptor> - <container-transaction> - <method>   <method-intf>Remote</method-intf>   <method-name>*</method-name>   </method>   <trans-attribute>Required</trans-attribute>   </container-transaction>   </assembly-descriptor>   </ejb-jar>

58 Deployment descriptor(forts.)
weblogic-ejb-jar.xml    <?xml version="1.0" ?>   <!DOCTYPE weblogic-ejb-jar (View Source for full doctype...)> - <weblogic-ejb-jar> - <weblogic-enterprise-bean>   <ejb-name>statelessSession</ejb-name> - <caching-descriptor>   <max-beans-in-free-pool>100</max-beans-in-free-pool>   </caching-descriptor>   <jndi-name>statelessSession.TraderHome</jndi-name>   </weblogic-enterprise-bean>   </weblogic-ejb-jar>

59 Transaction Scope Om metod A misslyckas efter den har kallat B och B har lyckats ska då B rullas upp eller inte???

60 Transaction Scope Required - B rullas upp om A kördes i en Transaktion
RequiresNew - B rullas inte upp Mandatory - A måste köras i en Transaktion NotSupported - Inget som händer i B påverkar A Never - A får inte köras i en Transaktion

61 Bygga och Installera en Bean
Kompilera källkoden Skapa en Deployment descriptor m.h.a. en wizard eller kopiera Packa filerna i en ejb.jar fil Lägga in ejb.jar i en applikation Ladda upp applikationen på servern WeatherReporterHome.class WeatherReporter.class WeatherReporterBean.class ejb-jar.xml manifest.mf ejb.jar

62 Dessutom Labb3 Labb 4 Obligatorisk gästföreläsning nästa gång!
Lydelsen Testomgång: Prova att göra exempel innan ni startar!! Labb 4 Designfas Vad är det som skall göras och hur Implementationsfas Systembeskrivning Betygspåverkande Muntligt (redovisning) Skriftligt (inlämning vid redovisningstillfället) Obligatorisk gästföreläsning nästa gång!


Ladda ner ppt "Enterprise Java Beans (EJB)"

Liknande presentationer


Google-annonser