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

Relaterede dokumenter
RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer.

Introduction til.net remoting i C#

Introduction til.net remoting i VB.NET

Send fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.

Singleton pattern i Java

Singleton pattern i C#

Test med JUnit 3. Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det.

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

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

Forskellige Java versioner

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

Note om RMI af Peter Kjærsgaard

Arkitektur for begyndere

Introduktion til ant. Denne artikel beskriver Apache ant, som er et værktøj til at builde Java applikationer med.

Anvendelse af metoder - Programmering

Logging i Java. Den forudsætter kendskab til Java og noget generel udviklings erfaring. Denne guide er oprindeligt udgivet på Eksperten.

Hvad er Objekter - Programmering

Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.

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

XML parsning i Java. Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM.

Bits, bit operationer, integers og floating point

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

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

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

Den forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET.

Java Klasse nedarvninger

Database design for begyndere

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.

Undtagelseshåndtering i C#

Test med NUnit. Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det.

Hvilket sprog er hurtigst

Introduktion til AOP i C#

DM502. Peter Schneider-Kamp

Outline. Chapter 4 Remote Procedure Calls and Distributed Transactions. Remote Procedure Call. Distributed Transaction Processing.

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Geografisk lokalisering i JSP

Med register_globals = On får du automatisk adgang til en række variabelnavne i dit script.

Java web applikationer med Tomcat

Offset til terminalskærm i Java

Introduktion til SQL queries

A Profile for Safety Critical Java

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Nye Java XML API'er

CVS som KS-værktøj E Branching, Merging m.v.

applikation----x----odbc driver manager----foobar ODBC driver----foobar database

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

Upload af billeder/filer for nybegyndere Del. 2

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

At klippe en streng over på det mest hensigtsmæssige sted

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.

DM507 Algoritmer og datastrukturer

Denne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS.

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET

Geografisk lokalisering i ASP.NET

Endnu mere om tilfældige tal

Overblik. Class Loader. Java. Class Libraries. Bytecode. Verifier Java. Source (.java) Just in Time Compiler. Java

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label

DM507 Algoritmer og datastrukturer

Databaseadgang fra Java

Tree klassen fra sidste forelæsning

Introduktion til funktioner, moduler og scopes i Python

DM507 Algoritmer og datastrukturer

CodeDOM - Dynamisk generering og kompilering af kode

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Test af It-komponent

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

Lærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen

Videregående programmering i Java

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

Objektorienterede metoder

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

Dag 10 Flertrådet programmering

Afsending af s vha. ASP

JNI. Denne artikel beskriver JNI (Java Native Interface) som er måden hvorpå Java kan kalde native kode.

DM507 Algoritmer og datastrukturer

SESSION med PHP. En let begynderguide som kan føre dig ind i en verden af muligheder. Denne guide er oprindeligt udgivet på Eksperten.

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.

Hvordan vælger jeg dokumentprofilen?

.NET 4.0 og C# 4.0. Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#.

Denne artikel er til dem der ønsker at vide mere om hvad CSS er og hvad CSS kan bruges til hvad angår WWW.

I denne artikel vil jeg gennemgå hvordan en side for RSS "Live Bogmærke" kan se ud.

Database tips. Den forudsætter lidt kendskab til SQL men er for mindre erfarne. Denne guide er oprindeligt udgivet på Eksperten.dk

Abstrakte datatyper C#-version

Lektion 6. Grundlæggende programmering i VR

Mozilla Firefox (tidligere Firebird): Fremhæve ord

IT projekt person galleri

Hvilket sprog skal jeg lære?

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Distribuerte Objekter. Våren 2010 Professor II Eric Jul F

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Skriftlig eksamen i Datalogi

I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal.

Udvikling af DOTNET applikationer til MicroStation i C#

mac - installation af Maple 2018 med SKOLE-pakken

Netværksprogrammering!

Objektorienteret Programmering

Uploade billeder eller andre filer ved hjælp af php og mysql

Eksempel: Skat i år 2000

TEKNISKE FORHOLD VEDR. ADGANG TIL VP.ONLINE. Brugervejledning

Transkript:

Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer hvordan det virker. Den forudsætter kendskab til Java og generel programmering men ikke til RMI. Skrevet den 16. Feb 2010 af arne_v I kategorien Programmering / Java Historie: V1.0-12/01/2004 - original V1.1-31/01/2004 - forbedret formatering V1.2-09/02/2004 - flere ændringer af formatering V1.3-16/02/2010 - smårettelser Teori RMI bygger på det såkaldte Proxy Pattern (et af de originale patterns fra Design Patterns af Erich Gamma m.fl.). Ideen er at en client kan kalde remote server kode på samme måde som lokal kode. Selve kaldet foregår som: client kode--stub kode--(netværk)--skeleton kode--server kode Stub koden har samme interface som server koden. Stub koden pakker alle argumenter ned (serialiserer) og sender dem over en socket til skeleton koden. Skeleton koden udpakker alle argumenter (deserialiserer) og kalder server koden. Retur værdien sende tilbage på samme vis bare modsat. Både stub og skeleton koden genereres automatisk af et værktøj der kommer med Java SDK. Etableringen af forbindlesen mellem client og server er speciel og involverer noget der hedder RMIRegistry. Serveren connecter til RMIRegistry og registerer sig under et navn. Client connecter til RMIRegistry og slår navnet op og får returneret et stub objekt.

