Web- og serverprogrammering



Relaterede dokumenter
Videregående programmering i Java

Web- og serverprogrammering

RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU semester 11. desember 2007

IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Databaseadgang fra Java

Webserverprogrammering

Web- og serverprogrammering

Videregående programmering i Java

A Profile for Safety Critical Java

Unitel EDI MT940 June Based on: SWIFT Standards - Category 9 MT940 Customer Statement Message (January 2004)

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Det er muligt at chekce følgende opg. i CodeJudge: og

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

Portal Registration. Check Junk Mail for activation . 1 Click the hyperlink to take you back to the portal to confirm your registration

educasoft - en professionel samarbejdspartner med speciale i uddannelse!

DSB s egen rejse med ny DSB App. Rubathas Thirumathyam Principal Architect Mobile

Hvordan vælger jeg dokumentprofilen?

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende

GEONIS Vand. fact sheet. Planlæg, dokumentér og vedligehold

Arkitektur for begyndere

WINDCHILL THE NEXT STEPS

Design til digitale kommunikationsplatforme-f2013

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)

2a. Conceptual Modeling Methods

Hvad er et distribueret objekt? Plan Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Database for udviklere. Jan Lund Madsen PBS10107

Side 1 af 9. SEPA Direct Debit Betalingsaftaler Vejledning

Forskellige Java versioner

SEPA Direct Debit. Mandat Vejledning Nets Lautrupbjerg 10 DK-2750 Ballerup

BACK-END OG DATA: ADMINISTRATION HVAD ER DE NYE MULIGHEDER MED VERSION 7.1? STEFFEN BILLE RANNES, 4. FEBRUAR 2015

DET KONGELIGE BIBLIOTEK NATIONALBIBLIOTEK OG KØBENHAVNS UNIVERSITETS- BIBLIOTEK. Index

Aktivering af Survey funktionalitet

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/

Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben

SigmaT.

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

Help / Hjælp

Digitaliseringsstyrelsen

Molio specifications, development and challenges. ICIS DA 2019 Portland, Kim Streuli, Molio,

Generalized Probit Model in Design of Dose Finding Experiments. Yuehui Wu Valerii V. Fedorov RSU, GlaxoSmithKline, US

Educasoft 2010 Side 1. Søgemaskineoptimering

The X Factor. Målgruppe. Læringsmål. Introduktion til læreren klasse & ungdomsuddannelser Engelskundervisningen

Løsning af skyline-problemet

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Objektorienteret Programmering

Test af It-komponent

Eksempel på en database: studenter, kurser, eksamener

Microsoft Dynamics C5. version 2012 Service Pack 01 Hot fix Fix list - Payroll

VÆR EFFEKTIV SOM SAS PROGRAMMØR MED SAS ENTERPRISE GUIDE 7.12 GEORG MORSING

Citrix CSP og Certificate Store Provider

UNISONIC TECHNOLOGIES CO.,

Fra idé til virkelig med Azure Mobile Services

Database kursus Forår 2013

RentCalC V Soft-Solutions

Netværk & elektronik

Grundlæggende OOA - OOD

Transkript:

Web- og serverprogrammering EJB dag 9 EJB (Enterprise Java Beans) Entitetsbønner til databasekommunikation Evt.: EJBQL (EJB Query Language) Evt.: EJB: Transaktioner og sikkerhed Læsning: WJSP kapitel 12 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Java 2 Enterprise Edition (J2EE) J2EE platformens dele - til store servere Webserver EJB (Enterprise JavaBeans) CORBA fjernkald af objekter (ikke kun Java, sværere end RMI) JTS (Java Transaction Service) transaktioner (commit, rollback) JMS (Java Message Service) til MQ systemer. tjeneste til at sende og modtage synkrone eller asynkrone meddelelser mellem programmer JavaMail, XML behandling,... Sun varetager 'kun' J2EE specifikationen Mange uafhængige udbydere af J2EE platforme Borland AppServer Oracle IBM WebbSphere JBoss (med åben kildekode) Sun (referenceimplementation)... (>10 andre) J2EE!= udviklingsplatform Mange udbydere har også egen, 'strømlinet' webudviklingsmodel

