База ответов ИНТУИТ

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

<<- Назад к вопросам

Классы Card и CardOperation на стороне клиента:

(Отметьте один правильный вариант ответа.)

Варианты ответа
автоматически сгенерированы утилитой wsimport, содержат только методы установки и чтения значений полей, не содержат никаких других методов, определенных разработчиком для этих классов на стороне сервера(Верный ответ)
ничем не отличаются от классов на стороне сервера, содержат все методы, определенные разработчиком для этих классов
автоматически сгенерированы утилитой wsimport, содержат как методы установки и чтения значений полей, так и методы, определенные разработчиком для этих классов на стороне сервера
Похожие вопросы
При вызове метода toString() для экземпляра класса Card на стороне клиента (листинг программы):
При использовании Dynamic Invocation Interface (DII) на стороне клиента, использование IDL для автоматического построения классов на стороне сервера:
Описание Card addNewCard(in string personName, in string card) в определении BillingService.idl означает, что объектная ссылка Card, возвращаемая методом, "указывает" на:
При использовании Dynamic Dynamic Skeleton Interface (DSI) на стороне сервера, использование IDL для автоматического построения классов на стороне клиента:
Описание Card getCard(in string card) в определении BillingService.idl означает, что метод getCard возвращает:
Метод readObject, в строке 32 , в случае, если клиент после установки соединения не записал в поток никаких данных, приведет:
1  package com.asw.net.ex2;2  import java.io.*;3  import java.net.*;4  5  public class BillingClientService extends Thread {6  ObjectInputStream ois;7  ObjectOutputStream oos;8  BillingService bs;9  Socket s;10  11  public BillingClientService(BillingService bs,Socket s){12    System.out.println("Constructor BillingClientService\n");13    this.bs = bs;14    this.s = s;15    try {16      this.oos = new ObjectOutputStream(s.getOutputStream());17      this.ois = new ObjectInputStream(s.getInputStream());18    } catch (IOException e) {19      // TODO Auto-generated catch block20      e.printStackTrace();21    }22    23    System.out.println("Stream`s done \n socket="+s);24  }25  public void run(){26    System.out.println("ClientService thread started\n");27    boolean work = true;28    while (work) {29      int command;30      Object o;31      try {32        o = ois.readObject();              33        if (o instanceof Card[]) {34          Card[] cards = (Card[])o;35          for (int i=0;i<cards.length;i++){36            bs.addNewCard(cards[i]);37          }38        }else if (o instanceof CardOperation[]){39          CardOperation[] co = (CardOperation[])o;40          for (int i=0;i<co.length;i++){41            bs.addMoney(co[i].card,co[i].amount);42          }43        }else if (o instanceof String){44          oos.writeObject(bs.getCard((String)o)); 45        }else System.out.println("Bad operation");46        47      } catch (IOException e) {48        e.printStackTrace();49      } catch (ClassNotFoundException e) {50        e.printStackTrace();51      }52    }53  }54  }
При вызове метода addNewCard, экземпляр Card передается на сервер как:
В строке 18, в классе BillingClient:
1  // BillingClient.java2  // BillingClient использует удаленный объект BillingService для работы 3  // с информацией на пластиковых картах4  package com.asw.rmi.ex2;5   6  // Набор базовых пакетов Java7  import java.rmi.*;8  import java.util.Date;9   10  public class BillingClient {11  // выполнение BillingClient12  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  }
Module BillingServiceModule (в определении BillingService.idl) при использовании утилиты idlj породит следующую синтаксическую конструкцию Java:
Для запуска системы из клиента и сервера (BillingServiceServer и BillingClient), необходим запуск: