игра брюс 2048
Главная / Программирование / Построение распределенных систем на Java / Тест 5

Построение распределенных систем на Java - тест 5

Упражнение 1:
Номер 1
Какие из следующих утверждений являются верными:

Ответ:

 (1) Java RMI может быть использована только в том случае, если все взаимодействующие компоненты системы разработаны с использованием Java 

 (2) Java RMI является универсальной технологией, она не накладывает никаких ограничений на технологии разработки взаимодействующих компонентов 

 (3) Java RMI может использоваться только в том случае, если взаимодействующие компоненты выполняются на узлах с одинаковой аппаратной платформой 


Номер 2
Java RMI может быть использована только в том случае, если:

Ответ:

 (1) все взаимодействующие компоненты распределенной системы выполнены на Java 

 (2) между компонентами системы передаются данные только системных, встроенных типов, передача с помощью Java RMI пользовательских типов данных невозможна 

 (3) все компоненты системы расположены на одном узле 


Номер 3
Какие из следующих утверждений являются верными:

Ответ:

 (1) Java RMI при передаче в качестве параметров пользовательских объектов, для их передачи по сети использует механизм сериализации Java 

 (2) Java RMI не может быть напрямую использована в том случае, если необходимо связать компоненты, выполненные не на Java 

 (3) для того, чтобы программа на Java стала программой, использующей Java RMI, ее необходимо откомпилировать с особым ключом компиляции. Никаких дополнительных действий - не требуется 


Упражнение 2:
Номер 1
Класс, методы экземпляра которого могут вызываться удаленно через Java RMI должен:

Ответ:

 (1) реализовывать интерфейс, который наследует от интерфейса java.rmi.Remote 

 (2) реализовывать интерфейс Serializable 

 (3) наследовать от класса Thread 


Номер 2
Определение удаленного интерфейса RMIExample должно выглядеть следующим образом:

Ответ:

 (1) public interface RMIExample extends Remote 

 (2) public interface RMIExample implements Remote 

 (3) public interface RMIExample extends RMI. 


Номер 3
Какие из следующих утверждений являются верными:

Ответ:

 (1) в удаленном интерфейсе, наследующим от java.rmi.Remote, определяются те методы объекта, которые могут быть вызваны удаленно 

 (2) в удаленном интерфейсе, наследующим от java.rmi.Remote, должны быть определены все методы объекта, как те, которые могут быть вызваны удаленно, так и остальные 

 (3) в удаленном интерфейсе, наследующим от java.rmi.Remote, не должно быть определено ни одного метода. Те методы, которые могут быть вызваны удаленно, объект самостоятельно регистрирует в системе, после своего создания 


Упражнение 3:
Номер 1
Класс BillingServiceImpl:

Ответ:

 (1) реализовывает методы, определенные в удаленном интерфейсе BillingService 

 (2) является классом, методы экземпляра которого могут быть вызваны удаленно, посредством Java RMI 

 (3) наследует от класса UnicastRemoteObject, что позволяет передавать экземпляры BillingServiceImpl по сети, используя механизм сериализации 


Номер 2
В классе BillingServiceImpl для удаленного вызова посредством Java RMI доступны следующие методы:

Ответ:

 (1) конструктор 

 (2) addNewCard 

 (3) getCardBalance 


Номер 3
Утилита rmic:

Ответ:

 (1) формирует описание удаленного интерфейса 

 (2) требует для своей работы исходного кода для определения удаленного интерфейса 

 (3) требует для своей работы исходного кода для класса, реализующего удаленный интерфейс 


Упражнение 4:
Номер 1
Для того чтобы методы, определенные в удаленном интерфейсе могли принимать параметры типа "класс, определенный пользователем", необходимо:

Ответ:

 (1) определить класс, используемый в качестве типа для передаваемого параметра, как реализующий интерфейс Serializable 

 (2) определить класс, используемый в качестве типа для передаваемого параметра, как реализующий интерфейс Remote 

 (3) определить класс, используемый в качестве типа для передаваемого параметра, как наследующий от UnicastRemoteObject 


Номер 2
При вызове метода addNewCard, экземпляр Card передается на сервер как:

Ответ:

 (1) копия объекта, после передачи данных сервером, объекты могут быть независимо изменены на клиенте и сервере 

 (2) ссылка на объект, после изменения которой на сервере, меняется объект на клиенте 

 (3) сам объект непосредственно. После передачи он перестает существовать на клиенте и доступен только на сервере 


