Remoting opruge s RMI

1. Pregled

Java Pozivanje daljinske metode omogućuje pozivanje objekta koji se nalazi u drugom Java virtualni stroj. To je dobro uspostavljena tehnologija, a pomalo nezgrapna za upotrebu, kao što možemo vidjeti u službenom Oracleovom tragu posvećenom toj temi.

U ovom ćemo kratkom članku istražiti kako Remoting proljeća omogućuje iskorištavanje RMI na lakši i čišći način.

Ovaj članak također dovršava pregled programa Remoting proljeća. Pojedinosti o ostalim podržanim tehnologijama možete pronaći u prethodnim obrocima: HTTP Invokers, JMS, AMQP, Hessian i Burlap.

2. Ovisnosti Mavena

Kao što smo učinili u prethodnim člancima, postavit ćemo nekoliko Proljetni čizme aplikacije: poslužitelj koji izlaže udaljeni objekt koji se može pozvati i klijent koji poziva izloženu uslugu.

Sve što trebamo je u proljeće-kontekst tegla - kako bismo je mogli unijeti koristeći bilo što Proljetni čizme pomoćnika koji nam je draži - jer je naš glavni cilj samo imati glavne knjižnice na raspolaganju.

Krenimo sada s uobičajenim proljeće-boot-starter-web - prisjetivši se uklanjanja Mačak ovisnost o izuzimanju ugrađene web usluge:

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat 

3. Poslužiteljska aplikacija

Počet ćemo deklarirati sučelje koje definira uslugu rezerviranja vožnje taksijem, koje će na kraju biti izloženo klijentima:

javno sučelje CabBookingService {Booking bookRide (String pickUpLocation) baca BookingException; }

Tada ćemo definirati grah koji implementira sučelje. Ovo je grah koji će zapravo izvršiti poslovnu logiku na poslužitelju:

@Bean CabBookingService bookingService () {return new CabBookingServiceImpl (); }

Nastavimo s proglašavanjem Izvoznik koja uslugu čini dostupnom klijentima. U ovom ćemo slučaju koristiti RmiServiceExporter:

@Bean RmiServiceExporter izvoznik (implementacija CabBookingService) {Class serviceInterface = CabBookingService.class; RmiServiceExporter izvoznik = novi RmiServiceExporter (); exporter.setServiceInterface (serviceInterface); exporter.setService (implementacija); exporter.setServiceName (serviceInterface.getSimpleName ()); exporter.setRegistryPort (1099); povratni izvoznik; }

Kroz setServiceInterface () pružamo referencu na sučelje koje će se moći daljinski nazvati.

Također bismo trebali pružiti referencu na objekt koji zapravo izvršava metodu setService (). Tada bismo mogli osigurati luku RMI registar dostupno na stroju na kojem poslužitelj radi ako ne želimo koristiti zadani port 1099.

Također bismo trebali postaviti naziv usluge, koji omogućuje prepoznavanje izložene usluge u RMI registar.

Pomoću zadane konfiguracije klijent će moći kontaktirati CabBookingService na sljedećem URL-u: rmi: // HOST: 1199 / CabBookingService.

Pokrenimo napokon poslužitelj. Ne trebamo ni sami pokretati RMI registar jer Proljeće učinit će to automatski za nas ako takav registar nije dostupan.

4. Prijava klijenta

Napišimo sada klijentsku aplikaciju.

Počinjemo izjavljivati RmiProxyFactoryBean koji će stvoriti grah koji ima isto sučelje koje izlaže usluga koja se izvodi na strani poslužitelja i koji će transparentno usmjeravati pozive koje će primiti na poslužitelj:

@Bean RmiProxyFactoryBean usluga () {RmiProxyFactoryBean rmiProxyFactory = novo RmiProxyFactoryBean (); rmiProxyFactory.setServiceUrl ("rmi: // localhost: 1099 / CabBookingService"); rmiProxyFactory.setServiceInterface (CabBookingService.class); povratak rmiProxyFactory; }

Napišimo onda jednostavan kôd koji pokreće klijentsku aplikaciju i koristi proxy definiran u prethodnom koraku:

public static void main (String [] args) baca BookingException {CabBookingService service = SpringApplication .run (RmiClient.class, args) .getBean (CabBookingService.class); BookingOutcome = service .bookRide ("13 Seagate Blvd, Key Largo, FL 33037"); System.out.println (bookingOutcome); }

Sada je dovoljno pokrenuti klijenta da provjeri poziva li uslugu koju je izložio poslužitelj.

5. Zaključak

U ovom uputstvu vidjeli smo kako bismo mogli koristiti Remoting proljeća radi lakšeg korištenja RMI koji će u protivnom zahtijevati niz zamornih zadataka, među ostalim, okretanje registra i definiranje usluga pomoću sučelja koja često koriste provjerene iznimke.

Kao i obično, izvore ćete pronaći na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found