Enterprise JavaBeans (EJB) - objekter i serveren J2EE container varetager EJB objekter Persistens, transaktioner, sikkerhed Kald kan ske lokalt eller over netværket F.eks. fra JSP sider! EJB koncentrerer sig om programlogik Serveren sørger for al 'benarbejdet' Sessionsbønner repræsenterer et forløb Entitetsbønner repræsenterer data fra en tabel Containerstyret persistens (CMP) Al databasekode bliver genereret af containeren (!) Bønnestyret persistens (BMP) Programmøren skriver selv databasekoden Meddelelses drevne bønner

Princippet i kald af metoder i objekter over netværket Maskine A Maskine B klient kald RMI-skel kald interface til serverobjekt RMI-stub serverobjekt En EJB bønne kører en en J2EE applikationsserver muligvis adskilt fra klienten Hver EJB bønne udgøres af tre stykker kildetekst (to interfaces og en klasse): 1)Et fjerninterface (eng.: remote interface), der specificerer hvordan bønnen kan bruges af klienten. 2)Et hjemmeinterface (eng.: home interface), der specificerer, hvordan bønnen kan fremfindes, oprettes og nedlægges af klienten. 3)En implementationsklasse af bønnen, med den programkode, der beskriver, hvad der skal ske, når de forskellige metoder i fjerninterfacet kaldes.

Implementationen af bønnen package vp.ejb; import java.rmi.remoteexception; import javax.ejb.*; public class VekslerBean implements SessionBean public void ejbcreate() public void setsessioncontext(sessioncontext sc) public void ejbactivate() public void ejbpassivate() public void ejbremove() public double eurotildollar(int euro) throws RemoteException return euro/1.1; Kildekoden i en EJB public double dollartileuro(double dollar) throws RemoteException return dollar*1.1;... plus noget information til EJB containeren (XML) <?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> <enterprise-beans> <session> <description>en veksle-bønne (tilstandsløs sessionsbønne)</description> <display-name>veksler</display-name> <ejb-name>veksler</ejb-name> <!-- JNDI-navn klient bruger --> <remote>vp.ejb.veksler</remote> <!-- fjerninterfacets navn --> <home>vp.ejb.vekslerhome</home> <!-- hjemmeinterfacets navn --> <ejb-class>vp.ejb.vekslerbean</ejb-class><!-- klassenavn på bønnen --> <session-type>stateless</session-type> <!-- bønnen er tilstandsløs --> <transaction-type>container</transaction-type> </session> <!--... beskrivelse af flere bønner kunne komme her... --> </enterprise-beans> </ejb-jar> Fjerninterfacet (hvordan objektet kan bruges af klienten): package vp.ejb; import java.rmi.remoteexception; import javax.ejb.ejbobject; public interface Veksler extends EJBObject public double dollartileuro(double dollar) throws RemoteException; public double eurotildollar(int euro) throws RemoteException; Hjemmeinterfacet (fremfinding) package vp.ejb; import java.rmi.remoteexception; import javax.ejb.*; public interface VekslerHome extends EJBHome public Veksler create() throws RemoteException, CreateException;

Brug af Veksler-bønnen package vp.ejb; import javax.naming.*; // pakken med JNDI import javax.rmi.portableremoteobject; public class BenytVeksler public static void main(string[] args) throws Exception Bruge en EJB // Angiv data til JNDI til dens kontekst. // Disse kunne også i stedet angives i jndi.properties Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "com.evermind.server.rmi.rmiinitialcontextfactory"); env.put(context.security_principal, "admin"); env.put(context.security_credentials, "welcome"); env.put(context.provider_url, "ormi://localhost:23891/current-workspace-app"); Context ctx = new InitialContext(env); VekslerHome hjem = (VekslerHome)ctx.lookup("Veksler"); Hjemmeinterfacet (fremfinding) package vp.ejb; import java.rmi.remoteexception; import javax.ejb.*; public interface VekslerHome extends EJBHome public Veksler create() throws RemoteException, CreateException; Veksler valutaveksler = hjem.create(); double beløb = valutaveksler.eurotildollar(100); System.out.println("100 euro er "+beløb+" dollar."); beløb = valutaveksler.dollartileuro(100); System.out.println("100 dollar er "+beløb+" euro."); Klienten slår først bønnen op med JNDI og får derved fat i hjemmeinterfacet. Ved hjælp af dette oprettes (en fjernreference til) bønnen, som derefter anvendes. Fjerninterfacet (hvordan objektet kan bruges af klienten): package vp.ejb; import java.rmi.remoteexception; import javax.ejb.ejbobject; public interface Veksler extends EJBObject public double dollartileuro(double dollar) throws RemoteException; public double eurotildollar(int euro) throws RemoteException;

