Benutzerspezifische Portlet-Einstellungen speichern

Portlets können benutzerspezifische Einstellungen (etwa zu Personalisierungszwecken) auf unterschiedliche Art speichern. Unser Portal Manager verfügt über drei Speichervarianten für solche Daten:

  • Im RAM (MemoryPreferencesStorage): Dies ist die schnellste Methode, jedoch gehen die gespeicherten Informationen verloren, wenn der Application Server neu gestartet wird.

  • Im Dateisystem (FilesystemPreferencesStorage): Die Einstellungen werden als Java-Preferences im Home-Verzeichnis des Benutzers abgelegt, der den Trifork gestartet hat. Bei vielen Benutzern oder wenn viele Portlets eingesetzt werden, reichen die Speichermöglichkeiten des Dateisystems unter Umständen nicht aus. So kann etwa unter Linux ein Verzeichnis höchstens 32.768 Verzeichnisse enthalten.

  • In einer Datenbank (DatabasePreferencesStorage) (ab Version 6.7.1): Die Speicherung der Benutzerdaten in einer Datenbank ist die flexibelste Methode, erhöht jedoch den administrativen Aufwand.

Die Speicherart kann im Property preferencesStorage mit Hilfe eines Beans in der Datei pm.xml der Portlet-Web-Applikation spezifiziert werden. Nur eines dieser Beans darf verwendet werden, deshalb sind im folgenden Beispiel zwei Beans auskommentiert.

<property name="preferencesStorage">
  <!-- Store in memory only. Prefs will not survive appserver restart -->
  <!-- bean class="com.infopark.pm.MemoryPreferencesStorage" /> -->
  <bean class="com.infopark.pm.FilesystemPreferencesStorage" />
  <!-- Store in database table. Configure a dataSource bean -->
  <!--
  <bean class="com.infopark.pm.DatabasePreferencesStorage">
    <property name="dataSource" ref="portletPrefsDataSource"/>
    <property name="tableName" value="portlet_prefs"/>
    <property name="portletColumn" value="portlet"/>
    <property name="loginColumn" value="login"/>
    <property name="keyColumn" value="key"/>
    <property name="indexColumn" value="idx"/>
    <property name="valueColumn" value="value"/>
  </bean>
  -->
</property>

Die Beans, mit denen die Benutzerdaten im RAM oder im Dateisystem abgelegt werden, haben keine konfigurierbaren Einstellungen.

Das Bean zur Speicherung der Daten in einer Datenbank erwartet, dass die Datenquelle existiert und zugreifbar ist. Die Datenquelle kann im Bean com.infopark.pm.DatabasePreferencesStorage mit den folgenden property-Elementen konfiguriert werden:

  • dataSource: Referenzieren Sie mit dem Attribut ref ein Bean, etwa portletPrefsDataSource, mit dem die Klasse für den Zugriff auf die Datenquelle (der Adapter) konfiguriert wird, etwa das folgende Bean für den Zugriff über JDBC:

    <bean id="portletPrefsDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName">
        <value>jdbc/portletDB</value>
      </property>
    </bean>
  • tableName: Name der Datenbanktabelle.

  • indexColumn: Name der Spalte, in der der Primärschlüssel abgelegt wird.

  • keyColumn: Name der Spalte, in der der Name des zu speichernden Wertes (der portlet- und benutzerspezifische Parametername) abgelegt wird.

  • portletColumn: Name der Spalte, in der die Portlet-ID gespeichert wird.

  • loginColumn: Name der Spalte, in der der Benutzername gespeichert wird.

  • valueColumn: Name der Spalte, in der der Wert des Parameters abgelegt wird.

Das Datenbank-Interface wird im Portal Manager ausschließlich vom News-Portlet verwendet. Um das Interface wie im obigen Beispiel zu nutzen, müssen die folgenden Voraussetzungen erfüllt sein:

  • Verfügbare Datenbank: Die Datenbank muss eingerichtet worden sein und über die oben spezifizierte Tabelle verfügen. Die Werte aller Spalten außer indexColumn sind vom Typ VARCHAR. Die Werte von indexColumn haben den Typ INT. Der folgende Datenbankbefehl legt eine solche Tabelle an:

    CREATE TABLE portlet_prefs (
      idx INT,
      key VARCHAR,
      login VARCHAR,
      portlet VARCHAR,
      value VARCHAR
    )
  • Installierte JDBC-Treiber: Der JDBC-Treiber für Ihre Datenbank muss im Trifork-Server installiert worden sein. Sie können ihn über die Console des Servers hochgeladen.

  • Eingerichtete Datenquelle: Sie benötigen im Trifork-Server eine dataSource und eine pooledDataSource, um über den JDBC-Treiber auf Ihre eingerichtete Datenbank zuzugreifen.

Sind die Datenbank und der Zugriff auf sie eingerichtet, können Sie in Ihren Portlets analog zum News-Portlet über das API des Beans die benutzerspezifischen Portlet-Einstellungen speichern und auslesen.