Design av distribuerade system, några generella mål Lätt att underhålla och modifiera Utvecklare med olika färdigheter ska kunna arbeta oberoende av varandra Systemet ska gå att skala upp, flytta och ha en hög tillgängligt Kod ska vara återanvändbar Systemet ska kunna samarbeta med andra system Utvecklare ska kunna fokusera på utveckling av affärslogik inte systemmekanismer De ska vara möjligt att separera kod med olika utvecklingsbehov Det ska vara enkelt att gå från en web-centrerad design till en komponentbaserad 1 Java 2 Platform Enterprise Edition, J2EE J2EE innehåller stöd för utveckling av system bestående av flera lager Varje lager tjänar sitt speciella syfte 2
J2EE, Components Containers, Connectors Components, de delar i systemet som beskriver applikationerna Containers, den miljö i vilken komponenterna förekommer. Connectors, fungerar som anslutningar mot olika leverantörers programvaror 3 J2EE och några av dess services JNDI, Java Naming and Directory Interface En enkel mekanism för att hitta och ansluta andra objekt JDBC, Java DataBase Connectivity Databasstöd JavaMail Möjlighet att ta i mot och sända mail CORBA Ger möjligheter att ansluta till andra icke Java-system Java Transaction Stöd för transaktioner av operationer XML Stöd för enhetlig dokumenthantering JMS, Java Message Service En teknik för att sända meddelanden mellan olika komponenter i ett distribuerat system 4
Enterpise Java Beans, EJB EJB är komponenter som erbjuder olika tjänster över nätet EJB exekverar alltid på en applikationsserver En applikationsserver är försedd med en EJBcontainer och en Web-container Några exempel på olika applikationservrar är, j2ee, java.sun.com Tomcat, jakarta.apache.org JBoss-Jetty, www.jboss.org Orion, www.orionserver.com WebSphere, www.ibm.com WebLogic, www.beasys.com Jrun, www.jrun.com iplanet, www.iplanet.com Oracle 9i AS, www.oracle.com 5 Typer av EJB Det finns tre olika typer av EJB Session beans Utför någon typ av uppdrag åt klienten Stateless session beans Är ej knuten till någon unik klients session Stateful session beans Knyts till en specifik klients session, dvs är unik för den anropande klienten Entity beans Är persistenta, dvs deras tillstånd sparas permanent. Detta görs med hjälp av en databas Message-Driven Beans Fungerar som lyssnare för JMS-meddelanden 6
Exempel, valuta växling, del 1 Applikationsserver EJB-container Enterprise Java Bean ConverterBean Home-interface ConverterHome Remote-interface Converter Web-container index.jsp 7 Några regler för namngivning Typ Syntax Exempel EJB namn <namn>ejb ConverterEJB EJB JAR namn <namn>jar ConverterJAR EJB class <namn>bean ConverterBean home interface <namn>home ConverterHome remote interface <name> Converter 8
Exemplet, valuta växling, del 2 remote interface import javax.ejb.ejbobject; import java.rmi.remoteexception; import java.math.*; public interface Converter extends EJBObject public BigDecimal dollartoyen(bigdecimal dollars) throws RemoteException; public BigDecimal yentoeuro(bigdecimal yen) throws RemoteException; 9 Exemplet, valuta växling, del 3 home interface import java.io.serializable; import java.rmi.remoteexception; import javax.ejb.createexception; import javax.ejb.ejbhome; public interface ConverterHome extends EJBHome Converter create() throws RemoteException, CreateException; 10
Exemplet, valuta växling, del 4 enterprise bean class import java.rmi.remoteexception; import javax.ejb.sessionbean; import javax.ejb.sessioncontext; import java.math.*; public class ConverterBean implements SessionBean BigDecimal yenrate = new BigDecimal("121.6000"); BigDecimal eurorate = new BigDecimal("0.0077"); public BigDecimal dollartoyen(bigdecimal dollars) BigDecimal result = dollars.multiply(yenrate); return result.setscale(2,bigdecimal.round_up); public BigDecimal yentoeuro(bigdecimal yen) BigDecimal result = yen.multiply(eurorate); return result.setscale(2,bigdecimal.round_up); public ConverterBean() public void ejbcreate() public void ejbremove() public void ejbactivate() public void ejbpassivate() public void setsessioncontext(sessioncontext sc) 11 Exemplet, valuta växling, del 5 JSP-sidan <%@ page import="converter,converterhome,javax.ejb.*, java.math.*, javax.naming.*, javax.rmi.portableremoteobject, java.rmi.remoteexception" %> <%! private Converter converter = null; public void jspinit() try InitialContext ic = new InitialContext(); Object objref = ic.lookup("java:comp/env/ejb/theconverter"); ConverterHome home = (ConverterHome) PortableRemoteObject.narrow(objRef, ConverterHome.class); converter = home.create(); catch (RemoteException ex) System.out.println("Couldn't create converter bean."+ ex.getmessage()); catch (CreateException ex) System.out.println("Couldn't create converter bean."+ ex.getmessage()); catch (NamingException ex) System.out.println("Unable to lookup home: "+ "TheConverter "+ ex.getmessage()); public void jspdestroy()converter = null; %> 12
Exemplet, valuta växling, del 6 JSP-sidan Exemplet, valuta växling, del 7 En deployment descriptor <html> <head> <title>converter</title> </head> <body bgcolor="white"> <h1><b><center>converter</center></b></h1> <hr> <p>enter an amount to convert:</p> <form method="get"> <input type="text" name="amount" size="25"> <br> <p> <input type="submit" value="submit"> <input type="reset" value="reset"> </form> <% String amount = request.getparameter("amount"); if ( amount!= null && amount.length() > 0 ) BigDecimal d = new BigDecimal (amount); %> <p> <%= amount %> dollars are <%= converter.dollartoyen(d) %> Yen. <p> <%= amount %> Yen are <%= converter.yentoeuro(d) %> Euro. <% %> <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'> <ejb-jar> <display-name>converterjar</display-name> <enterprise-beans> <session> <display-name>converterbean</display-name> <ejb-name>converterbean</ejb-name> <home>converterhome</home> <remote>converter</remote> <ejb-class>converterbean</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-beans> </ejb-jar> </body> </html> 13 14