Номер 3
Какие из следующих утверждений являются верными:

Ответ:

 (1) в качестве типа аргумента для метода, могущего быть вызванным удаленно посредством Java RMI, могут выступать только классы, содержащие поля и не содержащие методы 

 (2) в качестве типа аргумента для метода, могущего быть вызванным удаленно посредством Java RMI, могут выступать только классы, помеченные как реализующие интерфейс Serializable 

 (3) в качестве типа аргумента для метода, могущего быть вызванным удаленно посредством Java RMI, могут выступать только классы, конструктор которых не имеет передаваемых в него аргументов 


Упражнение 5:
Номер 1
В какой строке кода BillingServiceImpl происходит чтение из сети аргументов, передаваемых в метод processOperations:
1  // BillingServiceImpl.java
2  // BillingServiceImpl реализует удаленный интерфейс BillingService для 
3  // предоставления удаленного объекта BillingService
4  package com.asw.rmi.ex2;
5   
6  // Набор базовых пакетов Java
7  import java.rmi.*;
8  import java.util.*;
9  import java.rmi.server.*;
10   
11  public class BillingServiceImpl extends UnicastRemoteObject 
12  implements BillingService {
13   
14  private  Hashtable hash;  // хэш-таблица для хранения карт
15  // инициализация сервера
16  public BillingServiceImpl() throws RemoteException{
17  super();
18  hash = new Hashtable();
19  }
20   
21  // реализация метода addNewCard интерфейса BillingService
22  public void addNewCard(Card card) throws RemoteException {
23   
24  hash.put(card.cardNumber, card);
25  }
26   
27  // реализация метода processOperations интерфейса BillingService
28  public void processOperations(CardOperation[] operations) 
29  throws RemoteException {
30  for (int i=0;i<operations.length;i++){
31  Card c = (Card)hash.get(operations[i].card);
32  if (c==null) throw new NotExistsCardOperation();
33  c.balance+=operations[i].amount;
34  hash.put(operations[i].card,c);
35  }
36  }
37   
38  // реализация метода getCard интерфейса BillingService
39  public Card getCard(String card) throws RemoteException{
40  Card c = (Card)hash.get(card);
41  return c;
42  };
43   
44  // запуск удаленного объекта BillingService
45  public static void main (String[] args) throws Exception {
46  System.out.println("Initializing BillingService...");
47   
48  // создание удаленного объекта
49  BillingService service = new BillingServiceImpl();
50   
51  //задание имени удаленного объекта
52  String serviceName = "rmi://localhost/BillingService";
53  // регистрация удаленного объекта BillingService в реестре rmiregistry
54  Naming.rebind(serviceName, service);
55  }
56   
57  }

Ответ:

 (1) 31 

 (2) 33 

 (3) в коде класса BillingServiceImpl нет операторов, осуществляющих чтение передаваемых клиентом аргументов из сети 


Номер 2
Почему в коде BillingServiceImpl отсутствуют операторы чтения данных из сети?

Ответ:

 (1) чтение из сети осуществляется в коде классов, расположенных выше по иерархии наследования 

 (2) класс BillingServiceImpl должен быть дополнен операторами чтения из сети 

 (3) чтение осуществляется в строке 31 


Номер 3
Возвращаемым значением для метода, вызываемого удаленно, могут быть:

Ответ:

 (1) значения системных типов данных 

 (2) значение любого пользовательского типа данных, в том случае, если этот тип - сериализуем 

 (3) значение любого пользовательского типа данных, без ограничения на возможность его сериализации 


