2013-04-11 2 views
6

wir haben ein Design wie folgt aus:Web Data Streaming in Java EE

enter image description here

unsere installierten Dienst auf tomcat hat eine Methode getDatabaseData (String Anfrage) (RMI-Client), die Daten aus der Datenbank unter Verwendung von (RMI erhalten Serverimplementierung), die im Kern vorhanden ist.

wollen wir etwas, das unsere installierten Dienst tun, die innerhalb tomcat eine XML-Datei zu machen und jetzt ist es an den Client senden:

wir über eine Lösung gedacht, dass:

  • zuerst das ganze machen XML-Datei auf unserem Tomcat mit dem getDatabaseData (String Anfrage) & dann kann unser Benutzer eine Referenz über einen Link zu ihm erhalten & starten Sie das Herunterladen der Daten.

aber diese Lösung ist für uns nicht informativ, da die Größe der Datei so groß ist, und wenn wir diese unsere Tomcatbediener Speicher tun wollen voll erhalten so schnell & runter, so dass für eine wir suchen Lösung für das Echtzeit-Streaming von Daten an Benutzer, anstatt die gesamte Datei zu erstellen. Ich meine eine Möglichkeit, die Daten an den Benutzer in einer XML-Vorlage zu senden, wenn Daten vom CORE empfangen werden.

Haben Sie eine Idee?

(übrigens die Webdienst auf tomcat geschrieben wurde, mit Spring MVC & Spring Security)

+0

Wie groß ist die Datei? Wie viele Dateien erwarten Sie an einem Tag? Ist die XML-Datei bei jedem Aufruf eindeutig oder kann sie zwischengespeichert werden? –

+0

Die Größe kann für jede Anfrage mehr als 100 MB betragen. Die Anzahl dieser Dateien hängt von den Benutzeranforderungen ab, was nicht vorhersehbar ist. Die Eindeutigkeit der XML-Datei hängt von der userRequest ab (die getDatabaseData() ist etwa so: getDatabaseData (String request)) und wenn die String-Anfrage ähnlich ist, sind die Daten ähnlich und zum Caching bin ich nicht mit Caching vertraut Mechanismus! – Mehdi

+0

Aus Neugier, warum die RMI-Brücke? –

Antwort

1

ich Ihnen ein Stück von Code aus meinem aktuellen Projekt geben kann, wo wir eine Datei in Streben Aktion zurück:

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

Ist das wonach Sie suchen?

+0

Mit ServletOutputStream können Sie Dateien direkt von CORE über TOMCAT zu Benutzern streamen. In diesem Fall spielt TOMCAT eine Proxy-Rolle. – Mikhail

+0

Ich denke, ich muss das nochmal überprüfen! – Mehdi

+1

vielen dank, du hattest recht! überprüfen Sie meinen Code auch ... – Mehdi

0

mit @Noofiz Code, schrieb ich diesen Code zum Testen dieser Funktionalität &, die für mich funktionierte!

können wir aus einer Datei lesen und sie rechtzeitig an den Benutzer senden und den Benutzer die Datei herunterladen lassen!

1) Ich druckte 'Ende!' um sicherzustellen, dass die Datei rechtzeitig an den Benutzer sendet, wenn es puffert und nicht die Pufferung beendet & dann senden Sie es an den Benutzer!

2) die heruntergeladene Datei & Hauptdatei MD5 überprüft und sie waren ähnlich.

hier ist mein Servlet-Code:

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

Seien Sie nicht so schnell, andere Vorschläge wegzuwerfen ... – Darwind

+0

keine Sorge, ich bin nicht in Eile! – Mehdi

+0

Ich glaube, du warst ... – Darwind