Slutdokumentation för projektet
Filhanteraren
Linda Joëlsson
Per Johansson
Carl Ljungqvist
Juri Schwartz
Niklas Sundbaum
Magnus Vesterlund
Hedvig Welander
Jenny-Li Örsell
i samarbete med
SPECTRAL AB
Sammanfattning
Projektet Distribuerad filhanterare i Java utfördes våren 2000 på uppdrag av Spectral
AB under kursen 2D1954 Programutvecklingsprojekt.
Deltagare i gruppen var Linda Joëlsson, Per Johansson, Carl Ljungqvist, Juri
Schwartz, Niklas Sundbaum, Magnus Vesterlund, Hedvig Welander och Jenny-Li
Örsell.
Adressen till projektets hemsida är:
http://www.nada.kth.se/projects/proj00/Filhanteraren/. På denna sida finns
dokumentation om vårt arbete.
Projektet innebar att skapa en distribuerad filhanterare skriven i Java. Filhanteraren
kom att bestå av en applet lämplig att infogas i en webbsida, en server där filerna
kunde sparas samt ett protokoll för kommunikationen mellan dessa.
Bakgrunden till projektet var de många sammanhang där projektgrupper och liknande
organisationer på ett enkelt sätt måste kunna dela och hantera gemensamma filer trots
medlemmarnas geografiskt åtskilda lokalisering.
Uppgiften realiserades genom att förutom utvecklingen av den underliggande
funktionaliteten göra Filhanteraren tillgänglig över Internet samt formge ett intuitivt
användargränssnitt. Typiska finesser som popup-menyer, filträd, drag och släppfunktionalitet, högerknappsmenyer etc. gav slutresultatet ett lättanvänt och proffsigt
intryck.
För att öka Filhanterarens praktiska användbarhet infördes dessutom rättighetssystem,
användargrupper, inloggning med lösenord och menyer för administration.
Vidare utveckling av produkten gjordes möjlig genom lättillgänglig
källkodsdokumentation, flexibilitet beträffande underliggande
kommunikationsprotokoll, databaser, webbläsare och plattformar samt en hög
effektivitet vid ett stigande antal användare.
Sammanfattningsvis bör Filhanteraren ha mycket goda möjligheter att bli det
praktiska och slagkraftiga verktyg uppdragsgivaren Spectral efterfrågat.
Rollfördelning
Inom vår grupp ansåg vi inte att behovet av väldigt strikt rollfördelning var särskilt
stort. Vi utsåg Linda till projektledare, för att någon skulle ha ansvaret att samordna
våra aktiviteter och ta tag i möten med mera. Vi hade också en webbansvarig, Carl,
som såg till att projektets hemsida innehöll det den skulle och såg till att den såg
trevlig ut.
Övrig arbetsfördelning föll sig ganska naturlig under projektets gång. Beroende på
vad man trivdes bäst med kunde man arbeta med allt ifrån serverprogrammering och
användargränssnittsdesign till dokumentation.
Bakgrund och syfte
I många sammanhang behöver personer som ingår i en projektgrupp, en förening eller
någon annan verksamhet kunna dela på gemensamma filer. Det finns i dag bra
program för att åstadkomma detta genom att man använder sig av ett distribuerat
filsystem i ett nätverk. Det fungerar bra så länge som alla datorer befinner sig på t.ex.
ett kontor där samtliga datorer sköts av en kunnig administratör.
När användarna sitter på olika ställen, t.ex. hemma eller på olika kontor, blir det dock
besvärligt för dem att använda ett distribuerat filsystem. Man måste då koppla upp sig
mot det gemensamma filsystemet på en server som kan vara placerad t.ex. på kontoret
eller en gemensam programdistributör. Detta kan vara både omständligt och upplevas
som svårt av en del användare.
Vårt projekt går ut på att göra ett program som gör fildelning enklare för ovana
användare. Många potentiella användare är ovana vid att använda datorer, det är
därför viktigt att vårt program får ett lättanvänt och intuitivt gränssnitt, gärna ett
sådant som många användare redan har kommit i kontakt med, t.ex. Windows
Utforskaren. Detta gör att användaren snabbt känner sig säker på att använda
produkten och gör det på rätt sätt, utan att först behöva en längre tids utbildning och
inlärningsperiod.
Nu för tiden är det också allt vanligare att projektarbete sköts via webben. Det vore då
praktiskt om man på ett enkelt sätt kunde dela på filerna via ett webbgränssnitt.
Syftet med detta projekt blev att försöka realisera de ovanstående punkterna och
presentera lösningen. Under projektets gång har ett nära samarbete med
uppdragsgivaren hållits och de har hela tiden kunnat komma med förslag och
synpunkter. Det ska även vara möjligt för uppdragsgivaren att kunna utvidga och
förändra delar av systemet för att anpassa och skräddarsy systemet för sina behov.
Problembeskrivning
Vår uppdragsgivare, Spectral AB gav oss en kort beskrivning av sin idé, som byggde
på den bakgrund som skissats ovan. Av detta satte vi samman följande
problembeskrivning.
Filhanteraren ska bestå av en applet som enkelt kan bäddas in i en webbsida samt en
server där filerna sparas.
Appleten ska i största möjliga mån likna Utforskaren i Windows. Man ska från denna
få tillgång till ett gemensamt filsystem som delas av många användare. Filerna ska
sparas på en gemensam server. Man ska från appleten kunna överföra filer till och
från servern. Detta ska kunna göras genom att användaren ”klipper och klistrar”
mellan filhanteraren och andra program på sin dator, i synnerhet då mellan appleten
och den lokala filhanteraren, till exempel Microsofts Utforskaren eller UNIX
Filemanager. Även att kunna föra över filer med drag’n’drop är önskvärt.
Även serverprogrammet ska vara skrivet i Java och ingå som en del i uppgiften. Mot
denna skall många klienter kunna koppla upp sig samtidigt och kunna använda
filsystemet. Alla filer i filsystemet sparas på servern. Strukturen sparas i en SQLdatabas, medan själva innehållet i filen sparas i andra filer i serverns lokala filsystem.
I uppgiften ingår att utforma ett protokoll för kommunikationen mellan appleten och
servern samt att skapa ett grundläggande rättighetsskydd mot att utomstående ska
kunna ladda hem eller radera filer och kataloger.
Systemet ska vara lätt att lära sig och lätt att använda, även för de som inte har
speciell datorkunskap.
Användare
Systemet är tänkt att passa projektgrupper och liknande organisationer vars
medlemmar på ett enkelt sätt vill kunna dela gemensamma filer och kataloger, trots att
de sitter på geografiskt åtskilda platser.
En användare av systemet ska inte behöva ha speciella förkunskaper, utan systemet
ska kunna användas och förstås ändå.
Datormiljö och programvara
Systemet består av två delar, klienten och servern, som körs i olika miljöer.
Servern är en Java 2 applikation. Den är tänkt att köras på en PC-dator med Windows
NT 4.0 som operativsystem, men eftersom den är skriven helt och hållet i Java går
den att köra på alla datorer som har en virtuell maskin för Java 2. I projektet har vi
testat den på Windows NT 4.0 och Solaris 2.6.
Servern använder en databas för att lagra filsystemets struktur. I första hand är
Microsoft SQL Server 7.0 tänkt att användas, men alla SQL-frågor är skrivna i ANSI
SQL så alla ANSI-kompatibla SQL-databaser ska kunna användas. I projektet har vi
testat mot Microsoft SQL Server 7.0 och PostgresSQL 6.5.3. Kommunikationen
mellan serverprogrammet och databasen sker med JDBC, så en JDBC-drivrutin för
den aktuella databasen behövs.
Klienten implementeras som en applet i Java 2. Den är tänkt att köras från en
webbsida i en webbläsare. Klienten är framför allt tänkt att köras under Windows NT
4.0, men den ska helst även fungera under andra operativsystem.
I skrivande stund stödjer ej de vanligaste webbläsarna (Netscape Communicator och
Internet Explorer) Java 2 så Java plugin används för att köra appleten. Det betyder att
JRE (Java Runtime Environment) måste installeras på den dator där klienten ska
köras.
Funktionalitetsspecifikation
 Sökfunktion
