Beispiel 7.8. Schritt für Schritt Anleitung für die programmatische Konfiguration des BufferManagers
Erläuterungen zum BufferManager sind unter „BufferManager und Datenzwischenspeicherung“ nachlesbar.
Hinzufügen der folgenden Maven Dependency, falls noch nicht vorhanden:
<dependency> <groupId>com.levigo.jadice.documentplatform.core</groupId> <artifactId>jadice-buffer-manager</artifactId> </dependency>
In der Klasse BasicDemoApplication
ruft man in der
init()
-Methode nach dem Methodenaufruf
JadicePropertiesConfiguration
.configure()
, die
Methode configureBufferManager()
auf. Die Methode
JadicePropertiesConfiguration
.configure()
lädt die
Konfigurationen aus der Datei Jadice.properties
. Da man
einen Teil der Konfiguration ändern möchte, ruft man danach die Methode
configureBufferManager()
auf.
Hierzu muss noch folgender Code in die BasicDemoApplication
kopiert
werden:
private void configureBufferManager() throws JadiceException { BufferManagerConfigurer.configure() .fileStoreStrategy(BufferManagerConfigurer.FileStoreStrategy.ASYNCHRONOUS_FILE_CHANNEL) .install(); DefaultBufferManager.setEnabled(true); }
Der BufferManager kann mittels der Klasse BufferManagerConfigurer
konfiguriert werden. Dort können die
BufferManagerConfigurer.FileStoreStrategy
und der
BufferManagerConfigurer.StoreMode
eingestellt werden. Es ist empfehlenswert,
die BufferManagerConfigurer.FileStoreStrategy
auf AUTO
zu setzen. Vorteil von AUTO
ist, dass das Programm
automatisch eine geeignete BufferManagerConfigurer.FileStoreStrategy
auswählt. Falls eine bestimmte BufferManagerConfigurer.FileStoreStrategy
gewünscht wird, kann ASYNCHRONOUS_FILE_CHANNEL
im oben
genannten Code beispielsweise durch MEMORY_MAPPED
ersetzt
werden.
Beispiel 7.9. Puffern von Stream-Inhalten mittels BufferManager
Dieses Codebeispiel zeigt das Einlesen eines Datenstroms unter Verwendung des BufferManagers sowie das Schließen des Original-Datenstroms. Mit dem gepufferten Datenstrom kann danach weitergearbeitet werden.
/** * Retrieves an {@link InputStream} and returns a buffered version of it. * The caller is responsible for closing the buffered stream. */ private SeekableInputStream getInputStreamExample() throws Exception { try (InputStream inputStream = getInputStreamFromArchive()) { SeekableInputStream wrapped = IOUtils.wrap(inputStream, true); IOUtils.drainSynchronously(wrapped); return wrapped; } } /** * Retrieves an {@link InputStream} from some sort of backend, * e.g. a long-term storage archive, a servlet, etc. * The caller is responsible for closing this stream. */ private InputStream getInputStreamFromArchive() { … }
|
Stream-Daten vollständig puffern. |