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

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

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

Ответ:

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

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

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


Номер 2
CORBA это:

Ответ:

 (1) коммерческий продукт, разрабатываемый компанией Sun 

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

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


Номер 3
CORBA может быть использована при разработке:

Ответ:

 (1) только таких распределенных систем, все компоненты которых написаны на Java 

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

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


Упражнение 2:
Номер 1
IDL это:

Ответ:

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

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

 (3) сервис именования CORBA, разрешающий имя сервиса в объектную ссылку 


Номер 2
Файл, с IDL-описанием может содержать:

Ответ:

 (1) описание интерфейсов компонентов 

 (2) описание реализации компонентов 

 (3) описание типов данных 


Номер 3
Объектная ссылка в CORBA это:

Ответ:

 (1) указатель на объект в локальной памяти клиента 

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

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


Упражнение 3:
Номер 1
В классе BillingServiceImpl для удаленного вызова доступны следующие методы:

Ответ:

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

 (2) addNewCard 

 (3) getCardBalance 


Номер 2
Утилита idlj:

Ответ:

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

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

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


Номер 3
Класс  BillingServiceImpl:

Ответ:

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

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

 (3) наследует от класса BillingServicePOA, который был сформирован автоматически утилитой idlj из idl-описания 


Упражнение 4:
Номер 1
Почему в коде BillingServiceImpl отсутствуют операторы чтения данных из сети?
1  // BillingServiceImpl.java
2  package com.asw.corba.ex1;
3   
4  // базовые пакеты Java
5  import java.util.Hashtable;
6   
7  import com.asw.corba.ex1.BillingServiceModule.*;
8   
9  // пакеты OMG CORBA
10  import org.omg.CORBA.*;
11   
12  public class BillingServiceImpl  extends BillingServicePOA {
13  private ORB orb;
14  private  Hashtable hash = new Hashtable();
15   
16  public void setORB(ORB orb_val) {
17  orb = orb_val;
18  }
19   
20  public void addNewCard(String personName, String card) {
21  hash.put(card, new Double(0.0));
22  }
23   
24  public void addMoney(String card, double money) {
25  Double d = (Double)hash.get(card);
26   
27  if (d!=null) hash.put(card,new Double(d.doubleValue()+money));
28  }
29   
30  public void subMoney(String card, double money) {
31  Double d = (Double)hash.get(card);
32   
33  if (d!=null) hash.put(card,new Double(d.doubleValue()-money));
34  }
35   
36  public double getCardBalance(String card) {
37  Double d = (Double)hash.get(card);
38   
39  if (d!=null) return d.doubleValue();
40  else return 0;
41  }
42  }

Ответ:

 (1) чтение из сети осуществляется в коде класса BillingServicePOA, сформированного автоматически утилитой idlj 

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

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


Номер 2
В какой строке кода BillingServiceImpl происходит чтение из сети аргументов, передаваемых в метод addNewCard:
1  // BillingServiceImpl.java
2  package com.asw.corba.ex1;
3   
4  // базовые пакеты Java
5  import java.util.Hashtable;
6   
7  import com.asw.corba.ex1.BillingServiceModule.*;
8   
9  // пакеты OMG CORBA
10  import org.omg.CORBA.*;
11   
12  public class BillingServiceImpl  extends BillingServicePOA {
13  private ORB orb;
14  private  Hashtable hash = new Hashtable();
15   
16  public void setORB(ORB orb_val) {
17  orb = orb_val;
18  }
19   
20  public void addNewCard(String personName, String card) {
21  hash.put(card, new Double(0.0));
22  }
23   
24  public void addMoney(String card, double money) {
25  Double d = (Double)hash.get(card);
26   
27  if (d!=null) hash.put(card,new Double(d.doubleValue()+money));
28  }
29   
30  public void subMoney(String card, double money) {
31  Double d = (Double)hash.get(card);
32   
33  if (d!=null) hash.put(card,new Double(d.doubleValue()-money));
34  }
35   
36  public double getCardBalance(String card) {
37  Double d = (Double)hash.get(card);
38   
39  if (d!=null) return d.doubleValue();
40  else return 0;
41  }
42  }