Denna funktion hann vi inte göra, men önskemålet var att man ska kunna söka på
filnamn eller delar av filnamn i en katalog och dess underkataloger.
 Administrera användare
Genom denna funktion som endast är tillgänglig för administratörer ska man kunna
skapa användare, ta bort användare samt ändra namn och administrationsrättighet på
användare.
 Administrera grupper
Genom denna funktion som endast är tillgänglig för administratörer ska man kunna
skapa grupper, ta bort grupper, lägga till användare till grupper, ta bort användare från
grupper samt ändra namn och administrationsrättighet på grupper.
 Byta lösenord
Alla användare ska kunna ändra sitt eget lösenord.
 Ladda upp och ner filer och kataloger
Detta kan ske med drag-och-släpp. Om man laddar upp/ner en katalog laddas även allt
som katalogen innehåller upp/ner.
 Kopiera filer och kataloger inom filsystemet
Man kan kopiera filer eller hela kataloger med filer inom filsystemet, detta utan att
filernas innehåll passerar klienten.
 Flytta filer och kataloger inom filsystemet
Man kan flytta filer eller hela kataloger med filer inom filsystemet, detta utan att
filernas innehåll passerar klienten.
 Administrera rättigheter
Man ska kunna lägga till och ta bort rättigheter till filer och kataloger från och till
användare och grupper.
 Ta bort filer och kataloger
