КДП материјали за Јаву

Извор: ВикиЕТФ

Садржај

Мрежно програмирање у Јави

Класе за мрежно програмирање које поседује стандардна Јава сматра се једним од бољих и комплетнијих решења међу савременим језицима, са једноставном синтаксом и семантиком, без обзира што уоквирују један не баш једноставан циљ: дистрибуирано програмирање.

Пошто је Јава од самог почетка замишљена и представљена као „језик за Интернет“, ова подршка је добра и комплетна – наравно, развојем Интернета и развојем протокола се такође и Јава развијала, али опет на начин који није угрожавао раније верзије изворног кода и готове програме, већ је само уз нове могућности олакшавала писање кода који је раније већ функционисао. Тако је у новијим верзијама Јаве могуће повезивање употребом IPv4 и IPv6 без обраћања пажње на разлике у протоколима – Јава се прилагођава средини.

Због свог мрежног језгра али такође и способности да се лако пишу конкурентне апликације Јава је временом постала индустријски стандард у писању великих enterprise система.

Технологије комуникације у Јави

Технологије које ће бити описане у овом тексту јесу оне које су интегрисане у саму Јаву – socket програмирање и RMI механизам. Socket програмирање представља нижи ниво апстракције док је RMI виши ниво, који омогућава позивање удаљених процедура као да су написане у локалу (по угледу на ову могућност Јаве касније се у Microsoft .Net средини појавио .Net Remoting). Избор се чини једноставним: ако се жели потпуна контрола над протоколом комуникације користиће се socket, док је RMI можда боље решење ако се жели ефикасан и брз начин спајања удаљених система базираних на Јави.

Socket програмирање подразумева потпуно отворен ток података, што значи да не постоји начин да ради на систему ако на истом постоји firewall који га блокира. Мора се дакле дозволити апликацији да „отвори“ порт, тј. заузме исти да би могла да функционише.

Једна од мана RMI-ја је то што се потпуно базира на Јава серијализацији за транспорт објеката кроз мрежне токове па се не може вршити декодовање у неком другом језику, тј. другој виртуелној машини. Чак, шта више, често и различите верзије Јава виртуелних машина са две стране праве непремостиве проблеме због некомпатибилности, па је топло препоручена употреба формалне дефиниције поља serialVersionUID тако да се заобиђу наведени, али и тада могу настати неки други проблеми. Такође, данас често постоји проблем и у самом преносу бинарних података пошто се често firewall-ови конфигуришу тако да блокирају већину портова, мада RMI не пати од тога пошто захтеве пакује у HTTP захтеве/одговоре када схвати да није дозвољен пренос података (али је потребно детаљно прочитати спецификацију RMI-ја пре уласка у такве захвате).

Неке од данас присутних технологија од којих понеке потпуно или делимично заобилазе наведене проблеме су (пре свих) Web сервиси који користе SOAP XML (и ниједан firewall уопште нема разлога да блокира такав вид комуникације); EJB (JMS или JNDI); Caucho Hessian (посебан бинаран формат); Caucho Burlap (посебан XML формат); Spring Http Invoker (серијализација, али путем XML-а); CORBA итд.

Ми ћемо се ипак фокусирати на (већ наведене) пакете java.net и java.rmi који су стандардни сегмент Јаве и детаљно објаснити како се заснива комуникација, како размена података функционише и, наравно, шта се дешава у неочекиваним ситуацијама.

Материјали

Личне алатке
Именски простори
Варијанте
Акције
Навигација
Алатке