Ответ:

 (1) 17 

 (2) 21 

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


Номер 3
В какой строке кода BillingServiceImpl осуществляется прием клиентского соединения:
1  // BillingServiceImpl.java
2  package com.asw.corba.ex1;
3   
4  // базовые пакеты Java
5  import java.util.Hashtable;
6   
7  import com.asw.corba.ex1.BillingServiceModule.*;
8   
9  // пакеты OMG CORBA
10  import org.omg.CORBA.*;
11   
12  public class BillingServiceImpl  extends BillingServicePOA {
13  private ORB orb;
14  private  Hashtable hash = new Hashtable();
15   
16  public void setORB(ORB orb_val) {
17  orb = orb_val;
18  }
19   
20  public void addNewCard(String personName, String card) {
21  hash.put(card, new Double(0.0));
22  }
23   
24  public void addMoney(String card, double money) {
25  Double d = (Double)hash.get(card);
26   
27  if (d!=null) hash.put(card,new Double(d.doubleValue()+money));
28  }
29   
30  public void subMoney(String card, double money) {
31  Double d = (Double)hash.get(card);
32   
33  if (d!=null) hash.put(card,new Double(d.doubleValue()-money));
34  }
35   
36  public double getCardBalance(String card) {
37  Double d = (Double)hash.get(card);
38   
39  if (d!=null) return d.doubleValue();
40  else return 0;
41  }
42  }

Ответ:

 (1) 17 

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

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


Упражнение 5:
Номер 1
Для запуска системы из клиента и сервера (BillingServiceServer и BillingClient), необходим запуск:

Ответ:

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

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

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


Номер 2
В строке 41, в классе BillingServiceServer:
1  // BillingServiceServer.java
2  package com.asw.corba.ex1;
3   
4  // пакеты OMG CORBA
5  import org.omg.CosNaming.*;
6  import org.omg.CORBA.*;
7  import org.omg.PortableServer.*;
8  import org.omg.PortableServer.POA;
9  import com.asw.corba.ex1.BillingServiceModule.*;
10   
11  public class BillingServiceServer {
12  public static void main(String args[]) {
13  try{
14  // create and initialize the ORB
15  ORB orb = ORB.init(args, null);
16   
17  // get reference to rootpoa & activate the POAManager
18  POA rootpoa =
19  POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
20  rootpoa.the_POAManager().activate();
21   
22  // create servant and register it with the ORB
23  BillingServiceImpl BSImpl = new BillingServiceImpl();
24  BSImpl.setORB(orb);
25   
26  // get object reference from the servant
27  org.omg.CORBA.Object ref = rootpoa.servant_to_reference(BSImpl);
28  BillingService href = BillingServiceHelper.narrow(ref);
29   
30  // get the root naming context
31  // NameService invokes the name service
32  org.omg.CORBA.Object objRef =
33  orb.resolve_initial_references("NameService");
34  // Use NamingContextExt which is part of the Interoperable
35  // Naming Service (INS) specification.
36  NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
37   
38  // bind the Object Reference in Naming
39  String name = "BillingService";
40  NameComponent path[] = ncRef.to_name( name );
41  ncRef.rebind(path, href);
42   
43  System.out.println("BillingServiceServer ready and waiting ...");
44   
45  // wait for invocations from clients
46  orb.run();
47  }
48   
49  catch (Exception e) {
50  System.err.println("ERROR: " + e);
51  e.printStackTrace(System.out);
52  }
53  System.out.println("BillingServer Exiting ...");
54  }
55  }

Ответ:

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

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

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


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

Ответ:

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

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

 (3) принимает удаленные вызовы от клиента и перенаправляет их BillingServiceImpl 


