Backuper - system zdalnego archiwizowania plików

0

Cześć,
jeśli chodzi o Javę to wiem tyle, że jest przyjemnym językiem obiektowym, z którym po C++ nie powinno być ogromnych problemów.
Przerobiłem już jakieś podstawy swingu, socketów (wybrane rozdziału "Thinking in Java") + tutorial do eclipsa

Mam do zrobienia projekt, który nie ukrywam - mnie przerasta. Chciałbym uzyskać podpowiedź od czego powinienem zacząć i w którym kierunku pójść. Absolutnie nie oczekuję gotowych rozwiązań, raczej pomocy w nauce.

Wymagania projektu:

  • użytkownik ma możliwość wskazania pliku/plików do archiwizowania
  • użytkownik ma możliwość odtworzenia uprzednio skopiowanego pliku z kopii, niezależnie od jego
    „stanu” w pierwotnym systemie plików, dopóki w sposób jawny nie wyłączy archiwizowania danego
    pliku lub nie usunie go z archiwum
  • użytkownik ma możliwość sprawdzenia jakie pliki są archiwizowane (zostały zarchiwizowane)
  • liczba archiwizowanych plików nie może być ograniczona
  • kopiowane mają być pliki o dowolnym rozmiarze
  • należy unikać niepotrzebnego kopiowania plików do archiwum/z archiwum (należy sprawdzać, czy
    plik się zmienił)
  • system musi być odporny na przerwanie komunikacji, parametry połączenia (adres serwera, numer
    portu itp.) powinny być konfigurowalne
  • system powinien działać prawidłowo po wyłączeniu i ponownym włączeniu (zarówno serwera jak i
    klienta) ustawienia powinny być zapamiętywane
  • „bogate” GUI
  • instrukcja użytkownika (instalacja, obsługa, itp.) dla serwera i klienta

Z góry dzięki za pomoc.

0

No, no... ELKA, przedmiot OPA :> Nieładnie... musisz najpierw zadać KONKRETNE pytanie, żeby otrzymać odpowiedz/pomoc. Inaczej to wyglada na prosbe o gotowca :>

0

I dlaczego wiedziałem, że pierwszą odpowiedzią będzie odpowiedź w tym właśnie stylu...
Jak zaznaczyłem w treści to nie pytanie o gotowca, tylko o to z jakich bibliotek powinienem skorzystać i jak to zaplanować. Jakiś koncept, który pozwoli mi się zaczepić.

0

No a ja Ci mowie, ze takich "prosb" tu sa dziesiatki dziennie. I poki nie przedstawisz swojej koncepcji i nie zapytasz o zdanie, to marna szansa, zebys uzyskal to, czego chcesz.

Po pierwsze na wykladzie byla mowa o RMI - proponuje uzyc tego, zeby nie bawic sie w tworzenie wlasnego protokolu. Ale jak chcesz, to oczywiscie nikt Ci nie broni.
A reszta ? Tworzysz serwer, ktory monitoruje w jakis sposob pliki z okreslonym katalogu (z backupami) i uaktualnia je/wersjonuje.

1

@[losowa nazwa], twój student?

@damiannelus, piszesz sobie serwer za pomocą Apache Netty i robisz własne protokoły - rzeźba w g... Względnie jeżeli chcesz się pouczyć czegoś rynkowo rozsądnego (dającego kasę w przyszłości) i zrobić to szybko to piszesz aplikację z użyciem np. GWT lub Vaadin lub JSF lub Apache Wicket lub czegokolwiek innego, która będzie zapewniała dostęp do zasobów dysku na serwerze - komputerze bachupowanym. To będzie to bogate UI.
Lista plików do archiwizowania jest składowana w bazie danych (bez ceregieli trzy tabele jedna z listą plików, druga z informacjami o kolejnych archiwizacjach, trzecia z konfiguracją "ogólną"). Na podstawie tej tabeli tworzysz sobie aplikację Java SE działającą jako usługa systemowa / demon, która za pomocą np. biblioteki Quartz, będzie rodzajem CRONa.
Względnie zamiast aplikacji web stawiasz sobie kilka webservices, które pozwalają na listowanie dysku i dodawanie do bazy danych kolejnych plików. Całość spinasz za pomocą aplikacji SE, która działa po stronie admina i łączy się do wielu serwerów.