Typer af EJB Sessionsbønner repræsenterer et eller andet forløb og indeholder de data der knytter sig til dette forløb Tilstandsløse (eksempel: Veksler bønnen) Flere klienter kan dele samme instans Tilstandsfulde Hver klient får sin egen instans Entitetsbønner repræsenterer data fra en tabel. De er persistente (dvs. deres data 'bakkes op' af en database). Containerstyret persistens (CMP) Al databasekode bliver genereret af containeren (!) Bønnestyret persistens (BMP) Programmøren skriver selv databasekoden Meddelelses drevne bønner

Entitetsbønner med CMP Udvikleren designer databasen... CREATE TABLE kunder (navn varchar(32), kredit float) INSERT INTO kunder VALUES('Jacob', -1799) INSERT INTO kunder VALUES('Brian', 0)... og beder derefter udviklingsværktøjet generere en Kunde-EJB Bruge Kunder-objekter fra klienten Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "com.evermind.server.rmi.rmiinitialcontextfactory"); env.put(context.security_principal, "admin"); env.put(context.security_credentials, "welcome"); env.put(context.provider_url, "ormi://localhost:23891/current-workspace-app"); Context ctx = new InitialContext(env); KundeHome kunderhome = (KundeHome)ctx.lookup("Kunde"); Kunde kunder; // Use one of the create() methods below to create a new instance // kunder = kunderhome.create( ); // kunder = kunderhome.create( java.lang.string navn ); // Retrieve all instances using the findall() method // (CMP Entity beans only) Collection coll = kunderhome.findall(); Iterator iter = coll.iterator(); while (iter.hasnext()) kunder = (Kunde)iter.next(); System.out.println("navn = " + kunder.getnavn()); System.out.println("kredit = " + kunder.getkredit()); System.out.println(); Hjemmeinterfacet (fremfinding) public interface KunderHome extends EJBHome Kunder create() throws RemoteException, CreateException; Kunder findbyprimarykey(string primarykey) throws RemoteException, FinderException; Collection findall() throws RemoteException, FinderException; Fjerninterfacet (hvordan objektet kan bruges af klienten): public interface Kunder extends EJBObject String getnavn() throws RemoteException; void setnavn(string newnavn) throws RemoteException; Float getkredit() throws RemoteException; void setkredit(float newkredit) throws RemoteException;

EJB Query Language

EJB Query Language <entity> <description>entity Bean ( CMP )</description> <display-name>personer</display-name> <ejb-name>personer</ejb-name> <home>mypackage1.personerhome</home> <remote>mypackage1.personer</remote> <local-home>mypackage1.personerlocalhome</local-home> <local>mypackage1.personerlocal</local> <ejb-class>mypackage1.impl.personerbean</ejb-class> <persistence-type>container</persistence-type> <prim-key-class>java.lang.long</prim-key-class> <reentrant>false</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>personer</abstract-schema-name> <cmp-field> <field-name>personer_pk</field-name> </cmp-field> <cmp-field> <field-name>navn</field-name> </cmp-field> <cmp-field> <field-name>kredit</field-name> </cmp-field> <primkey-field>personer_pk</primkey-field> <query> <query-method> <method-name>finddemmedstoerrekredit</method-name> <method-params> <method-param>int</method-param> </method-params> </query-method> <ejb-ql>select object (p) from Personer p where p.kredit >?1</ejb-ql> </query> </entity> </enterprise-beans> </ejb-jar>

