Java RMI. Introduksjon. Markus Foss Hans-Gunnar Vold

Like dokumenter
Distributed Component Object Model. Utvikling av distribuerte applikasjoner. Utvidelse av COM for støtte av distribuerte objekter

Java RMI (Remote Method Invocation) Gruppe 9: Ivar Steien Rasmussen Tom Anders Dalseng Andreas Petlund

Hentet fra Suns Totorial:

OOT Seminar H-97 CORBA. Praktisk del

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

Kapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon

DCOM. 21. oktober Mai et al. Hva er egentlig en komponent?

CORBA Objektmodell (Java RMI)

Distribuerte objekter og objekt-basert mellomvare

Distribuerte objekter og objekt-basert mellomvare

Distribuerte objekter og objekt-basert mellomvare

CORBA & Java RMI & J2EE & CORBA CCM OMG & CORBA

HØGSKOLEN I SØR-TRØNDELAG

INF 1010, vår 2005 Løsningsforslag uke 11

J2EE. CMP Entity Beans, Transaksjoner, JSP

INF Notater. Veronika Heimsbakk 10. juni 2012

Løsningsforslag Test 2

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

INF2100. Oppgaver 23. og 24. september 2010

Kapittel 8: Programutvikling

INF1010 våren 2018 tirsdag 23. januar

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

J2EE. Katalogtjenester, JNDI og Enterprise Beans

2. Java-interface og RMI.

Kapittel 7: Mer om arv

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

INF2100. Oppgaver 9. oktober 2012 C 100 X 10

Gruppe 11. Frank Petter Larsen Vegard Dehlen

INF2100. Oppgaver 6. og 11. oktober 2011 C 100 X 10

INF2100. Oppgaver uke 40 og

TDT4100 Objektorientert programmering

INF1010. Grensesnittet Comparable<T>

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Jini. Overblikk. Gruppe 1: Odd-Wiking Rahlff, Arnor Solberg og Finn Haukebøe

UNIVERSITETET I OSLO

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Å lese tall fra en fil, klassen Scanner

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Objekt-interaksjon. INF 5040 høst 2006

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

TOD063 Datastrukturer og algoritmer

Videregående programmering 6

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

INF2100. Oppgaver 26. september til 1. oktober 2007

INF1010 våren Arv og subklasser - del 2

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

Objekt med Java. Harald Yndestad Høgskolen i Ålesund

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Repetisjon. INF gruppe 13

IN 211 Programmeringsspråk. Java. på 20 enkle ark. spesielt for de som kan. Simula. (og gjerne litt C) Ark 1 av 20

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Eksamen Objektorientert Programmering 2012

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

Det finnes ingenting. som kan gjøres med interface. men som ikke kan gjøres uten

Kapittel 5: Objektkommunikasjon

Objekt-interaksjon i objektbasert mellomvare:

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

Http- og WebServices funksjoner

UNIVERSITETET I OSLO

Implementering av caching ved hjelp av Spring. Christian Vestøl

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

INF2100. Oppgave 1. Oppgave 2 4. Løsningsforslag til oppgaver uke 40 og Se figur 1 på neste side.

Del 3: Evaluere uttrykk

Eksamen. Objektorientert Programmering IGR 1372

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

Objektorientert Programmering Ekstraordinær eksamen 2014

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

(MVC - Model, View, Control)

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

INF Notat om I/O i Java

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

INF Oblig 2 semantikksjekk og kodegenerering

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

Fra Python til Java, del 2

Avdeling for ingeniørutdanning Institutt for teknologi

Eksamen i Internetteknologi Fagkode: ITE1526

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Objekt-interaksjon. Plan. INF 5040 høst 2005

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

IN Notat om I/O i Java

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

OPPGAVE 5b og 8b Java Kode

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Objekt-interaksjon i objektbasert mellomvare:

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

INF1010 våren Generalisering -spesialisering Gjenbruk av klasser. Ved arv. Klasse-hierarkier. Stein Gjessing.

INF5110. Oblig 2 presentasjon

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

Tilstandsmaskiner med UML og Java

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

Kapittel 9: Sortering og søking Kort versjon

Transkript:

Java RMI Markus Foss Hans-Gunnar Vold Introduksjon Java Remote Method Invocation Tillater metodekall mellom Java virituelle maskiner Introdusert i Java 1.02 Javas svar på RPC, men er objekt orientert, med de fordelene det innebærer

Hvordan fungerer RMI? Binding RMIRegistry Kan kun inneholde referanser til lokale objekter av sikkerhetsmessige årsaker Et kallende objekt får tak i objektreferanser ved å slå opp her vha en URLformet streng Tjener: Naming.rebind("objektNavn", this) Klient: EnKlasse etobjekt = (EnKlasse)Naming.lookup("rmi://maskinNavn:port/objektNavn");

Binding Lokasjons- og migrasjonstransparens Ønsker man fullstendig lokasjons- og migrasjonstransparens må man benytte seg av JNDI istedenfor RMIRegistry

Parameteroverføring og returverdier Ved referanseoverføring Grensesnittet Remote må arves, og utvides med eksponerte metoder Dette implementeres i en klasse Metoder kaster RemoteException Det sendes en ROR (fjernobjektreferanse) som benyttes for å invokere metoder Ved verdioverføring Klassen må implementere Serializable Lokal kopi instansieres hos mottaker Predefinerte javaklasser som implemeterer Remote grensesnittet RemoteObject RemoteServer Activatable UnicastRemoteObject <servant class>