Dwie metody, kilka pojęć. Reszta należy do ciebie.

0

@Koziołek: Nie, ja sam jestem studentem. I dostałem ten sam projekt ;) A nie lubie, gdy ludzie lecą na gotowcach (co się coraz częściej zdarza) - no a doświadczenie z tego forum uczy, że jak ktoś napisał, że nie chce gotowca, to jeszcze nie znaczy, że rzeczywiście go nie chce ;)

@damiannelus: No widzisz, dostałeś wyczerpującą "pr0" odpowiedź ;)

0

Poniżej trzy klasy i problem z działaniem. Z tego co udało mi się 'ustalić' to nie działa klasa connect, ale nie mam pojęcia dlaczego. Może ktoś coś podpowiedzieć?

public class ProstyFileChooser {
	
	public static void main(String[] args) {
		ArrayList<PlikArchiwizowany> pal = new ArrayList<PlikArchiwizowany>();
		final JFileChooser fc = new JFileChooser();
		fc.setMultiSelectionEnabled(true);
		fc.showDialog(fc, "Wybierz pliki do archwizacji");
		File[] plik = fc.getSelectedFiles();
		for (int i = 0; i < plik.length; i++) {
			pal.add(new PlikArchiwizowany(plik[i]));
			pal.get(i).introduceSavedFile();
			System.out.println(plik[i].getName());
		}
		
		try {
			
			Socket socket = new Socket("localhost", 12129);
			ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
			ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
			
			System.out.println(123);
			oos.writeObject(plik);
			System.out.println("wysłałem");
			for (int i = 0; i < pal.size(); i++) {
				oos.writeObject(pal.get(i));
				System.out.println("wyslalem");
			}
		}catch (Exception e) {
			System.out.println(e.toString());
		}
		
	}
} 
import java.net.ServerSocket;
import java.net.Socket;
import java.util.*;
import java.io.*;


public class ProstyFileChooserSerwer extends Thread {
	private ServerSocket dateServer;
	
	public static void main(String[] args) throws Exception {
		new ProstyFileChooserSerwer();
	}
	
	public ProstyFileChooserSerwer() throws Exception {
		dateServer = new ServerSocket(12129);
		System.out.println("Serwer nasłuchuje na porcie 12129");		
		this.start();
	}
	
	   public void run() {
		     while(true) {
		       try {
		        System.out.println("Waiting for connections.");
		        Socket client = dateServer.accept();
		        System.out.println("Accepted a connection from: " +
		client.getInetAddress());
		        
		        Connect c = new Connect(client);
		       } catch(Exception e) {}
		     }
		   }

} 
class Connect extends Thread {
   private Socket client = null;
   private ObjectInputStream ois = null;
   private ObjectOutputStream oos = null;
    
   public Connect() {}

   public Connect(Socket clientSocket) {
     client = clientSocket;
     try {
      ois = new ObjectInputStream(client.getInputStream());
      File plik = (File) ois.readObject();
      //System.out.println(ois.readObject().toString());
      oos = new ObjectOutputStream(client.getOutputStream());
     } catch(Exception e1) {
         try {
            client.close();
         }catch(Exception e) {
           System.out.println(e.getMessage());
         }
         return;
     }
     this.start();
   }

  
   public void run() {
      try {
         oos.writeObject(new Date());
         oos.flush();
         // close streams and connections
         ois.close();
         oos.close();
         client.close(); 
      } catch(Exception e) {}       
   }
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1