2013-04-11 8 views
6

mamy projekt takiego:Web danych na żywo w Java EE

enter image description here

nasz zainstalowana usługa na kocura ma metodę getDatabaseData (Request String) (RMI klient), które otrzymują dane z bazy danych przy użyciu (RMI Implementacja serwera) istniejąca w rdzeniu.

chcemy coś zrobić, że nasz zainstalowana usługa, która jest wewnątrz Tomcat stworzyć plik xml i wysłać go do klienta teraz:

myśleliśmy o rozwiązania, które:

  • pierwszy aby cały plik xml na naszym tomcat za pomocą getDatabaseData (żądanie String) & następnie nasz użytkownik może uzyskać odniesienie za pomocą linku do niego & rozpocząć pobieranie danych.

ale to rozwiązanie nie jest pouczające dla nas, ponieważ rozmiar pliku jest tak duża, a jeśli chcemy zrobić to nasz pamięci serwera Tomcat dostanie pełny tak szybko & zejść, więc szukamy dla rozwiązanie do przesyłania danych w czasie rzeczywistym do użytkownika zamiast tworzenia całego pliku. Mam na myśli sposób wysyłania danych do użytkownika w szablonie XML, gdy dane są odbierane z CORE.

Masz jakiś pomysł?

(przy okazji serwis internetowy na Tomcat został napisany przy użyciu MVC wiosny & Wiosna bezpieczeństwo)

+0

Jak duży jest plik? Ile plików oczekujesz w ciągu jednego dnia? Czy plik XML jest unikalny dla każdego połączenia, czy może być buforowany? –

+0

rozmiar może być większy niż 100 MB dla każdego żądania, a liczba tych plików zależy od żądań użytkownika, które są nieprzewidywalne. unikalność pliku xml jest zależna od userRequest (getDatabaseData() w rzeczywistości wygląda tak: getDatabaseData (żądanie String)) i jeśli żądanie String będzie podobne, dane będą podobne i dla buforowania nie jestem zaznajomiony z cachingiem mechanizm! – Mehdi

+0

Z ciekawości, dlaczego most RMI? –

Odpowiedz

1

Mogę dać ci pice kodu z mojego obecnego projektu, gdzie wracamy plik w akcji struts:

response.setContentType("application/octet-stream"); 
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\""); 
ServletOutputStream out = response.getOutputStream(); 
out.write(file); 

Czy tego właśnie szukasz?

+0

Za pomocą ServletOutputStream można przesyłać pliki strumieniowe bezpośrednio do użytkownika z CORE przez TOMCAT. W tym przypadku TOMCAT odgrywa rolę pośrednika. – Mikhail

+0

Myślę, że muszę to sprawdzić jeszcze raz! – Mehdi

+1

thanx, masz rację! sprawdź mój kod również ... – Mehdi

0

przy użyciu kodu @Noofiz, napisałem ten kod do testowania tej funkcjonalności &, który pracował dla mnie!

możemy odczytać z pliku i wysłać go na czas do użytkownika i pozwolić użytkownikowi pobrać plik!

1) Wydrukowałem "Zakończ"! aby upewnić się, że plik jest wysyłany do użytkownika na czas, kiedy buforuje i nie kończy buforowania najpierw &, a następnie wysłać go do użytkownika!

2) pobrany plik & plik główny md5 sprawdzony i były podobne.

tutaj jest mój kod serwletu:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    InputStream is = new FileInputStream("/home/Mehdi/Desktop/log.log"); 
    response.setContentType("application/octet-stream"); 
    ServletOutputStream out = response.getOutputStream(); 
    int i; 
    byte[] buffer = new byte[10 * 1024]; 

    while ((i = is.read(buffer)) != -1) { 
     if (i != 10240) { 
      for (int j = 0; j < i; j++) { 
       out.write(buffer[j]); 
      } 
     } else { 
      out.write(buffer); 
     } 
    } 
    System.out.println("End!"); 
} 
+0

Nie bądź tak szybki, aby wyrzucić inne sugestie ... – Darwind

+0

nie martw się, nie spieszę się! – Mehdi

+0

Wierzę, że byłeś ... – Darwind