Hallo,
ich möchte gerne folgendes realisieren:
1) Email aus GUI senden
+ Dokument generieren (als Anhang)
Es geht mir hier nicht wie ich die Email versende, sondern ich habe ein Verständnisproblem mit
b) Wann verwende ich einen PipedOutputStream und was bringt mir dieser gegenüber einem OutputStream?
Mein Ablauf sieht wie folgt aus:
JSF - Controller Bean:
// Es wird ein Objekt "Offer" übergeben und daraus wird dann eine PDF erstellt
EJB - Bean:
- In der EJB Bean habe ich dann folgende Dinge zu tun:
1) Erstellung der PDF
Anschließend übergebe ich den Stream (die PDF) meinem Objekt "EmailAttachment":
Was ich nun nicht verstehe, wann:
a) Welche der Methoden 1-4 muss innerhalb 1) Erstellung der PDF in einem managedExecutorService.submit(() laufen? Wenn ich es richtig sehe und PipedOutputStream createPdf NICHT innerhalb managedExecutorService.submit(() laufen würde, wird diese Methode gar nicht ausgeführt?
b) Können diese managedExecutorService.submit(() auch verschachtelt sein (nested) ?
c) Macht es Sinn die EJB - Methode bereits in einem managedExecutorService.submit(() innerhalb der JSF Bean aufzurufen?
Also sowas wie:
Danke für die Hilfe
ich möchte gerne folgendes realisieren:
1) Email aus GUI senden
+ Dokument generieren (als Anhang)
Es geht mir hier nicht wie ich die Email versende, sondern ich habe ein Verständnisproblem mit
- InputStream
- Outputstream
- PipedOutputstream
- ManagedExecutorService managedExecutorService
Java:
managedExecutorService.submit(() -> {
try {
doSomething();
}
catch (Exception e) {}
return null;
});
b) Wann verwende ich einen PipedOutputStream und was bringt mir dieser gegenüber einem OutputStream?
Mein Ablauf sieht wie folgt aus:
JSF - Controller Bean:
// Es wird ein Objekt "Offer" übergeben und daraus wird dann eine PDF erstellt
Code:
public void doSendEmail() {
myEjbean.sendOffer(offer);
}
EJB - Bean:
- In der EJB Bean habe ich dann folgende Dinge zu tun:
1) Erstellung der PDF
Code:
PipedOutputStream createPdfWithAttachments(DocumentDesigner documentDesigner, String fileName,
boolean preview) {
List<InputStream> inputStreamList = new ArrayList<InputStream>();
// 1) Alle vor der PDF Dateien laden (Es werden PDF Dateien geladen, die vor dem eigentlichen Angebot sein sollen in der PDF)
// // Diese hinzufügen bei: inputStreamList.add(inputStream);
// 2) Dokument erstellen (Angebot erstellen)
PipedOutputStream createPdf(PipedOutputStream os, DocumentDesigner documentDesigner, boolean preview)
inputStreamList.add(isDocument);
// 3) Alle nach der PDF Dateien laden (Es werden PDF Dateien geladen, die nach dem eigentlichen Angebot sein sollen in der PDF)
// Diese hinzufügen bei: inputStreamList.add(inputStream);
// 4) Merge PDF
PipedOutputStream is = pdfGenerationHelperService.mergePdf(inputStreamList, fileName);
return is;
}
Anschließend übergebe ich den Stream (die PDF) meinem Objekt "EmailAttachment":
Java:
PipedOutputStream os = new PipedOutputStream();
PipedInputStream is = new PipedInputStream(os);
os = pdfDocumentGenerationService.createPdfWithAttachments(offer.getDocumentDesigner(),
fileName, false);
EmailAttachment emailAttachment = new EmailAttachment();
emailAttachment.setInputStream(is);
emailAttachment.setFilename(fileName);
emailAttachment.setMimeType("application/pdf");
Was ich nun nicht verstehe, wann:
a) Welche der Methoden 1-4 muss innerhalb 1) Erstellung der PDF in einem managedExecutorService.submit(() laufen? Wenn ich es richtig sehe und PipedOutputStream createPdf NICHT innerhalb managedExecutorService.submit(() laufen würde, wird diese Methode gar nicht ausgeführt?
b) Können diese managedExecutorService.submit(() auch verschachtelt sein (nested) ?
c) Macht es Sinn die EJB - Methode bereits in einem managedExecutorService.submit(() innerhalb der JSF Bean aufzurufen?
Also sowas wie:
Java:
managedExecutorService.submit(() -> {
try {
// Versenden
offerProcessService.sendOffer(offer)
}
catch (Exception e) {
LOGGER.error(ExceptionUtils.getFullStackTrace(e));
}
return;
});
Danke für die Hilfe