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

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

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

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

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

Варианты ответа
ссылка на объект, после изменения которой на сервере, меняется объект на клиенте
копия объекта, после передачи данных сервером, объекты могут быть независимо изменены на клиенте и сервере(Верный ответ)
сам объект непосредственно. После передачи он перестает существовать на клиенте и доступен только на сервере
Похожие вопросы
Описание Card addNewCard(in string personName, in string card) в определении BillingService.idl означает, что объектная ссылка Card, возвращаемая методом, "указывает" на:
При вызове метода toString() для экземпляра класса Card на стороне клиента (листинг программы):
В какой строке кода BillingServiceImpl происходит чтение из сети аргументов, передаваемых в метод processOperations:
1  // BillingServiceImpl.java2  // BillingServiceImpl реализует удаленный интерфейс BillingService для 3  // предоставления удаленного объекта BillingService4  package com.asw.rmi.ex2;5   6  // Набор базовых пакетов Java7  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 интерфейса BillingService22  public void addNewCard(Card card) throws RemoteException {23   24  hash.put(card.cardNumber, card);25  }26   27  // реализация метода processOperations интерфейса BillingService28  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 интерфейса BillingService39  public Card getCard(String card) throws RemoteException{40  Card c = (Card)hash.get(card);41  return c;42  };43   44  // запуск удаленного объекта BillingService45  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 в реестре rmiregistry54  Naming.rebind(serviceName, service);55  }56   57  }
В какой строке кода BillingServiceImpl происходит чтение из сети аргументов, передаваемых в метод addNewCard:
1  // BillingServiceImpl.java2  package com.asw.corba.ex1;3   4  // базовые пакеты Java5  import java.util.Hashtable;6   7  import com.asw.corba.ex1.BillingServiceModule.*;8   9  // пакеты OMG CORBA10  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  }
Описание Card getCard(in string card) в определении BillingService.idl означает, что метод getCard возвращает:
В строке 54, в классе BillingServiceImpl:
1  // BillingServiceImpl.java2  // BillingServiceImpl реализует удаленный интерфейс BillingService для 3  // предоставления удаленного объекта BillingService4  package com.asw.rmi.ex2;5   6  // Набор базовых пакетов Java7  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 интерфейса BillingService22  public void addNewCard(Card card) throws RemoteException {23   24  hash.put(card.cardNumber, card);25  }26   27  // реализация метода processOperations интерфейса BillingService28  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 интерфейса BillingService39  public Card getCard(String card) throws RemoteException{40  Card c = (Card)hash.get(card);41  return c;42  };43   44  // запуск удаленного объекта BillingService45  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 в реестре rmiregistry54  Naming.rebind(serviceName, service);55  }56   57  }
Классы Card и CardOperation на стороне клиента:
Module BillingServiceModule (в определении BillingService.idl) при использовании утилиты idlj породит следующую синтаксическую конструкцию Java:
В случае если клиент завершит соединение, не послав предварительно сигнал EXIT_CLIENT:
1  package com.asw.net.ex1;2  import java.io.*;3  4  public class BillingClientService extends Thread {5  DataInputStream dis;6  DataOutputStream dos;7  BillingService bs;8  9  public BillingClientService (BillingService bs,DataInputStream dis,DataOutputStream dos){10    this.bs = bs;11    this.dis = dis;12    this.dos = dos;13  }14  15  public void run(){16    System.out.println("ClientService thread started");17    boolean work = true;18    while (work) {19      int command;20      try {21        command = dis.readInt();22        switch (command) {23        case BillingService.ADD_NEW_CARD:24          addNewCard();25          break;26        case BillingService.ADD_MONEY:27          addMoney();28          break;29        case BillingService.SUB_MONEY:30          subMoney();31          break;32        case BillingService.GET_CARD_BALANCE:33          getCardBalance();34          break;35        case BillingService.EXIT_CLIENT:36          work = false;37          break;38        default:39          System.out.println("Bad operation:" + command);40        }41      } catch (IOException e) {42        e.printStackTrace();43      }44    }45  }46  47  void addNewCard() throws IOException{48    String personName = dis.readUTF();49    String card = dis.readUTF();50    bs.addNewCard(personName,card);51  }52  void addMoney() throws IOException{53    String card = dis.readUTF();54    double money = dis.readDouble();55    bs.addMoney(card,money);56  }57  void subMoney() throws IOException{58    String card = dis.readUTF();59    double money = dis.readDouble();60    bs.subMoney(card,money);61  }62  void getCardBalance() throws IOException{63    String card = dis.readUTF();64    double money = bs.getCardBalance(card);65    dos.writeDouble(money);66  }67  }
Почему в коде BillingServiceImpl отсутствуют операторы чтения данных из сети?
1  // BillingServiceImpl.java2  package com.asw.corba.ex1;3   4  // базовые пакеты Java5  import java.util.Hashtable;6   7  import com.asw.corba.ex1.BillingServiceModule.*;8   9  // пакеты OMG CORBA10  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  }