Dynamisk lasting av klasser Skjer via en filoverføringsprotokoll (lokalt filsystem, ftp eller http) Klienten må definere en URL til en codebase som inneholder den aktuelle klassen Codebase kan være en katalog eller en.jar fil Dynamisk lasting av klasser

Dynamisk lasting av klasser RMI klient RMIRegistry Tjener som har eksportert et fjernobjekt URL lokasjon (fil, ftp eller http) java.rmi.server.codebase= http://maskinnavn/katalognavn Kommunikasjonsprotokoller JRMP (Java Remote Message Protocol) Den opprinnelige Enkel RMI over IIOP Støtter kontekstinformasjon Transaksjoner Sikkerhet I prinsippet kan en hvilken som helst kommunikasjonsprotokoll benyttes, f.eks SOAP

Stub og skeleton kompilator rmic Genererer stubs og skeletons fra de kompilerte implementasjonsklassene For RMI-IIOP F.o.m. Java 1.2 kun stubs for JRMP (bruker reflection til å generere et skeleton i runtime) Er inkludert i Java SDK en Stub og skeleton kompilator

Distribuert garbage collection Reference-counting Leasing benyttes Klienter fornyer vanligvis leasene etter at halve leasingtiden har gått Kan være en flaskehals Sikkerhet Dynamisk lasting av klasser krever en security manager En predefinert: RMISecurityManager Restriktiv, begrenser bl.a lokale I/O operasjoner Lik applets sin security manager Eks: System.setSecurityManager(new RMISecurityManager())

Java RMI kontra CORBA IF definert i Java Kjørbar kode kan lastes dynamisk Distribuert garbage collection Enklere og mindre kildekode CORBA IDL IDL må rekompileres ved innføring av nye subklasser Ingen garbage collection Kodeeksempel Java RMI interface CORBA IDL package SimpleStocks; import java.rmi.*; import java.util.*; public interface StockMarket extends java.rmi.remote float get_price( String symbol ) throws RemoteException; module SimpleStocks interface StockMarket float get_price(in string symbol); ; ;

Kodeeksempel Java klientimplementasjon CORBA klient import java.rmi.*; import java.rmi.registry.*; import SimpleStocks.*; public class StockMarketClient public static void main(string[] args)throws Exception if(system.getsecuritymanager() == null) System.setSecurityManager(new RMISecurityManager()); StockMarket market = (StockMarket) Naming.lookup("rmi://localhost/NASDAQ"); System.out.println("The price of + MY COMPANY is + market.get_price("my_company") ); import org.omg.corba.*; import org.omg.cosnaming.*; import SimpleStocks.*; public class StockMarketClient public static void main(string[] args) try ORB orb = ORB.init(); NamingContext root = NamingContextHelper.narrow( orb.resolve_initial_references("nameservice")); NameComponent[] name = new NameComponent[1]; name[0] = new NameComponent("NASDAQ",""); StockMarket market = StockMarketHelper.narrow(root.resolve(name)); System.out.println("Price of MY COMPANY is " + market.get_price("my_company")); catch( SystemException e ) System.err.println( e ); Kodeeksempel Java tjenerimplementasjon package SimpleStocks; import java.rmi.*; import java.rmi.server.unicastremoteobject; public class StockMarketImpl extends UnicastRemoteObject implements StockMarket public float get_price( String symbol ) float price = 0; for( int i = 0; i < symbol.length(); i++ ) price += (int) symbol.charat( i ); price /= 5; return price; public StockMarketImpl( String name ) throws RemoteException try Naming.rebind( name, this ); catch( Exception e ) System.out.println( e ); CORBA tjener import org.omg.corba.*; import SimpleStocks.*; public class StockMarketImpl extends _StockMarketImplBase public float get_price( String symbol ) float price = 0; for(int i = 0; i < symbol.length(); i++) price += (int) symbol.charat( i ); price /= 5; return price; public StockMarketImpl( String name ) super( name );

Kodeeksempel Java tjener import java.rmi.*; import java.rmi.server.unicastremoteobject; import SimpleStocks.*; public class StockMarketServer public static void main(string[] args) throws Exception if(system.getsecuritymanager() == null) System.setSecurityManager(new RMISecurityManager()); StockMarketImpl stockmarketimpl = new StockMarketImpl("NASDAQ"); CORBA tjener blalbla import org.omg.corba.*; import org.omg.cosnaming.*; import SimpleStocks.*; public class StockMarketServer public static void main(string[] args) try ORB orb = ORB.init(); BOA boa = orb.boa_init(); StockMarketImpl stockmarketimpl = new StockMarketImpl("NASDAQ"); boa.obj_is_ready( stockmarketimpl ); org.omg.corba.object object = orb.resolve_initial_references("nameservice"); NamingContext root = NamingContextHelper.narrow(object); NameComponent[] name = new NameComponent[1]; name[0] = new NameComponent("NASDAQ", ""); root.rebind(name, stockmarketimpl); boa.impl_is_ready(); catch( Exception e ) e.printstacktrace(); Konklusjon RMI er integrert i Java språket og svært enkelt å ta i bruk Mangler transparent støtte for sikkerhet, transaksjoner, osv.

Kilder http://java.sun.com/j2ee/1.3/docs/guide/rm i/index.html http://my.execpc.com/~gopalan/misc/comp are.html http://www.middlewarecompany.com/documents/samplecourse ware.pdf