Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
RMI.docx
Скачиваний:
7
Добавлен:
09.11.2019
Размер:
27.07 Кб
Скачать

Параметры в одной jvm

Простые параметры

Когда в качестве параметра в удаленный метод передается простой тип данных, RMI-система передает их по значению. RMI делает копию простого типа данных и передает ее в удаленный метод. Если метод возвращает простой тип данных, также используется передача по значению.

Значения передаются между JVM в стандартном, машинно-независимом формате. Это позволяет JVM, работающим на разных платформах, надежно взаимодействовать друг с другом.

Объектные параметры

Когда в удаленный метод передается объект, семантика отличается от семантики, используемой в случае с одной JVM. RMI передает между JVM сам объект, а не ссылку на него. Т.е., объект передается по значению. Подобным же образом, когда удаленный метод возвращает объект, в вызывающую программу передается полная копия объекта.

В отличие от простых типов данных, передача объекта в удаленную JVM – не простая задача. Объект Java может быть простым и самодостаточным, но может содержать сложную, похожую на граф, структуру ссылок на другие объекты Java. Поскольку различные JVM не разделяют динамическую память, RMI должен послать указанный объект и все объекты, на которые он ссылается. (Передача большой структуры объектов может потребовать много времени процессора и пропускной способности сети.)

RMI использует технологию, называемую сериализацией объектов, для преобразования объекта в линейный формат, который затем может быть передан по сети. Сериализация объекта, по существу, выравнивает объект и все объекты, на которые он ссылается. Сериализованные объекты могут быть десериализованы в памяти удаленной JVM и подготовлены к использованию программой Java.

Удаленные объектные параметры

RMI представляет третий тип параметров: удаленные объекты. Как вы уже видели, удаленная программа может получить ссылку на удаленный объект через реестр RMI. Существует другой способ передачи клиенту ссылки на удаленный интерфейс – она может быть возвращена клиенту из вызова метода.

/**

* @version 1.00 1996-09-07

* @author Cay Horstmann

*/

import java.rmi.*;

public interface Product extends Remote

{ String getDescription()

throws RemoteException;

}

public class ProductImpl

extends UnicastRemoteObject

implements Product

{

public ProductImpl(String n)

throws RemoteException

{ name = n;

}

public String getDescription()

throws RemoteException

{ return "I am a " + name + ". Buy me!";

}

private String name;

}

package Product;

/**

* @version 1.10 1999-08-21

* @author Cay Horstmann

*/

import java.rmi.*;

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;

import java.rmi.server.*;

import sun.applet.*;

public class ProductServer

{ public static void main(String args[])

{ try

{ System.out.println

("Constructing server implementations...");

ProductImpl p1

= new ProductImpl("Blackwell Toaster");

ProductImpl p2

= new ProductImpl("ZapXpress Microwave Oven");

System.out.println

("Binding server implementations to registry...");

//Naming.bind("toaster", p1);

//Naming.bind("microwave", p2);

// ProductImpl toasterLocateRegistry

// = new ProductImpl("Blackwell Toaster");

// String name = "toasterLocateRegistry";

// ProductImpl stub = (ProductImpl) UnicastRemoteObject.exportObject(toasterLocateRegistry, 0);

// Registry registry = LocateRegistry.getRegistry();

// registry.rebind(name, stub);

Naming.rebind("toaster", p1);

Naming.rebind("microwave", p2);

System.out.println

("Waiting for invocations from clients...");

}

catch(Exception e)

{ System.out.println("Error: " + e);

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]