Client connecter så via stub objekt til server skeleton objekt. Eksempel Her kommer nu et simpelt eksempel som illusterer hvordan det virker. Calc.java import java.rmi.remote; // interfacet som er fælles for stub og server // skal extende Remote public interface Calc extends Remote { // metoder i interfacet // skal throwe RemoteException public int add(int a, int b) throws RemoteException; public int mul(int a, int b) throws RemoteException; CalcImpl.java import java.net.malformedurlexception; import java.rmi.naming; import java.rmi.server.unicastremoteobject; // server klassen // skal extende UnicastRemoteObject og implementere interfacet public class CalcImpl extends UnicastRemoteObject implements Calc { // constructor // skal erklæres eksplicit // skal throwe RemoteException public CalcImpl() throws RemoteException { // metoder fra interfacet // må godt men behøver ikke throwe RemoteException public int add(int a, int b) { // lidt debug så vi kan at det virker System.out.println("Vi er blevet bedt om at lave en add"); return (a + b); public int mul(int a, int b) { // lidt debug så vi kan at det virker System.out.println("Vi er blevet bedt om at lave en mul"); return (a * b); // simpelt hoved program til at teste med public static void main(string[] args) { try {

// binde server objekt til RMIRegistry under navnet "Calc" Naming.rebind("Calc", new CalcImpl()); catch (RemoteException e) { catch (MalformedURLException e) { TestCalc.java import java.net.malformedurlexception; import java.rmi.naming; import java.rmi.notboundexception; // test client klasse public class TestCalc { // hoved program public static void main(string[] args) { try { // slå service op i RMIregistry og hent stub objekt Calc c = (Calc)Naming.lookup("Calc"); // check at service virker System.out.println(c.add(2,3)); System.out.println(c.mul(2,3)); catch (MalformedURLException e) { catch (RemoteException e) { catch (NotBoundException e) { Compile.java filer til.class filer: javac *.java Generere stub og skeleton udfra server implementations class fil: rmic CalcImpl Starte RMIRegistry:

rmiregistry Starte server: java CalcImpl Starte client: java TestCalc RMIRegistry skal have stub i classpath. Server skal have interface + implementation + skeleton i classpath. Client skal have stub i classpath. Hvad er RMI godt til og hvad er det ikke godt til RMI er meget godt til client/server løsninger på LAN. Det er ikke så velegnet til løsninger hvor netværket er internettet. Det giver ofte problemer med firewalls og porte der skal åbnes. Man kan godt få det til at virke, men til brug over internet er SOAP RPC over HTTP (Web Services) bedre. Som hovedregel gælder det at fordelene ved RMI er store, når man har mange funktioner med mange argumenter som ikke fylder meget, mens det ikke er velegnet til en funktion med et argument som kan være meget stort (som f.eks. fil upload). Udviklingen i Java I nyere Java versioner behøver man ikke generere stub og skeleton på compile time, da de kan genereres on the fly på runtime. Men koden ovenfor virker stadig. Videre For avancerede emner indenfor RMI se: http://www.eksperten.dk/guide/225 Kommentar af simonvalter d. 12. Jan 2004 1 fint beskrevet :) ser frem til den avancerede. Kommentar af bagnavnet d. 08. Dec 2004 2 Lige hvad jeg som nybegynder havde brug for!

Kommentar af iwatter d. 25. May 2004 3 Kommentar af ttn- d. 30. Jul 2004 4 Igen, som ved stortset alle dine artikler, er der alt for meget kode i forhold til tekst. Forklar og analyser hver der sker. Ellers kan man ikke rigtig kalde det for en artikel. Dog er denne sat til middel, fordi RMI ikke er så avanceret igen. Kommentar af HannnaBanana d. 18. Oct 2011 5 Hmm: Hvordan skal man forstå dette stykke: Compile.java filer til.class filer: javac *.java Generere stub og skeleton udfra server implementations class fil: rmic CalcImpl Starte RMIRegistry: rmiregistry Starte server: java CalcImpl Starte client: java TestCalc RMIRegistry skal have stub i classpath. Server skal have interface + implementation + skeleton i classpath. Client skal have stub i classpath.