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

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

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

В какой строке кода 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  }

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

Варианты ответа
за прием клиентского соединения отвечает брокер, сам класс напрямую клиентское соединение не принимает(Верный ответ)
класс BillingServiceImpl должен быть дополнен операторами приема клиенсткого соединения
17
Похожие вопросы
Почему в коде 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  }
В какой строке кода 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  }
В какой строке происходит прием соединения клиента (класс BillingService):
1  package com.asw.net.ex1;2  import java.net.*;3  import java.util.Hashtable;4  import java.io.*;5  6  public class BillingService extends Thread{7  public static final int ADD_NEW_CARD = 1;8  public static final int ADD_MONEY = 2;9  public static final int SUB_MONEY = 3;10  public static final int GET_CARD_BALANCE = 4;11  public static final int EXIT_CLIENT = 5;12  13  private int serverPort = 7896;14  private ServerSocket ss;15  private  Hashtable hash;16  17  public static void main(String[] args) {18    BillingService bs = new BillingService();19    bs.start();20  }21  22  public BillingService(){23    hash = new Hashtable();24  }25  26  public void run(){27    try {28      ss = new ServerSocket(serverPort);29      System.out.println("Server started");30      while(true){31        Socket s = ss.accept();32        System.out.println("Client accepted");33        BillingClientService bcs = new BillingClientService(this, new DataInputStream(s.getInputStream()),                new DataOutputStream(s.getOutputStream()));34        bcs.start();35      }36    } catch (IOException e) {37      e.printStackTrace();38    }39  }40  41  public void addNewCard(String personName, String card) {42    hash.put(card, new Double(0.0));43  }44  public void addMoney(String card, double money) {45    Double d = (Double)hash.get(card);46    if (d!=null) hash.put(card,new Double(d.doubleValue()+money));47  }48  public void subMoney(String card, double money) {49    Double d = (Double)hash.get(card);50    if (d!=null) hash.put(card,new Double(d.doubleValue()-money));51  }52  public double getCardBalance(String card) {53    Double d = (Double)hash.get(card);54    if (d!=null) return d.doubleValue();55    return 0;56  }57  }
После выполнения какой строки сервер (класс BillingService) может принимать соединения клиентов:
1  package com.asw.net.ex1;2  import java.net.*;3  import java.util.Hashtable;4  import java.io.*;5  6  public class BillingService extends Thread{7  public static final int ADD_NEW_CARD = 1;8  public static final int ADD_MONEY = 2;9  public static final int SUB_MONEY = 3;10  public static final int GET_CARD_BALANCE = 4;11  public static final int EXIT_CLIENT = 5;12  13  private int serverPort = 7896;14  private ServerSocket ss;15  private  Hashtable hash;16  17  public static void main(String[] args) {18    BillingService bs = new BillingService();19    bs.start();20  }21  22  public BillingService(){23    hash = new Hashtable();24  }25  26  public void run(){27    try {28      ss = new ServerSocket(serverPort);29      System.out.println("Server started");30      while(true){31        Socket s = ss.accept();32        System.out.println("Client accepted");33        BillingClientService bcs = new BillingClientService(this, new DataInputStream(s.getInputStream()), new DataOutputStream(s.getOutputStream()));34        bcs.start();35      }36    } catch (IOException e) {37      e.printStackTrace();38    }39  }40  41  public void addNewCard(String personName, String card) {42    hash.put(card, new Double(0.0));43  }44  public void addMoney(String card, double money) {45    Double d = (Double)hash.get(card);46    if (d!=null) hash.put(card,new Double(d.doubleValue()+money));47  }48  public void subMoney(String card, double money) {49    Double d = (Double)hash.get(card);50    if (d!=null) hash.put(card,new Double(d.doubleValue()-money));51  }52  public double getCardBalance(String card) {53    Double d = (Double)hash.get(card);54    if (d!=null) return d.doubleValue();55    return 0;56  }57  }
В каком методе класса BillingService происходит создание соединений с клиентами:
1  package com.asw.net.ex1;2  import java.net.*;3  import java.util.Hashtable;4  import java.io.*;5  6  public class BillingService extends Thread{7  public static final int ADD_NEW_CARD = 1;8  public static final int ADD_MONEY = 2;9  public static final int SUB_MONEY = 3;10  public static final int GET_CARD_BALANCE = 4;11  public static final int EXIT_CLIENT = 5;12  13  private int serverPort = 7896;14  private ServerSocket ss;15  private  Hashtable hash;16  17  public static void main(String[] args) {18    BillingService bs = new BillingService();19    bs.start();20  }21  22  public BillingService(){23    hash = new Hashtable();24  }25  26  public void run(){27    try {28      ss = new ServerSocket(serverPort);29      System.out.println("Server started");30      while(true){31        Socket s = ss.accept();32        System.out.println("Client accepted");33        BillingClientService bcs = new BillingClientService(this, new DataInputStream(s.getInputStream()),               new DataOutputStream(s.getOutputStream()));34        bcs.start();35      }36    } catch (IOException e) {37      e.printStackTrace();38    }39  }40  41  public void addNewCard(String personName, String card) {42    hash.put(card, new Double(0.0));43  }44  public void addMoney(String card, double money) {45    Double d = (Double)hash.get(card);46    if (d!=null) hash.put(card,new Double(d.doubleValue()+money));47  }48  public void subMoney(String card, double money) {49    Double d = (Double)hash.get(card);50    if (d!=null) hash.put(card,new Double(d.doubleValue()-money));51  }52  public double getCardBalance(String card) {53    Double d = (Double)hash.get(card);54    if (d!=null) return d.doubleValue();55    return 0;56  }57  }
Класс BillingServiceпроизводит непосредственное чтение данных, передаваемых клиентом в методе:
1  package com.asw.net.ex1;2  import java.net.*;3  import java.util.Hashtable;4  import java.io.*;5  6  public class BillingService extends Thread{7  public static final int ADD_NEW_CARD = 1;8  public static final int ADD_MONEY = 2;9  public static final int SUB_MONEY = 3;10  public static final int GET_CARD_BALANCE = 4;11  public static final int EXIT_CLIENT = 5;12  13  private int serverPort = 7896;14  private ServerSocket ss;15  private  Hashtable hash;16  17  public static void main(String[] args) {18    BillingService bs = new BillingService();19    bs.start();20  }21  22  public BillingService(){23    hash = new Hashtable();24  }25  26  public void run(){27    try {28      ss = new ServerSocket(serverPort);29      System.out.println("Server started");30      while(true){31        Socket s = ss.accept();32        System.out.println("Client accepted");33        BillingClientService bcs = new BillingClientService(this, new DataInputStream(s.getInputStream()),                   new DataOutputStream(s.getOutputStream()));34        bcs.start();35      }36    } catch (IOException e) {37      e.printStackTrace();38    }39  }40  41  public void addNewCard(String personName, String card) {42    hash.put(card, new Double(0.0));43  }44  public void addMoney(String card, double money) {45    Double d = (Double)hash.get(card);46    if (d!=null) hash.put(card,new Double(d.doubleValue()+money));47  }48  public void subMoney(String card, double money) {49    Double d = (Double)hash.get(card);50    if (d!=null) hash.put(card,new Double(d.doubleValue()-money));51  }52  public double getCardBalance(String card) {53    Double d = (Double)hash.get(card);54    if (d!=null) return d.doubleValue();55    return 0;56  }57  }
В строке 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  }
В какой строке кода 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  }
Чтение из потока, в строке 21, в случае, если клиент после установки соединения не записал в поток никаких данных, приведет:
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  }
В случае если клиент завершит соединение, не послав предварительно сигнал 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  }