Datenströme und Verwaltung von Ressourcen

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;                (1)
  }
}

/**
 * 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() {
  …
}

1

Stream-Daten vollständig puffern.


[jadice document platform Version 5.5.12.1: Dokumentation für Entwickler. Veröffentlicht: 2021-08-17]