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