Man kan ta bort filer eller hela kataloger ur systemet.
 Högerknappsmeny
Högerknappsmenyn ska visa de vanligaste operationerna beroende på var man klickat.
 Knapprad
Från applikationens knapprad kan de vanligaste funktionerna väljas.
 Säkerhetssystem
Servern implementerar ett säkerhetssystem för filsystemet enligt
systemspecifikationen.
 Stöd för flera virtuella filsystem i samma server
Flera filsystem som används av t.ex. olika företag ska kunna samexistera i samma
server.
 Uppdateringsfunktion
Uppdateringsfunktion som laddar den senaste versionen av alla kataloger, eventuellt
automatiskt. Den automatiska uppdateringen hann vi inte göra.
 Anslutning via http
Denna funktion hann vi inte med att göra.
 Egenskapsruta
Denna ruta ska visa egenskaper för filer och kataloger.
Körexempel
En användare loggar in på systemet genom att gå till en viss, i förväg bestämd,
webbsida, där han eller hon möts av en bild liknande denna.
Figur 1. Klientens inloggningsbild i en webläsare.
Användaren skriver då in sitt användarnamn och lösenord, samt i vissa fall adressen
till den dator där servern är. Sedan klickar han eller hon på knappen ”Login”.
Om användare har skrivit in fel namn eller lösenord, kopplas förbindelsen till servern
ner och ett felmeddelande visas.
Figur 2. Klienten användargränssnitt.
I annat fall, öppnas ett separat fönster i vilket man kan se den aktuella filstrukturen på
den server man kopplat upp sig mot. Denna information visas i en trädliknande form,
precis som i Windows Utforskaren. Till vänster visas katalogstrukturen och till höger
visas den aktuella katalogens innehåll av filer eller andra kataloger.
Nu fungerar applikationen precis som vilken grafisk filhanterare som helst. Man kan
med hjälp av musen markera, flytta och kopiera filer och kataloger. Samma
kommandon finns även som menyval.
Utöver detta kan en användare också byta sitt lösenord och ändra rättigheter till filer
som han eller hon har administratörsrättigheter till. Som systemadministratör finns
även möjlighet att skapa rättighetsgrupper i vilka användare ingår varmed en
gemensam rättighetsnivå kan sättas för dessa användare, vilket underlättar
administrationen.
Systembeskrivning
Systemet består av två huvudsakliga delar, ett klientprogram i form av en Java applet
som körs på användarens dator och ett serverprogram skrivet i Java som körs på en
serverdator.
Användaren använder systemet från en applet som körs i en webbläsare. I denna
applet visas det delade filsystemet på samma sätt som i Utforskaren i Windows.
Användaren kan med hjälp av appleten flytta filer till och från det delade filsystemet.
Appleten skrivs naturligtvis i Java. Appleten är uppkopplad mot servern via Internet.
Filer, kataloginformation med mera överförs mellan klienten och servern med ett
egenutvecklat protokoll. Meddelandena i detta protokoll måste överföras över något
underliggande transportprotokoll. Till att börja med har vi implementerat vårt
protokoll över TCP men vi har även förberett så att det ska vara lätt att använda något
annat transportprotokoll, till exempel skulle man kunna vilja använda HTTP för att
lättare komma igenom brandväggar.
På servern körs ett serverprogram som även det är skrivet i Java. Det ska kunna ta
emot uppkopplingar från klienter och kommunicera med flera klienter samtidigt. Det
har även ett minimalt användargränssnitt där man kan kontrollera vilka användare
som är inloggade och stänga av serverprogrammet.
Som angivits i uppdragsbeskrivningen lagras filsystemsstrukturen för det delade
filsystemet i en SQL-databas. Själva datat i filerna lagras inte i databasen, utan lagras
i en katalog i serverns filsystem.
För att det delade filsystemet ska bli praktiskt användbart har vi ett rättighetssystem
som kontrollerar vilka som kan göra vad i filsystemet. Användarna måste logga in
med ett användarnamn och lösenord innan de kan använda systemet. Användare kan
tilldelas olika rättigheter till kataloger och filer i filsystemet. Vi har bestämt oss för att
använda tre olika rättigheter, läs-, skriv- och administrationsrättigheter. För att göra
systemet mer lättadministrerat har vi infört användargrupper som kan få olika
rättigheter.
Vi har även infört ett rättighetssystem som kontrollerar vilka användare som kan
administrera andra användare och grupper.
Systemskiss
Figur 3. Översiktlig skiss av systemet.
Moduler
Användargränssnitt på klienten
Klientappleten har ett användargränssnitt som liknar det i Utforskaren i Windows.
Man kan med appleten flytta filer mellan det delade filsystemet och det lokala
filsystemet på klienten.
Man ska från klientens användargränssnitt även kunna administrera rättigheter till
filer och kataloger samt administrera användare och grupper.
Protokoll
Vi har utvecklat ett eget protokoll för kommunikationen mellan klienten och servern.
Protokollet stöder all den funktionalitet som systemet ska innehålla.
Ett bibliotek med stödklasser för användning av protokollet har också utvecklats. Det
ger möjlighet att i koden till både servern och klienten sända och ta emot
protokollmeddelanden på ett enkelt sätt.
Protokollet specificeras i ett separat dokument (3).
Kommunikationsmodul i klient och server
Det protokoll vi har utvecklat för filöverföring behöver ett underliggande protokoll
för överföringen mellan klient och server. Till att börja med har vi implementerat vårt
protokoll över TCP, den enklaste möjliga varianten. Senare kan det bli aktuellt att
implementera vårt protokoll över något annat transportprotokoll, till exempel SSL om
man behöver kryptering eller HTTP som kan göra det lättare att komma genom
brandväggar.
Eftersom det ska finnas möjlighet att byta underliggande protokoll mellan klienten
och servern har de delar som direkt berörs av det underliggande
kommunikationsprotokollet implementerats som en egen, fristående modul.
Kommunikationsmodulen har ett tydligt specificerat gränssnitt mot det övriga
systemet. Man kan då lättare implementera kommunikationsmoduler för andra
transportprotokoll och installera dessa utan att behöva ändra i resten av systemet.
Eftersom kommunikationen inte ser riktigt likadan ut på klientsidan och serversidan
vi har vi gjort en serverversion och en klientversion av varje kommunikationsmodul.
Databas
Filsystemsstrukturen, användare, grupper och all säkerhetsinformation lagras i en
SQL-databas. Vi har i projektet haft Microsoft SQL Server, men eftersom vi följt
ANSI SQL standarden kan valet av databas kan lätt ändras.
En konceptuell modell av filsystemet och databasdesignen finns i ett separat
dokument (2).
Serverprogram
Serverprogrammet är den komplexaste delen i systemet. Det kan ta emot
uppkopplingar från klienter och kommunicera med flera klienter samtidigt. Det tar
emot meddelanden enligt det protokoll vi utvecklat, utföra de kommandon som
meddelandena begär och sänder tillbaka svarsmeddelanden till klienterna.
Serverprogrammet är skrivet i Java. För att lättare och effektivare kunna hantera
många samtidiga användare har serverprogrammet gjorts multitrådat. Det
kommunicerar med SQL-databasen via JDBC.
Serverprogrammet har ett minimalt användargränssnitt. Från det kan man se vilka
användare som är inloggade, logga ut användare och stoppa servern.
Här följer skiss av serverns arkitektur:
Figur 4. Serverns arkitektur.
ConnectorThread
Det här är den tråd som tar emot uppkopplingar från klienterna. När klienten är
uppkopplad skapas en tråd som sedan tar emot alla meddelanden från klienten och
behandlar dem.
ServiceThread
Det här är de trådar som tar emot meddelanden från klienterna och behandlar dem.
Det startas en ny tråd för varje klient som ansluter sig. Det är härifrån alla
modifieringar av databasen sker. Förutom att bara utföra alla kommandon som
kommer från klienten måste trådarna även sköta inloggning av användarna och göra
rättighetskontroller innan kommandon utförs.
LockTable
Vissa operationer kräver att filer låses. Det kan till exempel vara nödvändigt när en
användare håller på att ladda upp en ny version av en fil. Då ska ingen annan kunna
börja ladda upp en annan version av filen samtidigt.
Synchronization objects
Vid vissa operationer måste synkronisering mellan de olika trådarna ske. Det är
nödvändigt till exempel när nya användare eller grupper ska skapas. Det kan även
gälla saker som till exempel att serverprogrammet ska stängas av.
User interface
Ett litet användargränssnitt där grundläggande administration ska kunna utföras.
Database
Den databas där strukturen hos det delade filsystemet sparas. Kommunikationen med
denna databas sker med JDBC.
Filesystem
Det lokala filsystemet på servern. Här sparas datat i de filer som finns i det delade
filsystemet.
Referenser
Nedanstående dokument kan man hitta på projektets webbsida.
(1) Filesystem specification
(2) Database specification
(3) Protocol specification