EJB: Transaktioner Programmatisk ('i hånden' ) transaktionsstyring Deklarativ transaktionsstyring Metoder markeres med en transaktions attribut Det er containerens opgave at sørge for at oprette, nedlægge, fuldføre og evt. annullere transaktioner i henhold til disse Required metoden er med i den aktuelle transaktion. Der oprettes en ny transaktion af containeren, hvis der ikke er nogen i gang. Supports metoden er med i den aktuelle transaktion. Der oprettes ikke en ny transaktion af containeren, hvis der ikke er nogen i gang. Mandatory metoden skal være med en transaktion. Er der ikke er nogen i gang, kastes undtagelsen TransactionRequiredException. Never metoden må aldrig være med en transaktion. Er der en transaktion i gang, kastes undtagelsen RemoteException af containeren. RequiresNew der oprettes en ny transaktion. Hvis der er en transaktion i gang, suspenderes denne indtil metoden har afsluttet. NotSupported kan ikke være med en transaktion. Hvis der er en transaktion i gang, suspenderes indtil metoden har afsluttet.

Microsoft.NET Here's one cut at an itemized list of the technical components making up the.net platform: C#, a "new" language for writing classes and components, that integrates elements of C, C++, and Java. A "common language runtime", which runs bytecodes in an Internal Language (IL) format. Code and objects written in one language can, ostensibly, be compiled into the IL runtime, once an IL compiler is developed for the language. A set of base components, accessible from the common language runtime, that provide various functions (networking, containers, etc.). ASP+, a new version of ASP that supports compilation of ASPs into the common language runtime (and therefore writing ASP scripts using any language with an IL binding). Win Forms and Web Forms, new UI component frameworks accessible from Visual Studio. ADO+, a new generation of ADO data access components that use XML and SOAP for data interchange. Denne side er ikke under Åben Dokumentlicens

J2EE og.net J2EE En standard Flere udbydere (>15) Flere platforme Ét firma styrer (Sun) Ét sprog (Java) Åben kildekode JDBC RowSet EJB CMP.NET En samling Windowsprodukter Én udbyder Én platform Flere sprog Lukket DataSet (mangler)

Microsoft.NET J2EE Key differentiators C# programming language.net common components (aka the ".NET Framework SDK") Active Server Pages+ (ASP+) IL Common Language Runtime Win Forms and Web Forms ADO+ and SOAP-based Web Services Java programming language Java core API Java ServerPages (JSP) Java Virtual Machine and CORBA IDL and ORB Java Swing JDBC, EJB, JMS and Java XML Libraries (XML4J, JAXP) C# and Java both derive from C and C++. Most significant features (e.g., garbage collection, hierarchical namespaces) are present in both. C# borrows some of the component concepts from JavaBeans (properties/attributes, events, etc.), adds some of its own (like metadata tags), but incorporates these features into the syntax differently. Java runs on any platform with a Java VM. C# only runs in Windows for the foreseeable future. C# is implicitly tied into the IL common language runtime (see below), and is run as just-in-time (JIT) compiled bytecodes or compiled entirely into native code. Java code runs as Java Virtual Machine (VT) bytecodes that are either interpreted in the VM or JIT compiled, or can be compiled entirely into native code. High-level.NET components will include support for distributed access using XML and SOAP (see ADO+ below). ASP+ will use Visual Basic, C#, and possibly other languages for code snippets. All get compiled into native code through the common language runtime (as opposed to being interpreted each time, like ASPs). JSPs use Java code (snippets, or JavaBean references), compiled into Java bytecodes (either on-demand or batch-compiled, depending on the JSP implementation)..net common language runtime allows code in multiple languages to use a shared set of components, on Windows. Underlies nearly all of.net framework (common components, ASP+, etc.). Java's Virtual Machine spec allows Java bytecodes to run on any platform. CORBA allows code in multiple languages to use a shared set of objects, on any platform with an ORB available. Not nearly as tightly integrated into J2EE framework. Similar web components (e.g., based on JSP) not available in Java standard platform, some proprietary components available through Java IDEs, etc. Win Forms and Web Forms RAD development supported through the MS Visual Studio IDE - no other IDE support announced at this writing. Swing support available in many Java IDEs and tools. ADO+ is built on the premise of XML data interchange (between remote data objects and layers of multi-tier apps) on top of HTTP (AKA, SOAP)..NET's web services in general assume SOAP messaging models. EJB, JDBC, etc. leave the data interchange protocol at the developer's discretion, and operate on top of either HTTP, RMI/JRMP or IIOP. Denne side er ikke under Åben Dokumentlicens

Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger du dele af værket i et nyt værk, skal de dele, der stammer fra dette værk, igen frigives under ÅDL Den fulde licens kan ses på http://www.sslug.dk/linuxbog/licens.html