Упражнение 6:
Номер 1
В строке 18, в классе BillingClient:
1  // BillingClient.java
2  // BillingClient использует удаленный объект BillingService для работы 
3  // с информацией на пластиковых картах
4  package com.asw.rmi.ex2;
5   
6  // Набор базовых пакетов Java
7  import java.rmi.*;
8  import java.util.Date;
9   
10  public class BillingClient {
11  // выполнение BillingClient
12  public static void main(String[] args) throws Exception{ 
13  // создание строки, содержащей URL удаленного объекта
14  String objectName = "rmi://"+args[0]+"/BillingService";
15  System.out.println("Starting...\n");
16  // соединение с реестром RMI и получение удаленной ссылки
17  // на удаленный объект
18  BillingService bs = (BillingService)Naming.lookup(objectName);
19  System.out.println("done");
20   
21  // проверка на наличие карт с указанными номерами 
22  // в случае отсутствия карты с указанными параметрами
23  // добавляем новую карту
24  Card c;
25  c = bs.getCard("1");
26  if (c==null) {
27  c = new Card("Piter",new Date(),"1",0.0);
28  bs.addNewCard(c);
29  }
30   
31  c = bs.getCard("2");
32  if (c==null) {
33  c = new Card("Stefan",new Date(),"2",0.0);
34  bs.addNewCard(c);
35  }
36   
37  c = bs.getCard("3");
38  if (c==null) {
39  c = new Card("Nataly",new Date(),"3",0.0);
40  bs.addNewCard(c);
41  }
42   
43  // определение массива операций по картам
44  System.err.println("begin...\n");
45  int cnt = 30000;
46  CardOperation[] co = new CardOperation[cnt];
47  for (int i = 0; i < cnt; i++) {
48  switch (i%3){
49  case 0:  co[i] = new CardOperation("1",1,new Date());break;
50  case 1:  co[i] = new CardOperation("2",1,new Date());break;
51  case 2:  co[i] = new CardOperation("3",1,new Date());break;
52  }
53  }
54  // проведение указанных в массиве операций
55  bs.processOperations(co);
56  
57  // печать текущего баланса обработанных карт
58  System.out.println(bs.getCard("1"));
59  System.out.println(bs.getCard("2"));
60  System.out.println(bs.getCard("3"));
61  }
62  }

Ответ:

 (1) создается ссылка на удаленный объект 

 (2) создается экземпляр удаленного объекта на сервере 

 (3) создается экземпляр удаленного объекта в локальном адресном пространстве клиента 


Номер 2
Для запуска системы из клиента и сервера (BillingServiceImpl и BillingClient), необходим запуск:

Ответ:

 (1) rmiregistry, интерпретатора Java с запущенным BillingServiceImpl, интерпретатора Java с запущенным BillingClient 

 (2) интерпретатора Java с запущенным BillingServiceImpl, интерпретатора Java с запущенным BillingClient, запуск rmiregistry обязательным не является 

 (3) rmiregistry, интерпретатора Java с запущенным BillingClient. Запуск BillingServiceImpl произойдет автоматически при первом запросе клиента 


Номер 3
В строке 54, в классе BillingServiceImpl:
1  // BillingServiceImpl.java
2  // BillingServiceImpl реализует удаленный интерфейс BillingService для 
3  // предоставления удаленного объекта BillingService
4  package com.asw.rmi.ex2;
5   
6  // Набор базовых пакетов Java
7  import java.rmi.*;
8  import java.util.*;
9  import java.rmi.server.*;
10   
11  public class BillingServiceImpl extends UnicastRemoteObject 
12  implements BillingService {
13   
14  private  Hashtable hash;  // хэш-таблица для хранения карт
15  // инициализация сервера
16  public BillingServiceImpl() throws RemoteException{
17  super();
18  hash = new Hashtable();
19  }
20   
21  // реализация метода addNewCard интерфейса BillingService
22  public void addNewCard(Card card) throws RemoteException {
23   
24  hash.put(card.cardNumber, card);
25  }
26   
27  // реализация метода processOperations интерфейса BillingService
28  public void processOperations(CardOperation[] operations) 
29  throws RemoteException {
30  for (int i=0;i<operations.length;i++){
31  Card c = (Card)hash.get(operations[i].card);
32  if (c==null) throw new NotExistsCardOperation();
33  c.balance+=operations[i].amount;
34  hash.put(operations[i].card,c);
35  }
36  }
37   
38  // реализация метода getCard интерфейса BillingService
39  public Card getCard(String card) throws RemoteException{
40  Card c = (Card)hash.get(card);
41  return c;
42  };
43   
44  // запуск удаленного объекта BillingService
45  public static void main (String[] args) throws Exception {
46  System.out.println("Initializing BillingService...");
47   
48  // создание удаленного объекта
49  BillingService service = new BillingServiceImpl();
50   
51  //задание имени удаленного объекта
52  String serviceName = "rmi://localhost/BillingService";
53  // регистрация удаленного объекта BillingService в реестре rmiregistry
54  Naming.rebind(serviceName, service);
55  }
56   
57  }

Ответ:

 (1) производится связывание имени сервиса с экземпляром объекта, реализующим сервис 

 (2) создается экземпляр объекта, который может принимать удаленные вызовы 

 (3) производится останов сервиса 




Главная / Программирование / Построение распределенных систем на Java / Тест 5