Nada

Föreläsning 9: Lös koppling, Java beans, miljöer, fjärranrop, sandlådor.

Programutvecklingsteknik består bland annat i konsten att lägga till nya finesser i gamla program och att få olika program att samarbeta. I objektterminologin motsvarar det begreppen arv och gränssnitt, i javaspråket är det extends och implements.

Lös koppling

Låt oss nu höja blicken och se på datasystem i stort. Ett sådant består av komponenter av följande slag: Arvs- och gränssnittstänkandet är genomgående med ISOs välkända sjulagers nätmodell som praktexempel. Det stora problemet har varit samarbetet mellan komponenterna. Den som säljer program har varit tvungen att utveckla många olika varianter för olika plattformar och att stödja många olika filformat, men nu är vi på väg mot en bättre värld, en värld där allt kan pluggas in!. Om man köpt ny hårdvara, till exempel en digitalkamera, kan man ofta räkna med att den kan anslutas till en vanlig port på hemdatorn och att hårdvaran då själv presenterar sej för operativsystemet. Man kan plugga in bredband hemma och det fungerar i princip utan ny hårdvara eller nya program. Ett javaprogram kan i princip pluggas in på vilken plattform som helst. Det som ännu inte är inpluggbart är datafiler. Det finns massor av format för bild, ljud, databaser etc och inkompatibiliteten är ofta avsiktlig för att försvåra konkurrens. Men med XML kan man faktiskt skriva inpluggningsbara, självbeskrivande datafiler!

En ofta bortglömd komponent i dom flesta datasystem är människorna. Olika användare bör helst kunna pluggas in utan att övriga komponenter byts. Det betyder att en kvinnlig datateknolog i Stockholm och en skäggig mulla i Teheran helst ska kunna köra samma program.

Java Beans och programmeringsmiljöer

Men situationen för den som vill sälja programkomponenter är inte så rolig. Man kan skriva hur väldokumenterade klasser som helst, men den vanliga programmeraren tycker att det är tillräckligt svårt att använda Suns standardklasser. Dessutom använder hon helst en grafisk programmeringsmiljö som JBuilder eller Forte för att få ihop programmet. Där har knappar, menyer och andra standardkomponenter små ikoner och man kan programmera all grafik med musklickningar -- ett klick på ikonen tar fram en egenskapslista där man väljer färg, font, storlek osv. När man kan programmera så enkelt tar det emot att skriva en massa kod för att kunna använda en inköpt komponent.

JavaBeans är en standard för programkomponenter som ska vara särskilt lättsålda eftersom dom installerar sej i själva utvecklingsmiljön genom att tala om för JBuilder vilka egenskaper dom har etc. Det gäller förstås även osynliga komponenter. Viggos program Stava skulle kunna tänkas vara en sådan komponent som många programmerare skulle kunna infoga.

På webben finns en utmärkt lektion om JavaBeans och en guidad tur i JBuilder.

Köra över nätet


Socketkommunikation


Appletar och sandlådor

En applet kör alltid i den så kallade sandlådan, det vill säga javas security manager vakar över att den inte läser eller skriver filer eller gör något annat farligt. Vanliga javaprogram kör i samma sandlåda om man använder
java -Djava.security.manager Pnyxtr
Det är lämpligt att köra alla okända program med security manager. Om man vill ge programmet vissa rättigheter skriver man en policyfil och kör sedan med
java -Djava.security.manager -Djava.security.policy=kul.policy Pnyxtr

RMI

Med socketförbindelse kan javaprogram som körs på olika datorer skicka meddelanden till varandra. En variant på detta är RMI, där ett javaprogram gör ett metodanrop som körs på en annan dator. Låt oss säga att ett översättningsprogrammet Swahili ligger på en serverdator och att ett javaprogram som körs på en annan dator innehåller satsen
swahiliord = swahili.translate(svenskord);
Det svenska ordet skickas då över till serverdatorn och till metoden translate som så småningom skickar tillbaka swahiliordet.

För att det här ska fungera krävs en hel del förarbete.


CORBA

Med CORBA (Common Object Request Broker Architecture) kan program anropa varandra även om dom körs på olika datorer och är skrivna i olika språk. För det anropande klientobjektet ser det ut som ett vanligt metodanrop till ett vanligt objekt men i själva verket anropas en liten stubbe som översätter anropet till ett metaspråk och skickar vidare till en ORB (Object Request Broker). En ORB kan kommunicera med en ORB på en annan dator via protokollet IIOP (Internet Inter-ORB Protocol). Denna ORB letar upp rätt serverobjekt och låter en stubbe göra anropet i rätt språk. Sedan ska returvärdet gå samma väg tillbaka. Om klient och server finns på samma dator räcker det förstås med en ORB. Stubben på serversidan kallas också skelett.
diagram-orb_to_orb.gif

Ett program som ska anropa objekt via CORBA måste få veta vilka metoder som finns tillgängliga. Detta beskrivs med språket IDL (Interface Definition Language). IDL-kompilatorer som skapar stubbar från en IDL-fil finns för dom flesta programmeringsspråk. För att kompilera psyk.idl till Java används kommandot

      idlj -fall psyk.idl
    
Det här fungerar i javaversion 1.3 - gör module add jdk/1.3.1 annars. Resultatet av kompileringen är ett paket psyk av flera Java-filer. Där finns förutom stubbarna också några Helper-klasser, som hjälper till att översätta anropens objektparametrar till IIOP.
Sidansvarig: <henrik@nada.kth.se>
Senast ändrad 5 maj 2004
Tekniskt stöd: <webmaster@nada.kth.se>