КДП/Лаб 2 надокнада 2022

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
Овај рок није решен. Помозите SI Wiki тако што ћете га решити.

Надокнада друге лабораторијске вежбе одржана је 22. јуна. Постојала је само једна група.

Поставка

Потребно је решити проблем читалаца и писаца у дистрибуираном окружењу. Читаоци и писци представљају клијентске програме који користећи централни сервер комуницирају и приступају датотекама на серверу.

  • Ради приступања текстуалним датотекама које захтевају читаоци и писци треба имплементирати интерфејс Book који има методе за дохватање и постављање имена датотеке, као и за постављање и дохватање садржаја саме књиге. Интерфејс је дат у прилогу.
  • Класа читаоца (Reader), чији је код дат у прилогу, има main методу и која се повезује са сервером ради читања. Серверски порт преко кога се комуницира и IP адреса сервера се уносе као аргументи командне линије. Остали аргументи су датотеке које је потребно читати. Комуникација са сервером се обавља користећи удаљене позиве процедура у програмском језику Јава (java.rmi пакет).
  • Класа писца (Writer), чији је код дат у прилогу, има main методу и која се повезује са сервером ради уписа. Серверски порт преко кога се комуницира и IP адреса сервера се уносе као аргументи командне линије. Остали аргументи су имена књига које је потребно проследити на сервер. Комуникација са сервером се обавља користећи мрежно програмирање у програмском језику Јава (java.net пакет). Користити објектне токове података. На серверу треба да постоји већи број нити - за сваку конекцију по једна. Клијенти и сервер треба све време да држе отворену прикључницу кроз коју комуницирају. Уколико на клијентској или серверској страни дође до прекида везе та нит се прекида и њени ресурси се ослобађају.
  • Читаоци и писци могу да приступају различитим књигама, тако да може да се деси да два писца у исто време уписују податке, али у различите књиге, или да један пише а да други читају из различитих књига.
  • На серверу се чувају подаци о већем броју књига.
  • Синхронизација између нити на серверу се обавља користећи мониторску класу ReadersWriters.
  • Потребно је имплементирати интерфејсе Book и RW. Интерфејси који су дати у прилогу морају се користити као такви, без измена.
  • Дате main методе у класама читаоца и писца такође није дозвољено мењати, уз изузетак замене null стварањем конкретног објекта на означеним местима.

Решење