]> pere.pagekite.me Git - homepage.git/blob - reports/9605.java-TACOMA.html
Generated.
[homepage.git] / reports / 9605.java-TACOMA.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
2 <!--Converted with LaTeX2HTML 96.1 (Feb 5, 1996) by Nikos Drakos (nikos@cbl.leeds.ac.uk), CBLU, University of Leeds -->
3 <HTML>
4 <HEAD>
5 <TITLE>Integrering av Java i TACOMA</TITLE>
6 <!-- Changed by: Petter Reinholdtsen, 3-Jun-1996 -->
7 <META NAME="description" CONTENT="Integrering av Java i TACOMA">
8 <META NAME="keywords" CONTENT="java2">
9 <META NAME="resource-type" CONTENT="document">
10 <META NAME="distribution" CONTENT="global">
11 <LINK REL=STYLESHEET HREF="java2.css">
12 </HEAD>
13 <BODY LANG="EN">
14 <H1 ALIGN=CENTER>Integrering av Java i TACOMA</H1>
15 <P ALIGN=CENTER><STRONG>Petter Reinholdtsen<BR>
16 &lt;pere@td.org.uit.no&gt;</STRONG></P><P>
17 <P>
18 <H3 CLASS=ABSTRACT>Abstract:</H3>
19 <P CLASS=ABSTRACT>
20 Denne rapporten beskriver en enkel integrering av
21 programmeringsspråket Java i TACOMA, en infrastructur for
22 internet-agenter. Integreringen gjøres som bindinger til
23 C-funksjoner.
24 </P><P>
25 <H1><A NAME="SECTION00010000000000000000">Innledning</A></H1>
26 <P>
27 TACOMA, Tromsø And COrnell Moving Agents&nbsp;[<A HREF="java2.html#SchneiderTACOMA1_0">1</A>],
28 er en infrastruktur for flyttbare agenter. En slik infrastruktur
29 muliggjør automatisk flytting og utføring av programbiter mellom
30 maskiner i et nettverk. TACOMA tar sikte på å tilby en abstraksjon som
31 er uavhengig av programmeringsspråk og maskinarkitektur. Denne
32 rapporten beskriver integreringen av programmeringsspråket
33 Java&nbsp;[<A HREF="java2.html#SUNJAVA">3</A>] i TACOMA.
34 <P>
35 Da jeg startet med å integrere Java i TACOMA var det kun et språk,
36 Tcl, som kunne brukes sammen med TACOMA. Tcl virker rotete og tregt,
37 så jeg ønsket et alternativ. Da jeg ønsket meg mer erfaring med Java,
38 valgte jeg å integrere dette som alternativt språk.
39 <P>
40 Java ble i utgangspunktet utviklet av SUN for å ha et deterministisk
41 og arkitekturuavhengig språk for å programmere konsument elektronikk. Det
42 er multi-treaded og objektorientert, og ligner litt på C++. I
43 tillegg tilbyr det en API som er generell på tvers av OS og
44 arkitektur. Det siste året har det fått gjennomslag som w3s
45 ``applet''-språk. Det muliggjør utvidelser i w3-framviserne. ``The
46 NPAC Visible Human Viewer''&nbsp;[<A HREF="java2.html#NPACHuman">5</A>] og ``The Improved
47 Sorting Demo''&nbsp;[<A HREF="java2.html#morinsort">4</A>] er gode eksempel på det siste.
48 <P>
49 Java og agenter er et aktivt område for tiden. Det jobbes med
50 integrasjon av Java i TACOMA ved Computer Science Department på
51 Cornell University&nbsp;[<A HREF="java2.html#DagJohansen">2</A>]. Her har de valgt å konvertere
52 hele TACOMA til Java. Jeg har ikke sett på deres løsninger.
53 <P>
54 I tillegg fins for eksempel ``Personal Media Arbitration
55 Protocol''&nbsp;[<A HREF="java2.html#PMAPhome">6</A>] (PMAP) som jobber med å lage en lignende
56 infrastruktur med helt andre abstraksjoner. PMAP skal kunne støtte
57 flere ulike språk, deriblant Java.
58 <P>
59 <H1><A NAME="SECTION00020000000000000000">Hva er Java</A></H1>
60 <P>
61 Programmeringsspråket Java ble lansert av SUN ved hjelp av deres
62 webbrowser HotJava. Denne framviseren er skrevet i Java som et
63 eksempel på anvendelsesområdene til språket. Denne har mulighet for å
64 kjøre applets, nedlastede programmer, lokalt på egen maskin. Slike
65 applets skal kjøre i en sikker omgivelse som ikke tillater ondsinnede
66 programmer å ødelegge for brukeren ved for eksempel &#229; slette filer
67 eller sende passordlister ut fra maskinen. Dette har vist seg å ikke holde
68 vann, da det er oppdaget flere brudd på den lovede sikkerheten det
69 siste halve året.
70 <P>
71 Java er et flertrådbasert og objektorientert språk med enkel arv
72 mellom klassene. Hukommelseshåndteringen er basert på garbage
73 collection, i motsetning til C++. Det har et kraftig systembibliotek
74 med bildebehandlingrutiner og abstrakte datatyper i tillegg til de
75 vanlige systemrutinene.
76 <P>
77 De første implementasjonene av Java oversatte til en mellomkode
78 (Bytecode) som ble kjørt på virtuelle Java-implementasjoner. Denne
79 mellomkoden er felles for alle arkitekturene Java kjører på, og
80 kompilerte programmer kan dermed brukes uavhengig av prosessortype.
81 Det fins i tillegg kompilatorer for å oversette Java til maskinkode.
82 Bytecoden blir utf&#248;rt av en virtuell maskin med bytecoden som sin
83 &quot;maskinkode&quot;.
84 <P>
85 Systembibliotekene skal være felles for alle arkitekturene. Dette
86 skal gi samme utseende og oppførsel både under X og Windows.
87 <P>
88 <H1><A NAME="SECTION00030000000000000000">Java i TACOMA</A></H1>
89 <P>
90 Å integrere et nytt språk i TACOMA er en todelt oppgave. Først må det
91 lages et bibliotek med APIen for å understøtte agent-abstraksjonen.
92 Deretter må det lages en agent for å ta imot og starte opp agenter
93 skrevet i det nye språket. Jeg valgte å kun ta imot bytecode for å
94 unngå problemer med kompilering og skrivefeil i Java-koden.
95 <P>
96 TACOMA er i utgangspunktet ikke objektorientert. For å få en sømløs
97 integrasjon av Java i TACOMA bør det lages et objektorientert design
98 for å identifisere og spesifisere objekt-metoder. Dette innebærer i
99 hovedsak å endre notasjonen for APIen. Jeg har valgt en annen
100 innfallsvinkel, den gjeldende APIen blir operasjoner på ett enkelt
101 TACOMA-object i Java.
102 <P>
103 Java-agentene får inn to parametre (<TT>TACOMA</TT> og <TT>briefcase</TT>)
104 der første parameter er TACOMA-objektet med den tilgjengelige APIen.
105 <P>
106 Koden blir dermed slik (uten exceptions etc):
107 <P>
108 <PRE><TT>
109 import TACOMA;
110 class TACOMA_AGENT
111 {
112 public void Main(TACOMA world, briefcase bc)
113 {
114 String text = world.folder_shift(bc, &quot;DATA&quot;, world.RIGHT, 1, &quot;&quot;);
115 world.folder_store(bc, &quot;DATA&quot;, &quot;No message of the day at host&quot;);
116 world.meet(&quot;ag_echo&quot;, bc, 0);
117 }
118 }
119 </TT></PRE>
120 <P>
121 En del av tanken bak bruken av agenter er at de skal fungere i en
122 mobil omgivelse. Da mobile maskiner gjerne har færre ressurser enn
123 stasjonære maskiner, vil lagrings og hukommelseskravene i TACOMA ha
124 vesentlig betydning for anvendelsen. Lagringskravene for Java er
125 rundt 3 MB for systembibliotek og kjørefiler. Dette burde ikke legge
126 store begrensninger på anvendelsen til Java. Jeg har ikke undersøkt
127 hukommelseskravene til Java.
128 <P>
129 I TACOMA har man foreløbig sett helt bort fra sikkerhetsproblemer ut
130 fra tanken om at du ikke slipper inn agenter du ikke stoler på. Dette
131 har forenklet implementasjon og integrering av nye språk. Jeg har ikke
132 vurdert hvor store sikkerhetsproblemer Java vil bidra med i TACOMA. I
133 og med at TACOMA ikke forsøker å gi noen garantier for sikkerheten til
134 maskinen hvis det utføres ondskapsfulle agenter, så tror jeg ikke Java
135 tilfører noen nye problemer.
136 <P>
137 Sikkerheten ved kjøring av Java-programmer kan muligens økes ved å
138 fjerne deler av systembiblioteket. Ved å fjerne nett- og
139 filtilgangs-primitiver og sørge for at all tilgang til eksterne deler
140 går via TACOMAs API så kan man sørge for å få samlet all
141 tilgangskontroll på en plass. Jeg har ikke forsøkt dette.
142 <P>
143 <H2><A NAME="SECTION00031000000000000000">Java API</A></H2>
144 <P>
145 Jeg valgte å binde Java APIen direkte opp mot APIen i C. Dette gjøres
146 ved å lage en klasse med såkalte <TT>native</TT> metoder. Alle
147 C-funksjonene får således en metode i den globale TACOMA-klassen.
148 <P>
149 Java-klassen som kompileres ser da slik ut:
150 <PRE><TT>
151 class TACOMA
152 {
153 native briefcase bc_create();
154 <EM>[...]</EM>
155 // Load library
156 static {
157 System.loadLibrary(&quot;TACOMA&quot;);
158 }
159 }
160 </TT></PRE>
161 <P>
162 For å få bindingen mellom Java og C brukes først stub-kompilatoren
163 (<TT>javah -stub</TT>) for å lage <TT>TACOMA.c</TT>. Denne inneholder kall
164 til C-funksjoner som har navn etter klasse-operasjonene.
165 Eksempelfunksjonen blir hetende <TT>void *TACOMA_bc_create(void
166 *this)</TT>. Implementasjonen er triviell:
167 <P>
168 <PRE><TT>
169 void* TACOMA_bc_create(void *)
170 {
171 return bc_to_containter(bc_create());
172 }
173 </TT></PRE>
174 <P>
175 C-biblioteket bruker struct-pekere for å representere arkivskap og
176 kofferter. Pekere er vanskelige å representere i Java. Jeg har
177 derfor valgt å lagre C-pekerens verdi som en string i en intern
178 klasse (container) i Java. Denne verdien konverteres i C-stubbene før
179 og etter C-kallene og skal aldri brukes i Java.
180 <P>
181 Det er ikke gjort noe for å hindre feil og problemer som følge av
182 flertråd-støtten til Java. Det kan oppstå problemer hvis flere tråder
183 bruker C-biblioteket samtidig.
184 <P>
185 Det er ikke lagt inn korrekt håndtering av exceptions i C-rutinene.
186 Det blir dermed ingen god håndtering av feil med denne måten å
187 integrere Java i TACOMA.
188 <P>
189 <H2><A NAME="SECTION00032000000000000000">Oppstart av Java-agenter</A></H2>
190 <P>
191 En egen agent (ag_java) startes opp når en Java-agent kommer inn fra
192 nettet eller egen maskin. Denne mottar en koffert som inneholder
193 bytecoden som skal utføres.
194 <P>
195 Når ag_java mottar kofferten ser den i mappen JAVA_BYTECODE for å
196 finne navnene på folderne med bytecoden. Disse folderne lagres på
197 disken med filnavn likt navnet på folderen pluss '.class'. En av
198 folderne skal hete TACOMA_AGENT. Skråstrek ('/') tolkes som
199 katalognavn-skille og det opprettes en underkatalog for filen. Det
200 siste er nødvendig for å bruke Javas klassehierarki.
201 <P>
202 Når alle bytecode-filene ligger klar på disken starter ag_java opp en
203 java-stub som laster inn klassen TACOMA_AGENT, oppretter et objekt av
204 samme type og kaller deretter operasjonen <TT>void Main(TACOMA,
205 briefcase)</TT> på objektet. Første parametret er et objekt der
206 operasjonene er APIen til TACOMA. Det skal kun være et TACOMA-objekt
207 per agent. Det andre parametret er kofferten som agenten mottar ved
208 oppstart.
209 <P>
210 <H1><A NAME="SECTION00040000000000000000">Konklusjon</A></H1>
211 <P>
212 Jeg har her vist hvordan man på en enkel måte kan integrere
213 programmeringsspråket Java i TACOMA. Dette er en enkel oppgave på
214 grunn av god st&#248;tte for binding mellom C og Java. Den valgte metoden for
215 integrering bruker ikke Javas styrke med feilhåndtering (exeptions)
216 eller utnytter de objektorienterte aspekter av språket.
217 <P>
218 <H1><A NAME="SECTION00050000000000000000">Tilgjengelighet</A></H1>
219 <P>
220 Mer informasjon om og siste versjon kan finnes på TACOMAs
221 hjemmeside&nbsp;[<A HREF="java2.html#TACOMAHome">7</A>] ved Seksjon for Informatikk.
222 <P>
223 <P><A NAME="SECTIONREF"><H2>References</H2></A><P>
224 <DL COMPACT>
225 <DT><A NAME="SchneiderTACOMA1_0"><STRONG>1</STRONG></A><DD>
226 Dag Johansen, Robbert van Renesse, og Fred&nbsp;B. Schneider.
227 An introduction to the tacoma distributed system.
228 Technical report, Seksjon for Informatikk, Universitetet i Troms&#248;,
229 1995.
230 <TT>[http://www.cs.uit.no/Lokalt/Rapporter/Reports/9523.html]</TT>.
231 <P>
232 <DT><A NAME="DagJohansen"><STRONG>2</STRONG></A><DD>
233 Dag Johansen&nbsp;<TT>&lt;dag@cs.uit.no&gt;</TT>.
234 Personlig kommunikasjon.
235 <P>
236 <DT><A NAME="SUNJAVA"><STRONG>3</STRONG></A><DD>
237 SUN microsystems.
238 Java: Programming for the internet.
239 Elektronisk dokument, 1996.
240 <TT>[http://java.sun.com/]</TT>.
241 <P>
242 <DT><A NAME="morinsort"><STRONG>4</STRONG></A><DD>
243 Pat Morin.
244 The improved sorting algorithm demo.
245 Elektronisk dokument, Mars 1996.
246 <TT>[http://turing.scs.carleton.ca/morin/sortalg/]</TT>.
247 <P>
248 <DT><A NAME="NPACHuman"><STRONG>5</STRONG></A><DD>
249 The npac visible human viewer.
250 Elektronisk dokument, 1996.
251 <TT>[http://www.npac.syr.edu/projects/vishuman/VisibleHuman.html]</TT>.
252 <P>
253 <DT><A NAME="PMAPhome"><STRONG>6</STRONG></A><DD>
254 Personal media arbitration protocol.
255 Elektronisk dokument, 1996.
256 <TT>[http://www.mirai.com/PMAP/]</TT>.
257 <P>
258 <DT><A NAME="TACOMAHome"><STRONG>7</STRONG></A><DD>
259 The tacoma project.
260 Elektronisk dokument, Mai 1996.
261 <TT>[http://www.cs.uit.no/DOS/Tacoma/]</TT>.
262 </DL>
263 <P>
264 <H2><A NAME="SECTION00061000000000000000">Om forfatteren</A></H2>
265 <P>
266 Petter Reinholdtsen er en laveregradsstudent i Informatikk ved
267 Universitetet i Tromsø. Hans hovedinteresse er internet-tjenester og
268 Unix drift. I tillegg til studiene jobber han deltid som webmaster og
269 utvikler ved universitetet og på Telenor Origo. Han har vært aktiv på
270 Internet siden høsten 1992, da han samlet det første laget for å delta
271 i konkuransen The Internet Hunt.
272
273 <P><ADDRESS><I>Petter Reinholdtsen <BR>
274 Mon Jun 3 22:58:24 METDST 1996</I>
275 </ADDRESS>
276 </BODY>
277 </HTML>