Hallo Leute,
ich verwende neben java auch Primefaces. Durch einen Button Click möchte ich eine Datei runterladen, die ich zuerst über OutputStream bzw InputStream erstelle. Da das alles in einem Thread passiert, werden die nachfolgenden Ereignisse weiter verarbeitet, die normalerweise erst nach nachdem alles im InputStream steht folgen müssen. Zum Beispiel greift PrimeFaces schon auf die Setter und Getter (File) Methode, obwohl das Schreiben im stream nnoch nicht beendet worden ist.
Wie kann ich das verhindern? über Mutex Varible? Das Problem ist, die Funktion läuft über mehrere Klassen.
also greift schon auf SetFile und GetFile, ohne Inhalt
Die Reihenfolge ist so:
Im Setter (File).....
Schreibt...
In der Klasse Report....
im Getter (File)
Fertig mit output....
Fertig mit run
Danke im Voraus
ich verwende neben java auch Primefaces. Durch einen Button Click möchte ich eine Datei runterladen, die ich zuerst über OutputStream bzw InputStream erstelle. Da das alles in einem Thread passiert, werden die nachfolgenden Ereignisse weiter verarbeitet, die normalerweise erst nach nachdem alles im InputStream steht folgen müssen. Zum Beispiel greift PrimeFaces schon auf die Setter und Getter (File) Methode, obwohl das Schreiben im stream nnoch nicht beendet worden ist.
Wie kann ich das verhindern? über Mutex Varible? Das Problem ist, die Funktion läuft über mehrere Klassen.
Code:
public void actionButtonAbsence() throws IOException
{
PipedInputStream in = new PipedInputStream();
final PipedOutputStream out = new PipedOutputStream(in);
new Thread(
new Runnable() {
public void run () {
try {
// write the original OutputStream to the PipedOutputStream
System.out.println("Schreibt...");
absencereport.writeReport(out);
System.out.println("Fertig mit run");
}
catch (IOException e) {
// logging and exception handling should go here
}
}
}
).start();
setFile(new DefaultStreamedContent(in, "application/vnd.ms-excel", "file.xslx"));
}
also greift schon auf SetFile und GetFile, ohne Inhalt
Die Reihenfolge ist so:
Im Setter (File).....
Schreibt...
In der Klasse Report....
im Getter (File)
Fertig mit output....
Fertig mit run
Danke im Voraus