Spec-Zone .ru
спецификации, руководства, описания, API
|
В ядре вычислить механизма протокол, который позволяет задачам быть представленными вычислить механизму, вычислить механизму, чтобы выполнить те задачи, и результаты тех задач, которые будут возвращены клиенту. Этот протокол выражается в интерфейсах, которые поддерживаются вычислить механизмом. Удаленная передача для этого протокола иллюстрируется в следующем числе.
Каждый интерфейс содержит единственный метод. Удаленный интерфейс вычислить механизма, Compute
, позволяет задачам быть представленными механизму. Клиентский интерфейс, Task,
определяет, как вычислить механизм выполняет представленную задачу.
интерфейс определяет удаленно доступную часть, вычислить механизм непосредственно. Вот исходный код для compute.Compute
Compute
интерфейс:
package compute; import java.rmi.Remote; import java.rmi.RemoteException; public interface Compute extends Remote { <T> T executeTask(Task<T> t) throws RemoteException; }
Расширяя интерфейс java.rmi.Remote
, Compute
интерфейс идентифицирует себя как интерфейс, методы которого могут быть вызваны от другой виртуальной машины Java. Любой объект, который реализует этот интерфейс, может быть удаленным объектом.
Как элемент удаленного интерфейса, executeTask
метод является удаленным методом. Поэтому, этот метод должен быть определен как являющийся способным к броску a java.rmi.RemoteException
. Это исключение выдается системой RMI от удаленного вызова метода, чтобы указать, что или коммуникационный отказ или ошибка протокола произошли. A RemoteException
проверенное исключение, таким образом, любой код, вызывающий удаленный метод, должен обработать это исключение или ловящий его или объявляющий это в throws
пункт.
Второй интерфейс, необходимый для вычислить механизма, Task
интерфейс, который является типом параметра к executeTask
метод в Compute
интерфейс.
интерфейс определяет интерфейс между вычислить механизмом и работой, которую это должно сделать, обеспечивая способ запустить работу. Вот исходный код для compute.Task
Task
интерфейс:
package compute; public interface Task<T> { T execute(); }
Task
интерфейс определяет единственный метод, execute
, который не имеет никаких параметров и не выдает исключений. Поскольку интерфейс не расширяется Remote
, метод в этом интерфейсе не должен перечислить java.rmi.RemoteException
в throws
пункт.
Task
у интерфейса есть параметр типа, T
, который представляет тип результата вычисления задачи. Этот интерфейс execute
метод возвращает результат вычисления, и таким образом его тип возврата T
.
Compute
интерфейс executeTask
метод, поочередно, возвращает результат выполнения Task
экземпляр, который передают к этому. Таким образом, executeTask
у метода есть свой собственный параметр типа, T
, это связывает его собственный тип возврата с типом результата переданного Task
экземпляр.
RMI использует механизм сериализации объекта Java, чтобы транспортировать объекты значением между виртуальными машинами Java. Для объекта, который рассмотрят сериализуемый, его class должен реализовать java.io.Serializable
интерфейс маркера. Поэтому, классы, которые реализуют Task
интерфейс должен также реализовать Serializable
, как должен классы объектов, используемых для результатов задачи.
Различные виды задач могут быть выполнены a Compute
возразите, пока они - реализации Task
ввести. Классы, которые реализуют этот интерфейс, могут содержать любые данные, необходимые для вычисления задачи и любых других методов, необходимых для вычисления.
Вот то, как RMI делает, это простое вычисляет возможный механизм. Поскольку RMI может предположить что Task
объекты пишутся в языке программирования Java, реализациях Task
объект, которые были ранее неизвестны вычислить механизму, загружается RMI в виртуальную машину Java вычислить механизма как необходимый. Эта возможность позволяет клиентам вычислить механизма определить новые виды задач, которые будут выполнены на машине сервера, не нуждаясь в коде, который будет явно установлен на той машине.
Вычислить механизм, реализованный ComputeEngine
class, реализации Compute
интерфейс, позволяя различным задачам быть представленным этому звонками в executeTask
метод. Эти задачи выполняются, используя реализацию задачи execute
метод и результаты, возвращаются удаленному клиенту.