java 遠端呼叫物件方法
原文:https://blog.csdn.net/teaandnoodle/article/details/52277935
RMI基本概念
RMI(Remote Method Invocation,遠端方法呼叫)是從java1.1開始實現的,它大大增強了Java開發分散式應用的能力。RMI對介面有著強烈的依賴,在需要建立一個遠端物件的時候,我們通過傳遞一個介面來隱藏基層的實施細節,所以客戶得到遠端物件的一個控制代碼時,它們真正得到的是介面控制代碼,然後原生代碼通過介面操作遠端物件。通過RMI編寫程式可以非常方便的實現分散式Java應用程式。
建立一個遠端介面時,必須遵守下列規則:
- 遠端介面必須為public屬性(不能是“包訪問”),否則一旦Client試圖裝載一個實現了遠端介面的遠端物件,就會得到一個錯誤;
- 遠端介面必須擴充套件(extends)介面java.rmi.Remote;
- 除了應用程式本身可能丟擲的Exception外,遠端介面中的每個方法還必須在自己的throws從句中宣告丟擲java.rmi.RemoteException(否則執行Server時會丟擲java.rmi.server.ExportException);
- 作為引數或返回值傳遞的一個遠端物件必須宣告為遠端介面,不可宣告為實現類。
RMI開發步驟
- 首先建立遠端介面並宣告遠端方法,需要繼承自java.rmi.Remote(Client和Server需要共享這個介面);
- 建立遠端介面的實現類,這個類必須繼承自java.rmi.server.UnicastRemoteObject(只有Server需要這個實現類,Client可以沒有);
- 編寫Server,繫結埠,註冊物件;
- 編寫Client,監聽埠並查詢物件。
例項
編寫基本的,要被傳輸的bean物件(Person),這個物件可以是基本資料型別或者實現了java.io.Serializable的自定義型別。
- package com.liu.models;
- publicclass Person implements java.io.Serializable {
- privatestaticfinallong serialVersionUID = 1L;
- privateint id;
- private String name;
- privateint age;
- publicint getId() {
- return id;
- }
- publicvoid setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- publicvoid setName(String name) {
- this.name = name;
- }
- publicint getAge() {
- return age;
- }
- publicvoid setAge(int age) {
- this.age = age;
- }
- public String toString() {
- return"id:" + getId() + " age:" + getAge() + " name:" + getName();
- }
- }
建立遠端介面PersonService,這個介面為Server和Client共有的,必須繼承自Remote,同時它的所有方法都必須丟擲java.rmi.RemoteException。
- package com.liu.models;
- import java.rmi.Remote;
- import java.rmi.RemoteException;
- import java.util.List;
- publicinterface PersonService extends Remote {
- public List<Person> getPersonList(int n) throws RemoteException;
- }
建立遠端介面的實現類PersionServiceImpl,需要繼承自UnicastRemoteObject,這個類只需要Server擁有即可。
- package com.liu.models;
- import java.rmi.RemoteException;
- import java.rmi.server.UnicastRemoteObject;
- import java.util.List;
- publicclass PersonServiceImpl extends UnicastRemoteObject implements PersonService{
- privatestaticfinallong serialVersionUID = 1L;
- public PersonServiceImpl() throws RemoteException {
- super();
- }
- @Override
- public List<Person> getPersonList(int n) throws RemoteException {
- System.out.println("Get Persons");
- return Utils.createPersonList(n);
- }
- }
建立Server端程式碼,繫結特定埠,並註冊遠端介面的實現類。
- package com.liu.server;
- import java.rmi.registry.LocateRegistry;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import com.liu.models.PersonServiceImpl;
- import com.liu.models.PersonService;
- publicclass Server {
- publicstaticvoid main(String[] args) {
- try {
- PersonService personService = new PersonServiceImpl();
- LocateRegistry.createRegistry(6600);
- //這個方法也可以實現繫結
- //Naming.rebind("rmi://127.0.0.1:6600/PersonService", personService);
- Context namingContext = new InitialContext();
- namingContext.rebind("rmi://127.0.0.1:6600/PersonService", personService);
- System.out.println("Service Start!");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
建立Client端程式碼,獲取遠端介面對應的遠端實現類,並通過遠端介面操作這個遠端介面。
- package com.liu.client;
- import java.rmi.Naming;
- import java.util.List;
- import com.liu.models.Person;
- import com.liu.models.PersonService;;
- publicclass Client {
- publicstaticvoid main(String[] args){
- try{
- //遠端物件呼叫的埠和註冊類
- PersonService personService=(PersonService)Naming.lookup("rmi://127.0.0.1:6600/PersonService");
- List<Person> personList = personService.getPersonList(5);
- for(Person person : personList){
- System.out.println(person);
- }
- }catch(Exception ex){
- ex.printStackTrace();
- }
- }
- }
這裡還為實現類添加了一個輔助類用來隨機生成Person物件。
- package com.liu.models;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- import com.liu.models.Person;
- publicclass Utils {
- publicstaticfinal Random rand = new
相關推薦
java 遠端呼叫物件方法
原文:https://blog.csdn.net/teaandnoodle/article/details/52277935RMI基本概念RMI(Remote Method Invocation,遠端方法呼叫)是從java1.1開始實現的,它大大增強了Java開發分散式應用的
java遠端呼叫WebService方法
通過AXIS呼叫遠端的web service。已測可用。import javax.xml.rpc.ParameterMode; import org.apache.axis.client.Call;
利用反射列印物件的所有屬性及呼叫物件方法
利用java反射輸出物件的所有屬性,呼叫物件的方法 public class ClassUtil { private static final Logger logger = LoggerFactory.getLogger(ClassUtil.class); public s
java中呼叫start()方法和呼叫run()方法的區別
呼叫start()會開啟執行緒,讓開啟的執行緒去執行run()方法中的執行緒任務,此時無需等待run()方法執行完畢,即可繼續執行下面的程式碼。 呼叫run(),執行緒並未開啟,去執行run()的只有主執行緒,還是要順序指定,要等待run()方法體執行完畢後才可繼續執行下面的程
java 遠端呼叫 rabbitmq
新增管理員使用者,雖然預設(看起來是所有許可權)都有,實際依然雖然手工點選一下 (Set permission) 不然會提示一下錯誤 Exception in thread "main" java.io.IOException &n
Java遠端呼叫shell指令碼(專案實戰)
前言 Java遠端呼叫shell指令碼,需要用到SSH建立連結(類似於xshell連線linux),然後再根據合法的引數進行shell指令碼呼叫 1 首先,從業務層開始,我這裡實現重傳指令碼的業務,程式碼如下. //重傳 public
Java 遠端呼叫RMI 簡單例項之一
這兩天在玩java的遠端呼叫,因為之前一直沒有接觸過,也沒有寫過demo。玩起來還是走了很多彎路的,在網上搜了很多blog,很多技術大牛的blog寫的很不錯,但對於新手來說,有些問題還是沒有講解清楚。花了蠻多時間,終於整理出自己的一個demo。因此附上,供以後學
Java遠端呼叫系列(一)——概覽篇
首先,來幾個基本問題 遠端呼叫是什麼(概念)? 內涵 定義: 本質上來講, 通俗來講, 外延(相關的易混概念) Java中的遠端 VS 客戶端和服務端的互動呼叫 遠端通訊 VS 遠端呼叫 VS 服務和服務的呼叫 遠端呼叫 VS 遠端過程呼叫 VS 遠端物件呼叫
Java的匿名物件/方法
匿名物件就是沒有明確給出名稱的物件.一般匿名物件只使用一次,而且匿名物件只在堆記憶體中開闢空間,而不存在棧記憶體的引用. class Person{ private String name ;
JNI : Java程式呼叫C方法
1、新建一個Java類名稱為:TestJavaCallC 2、在類中新增如下程式碼: package Test; public class TestJavaCallC { public native void sayHello();
java遠端呼叫linux的命令或者指令碼
Java通過SSH2協議執行遠端Shell指令碼(ganymed-ssh2-build210.jar) 使用步驟如下: 1.導包 官網下載: http://www.ganymed.ethz.ch/ssh2/ maven座標: [java] view plain copy print?
java遠端呼叫linux上jar包
首先在遠端伺服器上編寫一個測試指令碼test.sh,並賦予可執行許可權:chmod +x test.sh#!/bin/bash echo $1$1是指令碼傳進來的第一個引數,現在列印一下傳進來的第一個引數。在pom中新增依賴<dependency> <
Nodejs根據字串呼叫物件方法
參考網站:http://blog.csdn.net/kiwi_coder/article/details/8592392 var kiwi = { name:'kiwi', say:function () { console.log("my
Java 遠端呼叫之Hessian簡例
1,匯入jar包 <dependency> <groupId>org.resthub</groupId> <artifactId>hessian&
如何在java中呼叫js方法
有時候因為需要,我們想在java中呼叫js方法,不再是像頁面中一個事件觸發,該如何做到呢?今天下午沒事得時候小研究了下,現跟大家分享一下。不對之處,望大家指正,共同進步! /* * 載入指令碼引擎,並在java中呼叫js方法 */ public void
Java遠端呼叫BPS流程實現流程執行簡單示例
1、簡介:略 2、背景:略 3、目的:自我學習筆記 4、實現過程 (1)、畫出流程圖 如下: 路由活動分支下的條件語句為複雜表示式: ((account<200&&divisionresult.equals("1"))||(account>=
java遠端呼叫介面的原理和範例
Java 遠端處理 Java遠端方法呼叫(RMI)提供了Java程式語言的遠端通訊功能,這種特性使客戶機上執行的程式可以呼叫遠端伺服器上的物件,使Java程式設計人員能夠在網路環境中分佈操作。 建立一個簡單的Java分散式遠端方法呼叫程式可以按以下幾個步驟操作,
java怎樣呼叫DLL方法
前段時間專案需要使用呼叫DLL來控制POS機外設,如錢箱和小票印表機、顧客顯示屏等,於是,我便開始了java呼叫DLL中的方法的探索,事實上,網上的例子還是很多的,一些外部包的例子也有很多,但每個人的實際情況都有所不同,儘管只是一個很簡單的呼叫,也花了我不少時間,在這
在java中呼叫python方法
import javax.script.*; import org.python.util.PythonInterpreter; import java.io.*; importstatic java.lang.System.*; publicclass FirstJavaScript
redis在linux中安裝步驟以及java遠端呼叫redis
redis在linux中安裝步驟: 1.安裝準備環境:安裝gcc yum install gcc-c++ 2.下載redis安裝包 wget http://download.redis.io/releases/redis-5.0.0.tar.gz 3.解壓redis tar