Номер 2
В строке 32 , в классе BillingServiceServer:
1  // BillingServiceServer.java
2  package com.asw.corba.ex1;
3   
4  // пакеты OMG CORBA
5  import org.omg.CosNaming.*;
6  import org.omg.CORBA.*;
7  import org.omg.PortableServer.*;
8  import org.omg.PortableServer.POA;
9  import com.asw.corba.ex1.BillingServiceModule.*;
10   
11  public class BillingServiceServer {
12  public static void main(String args[]) {
13  try{
14  // create and initialize the ORB
15  ORB orb = ORB.init(args, null);
16   
17  // get reference to rootpoa & activate the POAManager
18  POA rootpoa =
19  POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
20  rootpoa.the_POAManager().activate();
21   
22  // create servant and register it with the ORB
23  BillingServiceImpl BSImpl = new BillingServiceImpl();
24  BSImpl.setORB(orb);
25   
26  // get object reference from the servant
27  org.omg.CORBA.Object ref = rootpoa.servant_to_reference(BSImpl);
28  BillingService href = BillingServiceHelper.narrow(ref);
29   
30  // get the root naming context
31  // NameService invokes the name service
32  org.omg.CORBA.Object objRef =
33  orb.resolve_initial_references("NameService");
34  // Use NamingContextExt which is part of the Interoperable
35  // Naming Service (INS) specification.
36  NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
37   
38  // bind the Object Reference in Naming
39  String name = "BillingService";
40  NameComponent path[] = ncRef.to_name( name );
41  ncRef.rebind(path, href);
42   
43  System.out.println("BillingServiceServer ready and waiting ...");
44   
45  // wait for invocations from clients
46  orb.run();
47  }
48   
49  catch (Exception e) {
50  System.err.println("ERROR: " + e);
51  e.printStackTrace(System.out);
52  }
53  System.out.println("BillingServer Exiting ...");
54  }
55  }

Ответ:

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

 (2) производится получение объектной ссылки на объект, реализующий сервис BillingService 

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


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

Ответ:

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

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

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


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

Ответ:

 (1) не существует возможности зарегистрировать один и тот же объект в сервисе именований под разными именами 

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

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


Номер 3
Сервис именования CORBA это:

Ответ:

 (1) сервис, обеспечивающий получение объектной ссылки по имени объекта 

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

 (3) сервис именования не входит в спецификацию CORBA и является расширением, реализуемым компанией Sun 


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

Ответ:

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

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

 (3) использование IDL для определения интерфейсов и создания как серверов, так и клиентов, обязательным не является 


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

Ответ:

 (1) не существует возможности зарегистрировать один и тот же объект в сервисе именований под разными именами 

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

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


Номер 3
Роль "клиентской заглушки" автоматически создаваемой утилитой idlj состоит в:

Ответ:

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

 (2) разрешении имени удаленного объекта в объектную ссылку 

 (3) обеспечении компиляции клиентского класса, до того момента, пока заглушка не будет заменена разработчиком на полнофункциональный модуль 


Упражнение 9:
Номер 1
Для определения интерфейса удаленного объекта, в IDL используется ключевое слово:

Ответ:

 (1) interface 

 (2) module,  

 (3) object 


Номер 2
Роль "серверной заглушки" автоматически создаваемой утилитой idlj состоит в:

Ответ:

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

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

 (3) обеспечении компиляции серверного класса, до того момента, пока заглушка не будет заменена разработчиком на полнофункциональный модуль 


Номер 3
При объявлении методов в IDL, типы передаваемых в них аргументов должны:

Ответ:

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

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

 (3) в качестве типов аргументов могут быть использованы как системные типы, так и типы определенные пользователем, в том числе - интерфейсы 


Упражнение 10:
Номер 1
API динамических вызовов используется:

Ответ:

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

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

 (3) серверами, для вызова удаленных методов других серверов 


Номер 2
Динамические скелетоны используются:

Ответ:

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

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

 (3) серверами, для вызова удаленных методов других серверов 


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

Ответ:

 (1) API динамических вызовов не может использоваться совместно с API динамических скелетонов 

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

 (3) API динамических вызовов позволяют написать клиентское приложение без использования IDL-описания и утилиты idlj 




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