CHANGELOG.md 212 KB
Newer Older
1 2 3 4 5
Versionsverlauf
===============

## [Noch nicht veröffentlicht]

6 7 8 9
- derzeit keine Änderungen

## [Version 3.13.0]

Jonathan Haas's avatar
Jonathan Haas committed
10 11 12 13 14 15 16 17
### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.systemModellGlobal Version 40:

  - Ergänzung der Attributgruppe `atg.applikationsEigenschaften` am `typ.applikation`

18 19
### Neue Features

Jonathan Haas's avatar
Jonathan Haas committed
20
- Das Interface `MutableSet` erlaubt nun eine Abfrage nach dem Konfigurationsverantwortlichen, der die Mengenelemente ändern darf (mit `verwaltung="kv...."` in Versorgungsdateien spezifiziert).
Jonathan Haas's avatar
Jonathan Haas committed
21

Jonathan Haas's avatar
Jonathan Haas committed
22
- Im `ClientDavInterface` wurden die neuen Methoden `getAccessControlMode()` und `getAccessControlManager()` ergänzt. Die erste gibt die vom Datenverteiler verwendete Art der Rechteprüfung zurück (Abfrage von `atg.datenverteilerRechteprüfung`), die zweite erlaubt es einer Applikation, die Rechteparametrierung abzufragen und daher weitgehend unabhängig vom Datenverteiler zu ermitteln, welche Aktionen erlaubt und verboten sind.
Jonathan Haas's avatar
Jonathan Haas committed
23 24 25

  - Beide Methoden benötigen zur korrekten Funktionsweise eine aktuelle Kernsoftware im Datenverteiler (mindestens 3.7.0, besser neuer) und kb.systemModellGlobal in mindestens Version 36. 

Jonathan Haas's avatar
Jonathan Haas committed
26 27 28
- Das Interface `ClientApplication` erlaubt nun, den Benutzer zu ermitteln unter dem die Applikation eingeloggt ist und den Datenverteiler zu ermitteln, bei dem die Applikation eingeloggt ist. Diese Funktion benötigt kb.systemModellGlobal in Version 40.

- Im GTM wurde das Menü erweitert. Auf Wunsch können im GTM nun die Berechtigungen eines Benutzers eingeblendet werden.
Jonathan Haas's avatar
Jonathan Haas committed
29 30 31 32
 
- Der Datenverteiler prüft bei aktivierter neuer Rechteprüfung nun, ob das Bearbeiten bzw. Anlegen von Objekten und das Ändern von Mengen entsprechend der Rechteparametrierung erlaubt ist. Hierzu wurde das bisher als Prototyp implementierte Rechteprüfungs-Plugin vervollständigt und in den Datenverteiler fest integriert.

- Auf die gleiche Weise prüft der Datenverteiler nun die Berechtigung, einzelne Archivanfragen durchführen zu können. Diese sind nur noch erlaubt, wenn die Applikation die angefragten Daten als Empfänger lesen darf.
Jonathan Haas's avatar
Jonathan Haas committed
33

34 35
- Der Methode `CronDefinition.nextScheduledTime()` kann nun optional eine Zeitzone übergeben werden.

Jonathan Haas's avatar
Jonathan Haas committed
36 37
### Bugfixes

38 39
- [Fehler 21](https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/issues/21): Die Applikationsfertigmeldung wird nun bei Verwendung von 2 Datenverteilerverbindungen bei beiden Verbindungen gleichzeitig versendet. Dadurch wird verhindert, dass sich die zweite Verbindung zu früh fertigmeldet und beispielsweise der Datenverteiler nicht mehr ordnungsgemäß auf die Parametrierung wartet. 

Jonathan Haas's avatar
Jonathan Haas committed
40 41
- Die Synchronisierung auf die `ConnectionMap`-Klasse im Datenverteiler wurde korrigiert, wodurch sehr selten auftretende Exceptions beim Beenden des Datenverteilers korrigiert werden.

42 43 44
- Bei Verwendung eines passiven Verbindungsaufbaus (neu in Version 3.12.0) wird nun automatisch die zweite Verbindung deaktiviert, da keine 2 Serververbindungen unter dem selben Port aufgebaut werden können. Außerdem werden in GUI-Applikationen, die passiv gestartet werden (z. B. GTM), Datenverteiler-IP und -Port ausgeblendet, da diese ignoriert werden.

- Ein Datenverteiler der aktiv Applikationverbindungen zu passiven Verbindungspartnern aufbaut, hat nicht in allen Fällen nach einem Abbruch der Verbindung erneute Verbindungsversuche durchgeführt, weil der Datenverteiler die terminierte Verbindung nicht immer korrekt den parametrierten Verbindungen zuordnen konnte. Das Verhalten wurde korrigiert.
45

46 47
- In der Klasse `CronDefinition` wurde der Spezialfall, wenn sowohl Wochentage als auch Monate angegeben wurden, nicht korrekt behandelt. 

48
### Änderungen an den Standardparametern
49

50 51
- Der Aufrufparameter `-rechtePruefung=ja` aktiviert nun die neue Rechteprüfung statt die alte. Soll die alte Rechteprüfung weiterhin benutzt werden, kann `-rechtePruefung=alt` verwendet werden. `-rechtePruefung=neu` funktioniert weiterhin. 

52 53 54 55
- Die Standard-Puffer-Größen (Aufrufargumente `-puffer`, `-appTelegrammPuffer`, `-davTelegrammPuffer`) wurden von 1 MB (und 2,5 MB für den Auslieferungspuffer) auf 100 MB erhöht.

- Der Standard-Puffer-Anteil der zweiten Verbindung (für Konfigurationsanfragen) `-zweiteVerbindungPufferAnteil` wurde von 1% auf 10% erhöht.

56 57
- Die in Version 3.6.3 implementierte zweite Verbindung ist jetzt standardmäßig aktiviert (`-zweiteVerbindung=ja`). Wie unter dieser Version beschrieben, ergeben sich möglicherweise dadurch Änderungen am Verhalten von ungünstig programmierten Applikationen. Bei betroffenen Applikationen wurden seit Kernsoftware-Version 3.6.3 Warnungen im Debug ausgegeben. Das alte Verhalten kann mit `-zweiteVerbindung=nein` wiederhergestellt werden.

58 59
### Änderungen

Jonathan Haas's avatar
Jonathan Haas committed
60
- Die implizit vorhandenen Rechte für z. B. Konfigurationsanfragen wurden angepasst, damit keine fehlerhaften Anmeldungen bei z. B. anderen Applikationen mehr erlaubt sind.
Jonathan Haas's avatar
Jonathan Haas committed
61

62 63
- Die Javadoc-Kommentare von einigen Methoden wurden formal und inhaltlich überarbeitet.

64 65
- In Javadoc-Kommentaren wurde `@since` ergänzt, um bei kürzlich ergänzten Methoden zu dokumentieren, ab welcher Version diese vorhanden sind.

66 67 68 69
- Einige Klassen wurden auf `@Deprecated` gesetzt, beispielsweise Klassen, die die alte Authentifizierungsmethode implementieren oder Klassen, die seit längerem ungenutzt sind.

- Das schon seit längerem auf `@Deprecated` gesetzte und ungenutzte Interface `SystemConfigAuthority` wurde gelöscht.

70 71
## [Version 3.12.0]

72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
### Änderungen

- [Fehler 13](https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/issues/13), Nerz-FM-225 und Nerz-FM-233: Es wurden folgende Performanceverbesserungen in der Konfiguration implementiert:

  - Die Methode `DataModel.getObjects(long... ids)` versucht jetzt alle übergebenen Objekt-IDs
    gleichzeitig aus den Konfigurationsdateien zu lesen und verwendet hierfür je Konfigurationsdatei
    eine optimierte binäre Suche. Gegenüber dem alten Verhalten, dass jedes Objekt einzeln gesucht
    wurde, konnte die Performance damit deutlich verbessert werden (teilweise über 150x schneller).

  - Das Laden von Objekten aus Mengen wurde auf diese Methode umgestellt, d. h. es wird versucht alle
    Objekte möglichst gleichzeitig zu laden, statt für jedes Objekt einzeln potentiell alle Konfigurationsdateien
    zu durchsuchen.
    
  - Bei der Initialisierung von dynamischen Mengen werden nicht mehr alle Elemente aus den
    Konfigurationsdateien geladen, sondern nur noch die vom Anwender gewünschten Elemente. Hiermit
    kann in den meisten Fällen (z. B. beim Start der Parametrierung) das aufwändige Laden von bereits gelöschten
    Elementen vermieden werden.
    
  - Bei dynamischen Mengen, bei denen durch die Typ-Festlegung sichergestellt ist, dass diese nur transiente dynamische
    Objekte enthalten können (z. B. Menge der Applikationen) wird auf eine persistente Speicherung der Menge verzichtet
    und die Mengenelemente stattdessen wie die transienten Objekte selbst nur im Arbeitsspeicher gehalten.
    
Jonathan Haas's avatar
Jonathan Haas committed
94
    Hierdurch wird vermieden, dass eine solche Menge mit der Zeit viele überflüssige und nicht mehr auflösbare Elemente ansammelt.
95 96 97 98
    
  - Sollten Objekte aus Mengen nicht auflösbar sein, wird nun eine einzelne Debug-Meldung mit allen nicht-gefundenen
    Objekten ausgegeben, statt jedes Objekt einzeln.
   
99
- Die Javadoc-Kommentare von einigen Methoden wurden formal und inhaltlich überarbeitet.
100

Jonathan Haas's avatar
Jonathan Haas committed
101 102
- Der Programmcode wurde teilweise überarbeitet, wodurch die Kompatibilität zu neuen Java-Versionen (ab Java 9) verbessert wurde und die Performance verbessert wurde.

103 104 105 106
### Neue Features

- Die `ArgumentList`-Klasse besitzt nun einige neue Funktionen, die Aufrufargumente in moderne Java-Typen (wie `Path`, `Duration` oder `LocalDateTime`) konvertieren. Zusätzlich können Datenmengen (Bytes) oder Werte in SI-Konformen Basiseinheiten (z. B. Längen in Metern) abgefragt werden.

107
- Nerz-ÄM-147: Das Data-Interface wurde überarbeitet und bietet eine neue Methode `updated`, mit der ein bestehendes Datum auf die aktuelle Version einer Attributgruppe überführt werden kann.
108 109

- `Data`-Objekte haben jetzt die neue Methode `getAttributeGroup`, mit der
110
  die Attributgruppe ermittelt werden kann, aus der das Objekt erstellt wurde.
111 112 113

- `Data.Array`s sind jetzt iterierbar (z. B. mit `for(Data d : array) {...}`).

114
- Bei primitiven Instanzen von `Data.Array` kann jetzt in jedem Fall `asTextArray` benutzt werden (um z. B. eine rein textuelle Darstellung von beliebigen Arrays mit z. B. Zahlwerten oder Referenzwerten zu erhalten). Vorher funktionierte das nur bei unveränderlichen Data-Objekten.
115

116 117 118 119
- Datenverteiler und Applikationen besitzen nun die Möglichkeit, einen umgekehrten Verbindungsaufbau durchzuführen. Dabei öffnet die Applikation einen Server-Port und der Datenverteiler führt aktiv Verbindungsversuche zur angegebenen Applikation durch.

  - Als Applikation im oben genannten Sinn kann auch der Datenverteiler selbst, bzw. die interne Applikationsverbindung des Datenverteilers, verstanden werden. Somit kann auch ein Datenverteiler ohne eigene Konfiguration (wie z. B. ein Proxy-Datenverteiler) komplett passiven Verbindungsaufbau verwenden, was je nach Netzstruktur, Firewalls und Sicherheitsüberlegungen vorteilhaft sein kann.
  
Jonathan Haas's avatar
Jonathan Haas committed
120
  - Applikationen und Datenverteiler (ohne eigene Konfiguration) besitzen jetzt das neue Aufrufargument `-passiv=<Portnummer>`. Ist dieses gesetzt, wird das Aufrufargument `-datenverteiler=` (falls gesetzt) ignoriert und stattdessen auf einen Verbindungsaufbau (von einem anderen Datenverteiler ausgehend) auf den angegebenen Port gewartet.
121
  
Jonathan Haas's avatar
Jonathan Haas committed
122
  - Datenverteiler besitzen das neue Aufrufargument `-aktiv=hostname:port,hostname2:port2,...` mit dem der Datenverteiler beliebig viele Adressen übergeben werden können, die der Datenverteiler regelmäßig versucht zu erreichen, um neue Applikationsverbindungen aufzubauen. Hier sollten also die Portnummern von Applikationen angegeben werden, die mit `-passiv=` gestartet werden und die IP-Adressen bzw. Hostnamen der Rechner auf denen diese laufen.
123

Jonathan Haas's avatar
Jonathan Haas committed
124
- Im GTM wurde eine experimentelle Schnittstelle zum Durchführen von Archiv-Info-Anfragen ergänzt.
125

126 127 128 129 130 131 132
### Bugfixes

- [Fehler 9](https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/issues/9): Es werden keine überflüssigen Zeilenumbrüche mehr in die XML-Dateien (Benutzerverwaltung, Verwaltungsdaten) eingefügt, wenn eine Java-Version ab Version 9 verwendet wurde. Hierzu wurde der Code zum Schreiben und Lesen der XML-Dateien (Verwaltungsdaten, Benutzerverwaltung) überarbeitet.

  - Um den Fehler zu korrigieren und bereits beschädigte Dateien zu reparieren verhält sich die Behandlung der Formatierung von beiden Dateien nun geringfügig anders. Hierzu wird beim Laden von Dateien die bestehende Einrückung und überflüssige Leerzeichen ignoriert und beim Speichern werden die Dateien einheitlich mit 4 Leerzeichen eingerückt. Die Reihenfolge der Einträge und Kommentare bleiben natürlich bestehen.

  - Ggf. werden durch die Änderung Leerzeilen entfernt, die früher zu Formatierungszwecken eingesetzt wurden. Dies ist jedoch leider nicht vermeidbar. Solche Leerzeilen sollten ggf. durch Kommentare ersetzt werden (Inhalte von Kommentaren werden nicht umformatiert).
133 134 135 136 137 138 139 140 141 142 143 144 145
  
- Nerz-FM-255, [Fehler 8](https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/issues/8): Wenn an eine Senke von mehreren Sendern gleichzeitig große Datensätze gesendet wurden, konnte es passieren, dass der Datenverteiler z. B. folgende Meldungen ausgibt und die Datensätze verwirft:
    
        WARNUNG: Datenverteiler.de.bsvrz.dav.dav.main.TelegramAggregator
        Die Telegramme sind nicht in der richtigen Reihenfolge eingetroffen: BaseSubscriptionInfo[...]
        
        WARNUNG: Datenverteiler.de.bsvrz.dav.dav.main.TelegramAggregator
        Ein mittleres Telegramm ist ohne erstes Telegramm eingetroffen: BaseSubscriptionInfo[...]
  
        WARNUNG: Datenverteiler.de.bsvrz.dav.dav.main.TelegramAggregator
        Das letzte Telegramm ist ohne vorherige Telegramme eingetroffen: BaseSubscriptionInfo[...]
        
  Der Datenverteiler verwendet nun die sendende Applikations-ID als zusätzliches Kriterium zur Zuordnung von zerstückelten Datentelegrammen, wodurch der Fehler in Zukunft nicht mehr auftreten kann. Hierzu wurde das Telegramm, das zum Datenaustausch zwischen zwei Datenverteilern verwendet wird, um eine entsprechende Information erweitert. Sind mehrere Datenverteiler gekoppelt, muss auf allen Datenverteilern zwischen Sendern und Empfängern die neue Software installiert werden um das Problem effektiv zu vermeiden. 
146

147
- [Fehler 19](https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/issues/19): Der Datenverteiler hat beim Login von Applikationen nicht auf die Fertigmeldung der Parametrierung gewartet, wenn die in Version 3.9.0 implementierte SRP6-Authentifizierung verwendet wird.
148

149
### Testumgebung für Kernsoftware (de.kappich.pat.testumg) in Kernsoftware integriert und aktualisiert:
150

151
- Aktualisierung der Testumgebung auf Kappich-Entwicklungsstand
152 153 154 155 156 157 158 159 160 161 162

- Klasse DafApplication ergänzt, um einfach komplette DAF-Applikationen zu testen

- Möglichkeiten der Rechteprüfung erweitert

- Die Möglichkeit, das neue Authentifizierungsverfahren SRP zu testen, integriert

- Es kann das Zusammenspiel verschiedener Kernsoftware-Versionen getestet werden

- Lizenzheader auf GPL korrigiert

Jonathan Haas's avatar
Jonathan Haas committed
163 164 165 166
### Tests

- Die bestehenden Unit-Tests zur Kernsoftware wurden überarbeitet und in das Git-Repository aufgenommen.

167 168
## [Version 3.11.0]

169 170 171 172
### Bugfixes

- [Fehler 11](https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/issues/11): Der Inkarnationsname wurde bei verschlüsselten Verbindungen nicht als Bestandteil des Namens des Applikationsobjekts verwendet. 

173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
### Neue Features

- Erweiterung der Debug-Funktionen um Lazy-Logging-Feature (siehe Änderungsmanagement-Eintrag: 149):
  - Anwendung: statt der bisherigen debug-Funktionen kann die neue Variante verwendet werden. In diesem Fall wird
    der String erst erzeugt, wenn die debug-Funktion auf dem jeweiligen Level auch tatsächlich ausgeführt wird.
    
    ```java
    package de.bsvrz.samples;

    import de.bsvrz.sys.funclib.debug.Debug;
   
    public class DebugBeispiel {
	    public static void main(String[] args) {
        Debug debug = Debug.getLogger();
    
        // bisher (weiterhin vorhanden)
189
        String txt = String.format("Dieser String %s %s erstellt.", "wird" , "immer");
190 191 192 193
     
        debug.fine(txt);
    
        // zusätzlich neu, String wird nur bei Ausführung erstellt
194
        debug.fine(()->String.format("Dieser String wird %s %s erstellt", "wird nur bei" , "Level fine"));
195 196 197 198 199 200 201

      }
    }
   
    ``` 


202 203
## [Version 3.10.0]

204 205
### Bugfixes

206 207
- [Fehler 7](https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/issues/7): In der Klasse `FileAccess`
  wurde ein Problem bei der Verwaltung der aktuellen Schreibposition korrigiert, wenn zuvor mit dem Lesepuffer
Jonathan Haas's avatar
Jonathan Haas committed
208
  aus der Datei gelesen wurde und die Dateiposition beibehalten werden sollte.
209

210
- Die Packages unter de.bsvrz.sys.funclib werden jetzt in der Bundle-Konfiguration eingebunden
211

212 213 214 215
- Bei verschiedenen Anfragen an das Archivsystem in der Klasse `ArchiveRequestManager` wurden bei erfolgreicher
  Ausführung des Auftrags falsche "Fehlermeldungen" in der Funktion `ArchiveQueryResult.getErrorMessage` zurückgeliefert,
  beispielsweise "Die Archivanfrage(löschen) (1) war erfolgreich" wenn ein Sicherungsauftrag (und kein Löschauftrag) 
  erfolgreich durchgeführt wurde.
216

217 218 219 220 221 222 223 224 225 226 227
- Das letzte Zeichen der Pid beim Anlegen von Objekten in der Konfiguration wurde nicht darauf geprüft,
  ob es in ISO-8859-1 kodiert werden kann.

- In der (nicht mehr zur Verwendung empfohlenen) Klasse HashBagMap wurde die Funktion `addAll(HashBagMap)` wieder integriert, 
  die in 3.9.6 eine unbeabsichtige Signaturänderung erhalten hatte.

- Die Konfiguration verwendet nun in der Methode ConfigurationRequesterCommunicator.buildAndSendReply nicht mehr
  die veraltete attributeValues-Liste im ResultData-Objekt, sondern ein `Data`-Objekt.
  
- Die Datei K2S.dtd wurde wieder (nach der Umstellung auf das NERZ-Repository) an die richtige Stelle verschoben.

228
- GTM
229

230
  - Im Filter-Definitionsdialog (s. Plugins `Onlinetabelle` und `Archivanfrage (Stream)`) wurde die Auswahl der Checkboxen erleichtert (insbesondere unter macOS musste die Maus sehr präzise betätigt werden, um den richtigen Event zu triggern).
231

232
  - Bei dem im letzten Release hinzugefügten CSV-Export von Online- und Archivdaten (Plugins `Onlinetabelle` bzw. `Archivanfrage (Stream)`) wurde eine ehemals zu Testzwecken eingebaute Verzögerung entfernt.
233

234
  - Das Starten der GND aus den `Zuletzt verwendeten Einstellungen` des GTM schlug fehl.
235

236
  - Der Hilfe-Button im Einstellungsdialog des GND-Plugins öffnete keine Online-Hilfe.
237

238
  - In der Online-Hilfe fehlte ein Screenshot.
239

240
- GND
241

242
  - Die Einzel-Selektion erforderte (insbesondere unter macOS) präzise Mausbenutzung. Hier und in allen Dialogen, die Mausklicks mittels `MouseListener.mouseClicked(MouseEvent e)` verwendeten, wurde die Benutzung durch andere Methoden des `MouseListener-Interfaces` bewerkstelligt, damit die Bedienung erleichtert wird.
243

244
  - Bei Linienobjekten der Länge 0 (Klasse `Path2D.Double`) funktionierte die Berechnung des Referenzpunktes nicht. Dies hatte zur Folge, dass bei solchen Objekten die Anzeige des Namens bzw. der Pid bei Selektion nicht funktionierte.
245

246
### Änderungen
247

248 249 250 251 252 253 254 255 256 257 258
- GTM

  - Die Kontextdialoge der Auswahllisten für Objekttypen, Attributgruppen, Aspekte und Objekte ändern jetzt (wie allgemein üblich) die Selektion dieser Listen, wenn sie mit der Maus über einem nicht-selektierten Objekt aufgerufen werden.

- GND

  - Der Kontextdialog des Infofensters ändert jetzt (wie allgemein üblich) die Selektion der Liste, wenn er mit der Maus über einem nicht-selektierten Objekt aufgerufen wird.

  - Es gibt zwei Anwendungsfälle, in denen die GND ihren Kartenausschnitt auf eine Menge von Objekten zentriert: einmal beim Start aus dem GTM heraus (seit 2010) und das andere Mal in den Dialogen des `Gehe-zu-Menüs` (seit dem letzten Release). Beide Fälle verhalten sich jetzt gleich. Außerdem wurde festgelegt, dass das eingeblendete Rechteck nicht kleiner als ein Kilometer in Breite und Höhe ist (zuvor: 600 Meter Minimalbreite, 360 Meter Minimalhöhe).

  - Die Dokumentation der Selektions-Modi wurde präzisiert.
259 260 261 262 263

## [Version 3.9.7]

- NERZ: Umstellung auf Gradle, Build durch FTB und Bereitstellung auf NERZ-Repositories

264 265 266 267
- GradlePlugin auf Version 0.6.0 geändert

- package.html-Dateien wieder zurück in Ordner "java/..." (von Unterordner "javadoc/...") verschoben, 

268 269 270 271
## [Version 3.9.6]

- Letzte veröffentlichte Version vor der Umstellung auf Gradle

272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506
### Bemerkung

Die Versionsnummern 3.9.3, 3.9.4 und 3.9.5 wurden für inoffizielle Releases verwendet.

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Applikationsfunktionen

  - In der Funktion `ConfigurationHelper.getObjects()` im Package `de.bsvrz.sys.funclib.configObjectAcquisition` wurde eine Möglichkeit ergänzt, um Objektspezifikationen mit weiteren Mustern aufzulösen. Diese Funktion wird in einigen Anwendungen (z.B. Onlineprotokollierer und Datengenerator) verwendet, um die Aufrufargumente mit der Spezifikation der von der Applikation zu betrachtenden Menge auszuwerten. Folgende Möglichkeiten wurden ergänzt:

    - `KB-PID:Typ-PID` wird aufgelöst in alle Objekte des angegebenen Typs im angegebenen Konfigurationsbereich.
    - `KV-PID:Typ-PID` wird aufgelöst in alle Objekte des angegebenen Typs aus Konfigurationsbereichen für die der angegebenen KV verantwortlich ist.

- Generischer Testmonitor (GTM) (s.a. NERZ-Änderungsmanagement ID 0000044)

  - Die Performanz der Listendarstellungen wurde bei folgenden Operationen verbessert: beim Initialisieren, beim Sortieren, bei der Überprüfung von Abhängigkeiten und bei der Selektion großer Mengen.
  - Zur Verfeinerung von großen Mengen von Konfigurationsobjekten bei Festlegung einer Datenidentifikation kann nun vorab eine Datenverfügbarkeitsprüfung durchgeführt werden.
  - Der Benutzer wird beim Anfordern großer Datenmengen (Onlinetabelle oder Archivsystem) auf diese Tatsache aufmerksam gemacht und kann die Anforderung bestätigen oder abbrechen.
  - Die Daten, die bei einer Onlinetabelle oder Archivanfrage bislang automatisch angezeigt wurden, können nun im CSV-Format gespeichert werden ohne angezeigt zu werden. Der Benutzer kann diesen Prozess über jeweilige Fortschrittsdialoge steuern.
  - Verbindungsabbrüche zum Datenverteiler werden gemeldet. Ein sofortiger Neustart aus diesem Dialog ist möglich.
  - Es besteht nun die Möglichkeit, Spaltenfilter für Attributgruppen zu definieren, die bei der Anzeige von Online- und Archivdaten, sowie beim CSV-Export verwendet werden. Dadurch kann die Übersichtlichkeit insbesondere bei sehr umfangreichen Attributgruppen erhöht werden.
  - Die Ausgabe in die Onlinetabelle kann nun über einen Menüpunkt gestoppt werden, ohne dass die Onlinetabelle geschlossen wird. Auch ein erneuter Start ist über den Menüpunkt möglich.
  - Wenn mehrere Archive erreichbar sind, kann im Einstellungsdialog der Archivanfrage das Archiv ausgewählt werden.
  - Zu einer Applikation oder einer Datenidentifikation kann deren Datenfluss angezeigt werden. Dazu werden alle Sende- und Empfangsanmeldungen angezeigt (mit Varianten für Details und komprimierte Darstellungen).
  - Es wurde eine Online-Hilfe eingeführt, die sowohl als allgemeine Hilfe als auch kontextbezogen funktioniert.
  - Die Betriebsinformationen wurden aktualisiert.

- Generische Netzdarstellung (GND) (s.a. NERZ-Änderungsmanagement ID 0000045)

  - Einführung einer Mehrfachselektion: In der Kartendarstellung können nun beliebig viele Objekte selektiert werden. Dies kann sowohl durch einzelnes Hinzufügen als auch durch eine Selektion mit einem Rechteck geschehen.
  - Erweiterte Ortsreferenzen: Mit diesem Mechanismus können Objekttypen ohne Ortsreferenzen solche von anderen Objekttypen zugeordnet werden; die Objekte dieser Objekttypen werden dadurch in der Karte darstellbar.
  - CSV-Import: Mit der CSV-Import-Schnittstelle können Objekte aus CSV-Dateien eingelesen und dargestellt werden.
  - Darstellung von Autobahnnummern, ASB-Stationierung, ASB-Knotennummern und Betriebskilometrierung: Der Benutzer kann je einen Layer hinzufügen, der die Informationen auf der Karte darstellt.
  - Infofenster: Zu in der Karte selektierten Objekten sind nun konfigurierende Eigenschaften anzeigbar.
  - Gehe-zu-Funktionalität: Es gibt nun zwei Möglichkeiten, Objekte in der Karte aufzufinden, nämlich durch Angabe von Namen, Pids oder IDs, bzw. durch Suche in einzelnen Layern.
  - Korrupte Präferenzen sind während des Starts löschbar.
  - Fenstergrößen und -positionen aller Dialoge werden gespeichert und beim erneuten Öffnen wieder beachtet bzw. benutzt.
  - Beim Start des GND aus dem GTM heraus kann nun entschieden werden, ob eine neue GND-Instanz geöffnet wird oder eine bereits vorhandene verwendet wird.
  - Die Bedienung und Darstellung der Dialoge und Menüs wurden verbessert.
  - Eigenschaften der aktuellen Ansicht und ihrer Layer sind nun über das Kontextmenü der Legende änderbar.
  - In allen Verwaltungsdialogen öffnet ein Doppelklick in die Tabelle den Betrachten- bzw. Bearbeiten-Dialog.
  - In der Ansicht-, der Layer- und der Darstellungstypenverwaltung kann man durch Eintippen eines Buchstabens zu dem ersten Objekt springen, dessen Name mit diesem Buchstaben beginnt.
  - Die Option "Präferenzen löschen" ist nun auch für eine GND, die aus dem GTM heraus gestartet wurde, verfügbar. Der Benutzer wird darauf aufmerksam gemacht, dass zuvor alle anderen GND-Instanzen zu schließen sind.
  - Die Schriftgröße der Online-Hilfe wurde über ein Menü einstellbar gemacht.

### Änderungen

Folgende Änderungen wurden durchgeführt:

- KExDaV

  - Ausgehende Verbindungen zu anderen Datenverteilern verwenden bei KExDaV jetzt zwei Verbindungen, wenn die (lokale) KExDaV-Applikation selbst mit `-zweiteVerbindung=ja` gestartet wurde.

- Generische Netzdarstellung (GND)

  - Die Anzeige des Tooltipps auf der Karte (s. Menü Extras) wurde an die der Selektion angepasst.
  - Unter macOS werden jetzt native Datei-Auswahldialoge angezeigt.

- Neue Abhängigkeit zum Distributionspaket `de.bsvrz.sys.funclib.kappich` in verschiedenen anderen Distributionspaketen der Kernsoftware und insbesondere den Datenverteiler-Applikationsfunktionen (DAF, DAV, Konfiguration, KexDAV, GTM, GND, etc.) ergänzt.

### Bugfixes

- Applikationsfunktionen

  - In den Datenverteiler-Applikationsfunktionen konnte es zu einer Blockierung kommen, wenn Datensätze von nicht mehr gültigen Attributgruppen empfangen und verarbeitet werden sollten.
  - Nerz-F-44, Nerz-F-141: Falls die Verbindung zum Archiv abbricht, werden alle laufenden Anfragen sofort abgebrochen. Falls ein anderer Fehler auftritt, wird dieser nicht mehr ignoriert, sondern die Anfrage ebenfalls mit dieser Fehlermeldung sofort abgebrochen.
  - Es wird nun bei allen Archivanfragen beim ersten Aufruf einheitlich bis zu 10 Sekunden auf die Erreichbarkeit des Archivsystems gewartet.

- Datenverteiler

  - Bei verschlüsselten Verbindungen zwischen Datenverteilern konnte es vorkommen, dass versucht wurde, übergroße Telegramme zum Austausch der Anmeldelisten zu versenden und zu verschlüsseln. Hierdurch konnte eine Fehlermeldung wie

    ```
    Länge für verschlüsseltes Telegramm zu groß: 33000
    ```

    gefolgt von Verbindungsabbrüchen entstehen. Die Telegrammgröße wird nun auf einen sinnvollen Wert begrenzt.

- Generischer Testmonitor (GTM)

  - Im GenericTestMonitor (GTM) wurde ein Fehler korrigiert, der bewirkte, dass die Schaltflächen von Plug-In-Modulen nach dem Programmstart ohne Prüfung der Aktivierungsbedingung immer aktiv waren, wodurch die jeweilige Aktion auch ohne passende Objektauswahl gestartet werden konnte.

- Generische Netzdarstellung (GND)

  - Im Dialog zum Bearbeiten einer Grundfigur wurde für die y-Position der x-Wert übernommen.
  - Flächen waren bislang nicht mit der Maus selektierbar.
  - Die Textstil-Eigenschaft eines Darstellungstypen wurde beim Kopieren nicht richtig angelegt. Das führte bei Darstellungstypen unter gewissen Umständen dazu, dass sich auch hier die GND nicht mehr aus ihren Präferenzen initialisieren konnte.
  - Ein- und Ausblenden von Layern in der aktuellen Ansicht hatte zwei Mängel: ein ausgeblendeter Layer war bis zur nächsten Zoomstufenänderung sichtbar, und die Objekte wiedereingeblendeter Layer wurden nicht auf dynamische Daten angemeldet.
  - Überarbeitung der Selektion auf der Karte; bisher verlangte die GND vom Benutzer sehr genaue Mausklicks, und selbst dann wurden die nahegelegenen Objekte nicht in allen Zoomstufen ansprechend ausgewählt und präsentiert.
  - Auf Mac-Rechnern funktionierten alle Manager-Dialoge, sowie einige andere im letzten Release nicht; Ursache waren unerwartete Zugriffe auf die GND-eigenen Renderer der Tabellen aus den Java-Mac-Bibliotheken zur Barrierefreiheit.
  - Der eigene ShutDownHook der GND war überflüssig und produzierte beim Schließen des Programms einen Stacktrace.
  - Als Standalone-Anwendung gestartet vergingen stets einige Sekunden (oder auch viele) bis eine Fortschrittsanzeige für die Initialisierung der einzelnen Layer erschien. Es wurde eine Fortschrittsanzeige für die in dieser Zeit stattfindende Initialisierung aus den Präferenzen ergänzt.

- KExDaV

  - Es konnte eine unbehandelte Exception entstehen, wenn während des Verbindungsaufbaus zu einem anderen Datenverteiler die Verbindung zu diesem terminiert wurde. Solche Fehler werden nun besser behandelt und führen nicht mehr zum Beenden des Programms.

- Konfiguration

  - In der Konfiguration wurde ein möglicher Überlauf des Zählers zur Bestimmung der nächsten anzulegenden Objekt-ID korrigiert, wenn unter einem Konfigurationsverantwortlichen mehr als 1.099.511.627.775 Objekte angelegt wurden.

  - In der Konfiguration wurden beim Anlegen eines neuen Konfigurationsverantwortlichen zusätzliche Prüfungen ergänzt, um das Anlegen von ungültigen Konfigurationsverantwortlichen (beispielsweise mit doppelt vergebenen Kodierungen) möglichst zu verhindern. Die notwendigen Bedingungen für den Aufruf der Methode ConfigDataModel.createConfigurationArea(...) wurden hierfür dokumentiert.

  - Ein Fehler, wodurch nach dem Neustart der Konfiguration bei einem noch nicht aktivierten Konfigurationsverantwortlichen versucht wurde, neue Objekte mit der falschen Kodierung 0 anzulegen, wurde korrigiert.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.systemModellGlobal Version 37:

  - NERZ-Änderungsmanagement ID 10: Ergänzung einer neuen Attributgruppe `atg.archivSpeicherplatz` zur Publikation des freien Festplatten-Speicherplatzes des Archivsystems

## [Version 3.9.2 (b)]


### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Falsche Versionsnummer (3.9.1) in den Distributionspaketen
- Fehlerhafte Dokumentation zu `ObjectSetUse.getObjectSetType()`.

## [Version 3.9.2 (a)]


### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- NullPointerException im Datenverteiler in der Methode `HighLevelConnectionsManager.getUserAdministrationPassword` wenn in der Authentifizierungsdatei (`passwd`) das Passwort für den Benutzer zur Authentifizierung bei der Konfiguration fehlt.

- Ein Problem bei aktivierter Rechteprüfung in Verbindung mit Datenverteilerkopplung verhinderte den Betrieb von Datenverteilern, bei denen über den Aufrufparameter `-remoteKonfiguration=` ein Datenverteiler angegeben ist, der ebenfalls mit `-remoteKonfiguration=` an eine andere Konfiguration angebunden ist.

- Der Versand von Betriebsmeldungen vom Datenverteiler selbst (beispielsweise Aufgrund einer Warnung bei der Rechteprüfung) wurde korrigiert.

- Ein Berechnungsproblem bei der Serialisierung von skalierten Werten beim Kopieren und Einfügen von Parameterdaten im GTM wurde korrigiert.

- Wenn der Attributtyp eines Attributs bei der Konsistenzprüfung bzw. Aktivierung nicht aufgelöst werden konnte, dann kam es zu einer NullPointerException. Statt dessen wird jetzt ein Interferenzfehler mit einer hilfreichen Fehlermeldung generiert und die Prüfung fortgesetzt.

- DAV-Zertifizierung #1995: Der mutwillige Versand von gezielt fehlerhaften Systemtelegrammen über die Kommunikationsschnittstellen des Datenverteilers konnten zu einem OutOfMemoryError und zum Terminieren des Datenverteilers führen. Es wurden zusätzliche Überprüfungen eingebaut, mit denen fehlerhafte Telegramme frühzeitig erkannt und verworfen wurden.

### Neue Features

- Falls bei der Authentifizierung eines Benutzers am Datenverteiler mehrere Benutzerobjekte mit dem gewünschten Namen in der Konfiguration existieren, werden bevorzugt Objekte der lokalen AOE von der Konfiguration ausgewählt (und bei der Rechteprüfung verwendet) und es wird eine Debug-Warnung erzeugt.

- Dem `ClientDavInterface` wurden mehrere Methoden hinzugefügt:

  - `isConnected()` - prüft ob die Verbindung aktuell besteht

  - `isLoggedIn()` - prüft ob der Benutzer erfolgreich eingeloggt ist

  - `getDefaultConfigurationArea(dynamicObjectType)` - Gibt den Standard-Konfigurationsbereich für den angegebenen dynamischen Typen zurück

  - `getSubscriptionInfo(...)` - Gibt für Diagnosezwecke die an einer Datenidentifikation oder von einer Applikation durchgeführten Anmeldungen inklusive Status zurück

- Der Datenverteiler erzeugt zur besseren Problemdiagnose nun Debug-Ausgaben wenn es mehrere Quellen/Senken zu einer Datenidentifikation gibt.

- KExDaV wurde ein mitgeliefertes Plug-In hinzugefügt, mit dem die Unterschiede zwischen den Versionen 24 und 25 des Umfelddatenmodells `kb.tmUmfeldDatenGlobal` (zusätzliche Flags für Logische Plausibilitätsprüfung) ausgeglichen werden können. Das Plug-In kann mit dem Aufrufparameter `-plugin=de.bsvrz.kex.kexdav.dataplugin.UfdDataPlugin` aktiviert werden.

## [Version 3.9.1]


### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- NullPointerException bei verschlüsselten Verbindungen zwischen verschiedenen Rechnern.

- In bestimmten Situation zeigte die Combobox zur Auswahl der Portnummer im Login-Dialog des GTM ein fehlerhaftes Verhalten und falsches Layout.

## [Version 3.9.0]


### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Das Kommunikationsprotokoll zwischen Applikation und Datenverteiler sowie zwischen zwei Datenverteilern wurde um eine verbesserte Authentifizierung und Verschlüsselung ergänzt. Voraussetzung ist die Aktualisierung von Datenverteiler, Konfiguration und den DAF der verbundenen Applikationen. Verwendet wird das SRP6a-Verfahren zur Authentifizierung und AES-GCM zur Verschlüsselung.

- Im ClientDavInterface gibt es die neue Methode `getEncryptionStatus()`, mit der angefragt werden kann, ob die Verbindung aktuell verschlüsselt ist und welcher Algorithmus verwendet wird.

- Bei Verwendung der neuen Authentifizierung braucht statt dem Passwort in der _benutzerverwaltung.xml_ der Konfiguration nur noch ein Überprüfungscode gespeichert werden. Aus dem Überprüfungscode kann weder das Passwort bestimmt werden, noch kann man sich mit Hilfe des Überprüfungscodes authentifizieren.

  - **Wird mit der neuen Software ein neues Passwort gesetzt, wird nur noch der Überprüfungscode an die Konfiguration übertragen und dort gespeichert. Hierbei muss beachtet werden, dass danach die Authentifizierung mit dem bisherigen Verfahren für diesen Benutzer nicht mehr möglich ist, es müssen also vorher alle Applikationen und Datenverteiler, die diesen Benutzer zur Authentifizierung verwenden, aktualisiert werden.**

    Soll ein neues Passwort im Klartext gesetzt werden, weil noch Applikationen oder gekoppelte Datenverteiler nicht aktualisiert wurden, kann entweder die Systemproperty `srp6.disable.verifier` gesetzt werden (JVM-Aufrufparameter: `-Dsrp6.disable.verifier`), oder das Passwort von einem nicht aktualisierten System aus gesetzt werden.

  - Überprüfungscodes sind an einen Benutzer gebunden. Es ist nicht möglich, den Überprüfungscode eines Benutzers in der _benutzerverwaltung.xml_ bei einem anderen Benutzer zu ergänzen oder bei einer "Umbenennung" beizubehalten. In dem Fall ist immer ein neues Passwort zu vergeben. Wenn zwei Benutzer denselben Überprüfungscode besitzen, ist das in jedem Fall ein Fehler.

- Clientseitig können die in der lokalen Authentifizierungsdatei (passwd) gespeicherten Klartextpasswörter für die automatische Anmeldung von Applikationen durch Login-Token ersetzt werden. Ein Login-Token kann (nur) bei Kenntnis des Klartextpassworts und des Überprüfungscodes berechnet werden und erlaubt eine Authentifizierung ohne das Klartextpasswort speichern zu müssen.

  Ein Login-Token ist immer nur für einen bestimmten Benutzer gültig und nur solange, bis ein neues Passwort vergeben wird. Das bedeutet: Ein Login-Token wird immer ungültig wenn das Passwort eines Benutzers neu gesetzt wird, selbst wenn das eigentliche Klartextpasswort gleich bleibt. Aus dem Login-Token ist das Klartextpasswort nicht ableitbar und der Login-Token kann nicht zur Authentifizierung für die Benutzerverwaltung (im `UserAdministration`-Interface) oder im Urlasser-Dialog verwendet werden. Trotzdem sollte der Login-Token möglichst geheim gehalten werden, da damit offensichtlich eine Authentifizierung beim Datenverteiler möglich ist.

  - Login-Token können mit dem Migrationswerkzeug berechnet werden, oder mit der Methode `SrpClientAuthentication.createLoginToken`.

  - Beispielzeile einer passwd-Datei mit Login-Token:

    ```
    Tester=SRP6~~~~ 46f981cc468a72d3726112e8f7b33
    ```

  - Es ist jetzt möglich, in der Authentifizierungsdatei (passwd) vom Datenverteiler je Kommunikationspartner ein eigenes Passwort bzw. Login-Token anzugeben. Hierbei wird die Pid den Datenverteilers mit einem `@`-Zeichen an den Benutzernamen angehängt. Zusätzlich kann die Pid des lokalen Konfigurationsverantwortlichen angegeben werden um das Passwort zur Authentifizierung bei der Konfiguration festzulegen. Beispiel:

    ```
    Tester=SRP6~~~~ 46f981cc468a72d3726112e8f7b33
    Tester@dav.TestUZ=KlartextPasswort
    Tester@dav.VRZ3=SRP6~~~~ 3ef530a0f5a669fd2c652339485bf
    Tester@kv.test=SRP6~~~~ 7c36080fd21f2cfb4476897130885
    ```

    Ist für einen Kommunikationspartner kein spezifischer Eintrag vorhanden, wird das Standard-Passwort (bzw. der Standard-Login-Token) ohne `@`-Suffix verwendet (sofern vorhanden).

- Beim Login mit Einmalpasswörtern gilt das selbe wie für normale Passwörter, es muss jetzt allerdings der Index des zu verwendenden Einmalpassworts an den Benutzernamen angehängt werden. Will sich beispielsweise der Benutzer "Operator" mit dem Einmalpasswort mit dem Index 54 einloggen, dann muss bei Verwendung der neuen Authentifizierung "Operator-54" als Benutzername eingegeben werden. Da der Passwortindex zur Authentifizierung jetzt erforderlich ist, bieten das Migrationswerkzeug sowie das `UserAdministration`-Interface jetzt neue Methoden, um beim Anlegen eines Einmalpassworts den zugehörigen Index mit zurückzugeben.

  Im Gegensatz zu früheren Kernsoftwareversionen können die noch gültigen Einmalpasswörter in beliebiger Reihenfolge verwendet werden.

- Der Datenverteiler authentifiziert sich jetzt zusätzlich bei der Konfiguration. In der Regel sind hierbei keine Änderungen notwendig, es sollte aber sichergestellt sein, dass der Benutzername, mit dem der Datenverteiler gestartet wird (Aufrufparameter `-benutzer=`) ein gültiger Benutzer in der lokalen Konfiguration ist und dieser Admin-Rechte besitzt. Hierdurch wird sichergestellt, dass (nur) der Datenverteiler berechtigt ist, Benutzer zu authentifizieren und bspw. Einmalpasswörter als benutzt zu markieren. Es kann ggf. sinnvoll sein, einen eigenen Benutzer für den Datenverteiler anzulegen.

  - Fehlt dieser Benutzer wird eine Warnung beim Start ausgegeben und weiterhin die alte Authentifizierung verwendet.

- Das Passwort für die Parametrierung kann jetzt auch wie bei einem normalen Benutzer in der Konfiguration gespeichert werden, das Klartextpasswort sollte dann aus der passwd-Datei des Datenverteilers entfernt werden (nur falls die Parametrierung beim Start nicht auf dieselbe Datei zugreift). Das Aufrufargument `-parametrierungsBenutzer=` sorgt beim Datenverteiler weiterhin dafür, dass eine unter dem angegebenen Benutzer gestartete Parametrierung volle Zugriffsrechte bzgl. der Rechteprüfung hat.

- Die Benutzerverwaltungsfunktionen (Interface `UserAdministration`) wurden um Funktionen erweitert, die die neue Authentifizierung betreffen:

  - `setSrpVerifier`: Setzt den Überprüfungscode eines Benutzers direkt. Diese Methode kann verwendet werden, um den Überprüfungscode eines Benutzers zu setzen, ohne dass das Klartextpasswort bekannt ist. Dies ist beispielsweise sinnvoll, wenn Überprüfungscodes zwischen verschiedenen Datenverteilersystemen ausgetauscht werden sollen.

  - Die Methode `createSingleServingPassword` ist auf `@Deprecated` gesetzt worden, da sie den Passwortindex nicht zurück gibt und man sich dadurch nicht mehr ohne weiteres mit den erzeugten Einmalpasswörtern einloggen kann. Als Alternative gibt es die neue Methode `createOneTimePasswords`, die diesen Index zurück gibt.

  - Weitere Methoden um (bei vorhandenen Rechten) einzelne Einmalpasswörter zu deaktivieren und den Überprüfungscode sowie Verschlüsselungsstatus abzufragen.

- Die Schnittstelle des `ClientDavInterface` und ähnlicher Klassen wurden erweitert, um neben Klartextpasswörtern auch die Authentifizierung mit Login-Token zu ermöglichen.

507
- Durch den Aufrufparameter `-authentifizierung=interaktiv` (statt `-authentifizierung=`<passwortdatei>) kann das Passwort nun auch bei den meisten Konsolenanwendungen interaktiv abgefragt werden.
508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201
  Es ist daher zur Authentifizierung von Konsolenanwendungen nicht mehr erforderlich, sein Passwort in einer Datei zu speichern. Der interaktive Login funktioniert bei allen Applikationen, die
  die <code>ClientDavParameters</code> über die Aufrufargumente initialisieren. Das ist unter anderem bei allen Applikationen der Fall, die die <code>de.bsvrz.sys.funclib.application</code> verwenden.</passwortdatei>

- Im beiliegenden Tutorial wird erklärt, wie bestehende Systeme so umgestellt werden können, dass alle Passwörter verschlüsselt gespeichert werden.

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Bei wiederholten Login-Versuchen mit falschen Zugangsdaten werden weitere Login-Versuche nun künstlich ausgebremst um Brute-Force-Angriffe zu erschweren.

- Verschiedene Sicherheitsverbesserungen bei der Verarbeitung von Telegrammen vom Datenverteiler.

- Verschiedene Sicherheitsverbesserungen beim Anmelden der lokalen Datenverteilerapplikation (TransmitterLocalApplication).

- Die Telegramme zum Austausch von Anmeldelisten werden jetzt mit der korrekten Länge versendet. Die direkte Kopplung mit Datenverteilern, die eine ältere Version der Kernsoftware als 3.1 (31\. Mai 2007) verwenden ist dadurch nicht mehr möglich.

- Passwörter (und Login-Token) aus der Authentifizierungsdatei (passwd) werden nicht mehr im Speicher gehalten, sondern bei jedem Login-Versuch neu aus der Datei gelesen.

  - Dadurch lassen sich jetzt auch Passwörter/Login-Token zur Authentifizierung bei anderen Datenverteilern im laufenden Betrieb ändern, indem die Authentifizierungsdatei (passwd) des Datenverteilers im laufenden Betrieb bearbeitet wird. Ein Neustart des Datenverteilers ist damit nicht mehr notwendig, wenn auf der Gegenseite neue Passwörter vergeben wurden.

- Die Performance beim applikationsseitigen Abfragen von Mengenelementen wurde stark verbessert, da nun alle noch nicht lokal bekannten Objekte in einer einzigen Anfrage ermittelt werden, statt für jedes fehlende Objekt nacheinander eine neue Anfrage zu stellen.

- Die Authentifizierung von KExDaV bei Remote-Datenverteilern wurde auf die neue Funktionalität umgestellt, es wird die gleiche Syntax der passwd-Datei wie bei der Datenverteilerkopplung verwendet und es sind jetzt auch Login-Token zur Anmeldung möglich.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Die Kombination von Einmalpasswörtern mit einer zweiten Verbindung hat zu Problemen geführt da die zweite Verbindung sich nicht ein zweites mal mit dem gleichen Passwort authentifizieren konnte. Die zweite Verbindung wird bei Verwendung von Einmalpasswörtern nun automatisch deaktiviert.

### Technische Details zur Verschlüsselung

#### Authentifizierung

- Authentifizierungsverfahren: SRP6a (Implementierung: NimbusSRP)

- X-Routine: `H(s | H(u | ":" | KDF(p, s)))`

- Hashfunktion `H`: Standardmäßig `SHA-256`

- Schlüsselableitungsfunktion `KDF`: Standardmäßig `PBKDF2WithHmacSHA256` mit 20.000 Iterationen und 256 Bit Rückgabe

- SRP-Primzahl `N`: Standardmäßig 1024 Bit aus [RFC 5054](https://tools.ietf.org/html/rfc5054#appendix-A)

#### Verschlüsselung

- Verschlüsselungsverfahren: AES-GCM

- Schlüssellänge: Standardmäßig 128 Bit

- GCM-Tag-Bits: Standardmäßig 96 Bit

- Ableitung der AES-Schlüssel aus dem gemeinsamen SRP-Sitzungsschlüssel `S` (bei AES-128):

  `S* = H(0x00000000 | S) | H(0x00000001 | S) | H(0x00000002 | S)` ...

  = Schlüssel(ClientServer) | Schlüssel(ServerClient) | Nonce-Salt(ClientServer) | Nonce-Salt(ServerClient)

  (`|` = Verkettung)

  Nonce-Berechnung aus [RFC 5288](https://tools.ietf.org/html/rfc5288#section-3) mit Verwendung von einem Telegrammzähler als explizitem Nonce-Teil.

## [Version 3.8.1]


### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Nerz-FM-206\. Bei den Methoden zum An- und Abmelden auf Online-Daten incl. kurzfriste Historie aus dem Archiv (`ArchiveRequestManager.unsubscribeReceiver()` und `ArchiveRequestManager.unsubscribeReceiver()`), wurde eine fehlerhafte equals()-Implementierung verwendet, die dazu führte, dass beim Abmelden Exceptions aufgetreten sind, wenn nicht die selben DataDescription-Objekte verwendet wurden, wie beim Anmelden.

## [Version 3.8.0]


### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Da leere Strings als Meldungs-ID zu Problemen in der Betriebsmeldungsverwaltung führen, erzeugt die Funclib OperatingMessage beim Versand von Betriebsmeldungen nun automatisch zufällige, eindeutige IDs, sofern der Anwender der Klasse keine eigene Meldungs-ID vorgibt.

- Die Klasse `MessageTemplate` wurde um die Methoden `withIdFactory` und `withLevel` erweitert, mit denen ein Lambda-Ausdruck für die Erzeugung der Meldungs-IDs sowie ein Debug-Level für die lokale Ausgabe der Meldung vorgegeben werden kann.

- Die Klasse `OperatingMessage` besitzt nun die neue Funktion `setMessageId`, mit der eine ID manuell vorgegeben werden kann.

## [Version 3.7.4]


### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Beim Setzen von Text-Attributen in Datensätzen wurde die Übergabe von `null` statt einer Zeichenkette bisher akzeptiert, aber der anschließende Versand eines solchen Datensatzes führte zu einer schwer diagnostizierbaren `NullPointerException`. Das Setzen von `null`-Strings in `Data.TextValue`-Objekten wird nun direkt mit einer `NullPointerException` quittiert.

- Beim Senden von Betriebsmeldungen mit der in Version 3.7.3 neu eingeführten Klasse `OperatingMessage` konnte es zu einer `NullPointerException` kommen, weil als Message-ID für Einmal-Meldungen `null` verwendet wurde. Statt `null` wird nun ein Leer-String verwendet.

## [Version 3.7.3]


### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Die `de.bsvrz.sys.funclib.operatingMessage` wurde um verschiedene Klassen und Methoden erweitert, um komfortabler Betriebsmeldungen erzeugen zu können. Hierzu gibt es die neuen Klassen `OperatingMessage` und `MessageTemplate`, die den Anwender beim Erstellen von Meldungen und Befüllen von Platzhaltern in Meldungen unterstützen. Im einfachsten Fall können damit Meldungen bspw. wie folgt erzeugt werden:

  ```
  OperatingMessage.warning(
      MessageType.APPLICATION_DOMAIN,
      "Die Güte am Fahrstreifen ", fs, " kann nicht bestimmt werden.",
      exception
  ).send();
  ```

  Alle über die neuen Funktionen erzeugten Meldungen werden auch über die Debug-Funktionen mit Level INFO ausgegeben.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Nerz-FM-194: In empfangene Online-Datensätze enthaltene Referenzen auf lokal noch nicht bekannte Konfigurationsobjekte konnten zu Blockierungen von Applikationen und insbesondere dem Archivsystem in anschließenden Debugausgaben führen. In der geänderten Implementierung werden derartige Referenzen vor Übergabe des Online-Datensatzes an die Applikation durch entsprechende Konfigurationsanfragen aufgelöst.

- Nicht beantwortete Konfigurationsanfragen führten clientseitig bei manchen Anfragen nach 10 Minuten nicht mehr zu einem Timeout sondern zu einer Blockierung des anfragenden Threads.

- KExDaV hat empfangene Daten, die als _nachgeliefert_ markiert waren, ohne die _Nachgeliefert_-Kennung weitergeleitet. In der geänderten Implementierung wird die _Nachgeliefert_-Kennung von empfangenen Datensätzen in die weitergeleiteten Datensätze übernommen.

## [Version 3.7.2]


### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Beim aktiven Aufbau von Verbindungen zwischen zwei Datenverteilern wartet der Datenverteiler jetzt auch zwischen zwei erfolglosen Verbindungsversuchen (Kommunikationsfehler oder Authentifizierungsproblem) mindestens die in 3.6.0 implementierte Wiederverbindungswartezeit (Aufrufparameter: `-wiederverbindungsWartezeit=60s`, Standardwert: 60 Sekunden). Bisher betrug die Wartezeit in diesem Fall eine Sekunde.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Beim Backup der Konfiguration über die Funktion `DataModel.backupConfigurationFiles()` konnte es dazu kommen, dass ein gemeinsames Wurzelverzeichnis der zu sichernden Dateien nicht korrekt ermittelt wurde, wenn sich die Aufrufargumente der Konfiguration (`-verwaltung`, `-benutzerverwaltung`) innerhalb von symbolischen Links befinden.

- Nerz-Fehler-174: In den Versionen 3.7.0 und 3.7.1 der de.bsvrz.sys.funclib.losb war unbeabsichtigt eine nicht kompatible Änderung des Kommunikationsprotokolls bei der Serialisierung von Long-Werten (IDs) enthalten. Hierdurch kommt es bei _Protokolle und Auswertungen_ (PuA) zu Kommunikationsproblemen, wenn der Server eine andere Version dieser Bibliothek bzw. der Kernsoftware verwendet, als der Client. Mögliche Fehlermeldungen, die dadurch entstehen können, sind unter anderem:

  ```
  Kann Daten nicht deserialisieren:
      java.io.StreamCorruptedException: invalid stream header: 00000000
  ```

  und:

  ```
  Fehler beim Abruf eines Protokolls:
  [..]FailureException: Protokoll nicht vorhanden: -5986128308230684672
  ```

  Die Änderung wurde rückgängig gemacht. Wenn bei der Deserialisierung ein mit den betroffenen Versionen fehlerhaft serialisierter Wert erkannt wird, wird nun eine Warnmeldung ausgegeben.

- Beim Terminieren einer eingehenden Datenverteiler-Datenverteiler-Verbindung aufgrund einer deaktivierten Verbindung konnte ein Deadlock entstehen, wodurch die TCP-Verbindung nicht ordnungsgemäß geschlossen wurde. Mit der Zeit konnten sich hierdurch viele nutzlose Verbindungen ansammeln und damit Systemressourcen blockieren.

## [Version 3.7.1]


### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Nerz-Fehler-170: Bedingt durch die in Java-8 geänderten Implementierungen von HashMap und HashSet ist aufgefallen, dass die beim Export von Konfigurationsbereichen verwendete Reihenfolge von nachfolgend aufgelisteten Elementen abhängig von der HashMap- und HashSet-Implementierung sind:

  - Elemente von Mengen
  - Zugelassene Mengentypen von Mengendefinitionen
  - Mengen von Konfigurationsobjekten

  Der Export verwendet jetzt an diesen Stellen immer eine alphabetische Reihenfolge.

- Nerz-Fehler-171: Beim erneuten Import eines Bereichs konnten manchmal unnötige Objektversionen entstehen, die durch Rundungsfehler bedingt waren, wenn bei Zahl-Attributen weniger Stellen, als durch den Skalierungsfaktor vorgesehen, verwendet wurden.

- Beim Zugriff mit der Methode Data.NumberValue.doubleValue() auf skalierte Attributwerte von Attributen, die einen Skalierungsfaktor kleiner als 1 haben, konnten in manchen Fällen geringe Rundungsfehler entstehen, die durch eine geänderte Berechnungsformel vermieden werden konnten.

- Beim wiederholten Import von Konfigurationsbereichen ohne inhaltliche Änderungen, konnte es zu einer unkritischen Vergrößerung der Konfigurationsdatei kommen, wenn an einzelnen Konfigurationsobjekten Default-Parameter angegeben waren.

- Beim Export von Konfigurationsbereichen war das Element

  <modell…> eine Stufe zu weit eingerückt, wenn keine
  unversionierten Datenmodelländerungen im Bereich vorlagen.</modell…>

## [Version 3.7.0]


### Neue Features

- Applikationen, die die `de.bsvrz.sys.funclib.application` benutzen, erhalten einen neuen Aufrufparameter `-terminierenBeiException=(ja/nein)` (Standardwert `nein`, entspricht bisherigem Verhalten), mit dem festgelegt werden kann, ob Applikationen sich bei jedem unbehandelten Fehler beenden sollen (`ja`), oder wie bisher nur bei schwerwiegenden Fehlern wie `OutOfMemoryError` (`nein`).

  Mit Version 3.6.3 führten unbehandelte Exceptions im Updater-Thread im `ClientReceiverInterface` zu einem kontrollierten Beenden der Datenverteilerverbindung und damit auch typischerweise zum Beenden des Programms. Mit diesem Mechanismus kann dieses Verhalten nun optional auch auf alle anderen Threads ausgeweitet werden. Dadurch können beliebige Applikationen bei Fehlern jetzt automatisch (beispielsweise über StartStopp) neu gestartet werden, selbst wenn diese keine eigene Fehlerbehandlung durchführen.

- Der Parametereditor im GTM verwendet jetzt zum Kopieren und Einfügen die System-Zwischenablage. Dadurch können Parameterdaten zwischen verschiedenen GTM-Instanzen und Datenverteilersystemen ausgetauscht werden. Außerdem ist es möglich, die Datensätze in Texteditoren einzufügen und dort zu bearbeiten. Für diese Funktionalität werden die Datensätze in das [JSON-Format](https://de.wikipedia.org/wiki/JavaScript_Object_Notation) konvertiert. Um diese Funktionalität bereitzustellen besitzt der GTM daher die neue Abhängigkeit `de.kappich.sys.funclib.json`.

- Das Programm zum Terminieren von Verbindungen am Datenverteiler unter `de.bsvrz.dav.dav.main.TerminateConnection` besitzt jetzt den neuen Aufrufparameter `-wartezeit=(Zeitdauer)` mit dem die übergebenen Applikationen zeitlich versetzt terminiert werden können, beispielsweise um eine Überlastung des Systems zu vermeiden.

- Nerz-Ä-60: Die verwendete Art der Rechteprüfung (Deaktiviert, Alt, Neu) wird jetzt vom Datenverteiler am Datenverteilerobjekt über die Quell-Attributgruppe `atg.datenverteilerRechteprüfung` am Aspekt `asp.standard` publiziert.

- Nerz-Ä-81: Bei Verwendung der alten Rechteprüfung erhalten alle Benutzer jetzt implizit alle Rechte, die auch in der neuen Rechteprüfung implizit vergeben werden (Konfigurationsanfragen, -antworten, Versand der Applikationsfertigmeldung, Betriebsmeldungen)

- Nerz-Ä-84: Über die neue Parameter-Attributgruppe `atg.deaktivierteVerbindungen` am Datenverteilerobjekt können jetzt einzelne Verbindungen zu anderen Datenverteilern deaktiviert werden. Ausgehende Verbindungen zu den angegebenen Datenverteilern werden terminiert bzw. gar nicht erst aufgebaut, eingehende Verbindungen von den angegebenen Datenverteilern werden während der Authentifizierung nach einem Timeout von einer Minute (um zu verhindern, dass sofort ein erneuter Verbindungsversuch gestartet wird) mit einer entsprechenden Fehlermeldung terminiert.

- Nerz-Ä-84: Über Debug-Ausgaben und über die neue Attributgruppe `atg.datenverteilerKommunikationsZustand` publiziert der Datenverteiler am Datenverteilerobjekt den aktuellen Kommunikationszustand mit den konfigurierten oder verbundenen Nachbardatenverteilern. Mögliche Zustände sind in der [nachfolgenden Tabelle][davkomzust] aufgeführt.

  Zusätzlich sind auch Informationen zur IP-Adresse des verbundenen Datenverteilers sowie eine Fehlermeldung vorhanden, wenn es sich um einen Fehlerzustand handelt.

- Nerz-Ä-88: Beim Backup der Konfigurationsdaten über die Funktion `DataModel.backupConfigurationFiles` werden jetzt die Konfigurationsdateien in der Struktur gesichert, in der sie sich auch im laufenden System befinden, d.h. Unterverzeichnisse werden beibehalten. Auf diese Weise kann ein Backup wieder problemlos in ein laufendes System eingespielt werden. Außerdem werden Dateien von dynamischen Mengen jetzt auch gesichert.

Zustand                            | Beschreibung
---------------------------------- | -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Nicht verbunden                    | Verbindung ist nicht verbunden (Der Datenverteiler wartet auf neuen Verbindungsversuch)
Ersatzverbindung (nicht verbunden) | Verbindung ist nicht verbunden (Es handelt sich um eine Ersatzverbindung, welche nicht erforderlich ist)
Deaktiviert (nicht verbunden)      | Verbindung ist nicht verbunden, da sie über `atg.deaktivierteVerbindungen` deaktiviert wurde
Warte auf eingehende Verbindung    | Es wird auf Verbindungaufbau durch den anderen Datenverteiler gewartet
Fehler                             | Verbindung ist nicht verbunden und wurde durch einen Fehler terminiert
Verbindungsaufbau                  | Die Verbindung wird gerade aufgebaut
Authentifizierung                  | Der Datenverteiler authentifiziert sich beim anderen Datenverteiler
Verbunden                          | Die Verbindung wurde hergestellt und ist aktiv
Verbindungsabbau                   | Die Verbindung wird gerade geschlossen und bestehende Anmeldungen werden abgemeldet (zum Beispiel Aufgrund eines Fehlers oder weil ein Terminierungstelegramm gesendet wurde)

[Mögliche Zustände der Kommunikation mit anderen Datenverteilern][davkomzust]

### Änderungen

- UTF-8: Die Java-Quellcode-Dateien von allen Distributionspaketen wurden mit UTF-8 statt mit ISO-8859-1 kodiert.

- GPL 3: Verwendung der GPL-Lizenz (bzw. LGPL-Lizenz) in Version 3 entsprechend NERZ Änderungsmanagement Eintrag 95

  - Die Lizenz von Distributionspaketen der Kernsoftware, die bisher unter GPL 2 standen wurde auf GPL 3 geändert
  - Die Lizenz von Distributionspaketen der Kernsoftware, die bisher unter LGPL 2.1 standen wurde auf LGPL 3 geändert

- Java-8: Alle Distributionspakete der Kernsoftware wurden entsprechend NERZ-Änderungsmanagement Eintrag 97 mit Java-8 übersetzt. Zu beachten ist, dass zur Laufzeit auch Java-8 vorausgesetzt wird.

### Bugfixes

- Ein Fehler in 3.6.4 führte dazu, dass die angemeldeten Datenidentifikationen einer Applikation über die Attributgruppe `atg.angemeldeteDatenidentifikationen` sofort bei jeder Änderung veröffentlicht wurden, statt in einem 5-Sekunden-Intervall, was zu einer Überlastung des System führen konnte.

- Ein Deadlock in der Konfiguration konnte zu einer Blockierung beim Schreiben von dynamischen Mengendateien führen. Das konnte dazu führen, dass die Konfiguration für einzelne Applikationen keine Antworten mehr sendete und beim Beenden weitergelaufen ist.

- Ein weiterer Deadlock in der Konfiguration konnte bei der Ermittlung der zu bereinigenden dynamischen Objekte (Parameter `atg.parameterEndgültigesLöschen`) auftreten, wenn zeitgleich Konfigurationsanfragen nach gelöschten Objekten durchgeführt wurden.

- Ein Fehler beim Import der Konfiguration konnte dazu führen, dass Zeilenumbrüche und Einrückungen von Versorgungsdateien (beim erneuten Export) verloren gehen.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.systemModellGlobal Version 36:

  - Erweiterung des Datenverteiler-Typs um die Attributgruppen `atg.datenverteilerRechteprüfung`, `atg.deaktivierteVerbindungen` und `atg.datenverteilerKommunikationsZustand` für die oben beschriebene neue Funktionalität (Nerz-Ä-81 und Nerz-Ä-84)

- kb.fachModellGlobal Version 9:

  - Ergänzung um Attributtypen für Uhrzeit und Wochentag

## [Version 3.6.5]


### Bugfixes

- Nerz-F-147: Der Zustand _keine Quelle_ wurde nicht immer korrekt im CacheManager in der DAF-API gespeichert. Dadurch konnten veraltete Daten an einen neu angemeldeten Empfänger ausgeliefert werden, wenn sich dieser zu einem Zeitpunkt anmeldet, an dem die Quelle nicht erreichbar ist.

- Es konnte zu einem Deadlock in den Datenverteiler-Applikationsfunktionen kommen, wenn eine Applikation sich während des Verbindungsaufbaus (z.B. wegen eines Fehlers) beenden wollte oder die noch nicht fertig initialisierte Verbindung zum Datenverteiler terminieren wollte.

## [Version 3.6.4]


### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Bei der im Rahmen von Nerz-Ä-28 eingeführten effizienteren Speicherung von dynamischen Mengen (siehe unten) konnte es zu fehlerhaften Mengendateien kommen, die beim erneuten Start der Konfiguration zu Exception geführt haben.
- Bei der Publikation von Datensätzen der Attributgruppe `atg.angemeldeteDatenidentifikationen` durch den Datenverteiler konnte es in besonderen Fällen zu Exceptions kommen, weil das Systemobjekt von einzelnen Anmeldungen nicht durch den Datenverteiler aufgelöst werden konnte. In diesen Fällen wird vom Datenverteiler jetzt eine entsprechende Warnung ausgegeben und der Datensatz ohne die problematischen Einträge publiziert.
- Eine fehlerhafte Überprüfung der aktivierten Datenmodellversion hat dazu geführt, dass die neuen Konfigurationsanfragen aus Nerz-Ä-28 (siehe unten) auch nach Aktualisierung des Systemmodells nicht immer verwendet wurden.
- Bei der expliziten Abfrage von allen Objekten vom Typ Ganzzahlattributtyp und Attributlistendefinitionen kam es zu Serialisierungsfehlern.
- Bei Objektanfragen an fremde Konfigurationen mit `ClientDavConnection.getDataModel(configAuthority)` konnte es beim Einsatz der neuen Konfigurationsanfragen aus Nerz-Ä-28 (siehe unten) dazu kommen, dass die entsprechenden Objekte aus der lokalen Konfiguration zurückgeliefert wurden.
- Es konnten Deadlocks auftreten, wenn mehrere Datenverteiler-Verbindungen in einer JVM aufgebaut wurden.
- In seltenen Fällen trat beim Beenden des Datenverteilers ein Deadlock auf, der dazu führte, das der Datenverteiler sich nicht beenden konnte.
- Es konnte zu Deadlocks beim Start einer Applikationen kommen, wenn der Datenverteiler sich während der Authentifizierung der Applikation beendet hat.

## [Version 3.6.3]


### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Nerz-F-14: Die Pids von dynamischen Objekten werden nun in der Konfiguration nach Simulationsvariante getrennt verwaltet. Dadurch ist es nun möglich, in Simulationen dynamische Objekte zu erstellen, deren Pid bereits außerhalb von Simulationen oder in anderen Simulationen verwendet wird.

  - Anfragen nach dynamischen Objekten anhand der Pid wie z. B. `DataModel.getObject(pid)` geben nun bevorzugt Objekte der eigenen Simulationsvariante zurück. Gibt es in der Simulation kein passendes Objekt können auch normale nicht-simulierte Objekte zurückgegeben werden, aber nur wenn der Typ des Objektes nicht in der Simulationsstrecke eingetragen ist.
  - Allgemein werden Simulationen besser voneinander getrennt, d. h. Objekte, die in der aktuellen Simulation ungültig sind, werden nun bei verschiedenen Konfigurationsanfragen ausgeblendet. Normale, nicht-simulierte Applikationen sehen keine in Simulationen erstellen Objekte mehr.
  - Damit die Konfiguration bei Konfigurationsanfragen die Simulationsvariante der anfragenden Applikation korrekt ermitteln kann, initialisieren Applikationen in Simulationen beim Login nun die Kommunikation mit der Konfiguration. Das führt dazu, dass solche Applikationen nun solange im Login blockieren bis die Simulation mindestens den Zustand "Vorstart" erreicht hat.

- Nerz-Ä-28: Es wurden konfigurationsseitig und clientseitig verschiedene Verbesserungen bei der Speicherung von dynamischen Objekten und Mengen durchgeführt.

  - Verbesserungen der Performance und des Speicherverbrauchs durch geeignete Datenstrukturen.
  - Dynamische Mengen, die mit `verwaltung="kv...."` im Dateisystem gespeichert werden, werden konfigurationsseitig effizienter verwaltet. Beim Einfügen und Löschen von Elementen werden nur die Bereiche der Datei neu geschrieben, für die sich Änderungen ergeben haben.
  - Die Restrukturierung der Konfigurationsdateien kann nun offline manuell gestartet werden, indem die Konfiguration mit den Aufrufparametern `-restrukturierung` und `-verwaltung=...` gestartet wird. Dies ist hilfreich, wenn sich in einer Konfigurationsdatei viele gelöschte dynamische Objekte befinden, da dadurch die Datenstrukturen optimiert werden.
  - Die Geschwindigkeit der Restrukturierung wurde wesentlich verbessert.
  - Ebenfalls ist eine Restrukturierung im laufenden Betrieb möglich. Hierzu kann am AOE-Objekt über die neue Parameter-Attributgruppe `atg.parameterEndgültigesLöschen` ein Cron-String definiert werden, der angibt, zu welchen Zeitpunkten (beispielsweise: wöchentlich oder täglich) eine Restrukturierung im Hintergrund stattfinden soll. Bei der Restrukturierung in laufenden Betrieb werden nur die dynamischen Objekte restrukturiert.
  - Über denselben Parameter können auch Vorhaltezeiträume für dynamische Objekte und dynamische Mengen vorgegeben werden. Hiermit können gelöschte dynamische Objekte und historische Mengenreferenzen nach einer gewissen Zeit (beispielsweise 1 Jahr) vollständig und endgültig gelöscht werden, um nicht mehr benötige Daten zu löschen, Speicherplatz freizugeben, und die Performance zu verbessern. Dynamische Objekte werden nur dann gelöscht, wenn sie von keinem güligen Objekt mehr referenziert werden und wenn sie mindestens der Vorhaltezeitraum nach dem Löschen vergangen ist.

    - Objekte werden im laufenden Betrieb als zu Löschen markiert und erst beim nächsten Neustart der Konfiguration vollständig gelöscht. Die zu löschenden Objekte werden je Bereich in einer Datei gespeichert, die sich im gleichen Ordner wie die Konfigurationsdateien befindet und die Dateiendung ".0.index" oder ".1.index" besitzt.

- Nerz-Ä-28: Es wurden weitere Konfigurationsanfragen implementiert, mit denen ermöglicht wird, dass die Konfiguration verschiedene Anfragen wie die Abfrage von Objekten anhand von PID, ID oder Typ oder das Erstellen und Löschen von Objekten asynchron ausführen kann. Hierdurch kann die Performance der Konfiguration verbessert werden.

- Nerz-Ä-50: Mit dem neuen Aufrufparameter `-zweiteVerbindung=ja` für Applikationen wird jetzt für die Durchführung von Konfigurationsanfragen eine zweite Datenverteilerverbindung aufgebaut. Hiermit kann in Hochlast-Situationen die Gefahr von Blockierungen vermieden werden. Diese Funktion befindet sich in der Erprobungsphase und ist noch standardmäßig deaktiviert.

  - Diese zweite Verbindung wird durch eine Raute (`#`) gekennzeichnet, die an den Applikationsnamen angehängt wird.
  - Über den Parameter `-zweiteVerbindungPufferAnteil=<Wert>` lässt sich der Anteil an den Sende- und Empfangs- Puffern vorgeben, der der zweiten Verbindung zugewiesen wird. Der Wert muss zwischen 0,0 und 1,0 liegen und beträgt standardmäßig 0,01 (1%).
  - Für Applikationen, bei denen eine eigene Verbindung für Konfigurationsanfragen wenig Sinn machen würde, wie die Konfiguration selbst, wird der Parameter ignoriert.

- Änderungen an den `ClientDavParameters` waren bisher auch möglich, nachdem eine `ClientDavConnection` initialisiert wurde. Um Problemen vorzubeugen, die entstehen könnten, wenn im laufenden Betrieb wesentliche Parameter geändert werden, gibt es jetzt folgende Einschränkungen:

  - Wenn eine zweite Verbindung benutzt wird, wird im Konstruktor der `ClientDavConnection` eine Kopie der `ClientDavParameters` erzeugt. Weitere Anderungen an dem ursprünglichen Objekt wirken sich nicht auf die Verbindung aus. Das über `connection.getClientDavParameters()` zurückgegebene Objekt ist schreibgeschützt, der Aufruf von Setter-Methoden führt zu Exceptions.
  - Wenn keine zweite Verbindung benutzt wird, verhalten sich die Setter-Methoden der `ClientDavParameters` (aus Kompatibilitätsgründen) wie bisher. Beim nachträglichen Ändern von Parametern, die bereits einer `ClientDavConnection` zugewiesen wurden, wird aber nun eine Warnung ausgegeben. Betroffene Codestellen sollten so geändert werden, dass die `ClientDavParameters` vollständig gesetzt werden, bevor die `ClientDavConnection` erzeugt wird. Programme, die zur Initialisierung die Frameworks `de.bsvrz.sys.funclib.application` oder `de.kappich.sys.funclib.configurationtool` benutzen, sind in der Regel bereits kompatibel. Da die Verwendung von zwei Verbindungen in Zukunft Standard werden könnte, sollten alle Applikationen, sofern nötig, angepasst werden.

- Unbehandelte Exceptions in der `update()`-Methode im `ClientReceiverInterface` führen jetzt zu einem kontrollierten Terminieren der Datenverteilerverbindung.

- Da Eclipse nicht mit zirkulären Abhängigkeiten zwischen Plugins umgehen kann, wurden die Inhalte der Distributionspakete `de.bsvrz.sys.funclib.dataSerializer` und `de.bsvrz.sys.funclib.communicationStreams` in das Paket `de.bsvrz.dav.daf` integriert. Die beiden Distributionspakete bleiben aus Kompatibilitätsgründen als leere Pakete erhalten.

- Das `DataModel`-Interface wurde um Methoden erweitert, welche mehrere Objekte gleichzeitig anhand der PID oder ID anfordern können. Hierdurch kann eine bessere Performance erreicht werden, als wenn jedes Objekt einzeln abgefragt würde.

- Das `ConfigurationAuthority`-Interface wurde um eine Methode erweitert, die den Default-Bereich des Konfigurationsverantwortlichen zurückgibt.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Wenn eine Simulation beendet wird, werden alle dazugehörigen dynamischen Objekte automatisch gelöscht. Beim Löschen wurden verschiedene Datenstrukturen konfigurationsseitig nicht aktualisiert, sodass bei Anfragen wie `DynamicObjectType.getElements()` oder `DataModel.getObjects(...)` solche gelöschten Objekte dennoch zurückgegeben werden konnten.

- Das Ändern von (änderbaren) Konfigurationsdaten von gelöschten Objekten konnte zu Fehlern in den Datenstrukturen der Konfigurationsdatei führen, wodurch es beim Zugriff auf diese gelöschten Objekte zu Exceptions kommen konnte. Aus diesem Grund dürfen Konfigurationsdaten nur noch für Objekte geändert werden, die noch nicht gelöscht wurden. Durch die in Nerz-Ä-28 implementierte Offline-Restrukturierung können beschädigte Konfigurationsdateien automatisch repariert werden. (Aufrufparameter: `-restrukturierung`)

- Beim Setzen von Konfigurationsdaten wird nun geprüft, ob der Typ die verwendete Attributgruppe unterstützt. Ist das nicht der Fall, wird nun eine Exception generiert, statt den Datensatz dennoch (versteckt) zu speichern.

- Beim Setzen von `ReferenceValue`s im `Data`-Interface wird nun geprüft, ob der Attributtyp den Typ des zu speichernden Objekts unterstützt.

- KExDaV verhält sich besser, wenn die Remote-Konfiguration nicht antwortet oder keine Rechte zum Stellen von Konfigurationsanfragen vorhanden sind. In dem Fall wird die Verbindung jetzt sofort terminiert, statt im Hintergrund weiter zu laufen.

- In der Datenverteilerkommunikation konnte es zu Blockierungen kommen, wenn die Sende- und/oder Empfangspuffer kleiner als 3000 Bytes eingestellt wurden.

- Eine `NullPointerException` wurde korrigiert. Sie konnte in der alten Rechteprüfung auftreten, wenn keine Parameterdaten zu einer Berechtigungsklasse vorlagen.

- Der Import und Export der Einstellungen in der Generischen Netzdarstellung (GND) wurde korrigiert.

- Der Deserializer in `de.bsvrz.sys.funclib.dataSerializer` liefert jetzt keine `EOFException`s mehr, wenn kein `ByteArrayInputStream` sondern andere `InputStream`s benutzt werden (bzw. der InputStream bei `read(byte[])` nicht den kompletten Puffer füllt).

- Im laufenden Betrieb gelöschte dynamische Objekte wurden bis zum nächsten Neustart der Konfiguration nicht von der Methode zum Abruf aller Objekte mit der gegebenen Pid im Zeitbereich zurückgegeben (`DataModel.getObjects(pid, startTime, endTime)`).

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.systemModellGlobal:

  - Erweiterung der Konfigurationsanfragen und -antworten um weitere Anfrage- bzw. Antworttypen mit denen ermöglicht wird, dass die Konfiguration die entsprechenden Anfragen asynchron ausführen kann.
  - Fehlerkorrektur: In der Attributliste `atl.aktivitätMengen` wurde der Attributtyp des Attributs `Mengentyp` geändert. Statt `att.typMengeReferenz` wird hier jetzt korrekte `att.mengenTypReferenz` verwendet. Konfigurationsbereiche mit der Versorgung von Zugriffsrechten und Defaultparameter dazu können mit einem einfachen Import aktualisiert werden.

- kb.systemModellAoe: Neue Parameter-Attributgruppe für AOE-Objekte mit der folgende zyklische Aktionen in der Konfiguration eingestellt werden können (siehe auch _Nerz-Ä-28_ oben):

  - die Restrukturierung im laufenden Betrieb
  - das endgültige Löschen von dynamische Objekte
  - das endgültige Löschen von historische Elementreferenzen in dynamischen Mengen

## [Version 3.6.2]


### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Durch ein Synchronisationsproblem im Datenverteiler konnte es in seltenen Fällen dazu kommen, dass in den vergebenen Datensatzindizes von versendeten Datensätzen ein Rücksprung enthalten war, der dann beim Empfang durch eine Applikationen zu Fehlermeldungen (_Empfangener Datensatz hat ungültigen Datensatzindex_) und zu Blockierungen führen konnte.

## [Version 3.6.1]


### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- GTM-Plugin für generische Netzdarstellung hat beim Start eine NullPointerException geworfen. Außerdem war ein Fehler im entsprechenden Start-Skript.
- Beim Wechsel einer Quellanmeldung vom bisherigen Quelldatenverteiler auf einen anderen Datenverteiler, der zwischen bisherigem Quelldatenverteiler und einem Empfangsdatenverteiler lag, konnte es zu Kommunikationsausfällen kommen.
- Der Start des Datenverteilers mit dem Aufrufargument `-warteAufParametrierung=ja` hat in Version 3.6.0 fälschlicherweise nicht mehr dazu geführt, dass die Authentifizierung von normalen Applikationen solange verzögert wird, bis die Parametrierung ihre Fertigmeldung versendet hat.
- Bei fehlgeschlagenen Verbindungsversuchen einer Applikation zum Datenverteiler mit der Methode `ClientDavConnection.connect()` blieb ein Thread mit Namen `SendControlNotifier` bestehen.

## [Version 3.6.0]


Status:

: Diese Version ist als Beta-Release zu betrachten, weil in der Testphase zwei sehr selten aufgetretene Probleme zwar bearbeitet, aber noch nicht abschließend geklärt werden konnten:

*   Alle paar Wochen: Terminieren des Archivsystems.
*   Alle paar Wochen: Datenverteilung über mehrere Datenverteiler funktioniert nach Kommunikationsunterbrechungen
    nicht korrekt.

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Nerz-Ä-16: Performance-Verbesserungen bei der Verwendung von ByteArrays in den Datenverteiler-Applikationsfunktionen. In den verschiedenen Implementierungsvarianten des `Data`-Interfaces wurden neue Methoden zum Setzen eines `byte[]`, `short[]`, `int[]`, etc. integriert, die das Data-Array auf die Größe des übergebenen byte-Arrays (etc.) einstellen und dann die Werte des übergebenen byte-Arrays kopieren ohne dabei die Defaultwerte zu setzen. In den Datenverteiler-Applikationsfunktionen und anderen Teilen der Kernsoftware wurden entsprechende Anwendungsfälle in der Kommunikation mit der Konfiguration, dem Archivsystem und PuA auf die neuen Methoden umgestellt.

- Nerz Ä-21: Der Datenverteiler wurde so erweitert werden, dass er vor erneuten Verbindungsversuchen zur Kopplung von Datenverteilern eine einstellbare Zeit wartet. Die Wartezeit kann über den neuen Aufrufparameter `-wiederverbindungsWartezeit=60s` eingestellt werden. Defaultwert ist 60 Sekunden.

- Nerz-ID Ä-22: Im Datenverteiler wurde eine Erweiterung durchgeführt, die bewirkt, dass der Datenverteiler versucht, die Menge "Applikationen" am entsprechenden Konfigurationsobjekt des Datenverteilers zu aktualisieren, wenn Applikationen sich anmelden bzw. wieder abmelden. Damit dies funktioniert, muss die lokale AOE die Verantwortung zur Speicherung der Elementzugehörigkeit der Menge `Applikationen` besitzen. Dies kann bei der Versorgung der Datenverteilerobjekte durch das XML-Attribut "verwaltung" bei der Definition der konkreten Menge realisiert werden.

- Nerz-Ä-6: Bei versionierten Konfigurationsänderungen werden für die betroffenen Objekte neue Konfigurationsobjekte mit neuer ID und gleicher Pid in der Konfiguration erzeugt. Um eine Archivanfrage für ein so geändertes Objekt über den Versionswechsel hinaus durchzuführen, muss die anfragende Applikation bisher die verschiedenen Konfigurationsobjekte mit der gewünschten Pid im Anfragezeitbereich ermitteln und alle gefundenen Objekte in der Archivanfrage angeben.

  - Das API für Archivanfragen wurde so erweitert, dass automatisch die im Zeitbereich gültigen Objekte ermittelt und in der Anfrage ans Archivsystem übertragen werden, wenn die anfragende Applikation die Pid des gewünschten Objekts in der Anfrage angibt.
  - Der Systemprotokollierer wurde so erweitert, dass er das neue API für Archivanfragen verwendet.
  - Der Generische-Test-Monitor (GTM) wurde so erweitert, dass er das neue API bei Archivanfragen verwendet und in der Objektspalte, das jeweilige historische Objekt darstellt und im Tooltip angezeigt.

- Nerz Ä-26/Ä-58: Unversionierte Datenmodelländerungen. Die Konfiguration kann beim Import von Attributgruppen kleinere Änderungen von einzelnen Attributen, die nicht zu einer Veränderung der bei der Serialisierung benötigten Anzahl von Bytes führen, ohne Versionierung und damit auch ohne die Vergabe von neuen Objekt-IDs durchführen. Nur bei größeren Datenmodelländerungen, die bei der Serialisierung zu strukturellen Änderungen oder zu einer Veränderung der benötigten Anzahl von Bytes führen, wird nach wie vor der Mechanismus der Versionierung eingesetzt werden.

- Nerz-F-67: Neues Commandline-Tool, mit dem man die jeweils aktivierbare Version einer oder mehrerer Konfigurationsdateien anzeigen kann. Über einen Aufrufparameter kann man dem Tool einzelne oder mehrere Konfigurationsdateien oder den Namen eines Ordners mit zu berücksichtigenden Konfigurationsdateien übergeben. Das Tool gibt zu jedem Konfigurationsbereich die zuletzt zur Aktivierung freigegebene Version und auf Wunsch weitere Informationen (gesteuert über entsprechende Ausgabe-Flags) aus.

  Aufruf:

  `java de.bsvrz.puk.config.configFile.util.ConfigFileInfo [Optionen]... [Konfigurationsdateien/Ordner]...`

  Gültige Optionen: (Umlaute können bei Bedarf durch ae, oe, ue ersetzt werden)

  -kurzInfo=ja : Kurzinfos ausgeben

  -beschreibung=ja : Beschreibungen ausgeben

  -übernahmeVersion=ja : Zur Übernahme freigegebene Version ausgeben

  -aktivierungVersion=nein : Zur Aktivierung freigegebene Version nicht ausgeben

  -abhängigkeiten=ja : Abhängigkeiten ausgeben

  -änderungen=ja : Änderungsvermerke ausgeben

  -zusammenfassung=nein : Zusammenfassung über benötige Konfigurationsbereiche nicht ausgeben (nur bei mehreren Dateien)

  -alles=ja : Alles oben genannte ausgeben

  -terminalBreite=80 : Breite der Ausgabe anpassen

  -ausführlich=ja : Ausführliche Ausgabe der Abhängigkeiten und Änderungsvermerke

- Nerz-Ä-55: Sicherung der Konfiguration für nur einen Konfigurationsverantwortlichen.

  - Die Erstellung von Sicherungskopien der Konfigurationsbereiche wurde in der Konfiguration dahingehend erweitert, dass es optional auch möglich ist, nur die Konfigurationsbereiche eines vorgegeben Konfigurationsverantwortlichen zu sichern.
  - Erweiterung des API in den Datenverteiler-Applikationsfunktionenen zur Steuerung des Sicherungsmechanismus um eine weitere Methode, die einen zusätzlichen Parameter aufnimmt, über den ein Konfigurationsverantwortlicher vorgegeben werden kann, dessen Konfigurationsbereiche gesichert werden sollen.
  - Erweiterung des Command-Line-Tools zum einfachen manuellen Anstoßen der Sicherung um einen entsprechenden (optionalen) Aufrufparameter.

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Nerz-F-13: Die Implementierung der getElements() Methode von dynamischen Typen wurde so geändert, dass sie die für die jeweilige Simulation relevanten Objekte zurück liefert und nicht mehr die vorhandenen Elemente aller Simulationsvarianten zurückliefert.

- Nerz-Ä-51: Die Implementierung der Anmeldung als Sender in den DAF wurde so erweitert, dass mehrere Anmeldungen als Sender für die gleiche Datenidentifikation zugelassen werden.

- Nerz-Ä-54: Wenn eine Applikation bei der Anmeldung auf Daten keine Rechte dazu hatte, dann blieb die Anmeldung nicht bestehen, sondern wurde automatisch zurückgenommen.

  - Refactoring der Java-Klassen ConnectionsManager und SubscriptionsManager, d.h. Überarbeitung der Struktur der Klassen, so dass sie modularer, klarer und übersichtlicher organisiert sind, ohne dabei das aktuelle Verhalten zu ändern.
  - Änderung des Verhaltens des Datenverteilers, sodass Anmeldungen, die wegen fehlenden Rechten nicht aktiviert werden können, im Datenverteiler erhalten bleiben und nach entsprechender Änderung der Rechte automatisch (d.h. ohne erneute Anmeldung der betroffenen Applikation) aktiviert werden.
  - Realisierung einer Analysemöglichkeit im Datenverteiler, mit der Applikationen und Testfälle den Status von einzelnen Anmeldungen abfragen können.

- Nerz-Ä-12: Über eine neue API-Methode `getNumArchiveQueries()` in der Klasse `ArchiveRequestManager` kann eine Applikation die aktuell im Archivsystem eingestellte maximale Anzahl von gleichzeitig für eine Applikation bearbeiteten Archivanfragen zur Laufzeit abfragen.

- Nerz-Ä-17: Änderung der Namen von Objekten. Die Konfiguration wurde so geändert, dass der Name eines noch nicht aktivierten Konfigurationsobjekts geändert werden kann, auch wenn der Name laut Datenmodel nicht änderbar ist.

- Nerz-F-96 MessageSender funktioniert erst nach einer unbebestimmten Zeit. Die applikationsseitig verwendbare Bibliothek zum Senden von Betriebsmeldungen (Klasse `MessageSender` im Distributionspaket `de.bsvrz.sys.funclib.operatingMessage`) wurde so erweitert, dass zu versendende Nachrichten bis zu einer vorgebbaren Anzahl (Defaultwert: 100 Meldungen) zwischengespeichert werden, wenn die Betriebsmeldungsverwaltung nicht (mehr) verfügbar ist. Zwischengespeicherte Meldungen werden automatisch ohne weiteres Zutun der Applikation versendet, sobald die Betriebsmeldungsverwaltung (wieder) verfügbar ist.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Korrektur eines Problems: In der Konfiguration wurde in manchen Fällen das Aufrufargument zum Ignorieren der Abhängigkeiten zwischen Konfigurationsbereichen `-ignoriereFehlerDerAbhaengigkeitenBeiKonsistenzpruefung=ja` zu spät gesetzt.

- Korrektur eines Problems: Im Osi3-Modul von KEx-TLS war ein Logikfehler bei der Auswertung der Einstellung `osi3.reduzierungAufSteuerbyte`, der dann aufgetreten ist, wenn nicht die Defaulteinstellung verwendet wurde.

- Nerz-F-28: Im UncaughtExceptionHandler des StandardApplicationRunners werden beim Auftreten von nicht behandelten Exceptions jetzt Ausgaben mit Debug-Level FEHLER statt WARNUNG verwendet. In allen Applikationen der Kernsoftware, die einen eigenen UncaughtExceptionHandler haben, wurde eine analoge Anpassung durchgeführt.

- Nerz-F-65: Beim Import von aktualisierten Versorgungsdateien, in denen Defaultparameter enthalten waren, in denen auf neue importierte Objekte referenziert wurde, kam es zu Exceptions und abgebrochen Importvorgängen. Die Ursache für diese Probleme wurde korrigiert.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

*   kb.metaModellGlobal:    Neue Attributgruppe am Konfigurationsbereich ergänzt, die Informationen über unversionierte Datenmodelländerungen enthält.

*   kb.tmVewBetriebGlobal:  Erweiterung der SWE Betriebsmeldungsverwaltung gemäß NERZ Änderungsantrag 34 und eines entsprechenden konkreten Vorschlags um Kriterien für die Filterung. Um den Filter in einer Anwendung auch tatsächlich verwenden zu können, wurde der AttributTyp `att.vewBetrKriterium` um den Zustand `Meldungstext` erweitert.
 
*   kb.systemModellObsolet: Anpassung des Änderungskommentars und der Beschreibungen.

*   kb.systemModellGlobal:  Erweiterung der Archivanfragen um eine Möglichkeit die maximale Anzahl Archivanfragen pro Applikation zu ermitteln.

*   kb.systemModellGlobal:  Korrektur des Datenmodells für die neuen Zugriffsrechte.

*   kb.objekteTestSystem:   Bei der Menge `Applikationen` an den Datenverteiler-Objekten wurde festgelegt, dass die Elementzugehörigkeit von der AOE kv.testKonfiguration verwaltet wird, damit die Applikationsobjekte im Beispielsystem zur Laufzeit auch in die Menge aufgenommen und entfernt werden können.
							
## [Version 3.5.5]

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Bei eingeschalteter Rechteprüfung im Datenverteiler und Verwendung eines Datenverteilers der ohne lokale Konfiguration über die Datenverteilerkopplung auf die Konfiguration eines anderen Datenverteilers zugegriffen hat, konnten Antworten der Konfiguration wegen fehlender Rechte nicht über Datenverteilerkopplung übertragen werden.
- Bei eingeschalteter Rechteprüfung im Datenverteiler konnte es im Datenverteiler nach Anmeldung einer Applikation zu Deadlocks bei der Prüfung der Rechte kommen.

## [Version 3.5.4]

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Die Konfiguration beantwortet Anfragen nach konfigurierenden Datensätzen zu lokal nicht bekannten Attributgruppenverwendungen nicht mehr mit einer Fehlerantwort, sondern mit einem leeren Datensatz. Dies führt zu einem verbesserte Verhalten beim Austauschen von dynamischen Objekten zwischen Konfigurationen, wenn diese mit unterschiedlichen Ständen des Datenmodells arbeiten.

## [Version 3.5.3]

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- In der Konfiguration wurden Fehlerausgaben zur weiteren Analyse eines Problems erweitert. Bei einer Exception in der Behandlung einer Konfigurationsanfrage werden die 5 letzten Stacktrace-Elemente in der Fehlerantwort übertragen.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- In der Konfiguration konnte bei Datensatzanfragen mit unbekannter Attributgruppenverwendung eine NullPointerException auftreten. Diese wurde durch eine IllegalArgumentException mit spezifischer Fehlermeldung ersetzt.

## [Version 3.5.2]

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- de.bsvrz.kex.tls.osi2osi3: Beim Abbruch von KEx-TLS-OSI-2-Verbindungen konnte es in seltenen Fällen zu einem Deadlock kommen.

## [Version 3.5.1]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- [NERZ-Problem 20](http://www.nerz-ev.de/nerz-fehlerverwaltung/view.php?id=20)\ In Version 3.5.1 der Distributionspakete de.bsvrz.dav.dav, de.bsvrz.dav.daf und de.kappich.puk.param wurden folgende Änderungen zur Behebung des Problems durchgeführt:

  - Der Datenverteiler blockiert Verbindungen von normalen Applikation nach der Authentifizierung solange, bis die Applikationsfertigmeldung der Parametrierung vorliegt. Konfiguration und Parametrierung werden nicht blockiert. Das Warten auf die Applikationsfertigmeldung findet auch bei deaktivierter Rechteprüfung statt und ist mit den gleichen Mechanismen gelöst, wie die Lösung von Problem 8\. Über das in Version 3.5.0 eingeführte Aufrufargument "-warteAufParametrierung=..."kann das Verhalten beeinflusst werden:

    - Bei `-warteAufParametrierung=ja` wartet der Datenverteiler auf die Applikationsfertigmeldung einer lokalen Parametrierung (Default).
    - Bei `-warteAufParametrierung=nein` wartet der Datenverteiler nicht auf die Applikationsfertigmeldung einer lokalen Parametrierung (bisheriges Verhalten).
    - Bei `-warteAufParametrierung=inkarnationsname` wartet der Datenverteiler auf die Applikationsfertigmeldung einer lokalen Parametrierung mit dem angegebenen Inkarnationsnamen.

  - In den Applikationsfunktionen wurde dafür gesorgt, dass die Blockierung durch den Datenverteiler nicht zu einem Timeout mit entsprechender Exception führt.

  - Außerdem wurde die im Kernsoftware-Beispielsystem enthaltene einfache Parametrierung aktualisiert, da die Applikationsfertigmeldung direkt beim Verbindungsaufbau versendet wurde. In der neuen Version wird die Applikationsfertigmeldung erst dann versendet, wenn alle Parameter publiziert wurden.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

## [Version 3.5.0]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Alle Distributionspakete können jetzt direkt als Eclipse-Plugins verwendet werden. Sie können beispielsweise einfach in das "dropins"-Verzeichnis einer Eclipse-Installation abgelegt werden oder mit Import in einen Workspace importiert werden. Der Quellcode der Pakete ist wie bisher in den Distributionspaketen in einer ZIP-Datei (de.bsvrz.x.y-src.zip) enthalten. Diese ZIP-Datei kann in Eclipse bei Bedarf mit Attach Source mit dem Code des Plugins verbunden werden.
- Alle Distributionspakete wurden mit Java 1.6 übersetzt.
- Neues Distributionspaket für SW-Einheit KExDaV zum Austausch von Daten zwischen zwei ansonsten nicht gekoppelten DAV-Systemen
- Die Tabellendarstellung in der Systembedienung (GTM) wurde um ein Menü und Funktionen zum Selektieren, Drucken, Exportieren und Löschen erweitert.
- Implementierung einer Möglichkeit zur Sicherung der Konfigurationsdateien im laufenden Betrieb der Konfiguration mit Hilfe der Methode DataModel.backupConfigurationFiles().
- Implementierung einer Möglichkeit zur Terminierung von Datenverteilerverbindungen mit Hilfe eines Onlinedatensatzes der Attributgruppe "atg.terminierung" bei Objekten des "typ.datenverteiler".
- Implementierung von Transaktionen im Datenverteiler, die ermöglichen, mehrere Datensätze zusammenhängend zu versenden und zu empfangen. Dazu meldet sich die Quelle oder die Senke nicht auf einzelne Datenidentifikationen an, sondern auf eine Transaktionsdatenidentifikation, bestehend aus einem Transaktionsobjekt, einer Transaktionsattributgruppe und einem (Transaktions-)Aspekt.
- Neue Implementierung der Rechteprüfung im Datenverteiler. Über einen Aufrufparameter kann beim Start des Datenverteilers festgelegt werden, welche Implementierung der Rechteprüfung verwendet werden soll. Der bisherige Aufrufparameter -rechtePrüfung=ja|nein wurde dazu um weitere Zustände "alt" und "neu" erweitert.
- Der Zugriff auf dynamische Objekte mit der Methode mit Hilfe der Methode DataModel.getObject(long id) wurde dahingehend erweitert, dass die lokale Konfiguration bei Bedarf versucht eine entsprechende Anfrage an die Konfiguration zu stellen, die das Objekt ursprünglich erzeugt hat. Wenn die andere Konfiguration erreichbar ist und das Objekt zurückliefern kann, dann wird das Objekt an die anfragende Applikation zurückgeliefert. Außerdem werden dynamische Objekte, die über diesen Mechanismus übertragen wurden von der lokalen Konfiguration persistent gespeichert und bei nächsten Neustart wieder verwendet, wenn die Fremdkonfiguration dann nicht mehr erreichbar ist. Zur Zwischenspeicherung wird eine Datei eingesetzt, die sich im gleichen Verzeichnis wie die lokale Verwaltungsdatei der Konfiguration befindet und den Namen "fremdObjekte-kv..." hat, wobei "kv..." durch die Pid des lokalen Konfigurationsverantwortlichen zu ersetzen ist.
- API-Erweiterung der Datenverteiler-Applikationsfunktionen zum gezielten Zugriff auf andere Konfigurationen mit Hilfe der Methoden ClientDavInterface.getDataModel(SystemObject), ClientDavInterface.getDataModel(String) und ClientDavInterface.getDataModel(long)
- In der KEx-TLS Implementierung gibt es auf OSI-2 und OSI-3-Ebene neue Möglichkeiten zur Unterstützung von älteren TLS-Geräten. Diese können über die Parameter atg.protokollEinstellungenStandard und atg.protokollEinstellungenPrimary an den in der TLS-Versorgung definierten Anschlußpunkten bzw. Anschlußpunkt-Kommunikationspartnern online verändert werden. Dabei sind folgende Werte zu verwenden:

  - OSI3-Routing unterdrücken.\ Mit der Einstellung "osi3.reduzierungAufSteuerbyte" auf den Wert "ja" kann der OSI-3-Header beim Versand von Telegrammen auf das Steuerbyte reduziert werden. Defaultwert ist "nein".
  - OSI3-Pointer inkrementieren.\ Mit der Einstellung "osi3.pointerInkrementieren" auf den Wert "nein" besteht die Möglichkeit, festzulegen, dass der OSI-3 Pointer vor dem Versand nicht inkrementiert wird. Defaultwert ist "ja".
  - OSI3-Routing beim Empfang spiegeln.\ Mit der Einstellung "osi3.adressenSpiegeln" auf den Wert "ja" besteht die Möglichkeit, festzulegen, dass die OSI-3-Adresse eines vom KRI empfangenen Telegramms vor der weiteren Verarbeitung gespiegelt wird. Defaultwert ist "nein".
  - Unterstützung von OSI-2 Adressen außerhalb des Bereichs von 1-199.\ Mit der Einstellung "secondary.adressen200-254Akzeptieren" auf den Wert "ja" (nur am Anschlusspunkt in der Attributgruppe atg.protokollEinstellungenStandard) kann die (nach TLS vorgesehene) Einschränkung auf Secondary-Adressen im Bereich 1-199 außer Kraft gesetzt werden kann, d.h. dass Secondary-Adressen außerhalb des bisher vorgesehen Bereichs also auch Werte von 200 bis 254 verwendet werden können und dass das OSI-3 Routing entsprechend korrekt aufgelöst und zugeordnet wird. Defaultwert ist "nein".

- [NERZ-Problem 8](http://www.nerz-ev.de/nerz-fehlerverwaltung/view.php?id=8)\ Der Datenverteiler unterstützt ein neues Aufrufargument -warteAufParametrierung=... mit dem erreicht werden kann, dass der Datenverteiler erst dann Verbindungen zu anderen Datenverteilern aufbaut bzw. zulässt, wenn die lokale Parametrierung ihre Applikationsfertigmeldung versendet hat. Dadurch wird erreicht, dass der Datenverteiler die notwendigen Zugriffsrechte aus der Parametrierung abrufen kann, wenn Daten (und insbesondere dynamische Objekte) zwischen zwei gekoppelten Systemen ausgetauscht werden sollen.\ Folgende Möglichkeiten zur Verwendung des neuen Aufrufarguments sind vorgesehen:

  - Bei `-warteAufParametrierung=ja` wartet der Datenverteiler auf die Applikationsfertigmeldung einer lokalen Parametrierung (Default).
  - Bei `-warteAufParametrierung=nein` wartet der Datenverteiler nicht auf die Applikationsfertigmeldung einer lokalen Parametrierung (bisheriges Verhalten).
  - Bei `-warteAufParametrierung=inkarnationsname` wartet der Datenverteiler auf die Applikationsfertigmeldung einer lokalen Parametrierung mit dem angegebenen Inkarnationsnamen.

- [NERZ-Problem 7, Lösungsvorschlag c)](http://www.nerz-ev.de/nerz-fehlerverwaltung/view.php?id=8)\ Der Datenverteiler unterstützt ein neues Aufrufargument `-konfigurationsBereichFuerApplikationsobjekte=bereichsPid` mit dem bewirkt werden kann, dass die dynamischen Konfigurationsobjekte, die der Datenverteiler für jede verbundene Applikation erzeugt, nicht mehr im Default-Bereich der Konfiguration, sondern im angegebenen Konfigurationsbereich gespeichert werden. Wird kein Wert angegeben, dann wird wie bisher der Default-Bereich der Konfiguration verwendet.

- In der KEx-TLS Implementierung gibt es in der Implementierung des TC57-Primary-Protokolls eine neue Einstellungsmöglichkeit, mit der erreicht werden kann, dass vor dem Setzen des RTS-Signals vor dem Versand eines Telegramms abgewartet werden kann, bis das DCD-Signal des Modems nicht mehr gesetzt ist. Damit kann sichergestellt werden, dass bei langen Sendernachlaufzeiten der Kommunikationspartner keine Sendekonflikte entstehen. Der Name der Einstellung ist "seriell.dcd", mögliche Werte sind "ja" und "nein", Defaultwert ist "ja". Die Einstellung kann über die Parameter atg.protokollEinstellungenStandard und atg.protokollEinstellungenPrimary an den in der TLS-Versorgung definierten Anschlußpunkten bzw. Anschlußpunkt-Kommunikationspartnern online verändert werden.

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Debugausgaben bzgl. des Zustands von Kommunikationsverbindungen zwischen Applikation und Datenverteiler bzw. zwischen zwei Datenverteilern enthalten jetzt grundsätzlich Name, Adresse und Portnummer des Kommunikationspartners.
- Automatische Selektion des Knoten "Alles" in der Baumdarstellung beim Start der Systembedienung (GTM)
- In den Datenverteiler-Applikationsfunktionen wurden die verschiedenen Varianten der Methode DataModel.getConfigurationData(...) dahingehend optimiert, dass bereits im Zwischenspeicher vorliegende Datensätze berücksichtigt werden und eine Konfigurationsanfrage nur noch für diejenigen Datensätze erzeugt wird, die noch nicht im Zwischenspeicher vorliegen.
- In den Datenverteiler-Applikationsfunktionen kann beim Aufrufargument -lokaleSpeicherungKonfiguration=pfadname zusätzlich mit Doppelpunkt getrennt ein Name angegeben werden, der im Dateinamen der lokalen Cache-Datei für Konfigurationsdaten anstelle des Applikationsnamens verwendet werden soll.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Im Login-Dialog der Systembedienung (GTM) wurde bei mehr als 20 gespeicherten Einträgen im Menü zur Auswahl des Datenverteilers der falsche Eintrag gelöscht. Neben der Korrektur des Problems wurde die maximale Anzahl Einträge auf 100 erhöht.
- Im Haupt-Dialog der Systembedienung (GTM) wurde nach Selektion einer automatisch gespeicherten Einstellung und Start eines GTM-Moduls die Objekte eines anderen gespeicherten Eintrags selektiert, wenn bereits 20 Einträgen gespeichert waren. Neben der Korrektur des Problems wurde eine Performance-Optimierung bei der Initialisierung der Liste durchgeführt.
- In der Konfiguration konnte es in seltenen Fällen bei internen Benachrichtigungen bzgl. Änderungen von dynamischen Objekten zu Verklemmungen von einzelnen Threads kommen.
- In der Konfiguration konnte es in seltenen Fällen beim Löschen von dynamischen Objekten zu einem Deadlock kommen.
- TC-57 Implementierung im KEx-TLS konnte sich in seltenen Fällen verklemmen, wenn die Modemsteuerungssignale ein unerwartetes Verhalten aufzeigten.
- Bei der Ausgabe von Archivdatensätzen im Systemprotokollierer wurden Datensatzindex und Nachgeliefert-Kennung nicht korrekt angezeigt.
- Zugriff auf eine nicht vorhandene Menge mit den Methoden getMutableSet() und getNonMutableSet() im Interface ConfigurationObject der Datenverteiler-Applikationsfunktionen führten zu einer NullPointerException.
- In den Datenverteiler-Applikationsfunktionen konnte es in seltenen Fällen zu einer Blockierung beim Zugriff auf die Liste mit registrierten ConnectionListener kommen.
- Im Datenverteiler konnte es in speziellen Anwendungsfällen zu einer NullPointerException bei der Verarbeitung von Datentelegrammen kommen, die von einem anderen Datenverteiler versendet wurden.
- Im Datenverteiler konnte es in speziellen Anwendungsfällen zu einer NullPointerException bei der Verarbeitung von Anmeldetelegrammen kommen, die an einem anderen Datenverteiler weitergeleitet wurden.
- In den Datenverteiler-Applikationsfunktionen wurde der aktuelle Datensatz nicht erneut an den Empfänger weitergegeben, wenn dieser an einem Datenverteiler als Empfänger und an einem anderen gekoppelten Datenverteiler als Quelle angemeldet war und die Kommunikation zwischen den Datenverteilern unterbrochen und wiederhergestellt wurde und der aktuelle Datensatz sich während des Kommunikationsausfalls nicht verändert hatte.
- Im Datenverteiler wurde nach Ausfall der Kopplung zu einem anderen Datenverteiler in speziellen Anwendungsfällen keine erneute Anmeldung beim Kommunikationspartner durchgeführt, was beim Neustart von Datenverteilern in diesen Fällen empfangsseitig zu einem leeren Datensatz "keine Quelle" führen konnte, obwohl sich eine Quelle am neugestarteten Datenverteiler angemeldet hatte.
- Im Datenverteiler wurde kein leerer Datensatz an einen angemeldeten Empfänger gesendet, wenn keine lokale Quelle vorhanden war aber ein anderer Datenverteiler als potentielle Quelle in Frage kam, aber dort auch keine Quelle für die Daten angemeldet war.
- Im GTM funktionierte der Export und Import von Einstellungsdateien nicht, wenn die beiden Aktionen an unterschiedlichen Konfiguration durchgeführt wurden.
- Wenn beim Sichern der Verwaltungsdatei in der Konfiguration ein Fehler aufgetreten ist, wurde eine temporäre Datei nicht gelöscht.
- Die Methode Data.createModifiableCopy hat innerhalb der Konfiguration bei nicht auflösbaren Referenzen mit Assoziation die Pid des referenzierten Objekts nicht kopiert.
- Bei der Konsistenzprüfung kam es bei unvollständig modellierten Typen bzw. Default-Parametern zu Exceptions statt zu hilfreichen Fehlermeldungen.
- TCP-Portnummern in den Aufrufparametern des Datenverteilers mit Werten oberhalb von 32767 wurden nicht akzeptiert.
- Beim Invalidieren von dynamischen Objekten wurde der Zeitpunkt der letzten Änderung von dynamischen Objekten des zugeordneten Konfigurationsbereichs nicht aktualisiert, was dazu führte, dass die applikationsseitige lokale Zwischenspeicherung von Konfigurationsdaten beim nächsten Start der Applikation nicht aktualisiert wurde und das betroffene Objekt aus Sicht der Applikation scheinbar noch gültig war.
- Der Aufrufparameter -lokaleSpeicherungKonfiguration=pfadname:[applikationsname] wurde nicht wie gewünscht interpretiert, wenn er mit einem absoluten Pfadnamen unter Windows verwendet wurde, der mit Laufwerksbuchstaben und Doppelpunkt begonnen hat. Doppelpunkte in den ersten zwei Zeichen des Argumentwerts werden nicht mehr als Trennzeichen für den optionalen Applikationsnamen verwendet.
- [NERZ-Problem 10](http://www.nerz-ev.de/nerz-fehlerverwaltung/view.php?id=10)\ Beim Erzeugen des ersten dynamischen Objekts eines Typs nach dem Start der Konfiguration konnte es dazu kommen, dass das neu erzeugte Objekt in nachfolgenden Anfragen nach allen Objekten des Typs doppelt zurückgeliefert wurde.
- [NERZ-Problem 7, Lösungsvorschlag b)](http://www.nerz-ev.de/nerz-fehlerverwaltung/view.php?id=7)\ Beim persistenten Zwischenspeichern von dynamischen Objekten, die die Konfiguration von anderen Konfigurationen abgefragt hat und deren Konfigurationsbereich nicht lokal bekannt ist, konnte es zu einer NullPointerException kommen. Die betroffenen Objekte werden nicht mehr zwischengespeichert.

## [Version 3.4.10]

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Überflüssige Debug-Meldungen bei der Aktualisierung von dynamischen Objekten in dynamischen Mengen, die von einer anderen Konfiguration verwaltet werden, wurden entfernt.
- Fehlerausgaben der verschiedenen Anmeldemethoden der Datenverteiler-Applikationsfunktionen wurden verbessert und überarbeitet.
- Fehlerhafte Archivantworten führen jetzt in den DAF nicht mehr zu NullPointerExceptions sondern zu entsprechenden Debug-Warnungen.
- Stacktraces in Debugausgaben, die als zweites Argument eine Exception haben werden jetzt auf Wunsch mit dem Aufrufparameter -debugStdErrTextStacktraces=ja|nein auf den StandardError-Kanal ausgegeben. Ohne dieses Aufrufargument werden sie automatisch auf den StandardError-Kanal ausgegeben, falls Debug-Ausgaben in Dateien ausgeschaltet sind (-debugLevelFileText=OFF).

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Eine Applikation konnte beim Zugriff auf die zweite dynamische Menge, die von einer nicht erreichbaren fremden Konfiguration verwaltet wird, hängen bleiben, weil die Konfiguration in bestimmten Fällen keine Antwort auf entsprechende Konfigurationsanfragen gesendet hat.
- Nach dem Abbruch der Verbindung zwischen zwei gekoppelten Datenverteilern und dem erneuten Aufbau der Verbindung konnte es in seltenen Fällen zu Problemen in der internen Verwaltung des Datenverteilers kommen, wenn die neue Verbindung schon aktiviert wurde, bevor die Abmeldungen, die durch den Verbindungsabbruch der ursprünglichen Verbindung ausgelöst wurden, vollständig durchgeführt worden sind.

## [Version 3.4.9]

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Fehlerausgaben und Warnungen in Ausnahmesituationen wurde verbessert und überarbeitet.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Beim Erzeugen von dynamischen Objekten mit der Methode ConfigurationArea.createDynamicObject wurde nicht überprüft, ob alle Attribute der übergebenen Datensätze definiert sind.
- Bei Empfangsanmeldungen einer Applikation mit der Delta-Option wurden Datensätze vom Datenverteiler auch dann an die Applikation weitergeleitet, wenn sie sich inhaltlich nicht geänderten hatten.
- Bei Empfangsanmeldungen einer Applikation mit der Delta-Option wurden große Datensätze (mehr als ca. 3000 Byte) vom Datenverteiler nicht an die angemeldeten Applikation weitergeleitet.
- In der Konfiguration konnte unter manchen JVM-Implementierungen ein OutOfMemory-Error entstehen, wenn der Applikation zu viel Speicher zugeteilt wurde. Das Problem wurde durch außerhalb des Java-Heaps befindliche Systemressourcen ausgelöst, die erst bei einem Garbage-Collector Aufruf freigegeben wurden, der aber nicht automatisch stattfand, wenn auf dem Heap noch genügend Platz verfügbar war.
- Verursacht durch einen Bug in der JVM (für den ein Workaround gefunden wurde) konnte die Konfiguration in bestimmten Situationen beim Systemstart hängen bleiben.
- Bei der Publikation von dynamischen Objekten über dynamische Mengen zwischen Konfigurationen, die über Datenverteiler-Kopplung miteinander verbunden sind, wurden Aktualisierungen von dynamischen Objekten (Löschen bzw. Ungültig setzen mit invalidate() und Namensänderungen mit setName()) nicht an die Applikationen von Remote-Konfigurationen weitergegeben.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.objekteZugriffsrechteBasis Version 2: Bei der Aktivität aktivität.basis.anfrage wurde der Aspekt asp.information ergänzt, um den Versand von Betriebsmeldungen zu ermöglichen.

## [Version 3.4.8]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Das WanCom-Client OSI-2 Modul von KEx-TLS unterstützt den zusätzlichen Eintrag wancom.waitForInitialReceive im Parametersatz für die OSI-2 Kommunikation. Wenn dieser Wert explizit auf den Wert "ja" gesetzt wird, dann wird nach einem TCP-Verbindungsaufbau gewartet, bis ein KeepAlive- oder Datentelegramm empfangen wurde, bevor der Verbindungsstatus "Verbunden" an die OSI-3 und OSI-7 Schichten gemeldet. Dadurch diese Möglichkeit können bei Verwendung eines zwischen Client- und Server geschalteten Application Level Gateway bei Verbindungsproblemen überflüssige Statuswechsel in der Kommunikation vermieden werden.
- Der Datenverteiler publiziert die Release-Informationen seines eigenen Distributionspaket in der neuen Attributgruppe 'atg.distributionspaketReleaseInfo'.

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Die Parametrierung nutzt zur Authentifizierung jetzt den via Aufrufparameter -benutzer=... vorgegebenen Wert.
- Die Rechteprüfung im Datenverteiler wurde so erweitert, dass sie neben dem bisherigen falsch geschriebenem Mengennamen "Zusammmenstellungen" (mit drei 'm') einer Region der Rechteverwaltung auch den richtig geschriebenen Mengennamen "Zusammenstellungen" verwenden kann.
- Im GTM werden in den Tooltips zu Konfigurationsobjekten jetzt sowohl Pid als auch Id angezeigt.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Beim gleichzeitigen Löschen von vielen Simulationsobjekten wurde in der Konfiguration für jede zu löschende Simulation, ein eigener Thread erzeugt. Dies konnte zu Speicherproblemen führen. In der geänderten Version wird für alle Simulationsobjekte nur noch ein einziger Thread benutzt.
- Beim Start des GTM konnte es in bestimmten Fällen sporadisch zu einer NullPointerException kommen.
- Beim Start des Systemprotokollierers über den GTM wurde die eingestellte Simulationsvariante nicht an die resultierende Archivanfrage weitergegeben.
- In den Datenverteiler-Applikationsfunktionen war der Zugriff auf die Zeitsteuerung einer Simulation fehlerhaft.
- Bei der Rechteverwaltung des Datenverteilers wurde Regionen, die über einen oder mehrere Konfigurationsbereiche definiert waren, nicht korrekt ausgewertet.
- Bei der Rechteverwaltung des Datenverteilers wurden die Benutzerrechte "Lesen aber nicht als Senke" und "Senden aber nicht als Quelle" bei Anmeldungen als Senke bzw. Quelle nicht korrekt ausgewertet.
- Beim Ändern der Zugriffsrechte eines Benutzers konnte im Datenverteiler ein Deadlock entstehen.
- Es war nicht möglich, einen Import einer Versorgungsdatei mit Änderungen an konfigurierenden Datensätzen durchzuführen, die laut Datenmodell nicht änderbar sind. (Der Import wurde dahingehend erweitert, dass in diesen Fällen ein neues dynamisches Objekt mit den geänderten Datensätzen erzeugt wird und das bisherige Objekt auf ungültig gesetzt wird.) (ZID-95)
- Beim Import von dynamischen Objekten mit Datensätzen deren Konfigurationsmodus im Datenmodell als "optional" gekennzeichnet war, wurden die Datensätze vom Import erzeugt aber in bestimmten Fällen kurz danach wieder gelöscht. (ZID-95)
- In den verschiedenen KEx-TLS-OSI-2 Modulen konnte ein Deadlock beim gleichzeitigen Versand von sehr vielen Telegrammen entstehen.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.systemModellGlobal Version 20: Tippfehler im Mengennamen "Zusammenstellungen" von Objekten des "typ.zugriffsRegion" korrigiert (vorher "Zusammmenstellungen" mit 3 'm'). Um eine einfache Migration zu ermöglichen, wurde das Datenmodell vorerst so geändert, dass beide Mengennamen verwendet werden können.
- kb.objekteZugriffsrechteBasis Version 1: Neuer Bereich mit der Versorgung der (Basis)Zugriffsrechte.
- kb.systemModellGlobal Version 21: Neue Attributgruppe atg.distributionspaketReleaseInfo, die der Datenverteiler nutzt, um seine eigene Release-Informationen zu publizieren.

## [Version 3.4.7]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Das WanCom-Client OSI-2 Modul von KEx-TLS unterstützt den zusätzlichen Eintrag wancom.tlsTypeReceive im Parametersatz für die OSI-2 Kommunikation. Mit diesem Wert kann der WanCom-Telegrammtyp von empfangenen TLS-Telegrammen vorgegeben werden, wenn er sich vom WanCom-Telegrammtyp von gesendeten TLS-Telegrammen unterscheidet. Wenn wie bisher nur wancom.tlsType angegeben wird, dann wird dieser Wert beim Versand und beim Empfang verwendet (Default 600). Wenn beide angegeben werden, dann wird wancom.tlsType zum Versand und wancom.tlsTypeReceive zum Empfang verwendet.
- Das WanCom-Server Modul wurde als neues OSI-2-Modul für KEx-TLS in die Kernsoftware aufgenommen. Es kann analog zu anderen OSI-2 Modulen durch Eintrag des Klassennamen de.bsvrz.kex.tls.osi2osi3.osi2.wancom.Server im Attribut "ProtokollTyp" der Attributgruppen atg.anschlussPunkt und atg.anschlussPunktKommunikationsPartner der TLS-Versorgung verwendet werden.
- Es wurden neue Varianten der Methoden `StandardApplicationRunner.run(...)` ergänzt, mit denen der Applikationstyp vorgegeben werden kann.

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Das passive TC57-Mithör-OSI-2 Modul von KEx-TLS wurde so modifiziert, dass es Telegrammwiederholungen der TC-57-Primary toleriert, wenn im vorhergegangen Abfragezyklus der gleichen Secondary keine Antwort empfangen wurde. Dies führt beim Einsatz des Mithörmodul auf Seiten des TC57-Primary zu einem robusteren Verhalten bei Kommunikationsstörungen.
- Die Einstellungen des GenericTestMonitor (GTM) werden jetzt je verwendetem KV separat gespeichert.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Bei der Konsistenzprüfung der Konfiguration wurde bei der Prüfung der Typen von referenzierten Objekten nicht die evtl. neuere aktivierbare Version des Datenmodells sondern die aktuelle Version betrachtet. Dies konnte bei der erstmaligen Übernahme und Aktivierung eines Datenmodells und der gleichzeitigen Übernahme und Aktivierung von Bereichen zu lokalen Fehlern führen.
- Der Zugriff auf dynamische Objekte einer dynamischen Menge, die von einer fremden Konfiguration verwaltet wurde, funktionierte nicht, wenn der Konfigurationsbereich des dynamischen Objekts in der lokalen Konfiguration nicht bekannt war.
- Bei der Rechteprüfung durch den Datenverteiler wurden Einschränkungen auf bestimmte Attributgruppen ignoriert.
- Beim Hinzufügen bzw. Löschen von Objekten in dynamischen Mengen, der Elementzugehörigkeit nicht in der Konfigurationsdatei selbst gespeichert werden, wurde der Zeitstempel der letzten Datensatzänderung erneut geschrieben und damit die Konfigurationsdatei geändert.
- Bei der Konsistenzprüfung der Konfiguration kam es beim gleichzeitigen und erstmaligen Import einer Hierarchiedefinition für die Parametrierung und dort referenzierten Typen zu Interferenzfehlern.
- Wenn eine Applikation unter Simulation gestartet wurde, dann wurden in den Datenverteiler-Applikationsfunktionen die Simulationsobjekte nicht richtig identifiziert, was dazu führte, dass die Simulationszeit nicht korrekt ausgewertet wurde.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.systemModellAoe und kb.tmBuVGlobal: Berechtigungskonzept für SWE Rahmenwerk im Segment BuV nach einer Vorlage der Firma Dambach ergänzt.
- kb.tmVewSimulationGlobal, kb.tmVewBetriebGlobal, kb.tmBuVGlobal: Fehlende Default-Parameterdatensätze wurden ergänzt.
- kb.tmVewSimulationGlobal: In dem Attributtyp "att.simulationsZustand" wurde der Befehl "Einzelschritt" nach einer Vorlage der Firma Dambach ergänzt.
- Übernahme der aktuellen Konfigurationsbereiche des kv.inovat vom 13.08.2008: Alle KB des kv.inovat wurden vollständig mit Default-Parametern versehen. Sofern möglich, wurden die Default-Parameter auch auf fachlich sinnvolle, allgemeingültige Werte voreingestellt.

### Update Releasenotes

Folgende Änderungen an älteren Releasenotes wurden durchgeführt:

- Zum Thema Austausch von dynamischen Objekten in dynamischen Mengen zwischen Konfigurationen wurde in den Releasenotes der Version 3.4.5 ein [Hinweis ergänzt](#update03072008)

## [Version 3.4.6]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Die Zugriffsrechte des alternativen Konstruktors im SettingsManager wurden auf `public` gesetzt. Der Konstruktor hat einen zusätzlichen Parameter für die Simulationsvariante, die für die Abfrage und Anmeldung auf dynamische Typen und dynamische Mengen benutzt werden soll. (Eine entsprechend angepasste Parametrierung muss mit dieser Variante nicht mehr für jede Simulation eine eigene Verbindung zum Datenverteiler aufbauen.)
- Neue Methode `Debug.reinstallConsoleHandler()`, mit der der Ausgabekanal für Debug-Meldungen nach einer Umleitung von `System.err` neu initialisiert werden kann.

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- In den Datenverteiler-Applikationsfunktionen wurde die Zwischenspeicherung bestimmter Konfigurationsdaten optimiert.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Beim Import von Konfigurationsbereichen konnte eine Exception auftreten, wenn in einem konfigurierenden Datensatz der Wert eines Attributs ursprünglich ein Aufzählungswert (außerhalb des definierten Wertebereichs) war und dieser durch einen erneuten Import der Versorgungsdatei in einen Zahlwert (innerhalb des Wertebereichs) geändert wurde.
- Bei Verwendung des Aufrufparameters -debugGui kam es zu einer Exception mit neueren Versionen der JVM.
- Beim Import konnte nach einer versionierten Änderung eines Konfigurationsverantwortlichen oder einer autarken Organisationseinheit die Kodierung des Konfigurationsbereichs manchmal nicht ermittelt werden, was eine IllegalStateException zur Folge hatte.
- Die Methode SystemObjectType.inheritsFrom(SystemObjectType) lieferte fälschlicherweise `false` zurück, wenn der Typ indirekt, d.h. über einen oder mehrere Zwischentypen vom angegebenen Typ abgeleitet war.
- In den Datenverteiler-Applikationsfunktionen konnten folgende Methoden falsche Ergebnisse oder Exceptions generieren, wenn sie gleichzeitig und erstmalig am selben Objekt durch mehrere Threads aufgerufen wurden: AttributeListDefinition.getAttributes, AttributeListDefinition.getAttribute, AttributeSet.getAttributes, AttributeSet.getAttribute, ConfigurationObject.getObjectSets, IntegerAttributeType.getStates, NonMutableSet.getElements, ObjectSetType.getObjectTypes.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.tmVewBetriebGlobal Version 5: Notwendige Änderungen der Attributgruppe atg.betriebsMeldungsVerwaltungRegel für die Betriebsmeldungsverwaltung, basierend auf einem Vorschlag der Firma Dambach.

## [Version 3.4.5]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Mit den Methoden MutableSet.getElements(), MutableSet.addChangeListener() kann auf die Elemente eine dynamischen Menge zugegriffen werden, die von einer fremden Konfiguration verwaltet werden, vorausgesetzt es besteht über eine entsprechend eingerichtete Datenverteiler-Kopplung eine Verbindung zwischen der lokalen und der fremden Konfiguration. Auf den Kommunikationsstatus kann mit den Methoden isConfigurationCommunicationActive() und addConfigurationCommunicationChangeListener() zugegriffen werden.\ [[Update 3.7.2008:] Damit der Austausch funktioniert müssen die KV- bzw. AOE-Objekte der beteiligten Konfigurationen gegenseitig bekannt sein.]{#update03072008}
- Bei der Konsistenzprüfung und bei der Aktivierung werden die Abhängigkeiten der zu prüfenden bzw. zu aktivierenden Versionen überprüft und es werden, wenn nicht alle Abhängigkeiten aufgelöst werden können, entsprechende Fehlermeldungen mit den fehlenden oder noch nicht in der richtigen Version vorliegenden Bereichen ausgegeben. Diese Prüfung kann bei Bedarf mit dem Aufrufargument `-ignoriereFehlerDerAbhängigkeitenBeiKonsistenzprüfung` abgeschaltet werden.

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Der Generische Test Monitor (GTM) zeigt im Fenstertitel jetzt die Parameter (Adresse und Portnummer) des verbundenen Datenverteilers
- Bei der Unterstützung der Simulation durch die Konfiguration wird eine Simulation nicht mehr berücksichtigt, wenn sie nicht mehr gültig ist oder wenn die Simulationsstrecke nicht vorhanden bzw. nicht mehr gültig ist.
- Wenn bei der Konsistenzprüfung von Konfigurationsbereichen nur Warnungen aufgetreten, dann werden diese nicht mehr unterdrückt. Interferenzfehler und lokale Fehler jetzt nach den Warnungen ausgegeben. Die Formatierung der Ausgaben der Konsistenzprüfung wurde überarbeitet.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Beim Import wurden nach einer versionierten Änderung eines Konvigurationsverantwortlichen oder einer autarken Organisationseinheit die in den zugehörigen Bereichen enthaltenen Referenzen nicht aktualisiert, was zur Folge hatte, dass die Konsistenzprüfung entsprechende Fehler ausgegeben hat.
- Im Onlineprotokollierer wurden bei der Ausgabe in XML-Dateien die XML-Sonderzeichen (< & > ' ") nicht durch die entsprechenden vordefinierten Entities (< & > ' ") ersetzt.
- Beim Export von Konfigurationsbereichen wurden XML-Sonderzeichen (< & > ' ") nicht durch die entsprechenden vordefinierten Entities (< & > ' ") ersetzt.
- Die Methoden getAttributeGroups(), getDirectAttributeGroups(), getObjectSetUses() und getDirectObjectSetUses() waren nicht multi-thread-sicher.
- Bei einer mehrfachen Empfangsanmeldung einer Applikation auf die gleichen Daten konnte ein Deadlock entstehen, wenn die zweite Anmeldung während der Verarbeitung eines empfangenen Datensatzes entstanden ist.
- Bei der Abfrage der Elemente einer dynamischen Menge mit Simulationsvariante konnte es zu einer ClassCastException kommen.
- Beim Löschen von dynamischen Objekten, wurden die in der Konfiguration zwischengespeicherten Elementlisten der Supertypen nicht aktualisiert, was dazu führte, dass anschließend gestartete Applikationen bei der Abfrage nach den Objekten eines Typs auch bereits gelöschte Objekte geliefert bekamen.
- Beim Terminieren einer Datenverteilerverbindung durch einen Kommunikationsfehler, konnte ein Deadlock entstehen.
- Bei der Unterstützung der Simulation in der Konfiguration führten Simulationsobjekte, die einen falschen Typ hatten, zu einem Fehlverhalten.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- Erweiterung der Schnittstelle für Konfigurationsanfragen um An- und Abmeldungen auf den Kommunikationszustand von dynamische Mengen und dynamische Objekten die potentiell von einer fremden Konfiguration verwaltet werden.
- Übernahme der Bereiche kb.kv.dambach, kb.tmVewEngstellenGlobal und kb.tmRechner.config des kv.dambach vom 14.04.2008\. Diese Bereiche werden von den aktuellen Konfigurationsbereichen des kv.kappich benötigt. **Zur erstmaligen Übernahme der neuen Bereiche ist es erforderlich, die folgenden Zeilen in der Verwaltungsdatei zu ergänzen und anschließend eine Aktivierung durchzuführen:**

  > `<konfigurationsbereich pid="kb.tmVewEngstellenGlobal" verzeichnis=""> </konfigurationsbereich> <konfigurationsbereich pid="kb.tmRechner" verzeichnis=""> </konfigurationsbereich>`

- Notwendige Erweiterungen für die Betriebsmeldungsverwaltung basierend auf einem Vorschlag der Firma Dambach: Erweiterung der Attributgruppen und Mengen am Typ typ.betriebsMeldungVerwaltung (atg.betriebsMeldungsVerwaltungRegel, atg.meldungsBearbeitung, atg.meldungsGruppeZuordnung, menge.meldungen). Neue Typen typ.meldung und typ.meldungsGruppe. Neue Attributgruppen für typ.meldung und typ.meldungsGruppe. Neue Attribute und Attributlisten für typ.meldung und typ.meldungsGruppe. Neue Menge für typ.betriebsMeldungsVerwaltung. **Zu beachten ist, das mit diesen Änderungen an jeder autarken Organisationseinheit eine Menge "Meldungen" ergänzt werden sollte, diese wird für den korrekten Betrieb der Betriebsmeldungsverwaltung benötigt.** Im Datenmodell ist diese Menge vorerst optional, allerdings wird sie mit einer der nächsten Aktualisierungen des Datenmodells zwingend erforderlich.

- Notwendige Erweiterungen der Simulationsverwaltung basierend auf einem Vorschlag der Firma Dambach: Neue Attributgruppe atg.simulationStartInfo am typ.simulation ergänzt. Neue Attributgruppe atg.simulationVerwaltungAnfrage am typ.simulationsVerwaltung ergänzt. Attributgruppe atg.simulationsStreckenBeschreibung um die neue Attributliste atl.startInfo erweitert.

- Notwendige Erweiterungen für die Simulationsverwaltung und Start/Stopp basierend auf einem Vorschlag der Firma Dambach: Der typ.applikation wurde um die Attributgruppen atg.simulationVerwaltungAntwort und atg.startStoppAntwort ergänzt.
- Notwendige Erweiterungen des Bereichs kb.systemModellAoe basierend auf einem Vorschlag der Firma Dambach: Neuer Basistyp typ.engstellenVerwaltung am typ.autarkeOrganisationsEinheit ergänzt.
- Die zu Testzwecken vorhandene autarke Organisationseinheit kv.testKonfiguration wurde um die neue Menge "Meldungen" erweitert und alle zugehörigen Bereiche wurden aktualisiert.
- Übernahme der aktuellen Konfigurationsbereiche des kv.inovat vom 02.05.2008.

## [Version 3.4.4]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Bei dynamischen Mengen und dynamischen Typen wurde das Interface MutableCollection ergänzt, mit dem eine Applikation auf die Elemente der dynamischen Menge bzw. des dynamischen Typs zugreifen und sich auf entsprechende Änderungen anmelden kann. Die Simulationsvariante, auf die sich diese Zugriffe beziehen, kann vorgegeben werden.
- Der in der Parametrierung eingesetzte SettingsManager wurde so erweitert, dass er zur Auflösung von WildCards bei dynamischen Mengen und dynamischen Typen die oben erwähnten neuen Möglichkeiten unter Berücksichtigung der durch die Applikation vorgegebenen Simulationsvariante benutzt.

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Der Datenverteiler beendet sich, wenn ein Thread durch einen Error (insbesondere OutOfMemoryError) beendet wird.
- In den Datenverteiler-Applikationsfunktionen wird kein zyklischer Aufruf des Garbage-Collectors mehr durchgeführt.
- Deutliche Performance-Verbesserung der Konfiguration beim Start und bei der Beantwortung der ersten Konfigurationsanfragen.
- Zur Unterstützung der Simulation wird innerhalb der Konfiguration nach einem Systemstart für vorhandene Simulationen ein Übergang in den Zustand "Stop" erzwungen. In diesem Fall meldet sich die Konfiguration auf lesende Konfigurationsanfragen der entsprechenden Simulation an.
- Beim Hinzufügen oder Entfernen von Elementen einer Menge wird jetzt schon seitens der Applikationsfunktionen geprüft, ob ein angegebenes Element eine Nullreferenz ist und dann gegebenenfalls eine entsprechende Exception generiert, mit der derartige Anwendungsfehler einfacher lokalisiert werden können.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- de.bsvrz.kex.tls.osi2osi3: Bei Verwendung des TLS OSI-2 Moduls (TC57) ohne Modems mit abgeschalteter Prüfung des DSR-Signals funktionierte der Verbindungsaufbau nicht.
- In den Datenverteiler-Appliaktionsfunktionen führte das Anlegen oder Abfragen von noch nicht gültigen Objekten, die die gleiche Pid wie ein noch gültiges Objekt hatten, zum Überschreiben der gültigen Objekte in den HashMaps. Anschließende Abfragen via Pid lieferten dann das falsche Objekt zurück.
- Die Konfiguration hat in bestimmten Fällen die Anfragen mit historischen Zeitangaben zur Ermittlung der Elemente eines Typs mit den Methoden getElements(long time), getElementsInPeriod(long startTime, long endTime) und getElementsDuringPeriod(long startTime, long endTime) falsch beantwortet.
- Beim Versuch ein dynamisches Objekt mit einer bereits für ein anderes aktives Objekt vergebenen Pid anzulegen, wurde keine Exception generiert.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- Zur Reduktion der Abhängigkeiten der Bereiche untereinander wurde der Bereich kb.ilse in zwei Bereiche unterteilt.
- Neue Schnittstelle zur Parametrierung nach Diskussion mit Herrn Peuker, BitCtrl. Es wurden die neuen Attributgruppen atg.parametrierungsAnfrage und atg.parametrierungsAntwort mit spezifischeren Einschränkungen für die Kommunikation einer Applikation mit der Parametrierung ergänzt. Geänderte Bereiche: kb.systemModellGlobal (Version 17), kb.metaModellGlobal (Version 11).
- Erweiterung der Schnittstelle für Konfigurationsanfragen um An- und Abmeldungen auf dynamische Mengen und dynamische Typen mit Simulationsvariante. Im Attributtyp att.konfigurationsAnfrageNachrichtenTypLesend wurden die neuen Telegrammtypen DynamischeKollektionAnmeldung, DynamischeKollektionElemente, DynamischeKollektionAktualisierung und DynamischeKollektionAbmeldung ergänzt. Geänderte Bereiche: kb.systemModellGlobal (Version 17), kb.metaModellGlobal (Version 11).
- Übernahme der aktuellen Konfigurationsbereiche des kv.inovat vom 25.03.2008.

## [Version 3.4.3]

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Im Datenverteiler wurde eine Performance-Optimierung durchgeführt, die bewirkt, dass die Verarbeitung von vielen An- und Abmeldungen durch Applikationen deutlich schneller abgewickelt wird.
- Der in der Parametrierung verwendete Settingsmanager wurde so erweitert, dass er Aktualisierungen asynchrone und leicht verzögert verarbeitet. Dadurch werden mehrere Aktualisierungen zusammen in einem Durchlauf verarbeitet.
- Der in der Parametrierung verwendete Settingsmanager wurde so erweitert, dass er nur noch die notwendigen dynamischen Typen auf neue oder gelöschte Objekte anmeldet.
- Die von den Datenverteiler-Applikationsfunktionen automatisch versendete Applikationsfertigmeldung wird jetzt immer mit Simulationsvariante 0 versendet.
- Die Konfiguration verwendet bei den Anmeldungen, die zur Unterstützung der Simulation dienen, jetzt fest die Simulationsvariante 0 (atg.simulationsStreckenBeschreibung:asp.parameterSoll, atg.simulationsSteuerungOnline:asp.zustand, atg.simulationsSteuerungOffline:asp.zustand, atg.simulationsStatusKonfiguration:asp.zustand)
- Die Datenverteiler-Applikationsfunktionen verwenden bei den Anmeldungen, die zur Unterstützung der Simulation dienen, jetzt fest die Simulationsvariante 0 (atg.simulationsZeit:asp.standard)

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Wenn in einer Versorgungsdatei bei einer Typdefinition eine zusätzliche Mengenverwendung angegeben wurde, dann kam es beim Import zu einer NullPointerException.
- Beim Publizieren der atg.angemeldeteApplikationen wurden vom Datenverteiler nicht alle verbundenen Applikationen in den Datensatz eingetragen.
- Bei der Anmeldung auf die atg.angemeldeteApplikationen durch eine Applikation kam es unter bestimmten Umständen zu einem Deadlock im Datenverteiler.
- In der Konfiguration kam es zu einer Exception, wenn eine Simulation die Zustandswechsel "Vorstart", "Stop" und erneut "Vorstart" durchlaufen hat.
- In der Konfiguration und den Datenverteiler-Applikationsfunktionen wurden kurzfristige initiale negative Sendesteuerungen falsch berücksichtigt. Dies konnte zum Hängen von Applikationen beim Start führen.
- Wenn sich bei der Aktivierung oder Freigabe von Konfigurationsbereichen neue oder geänderte Abhängigkeiten eines Konfigurationsbereichs zu anderen ergeben haben, wurden diese auch gespeichert, wenn sich der Bereich selbst nicht geändert hatte.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.systemModellGlobal: Erweiterung der Archivanfrageschnittstelle, Übernahme der Änderungen von Martin Hilgers, beck et al. projects GmbH: Der Nachrichtentyp für die Archivanfrage unterstützt nun auch manuelles Nachfordern (neue Nachrichtentypen mit den Nummern 17-20).

## [Version 3.4.2]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

-

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Bei überflüssigen Aufrufargumenten beim Start der Konfiguration wird jetzt eine entsprechende Fehlermeldung ausgegeben.
- Das überflüssige Interface SystemConfigurationAuthority wurde geöscht.
- Wenn in der Verwaltungsdatei der Konfiguration ein Tippfehler bzgl. Groß-/Kleinschreibung enthalten ist, wird jetzt beim Start der Konfiguration statt einer NullPointerException eine hilfreiche Fehlermeldung ausgegeben.
- Beim Versuch der Authentifizierung eines nicht in der Benutzerverwaltung der Konfiguration enthaltenen Benutzers wird jetzt eine bessere Fehlermeldung ausgegeben.
- Der in der Parametrierung eingesetzte SettingsManager ignoriert erzeugte und gelöschte dynamische Objekte vom "typ.applikation".
- Der Datengenerator benutzt zum Parsen einer XML-Datei mit zu versendenden Daten jetzt die in der Software (JAR-Datei) enthaltene DTD "protokollV3.dtd" zur XML-Validierung
- Der Datengenerator interpretiert die in einer XML-Datei mit zu versendenden Daten enthaltenen Aufrufparameter -rolle=empfaenger so wie -rolle=quelle und -rolle=senke wie -rolle=sender. Damit können Dateien, die mit dem Onlineprotokollierer mitgeschnitten wurden ohne Änderung als Input für den Datengenerator verwendet werden.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Im Datenverteiler gab es bei Verwendung der Rechteprüfung im Zusammenhang mit den um Urlasser erweiterten Parameterattributgruppen eine Exception wenn ein Parameterdatensatz mit der Zuordnung eines Benutzers zu einer Berechtigungsklasse empfangen wurde.
- Beim Aufruf der Methode ClientDavConnection.getLocalDav() kam es zu einer ClassCastException.
- Die Methode MutableSet.getElements hat bei Verteilung der Applikation und der Konfiguration auf verschiedene Systeme mit nicht synchronisierten Uhren unter Umständen historische Inhalte der jeweiligen Menge zurückgegeben.
- Beim Import wurden nach einer versionierten Änderung eines Konfigurationsverantwortlichen oder einer autarken Organisationseinheit die in den zugehörigen Bereichen enthaltenen Referenzen nicht aktualisiert was zur Folge hatte, dass die Konsistenzprüfung entsprechende Fehler ausgegeben hat.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- Anpassung der Modellbereiche kb.tmVewBetriebGlobal, kb.tmVewSimulationGlobal, kb.systemModellGlobal und kb.systemModellAoe nach entsprechenden Vorschlägen der Firma Dambach zur Unterstützung der Software-Einheiten Betriebsmeldungsverwaltung, Simulationsverwaltung und Start/Stopp. (Details in den Änderungseinträgen der einzelnen Bereiche). Durch die Änderungen entstehen neue Abhängigkeiten zu den Bereichen kb.tmVewEngstellenGlobal.config und kb.tmRechner.config die unter kv.dambach der Firma Dambach verwaltet werden. Zum korrekten Betrieb der Betriebsmeldungsverwaltung ist es zwingend erforderlich die jeweils eingesetzten Objekte vom typ.autarkeOrganisationsEinheit um eine Menge mit dem Namen "Meldungen" zu erweitern. Als Migrationshilfe wurde die Existenz dieser Menge vorerst nicht durch das Datenmodell erzwungen, allerdings ist geplant, dies nach einer Umstellungsphase von ca. 6 Monaten zu tun.
- kv.testKonfiguration wurde um die Menge "Meldungen" erweitert und alle zugehörigen Bereiche aktualisiert.

## [Version 3.4.1]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Die Definition der Syntax von Versorgungsdateien wurde in der K2S.dtd um die Möglichkeit erweitert, an Mengen ein XML-Attribut verwaltung="pid" anzugeben. Damit kann an jeder dynamischen Menge angegeben werden, welche Konfiguration für die Elementzugehörigkeit der Menge verantwortlich ist. Die Elementzugehörigkeit von diesen dynamischen Mengen wird dann von der angegebenen Konfiguration in separaten Dateien verwaltet. Dazu wird in dem Verzeichnis, in dem die Verwaltungsdatei der Konfiguration steht, ein Unterverzeichnis "mengen.kv..." gepflegt, in dem für jede Menge eine entsprechende Datei mit der Elementzugehörigkeit angelegt wird.
- Das Interface ClientDavInterface und die zugehörige Implementierung ClientDavConnection wurden um die Methode `boolean checkLoggedUserNameAndPassword(String userName, String password)` erweitert. Die neue Methode liefert `true` zurück, wenn der angegebene Benutzername und das angegebene Passwort mit den entsprechenden Werten übereinstimmen, die beim Verbindungsaufbau zum Datenverteiler benutzt wurden.

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Die Konsistenzprüfung wertet doppelt vergebene Pids jetzt als Interferenzfehler. Um das bisherige Verhalten zu erreichen, kann beim Start von der Konfiguration in den Modi in denen eine Konsistenzprüfung durchgeführt wird (Aktivierung, Konsistenzprüfung, Freigabe zur Übernahme, Freigabe zur Aktivierung ohne lokale Aktivierung) der neue Aufrufparameter -doppeltePidsZulassen angegeben werden.
- Beim Disconnect einer Applikation, die mit mit dem Aufrufparameter -lokaleSpeicherungKonfiguration=verzeichnis gestartet wurde, werden jetzt nicht nur die Konfigurationsobjekte selbst, sondern zusätzlich auch die konfigurierenden Datensätze, die von der Applikation zur Laufzeit benötigt wurden, in einer Datei im angegebenen Verzeichnis zwischengespeichert und beim nächsten Start wieder eingelesen.
- Wenn die für die Konfiguration selbst notwendigen Konfigurationsbereiche in älteren Version aktiviert sind, dann werden beim Start der Konfiguration entsprechende Warnungen ausgegeben. Wenn einzelne dieser Bereiche gar nicht aktiviert sind, dann wird eine Exception mit einer entsprechenden Fehlermeldung generiert. Für die Konfiguration selbst notwendig sind kb.systemModellGlobal, kb.metaModellGlobal und kb.fachModellGlobal.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- In der Parametrierung entstanden Laufzeitfehler, wenn Parameterdatensätze von Objekten gespeichert werden sollten, in deren Pid bestimmte Sonderzeichen wie z.B. '/' enthalten waren.
- Wenn die Verbindung zum Datenverteiler wegen unterschiedlicher Datenverteilerprotokollversionen nicht initialisiert werden konnte, dann wurde die TCP-Verbindung nicht freigegeben.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- Der Konfigurationsbereich kb.metaModellGlobal wurde mit der Version 10 um die Attributgruppe atg.dynamischeMenge am typ.dynamischeMenge ergänzt. Damit kann an jeder dynamischen Menge gespeichert werden, welche Konfiguration für die Elementzugehörigkeit der Menge verantwortlich ist.

## [Version 3.4]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Lose Kopplung von Konfigurationsbereichen: Unterstützung der Anwendungsfälle durch die SW-Einheit Konfiguration, bei denen mit nicht erfüllten Abhängigkeiten zwischen Konfigurationsbereichen unter bestimmten Bedingungen umgegangen werden kann. Dazu wurde der Umgang mit optionalen, assoziative Referenzen, die mit Hilfe der Pid des referenzierten Objekts in konfigurierenden Datensätzen gespeichert werden, überarbeitet. Wenn ein referenziertes Objekt beim Import nicht bekannt ist, dann wird die Pid des referenzierten Objekts gespeichert und bei einem späteren Export wieder ausgegeben. Das System verhält sich in diesen Fällen gegenüber Applikationen so, als ob die Referenz undefiniert wäre. Wenn zu einem späteren Zeitpunkt ein Bereich mit dem refernzierten Objekt übernommen und aktiviert wird, dann wird die Referenz ohne erneuten Import des referenzierenden Bereichs korrekt aufgelöst.
- Automatische Ergänzung von Urlasserattributen: Bei allen Parameterattributgruppen wird beim Import sichergestellt, dass eine Attributliste mit den Urlasser-Attributen enthalten ist. In jeder Attributgruppe, die als Parameterattributgruppe markiert ist, wird vom Import automatisch eine Attributliste mit dem Namen 'Urlasser' und dem Typ 'atl.urlasser' vor allen anderen Attributen ergänzt werden, falls diese noch nicht vorhanden ist.
- Fertigmeldung von Applikationen für SWE Start/Stopp: In die Datenverteiler-Applikationsfunktionen wurden Funktionen eingebaut, die dafür sorgen, dass eine Applikation auf jeden Fall eine Applikations-Fertigmeldung erzeugt und über den Datenverteiler versendet. Auf die Fertigmeldung kann die SW-Einheit Start/Stopp reagieren, um abhängige Applikationen zum richtigen Zeitpunkt zu starten. Für alle bisherigen Applikationen und zukünftigen Applikationen, die sich nicht explizit um die eine 'Fertigmeldung' für die SW-Einheit Start/Stopp kümmern, wird automatisch nach dem Verbindungsaufbau zum Datenverteiler eine Fertigmeldung erzeugt und versendet. Applikationen, die sich explizit um die Fertigmeldung kümmern möchten, müssen dies vor dem Verbindungsaufbau zum Datenverteiler durch Aufruf der Methode `ClientDavInterface.enableExplicitApplicationReadyMessage()` bekannt geben. In diesem Fall wird nach dem Verbindungsaufbau automatisch eine 'Noch-Nicht-Fertig-Meldung' versendet. Durch Aufruf der Methode `ClientDavInterface.sendApplicationReadyMessage` durch die Applikation kann dann zu einem späteren Zeitpunkt der Versand einer 'Fertigmeldung' veranlasst werden.
- Neues optionales Aufrufargument -inkarnationsName=... für alle Applikationen ergänzt. Der Aufrufparameter wird von der SW-Einheit Start/Stopp vorgegeben, um eine eindeutige Zuordnung zwischen gestartetem Prozeß und dem entsprechenden Applikationsobjekt herzustellen. Der Inkarnationsname wird im Objektnamen des Applikationsobjekts ergänzt und in der, von den Applikationsfunktionen erzeugten Applikations-Fertigmeldung, eingetragen.

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Performanceverbesserungen: Es wurden Performanceanalysen von Import und Aktivierung durchgeführt und dadurch zwei Stellen lokalisiert, bei denen gezielte Optimierungen mit deutlich spürbaren Ergebnissen durchgeführt wurden. Eine Optimierung beschleunigt den Import von Konfigurationsmengen (insbesondere nach mehreren Durchläufen). Die zweite Optimierung beschleunigt Import, Konsistenzprüfung, Aktivierung und Export beim Zugriff via Pid auf noch nicht aktivierte neue Objekte.
- Einige Debugausgaben der Konfiguration und des Imports wurden überarbeitet.
- Die Speicherung und Überprüfung der Abhängigkeiten zwischen Konfigurationsbereichen wird jetzt nur noch durchgeführt, wenn mindestens Version 9 des Konfigurationsbereichs kb.metaModellGlobal vorliegt. Diese Prüfung verhindert Probleme, die bei Verwendung der Konfiguration mit zu alten Konfigurationsbereichen auftreten können.
- Bei der Speicherung von Default-Parameterdatensätzen wird jetzt Version 3 des Serialisierers benutzt, um die Datensätze in ein Byte-Array zu verwandeln. Dadurch werden evtl. in Default-Parametersätzen vorhandene Referenzen mit Referenzierungsart Assoziation durch Speicherung der Pid realisiert. Ältere Konfigurationsbereiche, deren Default-Parameterdatensätze mit Version 2 des Serialisierers erzeugt wurden, bleiben weiterhin lesbar.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Eine geänderte Definition einer Attributgruppe wurde beim Import eines Default-Parameterdatensatzes nicht erkannt. Folge war ein Fehlschlagen der Aktivierung.
- Das Löschen eines Default-Parameterdatensatzes wurde vom Import nicht erkannt.
- Der Import eines geänderten Default-Parameterdatensatzes in dessen Attributgruppe eine Attributliste enthalten war, die sich auch geändert hatte, konnte dazu führen, dass fehlerhafte Datensätze in die Konfiguration geschrieben wurden, die in nachfolgenden Aufrufen der Konfiguration (z.B. bei einem Export) nicht mehr gelesen werden konnten und zu einer Exception führten.
- Beim Export wurde in bestimmten Fällen keine Fehlermeldung ausgegeben, wenn ein Vorgang sich mit einer Exception beendete.
- Im Datenmodell spezifizierte Defaultwerte für Attribute einer Attributgruppe wurden bei einem erneuten Import eines nicht veränderten Defaultparameters nicht berücksichtigt, sodass fälschlicherweise eine Änderung festgestellt wurde.
- In seltenen Fällen konnte beim Laden von nicht mehr gültigen Objekten ein DeadLock in der Konfiguration entstehen.
- In der Methode `ClientDavInterface.getData()` konnte es zu einer NullPointerException kommen, wenn bereits vorher eine explizite Anmeldung auf die gewünschten Daten gemacht wurde und bereits ein Ergebnis des Datenverteilers vorlag.
- Bei der Speicherung der Abhängigkeiten zwischen Konfigurationsbereichen kam es zu einer NullPointerException, wenn ein neuer Konfigurationsverantwortlicher importiert und anschließend aktiviert werden sollte.
- Bei der Speicherung der Abhängigkeiten zwischen Konfigurationsbereichen kam es zu einer ClassCastException, wenn eine Abhängigkeit durch eine Referenz auf ein dynamisches Objekt in einem anderen Konfigurationsbereich entstanden ist.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- Urlasser in Parameterattributgruppen in Bereichen des kv.kappich: In allen Parameter-Attributgruppen wurde eine Attributliste "Urlasser" vom Typ "atl.urlasser" eingefügt. Die Default-Parameterdatensätze bei Objekttypen wurden entsprechend erweitert.
- Die atl.urlasser wurde für Default-Parameterdatensätze überarbeitet: Bei dem Attribut "BenutzerReferenz" der Attributliste atl.urlasser wurde "undefiniert" zugelassen, um die Verwendung von Default-Parameterdatensätzen zu ermöglichen. Für alle Attribute der Attributliste wurden Default-Attributwerte festgelegt.
- Fertigmeldung von Applikationen für SWE Start/Stop": Neue Attributgruppe atg.applikationsFertigmeldung für die Fertigmeldung von Applikationen wurde angelegt. Die Attributgruppe enthält ein Attribut mit dem Inkarnationsname des Prozesses und ein Flag das die Bereitschaft der Applikation signalisiert.
- In den Konfigurationsbereichen des kv.kappich wurden die Abhängigkeiten zu anderen Konfigurationsbereichen gespeichert.
- Aktuelle auf der ZID veröffentlichte Versionen der Konfigurationsbereiche von inovat übernommen und aktiviert: konfiguration-kv.inovat-D2007-09-28T193706.zip

## [Version 3.3]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Speicherung und Überprüfung der Abhängigkeiten zwischen Konfigurationsbereichen

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Konfigurationsseitige Implementierung der toString Methode für Konfigurationsobjekte war nicht konform zur entsprechenden DAF-seitigen Implementierung
- Implementierung der ArchivRequestManager.requestInfo(...) Methoden lieferten keine IllegalStateException, wenn die Verbindung zum Archivsystem noch nicht hergestellt werden konnte.
- Das Anlegen von Objekten mit Namen bzw. Pids mit einer Länge von mehr als 127 Zeichen führte zu Fehlern beim Neustart der Konfiguration

### Änderungen

Folgende Änderungen zu vorhergehenden Versionen wurden durchgeführt:

- Die Packagestruktur der Kernsoftware wurde entsprechend den Vorgaben des AK-VRZ überarbeitet, sodass entsprechende Anpassungen bei allen Software-Entwicklern erforderlich werden. Die Zuordnung aller bisherigen Sourcefiles zu den neuen Packages ist in einer separaten Datei ([PDF](NeuePackageStruktur.pdf)/[XLS](NeuePackageStruktur.xls)) dokumentiert.
- Die Software wurde entsprechend den Vorgaben des AK-VRZ in einzelne Distributionspakete zerlegt, die einzeln über die ZID bereitgestellt werden. Die Zuordnung aller bisherigen Sourcefiles zu den neuen Distributionspaketen ist ebenfalls ist der oben genannten Datei ([PDF](NeuePackageStruktur.pdf)/[XLS](NeuePackageStruktur.xls)) dokumentiert. Die Distributionspakete haben folgenden Inhalt:

  - build.xml:\ Ant-Builddatei zum Erzeugen des Pakets
  - paketname-doc-api.zip:\ Java-Doc auf Public- und Protected-Ebene
  - paketname-doc-design.zip:\ Java-Doc auf Private-Ebene
  - paketname-info.xml:\ Info Datei enthält Informationen zum Distributionspaket und die Abhängigkeiten zu anderen Distributionspaketen
  - paketname-lizenz.txt:\ Lizenz des Distributionspakets
  - paketname-notes.html:\ Enthält zukünftig spezifische Releasenotes des Distributionspakets
  - paketname-src.zip:\ Quellcode des Distributionspakets
  - paketname.jar:\ Jar-Datei mit dem übersetzten Quellcode
  - paketname-runtime.jar:\ Jar-Datei, die den CLASSPATH erweitert und alle JAR-Dateien referenziert, von denen dieses Distributionspaket abhängig ist
  - lib:\ Unterordner mit evtl. notwendigen externen Bibliotheken

- Namen und Pids mit einer Länge von mehr als 255 Zeichen werden nicht mehr zugelassen.

- Die update-Methode des MutableSetChangeListener wurde so geändert, dass nicht mehr null als Parameter für addedObjects und removedObjects übergeben wird, wenn keine Objekte hinzugefügt bzw. entfernt wurden, sondern stattdessen ein leeres Array
- Verbesserte Fehlerausgabe in den Datenverteiler-Applikationsfunktionen, wenn kein Benutzer oder keine Authentifizierungsdatei angegeben wurde bzw. das Passwort des Benutzers nicht enthalten ist.

## [Version 3.2b4]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Button zum "Aktualisieren" der Auswahllisten im GTM. Der Button wird automatisch aktiviert, wenn in der Konfiguration dynamische Objekte erzeugt oder gelöscht werden.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Bei der mehrfachen Angabe des allgemeinen Aufrufparameters zur Aspektumleitung "-aspekt=..." beim Start von Applikationen wurde nur der jeweils erste Aufrufparameter interpretiert.
- Im Datenverteiler konnte es nach Terminierung einer Applikation beim Löschen des zur Applikation gehörenden dynamischen Applikationsobjekts aus der Konfiguration in bestimmten Fällen zu Blockierungen kommen.
- Die Größe des GTM-Fensters war nicht auf allen Betriebssystemplattformen korrekt.
- Die Debug-Ausgaben bei erfolgreicher "Freigabe zu Aktivierung ohne lokale Aktivierung beim Konfigurationsverantwortlichen" waren fehlerhaft.
- Prüfung der Hierarchiedefinition für die PArametrierung ignoriert jetzt die Definition der Blattknoten bei denen Mengenname und Nachfolgertyp leer bzw. null sind.Prüfung der Typ-Hierarchiedefinition für die Parametrierung auf sinnvolle Werte und Zykelfreiheit.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.metaModellGlobal Version 9: Attributgruppe atg.konfigurationsBereichAbhängigkeiten am typ.konfigurationsBereich zur Speicherung der Abhängigkeiten zu anderen Bereichen ergänzt.
- Neue Bereiche von kv.inovat übernommen und aktiviert. (konfiguration-kv.inovat-D2007-07-19T111811.zip).

## [Version 3.2b3]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Neue Methode ConfigurationArea.createDynamicObject(...) zum Erzeugen von dynamischen Objekten und gleichzeitiger Übergabe von konfigurierenden Datensätzen. Diese Methode stellt sicher, dass alle für das neu zu erstellende Objekt notwendigen konfigurierenden Datensätze beim Aufruf angegeben worden sind.
- Automatische Aktualisierung der Objektliste im GTM wenn dynamische Objekte erzeugt oder gelöscht werden.
- Prüfung der Typ-Hierarchiedefinition für die Parametrierung auf sinnvolle Werte und Zykelfreiheit.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Bei der gegenseitigen Authentifizierung gekoppelter Datenverteiler wurde in der Rückrichtung nicht immer der in der Topologie vorgegebene Benutzername verwendet.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- Erweiterung zum Erzeugen von dynamischen Objekten mit konfigurierenden Datensätzen. Es wurde ein neuer Anfragetyp für Konfigurationsanfragen ergänzt, der von der neuen Methode zum Erzeugen von dynamischen Objekten und gleichzeitigem Anlegen von konfigurierenden Datensätzen benutzt wird.

  - Konfigurationsbereich kb.metaModellGlobal, Version 7
  - Konfigurationsbereich kb.systemModellGlobal, Version 12

- Aktualisierung der Bereiche von kv.inovat (geändert, kb.tmKexTlsGlobal (V 4) und kb.tmTmcGlobal (V 4), siehe Releasenotes)

## [Version 3.2b2]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Konsistenzprüfung prüft jetzt, ob an jedem Typ für alle Parameterattributgruppen, die an diesem Typ verwendbar sind, ein Defaultparameterdatensatz angegeben ist und gibt vorerst nur entsprechende Warnungen aus, wenn die Prüfung fehlschlägt. Später, nach Änderung aller Datenmodelle wird ein Fehlschlag der Prüfung zu einem Fehler führen.
- Konsistenzprüfung prüft jetzt, ob die Namen und Werte von Aufzählungszuständen eines Ganzzahlattributtyps eindeutig sind und gibt vorerst nur entsprechende Warnungen aus, wenn die Prüfung fehlschlägt. Später, nach Änderung aller betroffenen Datenmodelle wird ein Fehlschlag der Prüfung zu einem Fehler führen.
- Neue Schnittstelle ExtendedProtocollerInterface, die das `ClientProtocollerInterface` erweitert. Sie wird vom XmlProtocoller implementiert und kann benutzt werden, um Protokolle von empfangenen Telegrammen zu erzeugen und dabei die im erstellten Protokoll zu verwendenden Zeitstempel zu beeinflussen.
- Settingsmanager ignoriert jetzt die Attributgruppen mit Zustandsinformationen des Datenverteilers.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Nur Version 3.2b1: Beim wiederholten Import von Versorgungsdateien kam es beim Einlesen von Default-Parameterdatensätzen an Typen ohne explizite Angabe des Typs zu einer Exception.
- Nur Version 3.2b1: Beim Export von Versorgungsdateien wurde bei der Ausgabe eines Defaultparameterdatensatzes Typ und Attributgruppe vertauscht.
- Die Änderung des Namens einer Attributgruppe wurde vom Import ignoriert, wenn nicht gleichzeitig andere Eigenschaften der Attributgruppe geändert wurden.
- Blockierung im Datenverteiler, wenn während der Messung der Telegrammlaufzeiten beim Publizieren der Statusinformationen die in Messung befindliche Applikation terminiert wurde.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- Versorgung der Defaultparameterdatensätze für alle Parameterattributgruppen an allen Typdefinitionen der Bereiche des kv.kappich:

  - Konfigurationsbereich kb.tmVewSimulationGlobal, Version 4 (keine neue Versionsnummer, weil nur unversionierte Änderungen durchgeführt wurden)
  - Konfigurationsbereich kb.tmBuVGlobal, Version 3 (keine neue Versionsnummer, weil nur unversionierte Änderungen durchgeführt wurden)
  - Konfigurationsbereich kb.ilse, Version 3 (keine neue Versionsnummer, weil nur unversionierte Änderungen durchgeführt wurden)
  - Konfigurationsbereich kb.systemModellGlobal, Version 11
  - Konfigurationsbereich kb.tmIlseTls, Version 3 (keine neue Versionsnummer, weil nur unversionierte Änderungen durchgeführt wurden)

## [Version 3.2b1]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Beim Import und Export von Versorgungsdateien werden jetzt Default-Parameterdatensätze an Typen und Konfigurationsobjekten unterstützt. Dazu kann unterhalb der XML-Elemente `typDefinition` und `konfigurationsObjekt` das neue XML-Element `defaultParameter` mit den XML-Attributen `attributgruppe` und `typ` benutzt werden, dass die gleiche Struktur wie das XML-Element `datensatz` zur Definition von normalen konfigurierenden Datensätzen aufweist.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Es kam zu einer Nullpointerexception, wenn eine Empfangsanmeldung doppelt, d.h. mit gleicher Datenidentifikation und dem selben ClientReceiverInterface durchgeführt wurde.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- Datenmodellaktualisierungen des kv.inovat vom 14.6.2007 wurden übernommen und aktiviert.
- kb.systemModellAoe Version 2: typ.applikationGanglinienPrognose wurde am typ.autarkeOrganisationsEinheit ergänzt
- kb.systemModellGlobal Version 10: - atg.prognoseGanglinienAntwort und atg.ereignisKalenderAntwort wurden am typ.applikation ergänzt

## [Version 3.1.1]

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Wenn in der Callback-Methode einer Applikation zur Entgegennahme von Online-Daten eine Konfigurationsanfrage gestellt wurde, konnte es in einigen Fällen zu einer Blockierung der Applikation kommen.
- Wenn in der Callback-Methode einer Applikation, die über Änderungen an dynamischen Objekten eines Typs oder Änderungen von dynamischen Mengen informiert, An- oder Abmeldungen auf Änderungen am gleichen Typ bzw. der gleichen Menge durchgeführt wurden, konnte es zu einer ConcurrentModificationException kommen.
- Fehler beim Übersetzen der Klasse TreeNodeObject durch ein überflüssiges Import-Statement.

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Die in der Kernsoftware enthaltene Prototyp-Implementierung der Parametrierung registriert jetzt mit einem erweiterten SettingsManager, wenn dynamische Mengen verändert werden und überprüft und aktualisiert daraufhin die Anmeldungen. Außerdem werden neue und gelöschte dynamische Objekte auch dann registriert, wenn keine Objekte angegeben wurden (Wildcard für alle Objekte).

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.tmVewSimulationGlobal Version 4: Die Attribute der Attributgruppe atg.simulationsStreckenBeschreibung wurden nach Vorlage von BitCtrl so angepasst, dass die für die Parametrierung relevanten Attribute mit denen der Attributgruppe atg.parametrierung übereinstimmen.

### Whitebox-Tests zur Kernsoftware

Diese Version wurde mit automatisierten Whitebox-Tests erfolgreich geprüft. Die Whitebox-Test wurden dem Auftraggeber "Landesbetrieb Straßenbau NRW" übergeben und befinden sich zur Zeit im Abnahmetest.

## [Version 3.1]

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Neuer Aufrufparameter für Applikationen zur Einstellung der Puffergrößen der Datenverteiler-Applikationsfunktionen. Mit diesem Aufrufargument müssen drei durch Doppelpunkt getrennte Zahlen angegeben werden: `-puffer=sendepuffer:empfangspuffer:auslieferungspuffer` Alle Angaben sind als Anzahl von Bytes zu verstehen. `sendepuffer` und `empfangspuffer` spezifizieren die Größe der Puffer, die bei der Datenverteilerkommunikation zur Zwischenspeicherung von zu sendenden bzw. empfangenen Telegrammen verwendet werden. `auslieferungspuffer` spezifiziert die Größe des Auslieferungspuffers, der zur Zwischenspeicherung von an die Applikation auszuliefernden Datensätzen verwendet wird.
- Der Datenverteiler stellt jetzt interne Statusinformationen (verbundene Applikationen, angemeldete Daten etc.) über entsprechende Datensätze zu Debug-Zwecken zur Verfügung.
- Die in der Kernsoftware enthaltene Prototyp-Implementierung der Parametrierung registriert jetzt mit einem erweiterten SettingsManager, wenn neue dynamische Objekte angelegt und gelöscht werden und überprüft und aktualisiert daraufhin die Anmeldungen.

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- In bestimmten Fällen konnte es in der Tabellendarstellung des GTM zu Darstellungsfehlern kommen.
- Die DataModel.getObject Methoden hatte ein Synchronisationsproblem, das in seltenen Fällen dazu führen konnte, dass applikationsseitig mehrere Java-Objekte für das selbe SystemObjekt erzeugt wurden.
- Die gegenseitige Authentifizierung zwischen zwei gekoppelten Datenverteilern nutzte nicht die Benutzernamen, die in der versorgten Datenverteiler-Topologie vorgegebenen sind.
- Die optionale applikationsseitige Zwischenspeicherung von Konfigurationsdaten (z.B. für abgesetzte Bedienstationen) war noch nicht passend zur neuen Konfiguration umgestellt worden.
- Bei der Weitergabe der Sendesteuerung an die Applikation mit Hilfe der Methode ClientSenderInterface.dataRequest() wurde die bei der Anmeldung angegebene Simulationsvariante nicht berücksichtigt.
- Bei der Weitergabe der Sendesteuerung an die Applikation mit Hilfe der Methode ClientSenderInterface.dataRequest() konnte es zu einem Deadlock kommen, wenn aus der Callback-Funktion ein synchroner Aufruf wie beispeilsweise eine Konfigurationsanfrage gestellt wurde.
- In der Kommunikation zwischen Datenverteiler und Applikation gab es Synchronisationsprobleme, die beim Beenden oder beim Abbruch von Applikation zu Verklemmungen, sporadischen EOFExceptions und falschen Fehlermeldungen führen konnten.
- Wenn beim Start eines Datenverteilers mit Remote-Konfiguration eine falsche Datenverteiler-Id angegeben wurde, dann wurde keine brauchbare Fehlermeldung (Liste von gültigen Datenverteiler-Ids) ausgegeben.
- Wenn in einer Archivanfrage ein Objekt der Datenidentifikation null war, wurde keine IllegalArgumentException geworfen.
- Bei der Benachrichtigung eines angemeldeten Listeners für Änderungen an dynamischen Objekten konnte es zu Synchronisationsproblemen kommen.
- Die Flußkontrolle beim Empfang von Datensätzen funktionierte seitens der Datenverteiler-Applikationsfunktionen nicht wie gewünscht. Das konnte bei Überlastung einer Applikation zu einem OutOfMemoryError der betroffenen Applikation führen.
- Auf Windows-Systemen kam es beim Start der Konfiguration mit großen Konfigurationsbereichen unter Umständen zu einer Fehlermeldung der JVM, die besagte, dass nicht genügen Speicher verfügbar war.
- Beim Einsatz einer Firewall mit Proxy-Funktion für Verbindungen zwischen Datenverteilern, wurde durch den Proxy bedingte Verbindungsabbrüche während des Verbindungsaufbau erst nach einem sehr langen Timeout registriert.
- Wurde die Auswahl (ATG und Objekt) im ParameterEditor geändert, so wurden nicht die DataDescriptions zum Empfangen und Senden aktualisiert.
- Die Methoden DataModel.createConfigurationObject() und DataModel.createDynamicObject() der Datenverteiler-Appliaktionsfunktionen erzeugten keine ConfigurationChangeException, wenn das entsprechende Objekt konfigurationsseitig nicht erzeugt werden konnte.
- Beim Zugriff auf gelöschte dynamische Objekte, die kurz vor dem Löschvorgang erzeugt oder verändert wurden, konnte es einige Minten nach dem Löschvorgang in bestimmten Situationen zu Fehlermeldungen kommen.
- In einer seltenen Situation konnte in der Konfiguration wegen eines Synchronisationsfehlers ein Deadlock entstehen.
- Der Import von Versorgungsdateien hat Namensänderungen von Konfigurationsobjekten und Änderungen an Referenzen in Attributlisten und -arrays nicht korrekt erkannt.
- Bei der Kopplung von Datenverteilern an denen bereits sehr viele Objekte angemeldet waren, wurden einzelne Datensätze nicht zwischen den Datenverteilern ausgetauscht.
- Datenverteiler-Applikationsfunktionen: Durch ein Laufzeitproblem konnte in seltenen Fällen auf bestimmten Systemen der erste empfangene Datensatz nach einer Empfangsanmeldung verloren gehen.

### Datenmodelländerungen

Folgende Änderungen an Konfigurationsbereichen wurden durchgeführt:

- kb.metaModellGlobal: Das Datenmodell wurde so erweitert, dass an beliebigen Konfigurationsobjekten ein Datensatz der Attributgruppe atg.defaultParameterdatensätze gespeichert werden kann, der Default-Parameterdatensätze enthält, die für die Parametrierung als Rückfallebene dienen, falls nicht anderweitig ein Parameterdatensatz für ein bestimmtes Objekt vorgegeben wurde.
- kb.systemModellGlobal: Der Typ typ.applikation wurde um die Attributgruppe atg.parametrierungSchnittstelle erweitert, damit Anfragen einer Applikation an die Parametrierung beantwortet werden können. Außerdem wurde Anfrageschnittstelle für die Parametrierung im Attributtyp att.parametrierungsAnfrageTyp um vier weitere Anfragen erweitert.
- kb.systemModellGlobal: Am typ.datenverteiler wurde die Attributgruppe atg.angemeldeteApplikationen ergänzt. Der Typ typ.applikation wurde um die Attributgruppe atg.angemeldeteDatenidentifikationen erweitert.
- kb.systemModellGlobal und kb.objekteTestSystem: Im SystemModell wurden in der Attributgruppe mit Eigenschaften von Datenverteilerverbindungen die Attributtypen für "benutzer1" und "benutzer2" von att.benutzerReferenz auf att.text geändert. Die Werte werden jetzt vom Datenverteiler als Benutzernamen interpretiert. Bei der Versorgung einer Topologie muss jetzt statt der Pid eines Benutzers der Name des Benutzers eingetragen werden. Dies wurde im kb.objekteTestSystem entsprechend angepasst.

### Whitebox-Tests zur Kernsoftware 3.1

Diese Version wurde mit automatisierten Whitebox-Tests erfolgreich geprüft. Die Whitebox-Test wurden dem Auftraggeber "Landesbetrieb Straßenbau NRW" übergeben und befinden sich zur Zeit im Abnahmetest.

## [Version 3.0]

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Die im Datenverteiler integrierte Durchsatzprüfung, die blockierte Applikationen terminieren soll, funktionierte in speziellen Situationen nicht zuverlässig.
- Die Methode isOfType für Systemobjekte lieferte bei ungültig gewordenen Typen fehlerhafte Ergebnisse.
- Der Erfolg der Methode invalidate für dynamische Objekte war manchmal nicht sofort durch die Methode isValid überprüfbar.
- Beim Ungültigsetzen von dynamischen Objekten mit der Methode invalidate() und anschließendem Aufruf von isValid() bzw. getNotValidSince() wurden nicht immer sofort die aktualisierten Werte zurückgeliefert.
- Die Angabe einer Verwaltungsdatei ohne Angabe eines Verzeichnisses beim Start der Konfiguration führte zu einem Fehler.

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Die Performance der Kommunikation über den Datenverteiler wurde deutlich verbessert.
- Die Prüfungen in der Konsistenzprüfung der Konfiguration wurden erweitert (Prüfungen auf doppelte PIDs, doppelte IDs, mehrfach Referenzierte Komponenten, etc.).
- Neue Funktion der Konfiguration um Änderungen in Konfigurationsbereichen zur Übernahme und Aktivierung freizugeben, ohne dass diese lokal beim Konfigurationsverantwortlichen aktiviert worden sind. Die Funktion kann über das Aufrufargument `-freigabeZurAktivierungOhneLokaleAktivierungDurchDenKV=bereiche` gestartet werden, `bereiche` ist dabei eine mit Komma getrennte Liste mit den Bereichen, die zur Übernahme und Aktivierung freigegeben werden sollen. Es wird eine Konsistenzprüfung durchgeführt, die die angegebenen Bereiche in der jeweils neusten Version und alle nicht angegebenen Bereiche in der zur Aktivierung freigegebenen Version betrachtet. Dabei dürfen keine lokalen Fehler auftreten.
- Die Fehlerausgaben in der Konfiguration für den Fall, dass der Datenverteiler sich mit einer falschen oder ungültigen Objekt-Id anmeldet (Aufrufparameter `-datenverteilerId=id`) wurde erweitert; eine Liste der Versorgten Datenverteiler mit den entsprechenden IDs wird ausgegeben.

### Bekannte Probleme

Folgende Probleme werden in einem anschließenden Release behoben:

- Die Flußkontrolle beim Empfang von Datensätzen funktioniert seitens der Datenverteiler-Applikationsfunktionen nicht wie gewünscht. Das kann bei Überlastung einer Applikation zu einem OutOfMemoryError der betroffenen Applikation führen
- Der Datenverteiler stellt interne Statusinformationen (verbundene Applikationen, angemeldete Daten etc.) nicht Online zur Verfügung.
- Die gegenseitige Authentifizierung zwischen zwei gekoppelten Datenverteilern nutzt nicht die Benutzer, die in der versorgten Datenverteiler-Topologie vorgegebenen sind.
- Die optionale applikationsseitige Zwischenspeicherung von Konfigurationsdaten (z.B. für abgesetzte Bedienstationen) ist noch nicht passend zur neuen Konfiguration umgestellt worden.

## [Version 3.0b9]

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Wenn im GTM eine Onlinetabelle mit Darstellung "Nur aktuellste Daten anzeigen" geöffnet wurde, dann wurden bei der Aktualisierung von bereits vorhandenen Datensätzen bestimmte interne Datenstrukturen nicht freigegeben, was nach einiger Zeit einen OutOfMemoryError zur Folge hatte.
- Beim wiederholten Import von Änderungen der Position von Attributen einer Attributgruppendefinition ohne zwischenzeitliche Aktivierung kam es fehlerhaften Positionsangaben der Attribute (die von der Konsistenzprüfung beim Versuch der Aktivierung erkannt wurden).
- Wenn beim Start des GTM der Logindialog verwendet wurde und dort bei der Datenverteileradresse oder bei der Portnummer oder beim Benutzer eine vom Defaultwert abweichende Einstellung gemacht wurde, dann wurden diese beim Start von Onlineprotokollierer und Datengenerator etc. nicht über entsprechende Aufrufparameter an die Applikationen weitergegeben.
- Die Einschränkungen von Attributgruppenverwendungen bzgl. des Online-Modus wurden von den Datenverteiler-Applikationsfunktionen bei den Anmeldungen zum Empfang und Versand nicht geprüft.
- Im GTM gab es keine Möglichkeit, um auf konfigurierende Datensätze mit einem von "asp.eigenschaften" abweichenden Aspekt zuzugreifen.
- Im GTM wurden Fehleingaben bezüglich des Zeitbereichs (von < bis) beim Aufruf des Systemprotokollierers nicht verhindert.
- Im GTM wurden die Attributgruppenverwendungen nicht ausgewertet um die Buttons der GTM-Module entsprechend ihren Möglichkeiten zu deaktivieren.
- Beim Start des Systemprotokollierers wurde fälchlicherweise bestimmte Aufrufargumente des GTM weitergegeben, was dann entsprechende Fehlermeldungen im Systemprotokollierer zur Folge hatte.
- Der automatische Eintrag der Versionsnummer bei Änderungsvermerken in Versorgungsdateien mit 

  <konfigurationsaenderung ...=""> war eins zu groß, wenn sich durch den Import keine neue Version des betroffenen Bereichs ergeben haben.</konfigurationsaenderung>

- Bei der Konsistenzprüfung und Aktivierung von Konfigurationsbereichen wurden bereits aktivierte vorher aktivierte Objekte in bestimmten Situationen nicht erneut auf Interferenzfehler geprüft.
- Beim Export von Versorgungsdateien von noch nicht aktivierten Versionen wurden zur Auflösung von Referenzen der Referenzierungsart Assoziation nicht auf den neusten Stand der entsprechenden Konfigurationsbereiche zugegriffen, was zu Fehlern bei der Deserialisierung der Datensätze führen konnte.
- Nach dem Aufruf der Methode SystemObjekt.invalidate() für ein bereits ungültiges Konfigurationsobjekt konnte es in bestimmten Situationen vorkommen, dass die betroffene Konfigurationsdatei nicht mehr lesbar war.
- Die Methoden ConfigurationArea.getNewObjects(), ConfigurationObject.addSet(), ConfigurationObject.removeSet() und die verschiedenen Varianten des historischen Zugriffs auf Elemente eines Typs bzw. einer Menge waren seitens der Datenverteiler-Applikationsfunktionen nicht implementiert.
- Die Methode ConfigurationObject.isValid seitens der Datenverteiler-Applikationsfunktionen lieferte in bestimmten Fällen falsche Ergebnisse.
- Der Import von Versorgungsdateien erkannte in bestimmten Fällen fälschlicherweise Unterschiede in konfigurierenden Datensätzen.
- Der Wechsel des Konfigurationsverantwortlichen eines Bereichs wurde beim Aktivieren erst dann berücksichtigt, wenn sich weitere Änderungen am Bereich ergeben haben, die zu einem Versionswechsel führen würden.
- Beim Wechsel des Konfigurationsverantwortlichen eines Bereichs wurde in bestimmten Situation fälschlicherweise zweimal versucht die Konfigurationsdatei zu reorganisieren, was eine Fehlermeldung und den Abbruch der Applikation zur Folge hatte.
- Das Entfernen von bereits auf ungültig gesetzten dynamischen Objekten aus einer dynamischen Menge hatte keinen Effekt.
- Beim Anlegen von neuen Objekten und beim Aufruf der Methode SystemObject.setName() wurde als Wert für den Namen des Objekts der Wert null anstelle des Leerstrings (für Objekte ohne Namen) nicht toleriert.
- Zeilenumbrüche in Versorgungsdateien innerhalb der XML-Tags "kurzinfo" und "beschreibung" wurden beim Import und nachfolgendem Export unter bestimmten Umständen gelöscht.
- Es kam zu einer Exception bei wiederholtem Import ohne zwischenzeitliche Aktivierung eines geänderten dynamischen Typs.
- Beim Wechsel der Vererbung eines Typs von typ.konfigurationsObjekt zu typ.dynamischesObjekt oder umgekehrt wurden die Menge mit den Supertypen des Typs nicht korrekt aktualisiert.
- Applikationsseitige Anmeldungen auf Änderungen der Konfiguration bzgl. dynamischen Objekten (Neue Objekte, gelöschte Objekte und Namensänderungen) waren nicht möglich. Außerdem war der von der Methode getNotValidSince zurückgegebene Zeitpunkt an dem ein Objekt ungültig wurde, war nicht korrekt.
- Bei den Methoden für Sende- und Empfangsanmeldungen in den Datenverteiler-Applikationsfunktionen wurden nicht sinnvollen Kombinationen von Quelle, Empfänger, Senke und Sender nicht immer mit einer entsprechenden Exception quittiert.
- Im Datenverteiler kam es zu einer ClassCastException bei Konfiguration des Rechtemanagements im Datenverteiler

### Neue Features

Folgende Erweiterungen gegenüber vorhergehenden Versionen wurden durchgeführt:

- Wenn nach dem Import einer Versorgungsdatei ein erneuter Import mit der ursprünglichen Versorgungsdatei durchgeführt wird, um die Änderungen des ersten Imports wieder rückgängig zu machen, dann werden die Original-Objekte jetzt wiederhergestellt. Vorher wurden in dieser Situation neue Objekte angelegt, die den gleichen Inhalt wie die alten Objekte hatten.
- Die Attributgruppenverwendungen von Parameter-Attributgruppen werden beim Import automatisch um des Aspekt asp.parameterDefault mit Konfigurationsmodus ergänzt.
- Die Reihenfolge, mit der Aspekte innerhalb von Attributgruppen in Versorgungsdateien vom Export ausgegeben wurden, war nicht deterministisch und konnte sich von Export zu Export ändern. Dies hat einen Vergleich von zwei Versorgungsdateien erschwert. (Ausgabe ist jetzt sortiert nach der PID der Aspekte.)
- Die Reihenfolge, mit der Attributgruppen und Mengen innerhalb von Typdefinitionen in Versorgungsdateien vom Export ausgegeben wurden, war nicht deterministisch und konnte sich von Export zu Export ändern. Dies hat einen Vergleich von zwei Versorgungsdateien erschwert. (Ausgabe ist jetzt sortiert nach der PID der Attributgruppen bzw. Mengentypen.)
- Methoden zum Duplizieren und Löschen von Konfigurationsobjekten einschließlich aller via Referenzierungsart Komposition verbundenen Objekte wurden ergänzt.
- Die Prüfung der Einschränkungen von Attributgruppenverwendungen bzgl. des Online-Modus in den Datenverteiler-Applikationsfunktionen bei den Anmeldemethoden zum Empfang und Versand können für Testzwecke mit dem Aufrufargument `-anmeldungFuerTestzwecke=ja` abgeschaltet werden.

### Geänderte Konfigurationsbereiche

Folgende Konfigurationsbereiche wurden aktualisiert:

- kb.systemModellGlobal wurde in drei Bereiche zerlegt, um Abhängigkeiten der Bereiche untereinander zu minimieren
- kb.systemModellGlobal wurde um weitere Typen für neue Konfigurationsanfragen erweitert.
- kb.fachModellGlobal wurde um den Aspekt asp.parameterDefault für konfigurierende Default-Parameterdatensätze ergänzt
- kb.tmIlseTls: Abhängigkeit von kb.tmKExLMStGlobal durch Ersetzung des bereichsfremden Aspekts asp.empfangen beseitigt.
- alle Bereiche: Aktualisierung durch inovat, siehe separates Dokument "Datenkatalog DaV-Release Notes.pdf" auf der ZID.

### Bekannte Probleme

Folgende Probleme werden in einem anschließenden Release behoben:

- Die Flußkontrolle beim Empfang von Datensätzen funktioniert seitens der Datenverteiler-Applikationsfunktionen nicht wie gewünscht. Das kann bei Überlastung einer Applikation zu einem OutOfMemoryError der betroffenen Applikation führen
- Die im Datenverteiler integrierte Durchsatzprüfung, die blockierte Applikationen terminieren soll, funktioniert in speziellen Situationen nicht zuverlässig.
- Der Datenverteiler stellt interne Statusinformationen (verbundene Applikationen, angemeldete Daten etc.) nicht Online zur Verfügung.
- Die gegenseitige Authentifizierung zwischen zwei gekoppelten Datenverteilern nutzt nicht die Benutzer, die in der versorgten Datenverteiler-Topologie vorgegebenen sind.
- Die optionale applikationsseitige Zwischenspeicherung von Konfigurationsdaten (z.B. für abgesetzte Bedienstationen) ist noch nicht passend zur neuen Konfiguration umgestellt worden.

## [Version 3.0.b6]

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- Die von der Konfiguration angelegten Lock-Dateien die einen mehrfachen Zugriff auf die Konfigurationsdateien etc. verhindern wurden in bestimmten Fehlerfällen nicht freigegeben.
- Die Vorgaben im Datenmodell zur Größe von Arrays wurden beim Setzen der Größe eines Arrays in einem Datensatz mit der Methode setLength() nicht geprüft.
- Das Wiederbeleben von bereits als ungültig vorgemerkten Objekten mit der Methode revalidate in den Datenverteiler-Applikationsfunktionen wurde von der Konfiguration mit einer Fehlermeldung quittiert.
- Die Implementierung von einzelnen Methoden zum applikationsseitigen Zugriff auf bestimmte Konfigurationsdaten fehlte.
- Die Änderung von Namen von Objekten über die DatenverteilerApplikationsfunktionen führte zu einem Fehlverhalten der Konfiguration.
- Es wurde keine Fehlermeldung generiert, wenn innerhalb einer Applikation zu einem Empfänger gleichzeitig eine Senke angemeldet wurde.
- Bei der Unterstützung der Simulation in der Konfiguration fehlte die Möglichkeit bei einer Simulationsstrecke die zu berücksichtigenden dynamischen Mengen und Typen für dynamische Objekte anzugeben.
- Attribute deren Attributtyp als relativer Zeitstempel definiert war konnten nicht negativ sein.
- Beim Import haben die aus den MengenDefinitionen mit dem Attribut aenderbar=ja hervorgehenden Mengentypen eine falsche Zuordnung in der Vererbungshierarchie erhalten.
- Die Ausgabe der Data.toString Methode war nicht richtig formatiert und es fehlten die Attributnamen.
- Es konnten Datensätze einer Attributgruppe, die nicht zur DataDescription passte über den Datenverteiler versendet werden.
- Bei der Konsistenzprüfung und Aktivierung von Konfigurationsbereichen wurde nicht die neuste Version betrachtet, wenn sich nur in Mengen mit Referenzierungsart Assoziation Änderungen ergeben haben.
- Die Methode setConfigurationData in den Datenverteiler-Applikationsfunktionen zum Schreiben von konfigurierenden Datensätzen funktionierte in bestimmten Situationen nicht.
- Wenn zweimal hintereinander ein Bereich importiert wurde, in dem ein neuer Konfigurationsverantwortliche definiert wird, der gleichzeitig der Konfigurationsverantwortliche der Konfiguration ist, dann kam es zu einer IllegalArgumentException.
- Die Konsistenzprüfung meldete in bestimmten Situationen fälschlicherweise ein Problem mit nicht erlaubten Attributgruppenverwendungen.
- Berücksichtigung von bestimmten Objekten und dynamischen Mengen im zeitlichen Kontext der Simulation funktionierte nicht.
- Beim Anlegen von neuen Objekten wurde als Wert für die PID des neuen Objekts der Wert null anstelle des Leerstrings (für Objekte ohne PID) nicht toleriert
- Die Angabe der benötigten Bits eines Ganzzahl Attributtyps in einer Versorgungsdatei wurde nicht auf erlaubten Werte geprüft.
- Der Import von Versorgungsdateien hat sich bei bestimmten Fehlern in den zu importierenden Versorgungsdateien nicht beendet.
- Bei Verwendung der Methode SystemObject.setConfigurationData seitens der Applikation wurde der lokale Zwischenspeicher nicht aktualisiert.
- In konfigurierenden Datensätzen wurden Null-Referenzen bei der Verwendung der Referenzierungsart Assoziation nicht unterstützt.
- Die Fehlerausgaben beim Setzen von Zeitstempelattributen mit fehlerhaften Texten, waren nicht hilfreich.
- Die für verschiedene Hersteller vordefinierten Konfigurationsverantwortlichen hatten als Typ typ.autarkeOrganisationsEinheit und nicht typ.konfigurationsVerantwortlicher.
- Die DataModel.getObjects-Methode hat bei Angabe einer Wildcard für die Typen nicht die gewünschten Objekte zurückgegeben.
- Bei ObjektTypen haben die getElements-Methoden mit Zeitangaben nur Objekte im gleichen Konfigurationsbereich zurückgeliefert.
- Bei der Konsistenzprüfung konnten alte konfigurierende Datensätze fälschlicherweise zu Interferenzfehlern führen.
- In der Methode ClientDavConnection.subscribeSource wurde die Sendeanmeldung nicht wieder zurückgenommen, falls das Schreiben des initialen Datensatzes nicht funktionierte und ein Exception hervorrief.
- Das Systemmodell im Bereich kb.systemModellGlobal war nicht passend zur Implementierung einer speziellen Konfigurationsabfrage aktualisiert worden.

### Bekannte Probleme

Folgende Probleme werden in einem anschließenden Release behoben:

- Die Flußkontrolle beim Empfang von Datensätzen funktioniert seitens der Datenverteiler-Applikationsfunktionen nicht wie gewünscht. Das kann bei Überlastung einer Applikation zu einem OutOfMemoryError der betroffenen Applikation führen
- Die im Datenverteiler integrierte Durchsatzprüfung, die blockierte Applikationen terminieren soll, funktioniert in speziellen Situationen nicht zuverlässig.
- Applikationsseitige Anmeldungen auf Änderungen der Konfiguration bzgl. dynamischen Objekten (Neue Objekte, gelöschte Objekte und Namensänderungen) sind nicht möglich. Der von der Methode getNotValidSince zurückgegebene Zeitpunkt an dem ein Objekt ungültig wurde, ist nicht korrekt.
- Methoden zum Duplizieren und Löschen von Konfigurationsobjekten einschließlich aller via Referenzierungsart Komposition verbundenen Objekte fehlen in der Konfiguration.
- Der Datenverteiler stellt interne Statusinformationen (verbundene Applikationen, angemeldete Daten etc.) nicht Online zur Verfügung.
- Konfigurierende Datensätze mit einem von "asp.eigenschaften" abweichenden Aspekt können im GTM nicht dargestellt werden.
- Die Einschränkungen von Attributgruppenverwendungen bzgl. des Online-Modus werden von den Datenverteiler-Appliaktionsfunktionen nicht geprüft.
- Die gegenseitige Authentifizierung zwischen zwei gekoppelten Datenverteilern nutzt nicht die Benutzer, die in der versorgten Datenverteiler-Topologie vorgegebenen sind.
- Die optionale applikationsseitige Zwischenspeicherung von Konfigurationsdaten (z.B. für abgesetzte Bedienstationen) ist noch nicht passend zur neuen Konfiguration umgestellt worden.

## [Version 3.0.b5]

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- NullpointerException beim Import im Zusammenhang mit Bereichen, die von anderen übernommen wurde und nicht in der Version 1 Aktiviert wurden.

## [Version 3.0.b4]

### Bugfixes

Folgende Probleme vorhergehender Versionen wurden behoben:

- NullpointerException bei wiederholtem Import, wenn ein konfigurierender Datensatz eine noch nicht aktivierte Attributgruppe verwendet hat und der Datensatz geändert und erneut importiert wurde.
- Bei der Konsistenzprüfung wurde die falsche Version eines Bereichs betrachtet, wenn dieser noch nie aktiviert wurde.
- Bei der Konsistenzprüfung haben die Prüfungen zur Gültigkeit von referenzierten Objekten nicht in allen Fällen funktioniert.
- Bei der Konsistenzprüfung ohne Aktivierung wurde nicht die zur Übernahme freigegebene Version sondern die zur Aktivierung freigegebene Version für übernommene Bereiche betrachtet.
- Import von Versorgungsdateien: Widersprüchliche Angaben bei Ganzzahlattributtypen bezüglich der angegebenen Anzahl von Bits und den benötigten Bits führten nicht zu einer entsprechenden Fehlermeldung.
- Konsistenzprüfung: Fehlerhafte Angaben in nicht benutzten Defaultwerten von Attributtypen führten nicht zu einer entsprechenden Fehlermeldung
- Lock-Dateien wurden beim Beenden des Offline-Konfigurationsbrowser nicht gelöscht.
- Konfigurationsverantwortliche der Bereiche wurden neu definiert und zugeordnet.

### Neue Features

- Export von allen der Konfiguration bekannten Konfigurationsbereichen ist jetzt mit dem Aufrufparameter\ `-export=`\ ohne explizite Angabe der Bereiche möglich.

## [Version 3.0.b3]

### Neue Features

- Locking-Mechanismus zum Schutz der Konfigurations- und Verwaltungsdateien vor mehrfachem Zugriff durch verschiedene Instanzen der Konfiguration.
- Unterstützung der Simulation.

### Bugfixes

Folgende Probleme vorhergehender Version wurden behoben:

- Die von einem Konfigurationsverantwortlichen zuletzt vergebene laufende Nummer für die Vergabe von Objekt-IDs wurde nicht unabhängig von den einzelnen Konfigurationsbereichen dieses Konfigurationsbereichen gespeichert. Als weitere Vorsichtsmaßnahme um eindeutige Pids auch bei manueller Modifikation der Verwaltungsdatei sicherzustellen wird diese Nummer jetzt am Konfigurationsverantwortlichen selbst in einem konfigurierenden Datensatz gespeichert, sofern entsprechende Zugriffsrechte bestehen.
- Bei Referenzen mit Referenzierungsart Assoziation werden in der Konfigurationsdateien jetzt die Pids der Referenzierten Objekte gespeichert.
- Der Konfigurationsverantwortliche eines Bereichs kann jetzt gewechselt werden.
- Die Definition eines neuen Konfigurationsverantwortliche kann jetzt durch einen einfachen Import in einem einzelnen neuen Bereich durchgeführt werden.
- Der Defaultbereich eines Konfigurationsverantwortlichen ist jetzt als Text modelliert, um das erzeugen eines neuen Konfigurationsverantwortlichen zu vereinfachen.
- NullpointerException beim Import nach dem Ergänzen eines Aspekts an einer Attributgruppe. (Issue 0000039)
- Bei Versand von Datensätzen mit Ganzzahlattributen wurde der Wertebereich für gültige Werte nicht geprüft. (Issue 0000032)
- Fehler bei der Berechnung von Undefined-Werten führte dazu, dass in bestimmten Situationen gültige Attributwerte als Undefiniert interpretierte wurden. (Issue 0000038 und 0000035)
- Die Fehlermeldung bei falschen oder gelöschten Aktivierungszeitpunkten in der Verwaltungsdatei war nicht hilfreich für die Behebung des Problems. Die Fehlermeldung wurde überarbeitet und die Zeitstempel in lesbarer Form ausgeben.
- Der Import berücksichtigte zur Auflösung von Referenzen nur neue (d.h. noch nicht aktivierte) Versionen von den Konfigurationsbereichen die zusammen importiert werden und von allen anderen Bereichen die jeweils aktivierte Version. Der Import wurde dahingehend erweitert, dass von eigenen Bereichen die neuste Version und von übernommenen Konfigurationsbereichen die jeweils freigegebenen Versionen berücksichtigt werden, um Referenzen aufzulösen.
- Die Konsistenzprüfung der Konfiguration berücksichtigte die Mengenverwendungen von noch nicht aktivierten Objekttypen nicht richtig. (Issue 0000024)
- Übergebene DataDescription-Objekte wurden von vielen Methoden in der ClientDavConnection modifiziert, wenn die Simulationsvariante nicht explizit vorgegeben wurde. In der Datadescription wurde die tatsächlich verwendete Simulationsvariante eingetragen. Die Methoden der ClientDavConnection modifizieren eine übergebene DataDescription jetzt nicht mehr. Probleme mit Maps, in denen die DataDescription als Key benutzt wurden, sind damit gelöst. Die Parametrierung funktioniert jetzt wieder. (Issue 0000021 und Issue 0000029)
- Beim Import wurden statt den neusten Versionen von Bereichen, die nicht importiert wurden, die zuletzt Aktivierten Version berücksichtigt.
- Die automatische Vergabe der Versionsnummer in den `konfigurationsAenderung`s-Tags funktionierte bei mehrfachem Import und Aktivierung ohne zwischenzeitlichen Export nicht wie erwartet.
- Eine NullpointerException beim Start der Konfiguration konnte auftreten, wenn durch einen Import mit anschließender Aktivierung ausschließlich neue Objekte entstanden sind und kein Objekt ungültig gesetzt wurde.
- Nach dem Start der Konfiguration konnte es zu Exceptions kommen, weil mehrfach versucht wurde, dynamische Objekte ungültig zu setzen.
- Dynamischen Objekte wurden gespeichert auch wenn der Persistenzmodus `transient` war.
- Das Ungültigsetzen von dynamischen Objekte mit einem entsprechenden Persistenzmodus beim Start der Konfiguration funktionierte nicht wie gewünscht.

### Kompatibilität

Das Dateiformat von Konfigurationsdateien hat sich bezüglich Referenzen mit Referenzierungsart Assoziation geändert. Vorhandene Konfigurationsdateien aus älteren Beta-Versionen sollten gelöscht und durch einen erneuten Import neu erzeugt werden.

## [Version 3.0b2]

### Bugfixes

Folgende Probleme der Version 3.0b1 wurden behoben:

- Die automatische Vergabe der Versionsnummer in den `konfigurationsAenderung`s-Tags funktionierte bei mehrfachem Import und Aktivierung ohne zwischenzeitlichen Export nicht wie erwartet.
- Eine NullpointerException beim Start der Konfiguration konnte auftreten, wenn durch einen Import mit anschließender Aktivierung ausschließlich neue Objekte entstanden sind und kein Objekt ungültig gesetzt wurde.
- Nach dem Start der Konfiguration konnte es zu Exceptions kommen, weil mehrfach versucht wurde, dynamische Objekte ungültig zu setzen.

### Bekannte Probleme

- Parametrierung funktioniert wegen einer noch fehlerhaften Umstellung der Anmeldefunktionen in den Datenverteiler-Applikationsfunktionen bzgl. der Simulationsvariante nicht richtig.
- Berücksichtigung des Persistenzmodus bei dynamischen Objekten funktioniert nicht wie gefordert.
- Weitere Punkte unter Version 3.0b1

## [Version 3.0b1]

Um allen Interessierten und im speziellen den Teilnehmern der Schulungen am 23.10.2006 und am 30.10.2006 eine Möglichkeit zu geben, sich schon vorab mit den neuen Funktionen der Kernsoftware und insbesondere der Konfiguration vertraut zu machen, wird dieses Beta-Release der Kernsoftware zur Verfügung gestellt. Die Versionsnummer 3.0 signalisiert ein größeres Update mit neuen Features (s.u.) und dient zur Unterscheidung von den bisherigen Releases da es in Kürze auch noch ein reines Bugfix-Release zur Kernsoftware vom 20.03.2006 (Version 2.14) geben wird. Das vorliegende Release ist ein Beta-Release, weil die Software-Tests noch nicht abgeschlossen sind und weil noch nicht alle bei den bisherigen Tests gefundenen Probleme korrigiert worden sind (s.u.).

### Neue Features

Folgende Punkte betreffen im wesentlichen die Möglichkeiten der neuen Konfiguration:

- Verwaltung der Konfigurationsdaten je Konfigurationsbereich in eigenen Konfigurationsdateien
- Versionierung von Konfigurationsänderungen je Konfigurationsbereich
- Koordinierung von Änderungen mit Hilfe von Konfigurationsverantwortlichen je Konfigurationsbereich
- Export von einzelnen und mehreren Konfigurationsbereichen in Versorgungsdateien
- Import von einzelnen und mehreren Konfigurationsbereichen aus Versorgungsdateien mit automatischer Versionierung der Änderungen
- Konsistenzprüfung und Aktivierung von Konfigurationsänderungen
- Freigabe zur Übernahme und Freigabe zur Aktivierung von Konfigurationsbereichen in andere Instanzen der Konfigurationen
- Unterstützung von verschiedenen Referenzierungsarten bei Mengen und Referenzattributen
- Unterstützung von Attributgruppenverwendungen, die für jedes verwendete Paar von Attributgruppe und Aspekt Optionen für die Verwendung in Onlinedatensätzen bzw. Konfigurationsdatensätzen verwaltet
- Unterstützung der verschiedenen Persistenzmodi bei dynamischen Objekten
- Authentifizierung der Benutzer und Verwaltung der Passwörter (zu Testzwecken ist der Benutzer "Tester" mit dem Passwort "geheim" versorgt).
- Unterstützung von Default- und Undefined-Werten für Attributtypen und Attribute. Neu erzeugte Datensätze werden seitens der Applikationfunktionen automatisch mit den Defaultwerten bzw. mit Undefined-Werten gefüllt.
- Unterstützung und Darstellung von Default- und Undefined-Werten im GTM bei Dateneingabedialogen insbesondere im Parametereditor.

### Bugfixes

Folgende Probleme der Kernsoftware vom 20.03.2006 (Version 2) wurden behoben:

- Zur Identifikation von Datensätzen beim Versand via Datenverteiler werden jetzt nicht mehr die Kodierungen von Attributgruppen und Aspekten benutzt, sondern die Objekt-ID der entsprechenden Attributgruppenverwendung.
- Durch ein Threadsynchronisationsproblem konnte es in speziellen Situation dazu kommen, das die Reihenfolge von Datensätzen im Datenverteiler vertauscht wurde und empfangsseitig von den Applikationsfunktionen entsprechende Fehlermeldungen ausgegeben wurden.
- Eine DataDescription die von einer Applikation ohne explizite Vorgabe einer Simulationsvariante zur Anmeldung mit Hilfe der Applikationsfunktionen benutzt wurde, wurde von den Applikationsfunktionen intern modifiziert (es wurde die tatsächliche Simulationsvariante eingetragen). Dies führte insbesondere dann zu Problemen, wenn diese DataDescription als Schlüssel für Maps benutzt wurde, z.B. um später empfangene Datensätze innerhalb der Applikation richtig zuzuordnen.

### Kompatibilität

- Das Protokoll zwischen Datenverteiler und Applikationsfunktionen hat sich geändert (s.o.). Die bisherige Version der Kernsoftware kann deshalb nicht mit der neuen Version der Kernsoftware gekoppelt werden. Beim Versuch eine Applikation unter Verwendung der alten Applikationsfunktionen mit dem neuen Datenverteiler zu verbinden oder eine Applikation unter Verwendung der neuen Applikationsfunktionen mit dem alten Datenverteiler zu verbinden wird eine entsprechende Fehlermeldung ausgegeben.
- Die Schnittstelle der Applikationsfunktionen wurde überarbeitet, allerdings haben sich an bisherigen Methoden nur geringe Änderungen ergeben. Je nach verwendeter Methode ist es erforderlich die Applikationen neu zu übersetzen.

### Bekannte Probleme

- Lockingmechanismus für Verwaltungs- und Konfigurationsdateien, um ein gegenseitiges Überschreiben der Dateien bei mehreren gestarteten Instanzen zu verhindern, funktioniert noch nicht.
- Die Unterstützung der Online- und Offline-Simulation funktioniert noch nicht.
- Referenzen in konfigurierenden Datensätzen, die im Datenmodell mit der Referenzierungsart "Assoziation" spezifiziert sind, werden noch nicht so gespeichert, dass bei Änderung des referenzierten Objekts automatisch die neue Version referenziert wird.
- Der Import berücksichtigt momentan zur Auflösung von Referenzen nur neue (d.h. noch nicht aktivierte) Versionen von den Konfigurationsbereichen die zusammen importiert werden und von allen anderen Bereichen jeweils aktivierte Version. Der Import muss noch dahingehend erweitert werden, dass auch von übernommenen Konfigurationsbereichen die jeweils freigegebenen Versionen berücksichtigt werden, um Referenzen aufzulösen.
- Defaultwerte für Referenzattributwerte in konfigurierenden Datensätzen werden von der Konsistenzprüfung und der Aktivierung momentan nur dann korrekt berücksichtigt, wenn die jeweils referenzierten Objekte bereits vorher aktiviert wurden.

### Beispielskripte

#### tk1-import

  Importiert zwei neue Konfigurationsbereiche aus den entsprechenden Versorgungsdateien im Verzeichnis "versorgungsdateien"

#### tk2-konsistenzpruefung

  Optionaler Schritt, der den neusten Stand der Konfiguration auf Konsistenz prüft

#### tk3-freigabe-uebernahme

  Optionaler Schritt, der den neusten Stand von lokalen Konfigurationsbereichen zur Übernahme in andere Konfigurationen freigibt.

#### tk4-aktivieren

  Aktiviert den neusten Stand der vorliegenden Konfigurationsbereiche nach einer erfolgreichen Konsistenzprüfung

#### tk5-freigabe-aktivierung

  Gibt den zuletzt aktivierten Stand von lokalen Konfigurationsbereichen zur Übernahme und Aktivierung in anderen Konfigurationen frei

#### tk6-export

  Exportiert die oben importierten Konfigurationsbereiche, d.h. die entsprechenden Versorgungsdateien werden aus der Konfiguration wieder erzeugt.

## Stand 17.08.2006

- Neue Konfiguration
- Im Datenkatalog Bereich kb.tmVerkehrGlobal wurde ein Tippfehler korrigiert: In der Attributgruppe atg.verkehrsDatenKurzZeitTrendExtraPolationMq wurde das Attribut "QqLkwP" umbenannt in "QLkwP"
- Wenn in einer Applikationsseitigen Implementierung der update-Methode aus dem ClientReceiverInterface eine RuntimeException geworfen wird, beendet sich das Programm nicht mehr via System.exit() sondern mit dem normalen Terminierungsmechanismus den man sich mit ClientDavInterface.setCloseHandler() beeinflussen kann. Außerdem wird in dieser Situation eine entsprechende Debugausgabe mit dem Stacktrace gemacht, damit die Ursache für den Applikationsseitigen Fehler schneller gefunden werden kann.

## Stand 20.03.2006

- Bug bei der Deserialisierung von Datensätzen mit der Implementierung des dav.data.Deserializer Interfaces behoben, der zu fehlerhaften Datensätzen bzw. Exceptions führen konnte. Von dem Fehler betroffen waren Attributgruppen mit Arrays fester (nicht variabler) Größe. Zusätzlich wurde im Serializer eine Überprüfung eingebaut, die Arrays nicht variabler Größe auf die richtige Größe überprüft.
- Debug-Level für die Ausgabe der Speicherbelegung bei der Ausgabe eines empfangenen Datensatzes im Online-Protokollierer (bzw. im Standard-Protokoll-Modul des Online-Protokollierers) von Level INFO auf Level FINEST geändert.
- Der Konfigurationsbereich kb.tmVerkehrGlobal (TeilmodellVerkehrGlobal) wurde überarbeitet. Die Attributgruppe VerkehrsDatenKurzZeitAnalyseMq erhält als weiteres Attribut das Array "wichtung", mit dem die Gewichtungsfaktoren zur Bestimmung der gewichteten Differenzgeschwindigkeit im Messquerschnitt ermittelt werden. Außerdem wurde die fehlerhaften Zuordnung der Attributtypen der Fahrzeugdichte und der Bemessungsdichte in den Attributlisten atl.grenzMaxBemessungsFahrzeugDichte und atl.grenzMaxFahrzeugDichte korrigiert.
- Die Konvertierung der Umlaute in Dateinamen im PersistenceHandlerManager der Parametrierung verwendet jetzt Unicode-Quotes, damit die Konvertierung auch dann funktioniert, wenn beim Compilieren ein von ISO-8859-1 abweichendes Encoding verwendet wird.
- Bei Verlust der Datenverteilerverbindung wird in Applikationen wieder der CloseHandler (und damit im Default-Fall System.exit) aufgerufen.
- Die Methode ClientDavConnection.setName(String name) wurde zur Namensänderung von dynamischen Objekten implementiert.

## Stand 15.03.2006

- Memory-Leak behoben, das bei der Generierung von Daten aus einer XML-Datei im Datengenerator aufgetreten ist.
- Memory-Leak behoben, das bei wiederholtem Auf- und Abbau von Datenverterteilerverbindungen aufgetreten ist.
- Fehler im GenericTestMonitor behoben, der beim Rollen in der Tabellendarstellung von Datensätzen zu Exceptions und zu einer nicht mehr aktualisierten Darstellung führen konnte.
- Fehlerausgaben in der Konfiguration überarbeitet, die auftraten wenn eine Applikation kurz nach Anmeldung auf Änderungen einer dynamischen Menge die Verbindung zum Datenverteiler geschlossen hat.

## Stand 09.03.2006

- Beim Hinzufügen von Elementen zu dynamischen Mengen wird jetzt geprüft, ob der Typ der Elemente für die Menge erlaubt ist. Hierbei werden jetzt auch Elemente von abgeleiteten Typen richtig berücksichtigt.
- Im Datenmodell für die Simulation wurden definiert, dass die Mengen der Typen "menge.simulationsStrecken" und "menge.simulationen" dynamische Mengen sind.
- GTM: Weil der Aufrufparameter -autologin kein allgemeiner Aufrufparameter ist, wird dieser vom GenericTestMonitor jetzt nicht mehr an gestartete Applikationen (wie zum Beispiel an den Datengenerator) weitergeleitet.

## Nachtrag zum Stand 07.03.2006

- K2S.dtd wurde überarbeitet: Attribut "pid" in Element "verweis" wurde von IDREF auf NMTOKEN geändert um Verweise auf Kapitel außerhalb des Konfigurationsbereichs zu ermöglichen. Außerdem wurde das Attribut "name" in Element "attribut" und "attributliste" von CDATA auf NMTOKEN geändert um eine entsprechende Einschränkung der Attributnamen zu erreichen.
- Implementierung des Systemprotokollierers um Anfragen an das Archivsystem zu stellen wurde in der Klasse pat.sysProt.SystemProtocoller in das Release aufgenommen.

## Stand 07.03.2006

- Streambasierte Archivanfrage für mehreren Objekte parallel funktioniert im GenericTestMonitor (GTM) jetzt wieder.
- Erweiterung des Metadatenmodells um weitere Möglichkeiten entsprechend TAnf-PuK
- Ausgabe von hilfreichen Fehlermeldungen beim Konvertieren des Datenkatalogs, wenn undefinierte Objekte referenziert werden.
- Kurzinfo und Beschreibung von Attributen, Wertebereichen und Zuständen (von Ganzzahlattributtypen) werden bei der Konvertierung des Datenkatalogs nicht mehr ignoriert
- Abfrage von konfigurierenden Datensätzen mit einem leeren Array funktioniert jetzt wie erwartet.
- GenericTestMonitor wurde um einen Login-Dialog erweitert. Ein automatisches Anmelden wie bisher erreicht man mit dem Aufrufargument -autologin
- Beim Editieren von Parameterdatensätzen im GenericTestMonitor wird jetzt Copy&Paste von ganzen Datensätzen unterstützt.
- Beschreibung des Attributtyps att.intervallCron für Cron-ähnliche Zeitspezifikationen im Datenkatalog korrigiert.
- Überarbeitung und Vervollständigung der Datenmodelle kb.tmSystemKalenderGlobal, kb.tmEreignisKalenderGlobal
- Definition des Datenmodells kb.tmGanglinienGlobal
- Korrektur eines Fehlers, der beim Löschen von dynamischen Objekten mit Persistenzmodus "transient" zu einer Exception in der Konfiguration führte.
- Kurzinfo und Beschreibung von Systemobjekten werden in der Konfiguration nicht mehr als HTML sondern als XML gespeichert und erst durch die Zugriffsmethoden in der Klasse SystemObjectInfo in entsprechenden HTML-Code konvertiert.

## Stand 31.01.2006

- Überarbeitung der Interfaces zum Zugriff auf Konfigurationsobjekte.

- Einsatz von Generics zur typsicheren Verwendung von Containern in Rückgabewerten und Parametern von Methoden durch entsprechend parametrisierte Typen.
- ConfigurationException wurde eliminiert und zur Vermeidung von Übersetzungsproblemen von RuntimeException abgeleitet.
- Fehlgeschlagene Konfigurationsänderungsversuche werden konsequent durch eine ConfigurationChangeException quittiert.
- Bei Systemobjekten geben die Methoden getName() und getPid() jetzt nicht mehr Null zurück, sondern einen leeren String wenn der Name bzw. die Pid nicht definiert ist.
- Neue Methoden getPidOrId etc.

- Bei der Konvertierung des Datenkatalogs werden jetzt entsprechend den Technischen Anforderungen zur Konfiguration (TAnf-PuK) Attributgruppenverwendungen als Konfigurationsobjekte mit entsprechenden konfigurierenden Datensätzen erzeugt.

- Korrektur eines Fehlers in den Datenverteiler-Applikationsfunktionen, der bei Verwendung von mehreren Datenverteilerverbindungen dazu führen konnte, dass die Systemobjekte der verschiedenen Verbindungen nicht mehr unabhängig verwaltet wurden, sondern bei Objektreferenzen in empfangenen Datensätzen der zweiten Verbindung Objekte der ersten Verbindung benutzt wurden.
- Workaround im Settingsmanager um doppelte Datensätze zu ignorieren, die bei mehrfachen Anmeldungen mit verschiedenen Optionen auftreten können.
- In den Serializer und Deserializer Interfaces und in den zugehörigen Implementierungen wurden neue Methoden zum Setzen der zu verwendenden Streams ergänzt.
- In den Serializer und Deserializer Interfaces und in den zugehörigen Implementierungen wurden neue Methoden zum Schreiben und Lesen von Byte-Folgen mit Offset und Länge aus Byte-Arrays ergänzt.
- In der Attributgruppe atg.archivEinstellung zur Parametrierung des Archivsystems wurde Wertebereichseinschränkung für einige Attribute ergänzt.
- In der Parametrierung wurde eine Fehlerbehandlung bei nicht mehr korrekt deserialisierbaren Parameterdatensätzen ergänzt.
- In der Bibliothek für streambasierte Archivanfragen verhalten sich die Methoden im ArchiveQueryResult-Interface jetzt bezüglich der InterruptedException so wie in der JavaDoc-Schnittstellenbeschreibung beschrieben.
- Streambasierte Verarbeitung von Archivantworten wurde durch gepufferte Zugriffe beim Dekomprimieren beschleunigt.
- In Dateinamen von Parameterdateien werden Umlaute jetzt durch entsprechende ASCII-Zeichen ersetzt. Eventuell vorhandene Parameterdateien mit Umlauten werden umbenannt.
- Bei Parameterdateien mit nicht interpretierbaren Inhalten wird eine entsprechende Warnung ausgegeben, die fehlerhafte Datei wird umbenannt und eine neue erzeugt.

## Stand 22.12.2005

- Archivanfrageschnittstelle ArchiveRequestManager um Methoden ergänzt um den Verbindungsstatus des Archivsystems zu prüfen und sich auf Änderungen des Status anzumelden.
- Nicht für Applikationszwecke benötigte interne Methoden der Datenverteiler-Applikationsfunktionen aus den Konfigurationsanfrageinterfaces entfernt.
- Bug im Datenverteiler behoben, der bei Abmeldung einer Quell-Applikation im Zusammenhang mit nachgelieferten Datensätzen zu einem fehlerhaften leeren Datensatz führen konnte.
- Aussagekräftige Fehlermeldung bei der Konvertierung des Datenkatalogs wenn ein Typ sowohl von dynamischen als auch konfigurierenden Typen abgeleitet ist.
- Typ und Name der Menge mit Skripten für Protokolle und Auswertungen umbenannt in "menge.puaSkripte" bzw. "PuaSkripte" und konkrekte Menge am Objekt "kv.system" ergänzt.

## Stand 09.12.2005

- Ausgabe einer hilfreichen Fehlermeldung, wenn bei der Konvertierung des Datenkatalogs bei einem Konfigurationsbereich eine unbekannte Pid angegeben wurde.
- Ausgabe einer hilfreichen Fehlermeldung, wenn bei der Konvertierung des Datenkatalogs ein Konfigurationsobjekt mit einem unbekanntem Typ angegeben wurde.
- Fehler in der Konvertierung des Datenkatalogs behoben, der zu einer ClassCastException führen konnte, wenn als Konfigurationsverantwortlicher eines Konfigurationsbereichs ein Objekt eines von typ.konfigurationsVerantwortlicher abgeleiteten Typs angegeben wurde.

## Stand 23.11.2005

- Fehler in der Priorisierung von Datenverteiler-Telegrammen behoben, der zu Fehlverhalten beim Abmelden und sofortigen wieder Anmelden einer Applikation als Sender führen konnte.

## Stand 17.11.2005

- Ausgabe einer hilfreichen Fehlermeldung, wenn bei der Konvertierung des Datenkatalogs in einer Menge ein Element mit einer unbekannten Pid referenziert wird.

## Stand 15.11.2005

- Kernsoftware-System wird jetzt mit Quellcode unter der General Public License (GPL) veröffentlicht
- Kernsoftware-Bibliothek wird jetzt mit Quellcode unter der Lesser General Public License (LGPL)veröffentlicht
- Bei der Definition eines dynamischen Objekttyps im Datenkatalog kann jetzt mit dem Attribut persistenzModus festgelegt werden, ob dynamische Objekte persistent gespeichert werden sollen
- Der eingestellte Persistenzmodus eines dynamischen Objekttyps kann über DynamicObjectType.getPersistenceMode() zur Laufzeit abgefragt werden.
- Dynamische Objekte werden bei entsprechend eingestelltem PersistenzModus persistent gespeichert.
- Interface von dynamischen Mengen wurde überarbeitet und implementiert. Eine Applikation kann sich jetzt auf Änderungen an dynamische Mengen anmelden und wird entsprechend benachrichtigt, wenn sich eine Menge ändert.
- Die Elemente von dynamischen Mengen werden persistent gespeichert.
- Erweiterung der Funktionsbibliothek um die Klasse sys.funclib.operatingMessage.MessageSender, die zum Versand von Betriebsmeldungen verwendet werden kann.
- Implementierung einer rudimentären Version der Betriebsmeldungsverwaltung, die alle empfangenen Meldungen als Quelle publiziert.
- Debug- und Fehlerausgaben bzgl. der Verbindung zwischen Datenverteiler und Datenverteiler-Applikationsfunktionen überarbeitet.
- Objekte vom Typ "typ.autarkeOrganisationsEinheit" und von davon abgeleiteten Typen werden bei der Konvertierung des Datenkatalogs korrekt umgesetzt.
- Die Methode ClientDavConnection.sendData() so erweitert, dass beim Versand eines Datensatzes direkt nach einer Anmeldung als einfacher Sender jetzt automatisch die Sendesteuerung abgewartet wird, bevor der Datensatz versendet wird (positive SendeSteuerung) bzw. eine Exception geworfen wird (negative SendeSteuerung).
- DatenkatalogGesamt wurde so zerlegt, dass für jeden Konfigurationsbereich eine eigene Versorgungsdatei zur Verfügung steht.
- Bei der Konvertierung des Datenkalogs wird jetzt vorher eine XML-Validierung durchgeführt.
- Neue Methode ClientDavInterface.getArchive().subscribeReceiver() zur Abfrage von Archivdaten und anschließendem nahtlosem Übergang in den Online-Datenstrom.
- Neue Methode ClientDavInterface.getLocalUser() zur Abfrage des eingeloggten Benutzers.
- Neue Methode ClientDavInterface.getClientDavParameters() zur Abfrage der eingestellten Verbindungsparameter.
- Verallgemeinerung von ResultData und ArchivData durch gemeinsames Interface Dataset in dem alle wesentlichen Methoden zum Zugriff auf einen Datensatz enthalten sind.
- Bei den subscribe- und unsubscribe- Methoden im ClientReceiverInterface können jetzt auch anstelle von Listen bzw. Arrays einzelne SystemObjekte genutzt werden.
- In dem Interface ClientReceiverInterface wurden neue Varianten der unsubscribe-Methode ergänzt, die keinen Parameter für Attribut-Teilmengen besitzen. Die bisherigen Varianten wurden auf deprecated gesetzt.
- Korrektur eines Fehlers im Settingsmanager, der zum Blockieren führte, wenn bei der Spezifikation der zu Archivierenden Datensätze überall Wildcards angegeben wurden.
- Die DataNotSubscribedException ist jetzt von RuntimeException abgeleitet und muss folglich nicht mehr Zwangsweise behandelt werden. Bei subscribeReceiver-Anmeldemethoden ohne Historie wurde die Exception eliminiert.

## Stand 13.08.2005

- Korrektur eines Fehlers der in konfigurierenden Datensätzen zu falsch sortierten Einträgen in Arrays mit mehr als 10 Elementen führen konnte.
- Korrektur eines Fehlers, der bei gleichzeitiger Anmeldung als "Senke" und als "Sender" in einer Applikation zu Problemen führen konnte.

## Stand 14.07.2005

- Korrektur eines Fehlers, der auf Multiprozessorsystemen zu NullPointerExceptions beim Verbindungsaufbau führen konnte.
- Empfangsanmeldung mit Historie berücksichtigt END_OF_ARCHIVE Datensätze vom Archivsystem jetzt korrekt.
- Die interne Kommunikationsverbindung im Datenverteiler wird jetzt über das loopback-Interface mit der IP-Adresse 127.0.0.1 aufgebaut. Damit ist diese Verbindung auch unter Windows unabhängig vom realen Netzwerkinterface.
- Korrektur eines Fehlers, der bei der Kommunikation über mehrere Datenverteiler zum Ausbleiben eines "keine Quelle" Datensatzes bzw. einer negativen Sendesteuerung nach Abmeldung einer entfernten Quelle führen konnte.
- Parameter für die Zugriffsrechte auf neueren Aspekt asp.parameterSoll umgestellt und das automatische Erzeugen von Parameterdatensätzen durch die Parametrierung für alle Benutzer wurde abgestellt. Dies war das Hauptproblem beim Einsatz von mehreren Parametrierungen, da dadurch mehrere Quellen für die gleichen Daten vorhanden waren. Je Benutzer sollte nur höchstens eine Parametrierung für die Parameterdatensätze zuständig sein. Ähnliches gilt für die BenutzerKlassen. D.h. für jede UZ etc. die unabhängig von anderen laufen können soll, sollten eigene Benutzerobjekte und eine eigene Berechtigungsklasse existieren für die sich die lokale Parametrierung anmeldet. Falls keine Prüfung der Benutzerrechte durch den Datenverteiler durchgeführt werden soll, kann Sie einfach mit dem Aufrufparameter -rechtePruefung=nein beim Start des Datenverteilers abgestellt werden. Das System läuft dann auch ohne Parametrierung der Benutzerrechte. Der in der Kernsoftware enthaltene Datenkatalog enthält ein paar notwendige Anpassungen damit das ganze funktioniert.
- Neuer Aufrufparameter -rechtePruefung=ja/nein beim Datenverteiler zum Abschalten der Rechteprüfungen für Empfangs- und Sendeanmeldungen.
- Verhandlung von KeepAlive-Timeoutparametern überarbeitet. Zeitmessung beim Versand und ausbleibendem Empfang von KeepAlive-Telegrammen korrigiert. Timeouts können beim Start von Applikationen durch -timeoutSendeKeepAlive=... und -timeoutEmpfangeKeepAlive=... in Sekunden vorgegeben werden. Defaultwerte sind 40 Sekunden bzw. 60 Sekunden. Angegebene Werte werden vom Datenverteiler auf 5 bzw. 6 Sekunden nach unten beschränkt. Nach zweimaligen Ausbleiben des Empfangs innerhalb des Empfangs-Timeouts wird die Verbindung terminiert.
- Eindeutige Vergabe von dynamischen Objekt-Ids und Kommunikation der Konfigurationen untereinander bei Anfrage von Objekten, die von anderen Konfigurationen dynamisch erzeugt wurden.
- Fehlverhalten bei Sendeanmeldungen mit dem lokalen Konfigurationsverantwortlichen als Objekt korrigiert.
- Bei der Konvertierung des Datenkatalogs werden in konfigurierenden Datensätzen auch Kommas (neben Punkten) als Dezimaltrenner zugelassen und es wird geprüft, ob Werte innerhalb der vorgegebenen Wertebereiche liegen. Bei ungültigen Werten wird die Konvertierung mit entsprechenden Fehlermeldungen abgebrochen.
- Eine Anmeldung als Quelle mit Sendesteuerung führt jetzt nicht mehr fälschlicherweise zu Exceptions. Eine Quelle kann jetzt auch bei fehlender oder negativer Sendesteuerung senden.
- Datengenerator kann jetzt auch Daten für dynamische Objekte erzeugen.

## Stand 31.01.2005

- Deutliche Performance-Steigerung beim Konvertieren des Datenkatalogs.

## Stand 15.01.2005

- Beim Erzeugen von dynamischen Objekten wird jetzt geprüft ob die eventuell angegebene Pid des neuen Objekts bereits vergeben ist.
- Dynamische Objekte können mit der Methode SystemObject.invalidate() gelöscht werden.
- Mit der Methode SystemObject.setConfigurationData(...) können jetzt konfigurierende Datensätze für dynamische Objekte erzeugt werden.
- Fehler, der zu fehlerhaften Usage-Ausgaben im Aufrufargument "-option=" des Onlineprotokollierers führte, behoben.
- Fehler korrigiert, der zu Problemen führte, wenn eine Applikation zwei Empfangsanmeldungen mit gleicher Datenidentifikation aber unterschiedlichen Optionen bezüglich nachgelieferten Datensätzen gemacht hat.

## Stand 23.12.2004

- In den Datenverteiler-Applikationsfunktionen, der Konfiguration und im Datenkatalog wurde die Unterstützung von Konfigurationsbereichen und die Zuordnung eines Objekts zu seinem Konfigurationsbereich ergänzt.
- Die Methoden getValue und getValues in den Interfaces Data.TextArray, Data.ReferenceArray und Data.TimeArray wurden aus implementierungstechnischen Gründen (gleiche Methodennamen aber unterschiedliche Rückgabewerte) umbenannt in getTextValue, getTextValues, getReferenceValue, getReferenceValues, getTimeValue und getTimeValues.
- Neue Byte-Array-basierte Implementierung des generischen Data-Interfaces zum Zugriff auf Datensätze ist wesentlicher schneller und braucht wesentlich weniger Speicher, da direkt auf ein Byte-Array mit den Telegrammdaten zugegriffen wird. Die Implementierung ist nur für den lesenden Zugriff verwendbar.
- Neue Methode Data.createModifiableCopy() zum Erzeugen einer modifizierbaren Kopie eines Datensatzes.
- Einsatz der neuen Implementierung des generischen Data-Interfaces bei der Abfrage von Archivdaten mit der Methode ClientDavConnection.getArchiveData().
- Einsatz der neuen Implementierung des generischen Data-Interfaces beim Empfang von Online-Daten für die Übergabe empfangener Datensätze an die Applikation mittels ClientReceiverInterface.update().
- Einsatz der neuen Implementierung des generischen Data-Interfaces zum Zwischenspeichern von empfangenen Daten (innerhalb des gewünschten Vorhaltezeitraums).
- Default-Einstellung des Vorhaltezeitraums zum Zwischenspeichern empfangener Daten auf 0 statt auf bisher 10 Sekunden geändert.
- Folgender Fehler wurde behoben: Array-Attribute wurden von der cloneObject() Methode nicht dupliziert, sodass bestimmte Modifikationen auf empfangenen Datensätzen auch die Original-Datensätze im Cache modifiziert haben.
- Einsatz der neuen Implementierung des generischen Data-Interfaces zum Zwischenspeichern versendeter Daten zwecks Vergleich für Deltaanmeldungen. Korrektur von Bugs, die zu Deadlocks beim Start von Applikationen, bei Archiv- und Konfigurationsanfragen und bei parallelen Anfragen durch verschiedene Threads führen konnten.
- Debug-Methoden mit der Möglichkeit zusätzliche Objekte bzw. Exceptions zu übergeben.
- Korrektur eines Fehlers der beim Versand von Datensätzen mit Attributlisten-Arrays der Länge 0 zu Exceptions führte.
- Fehler der zum Überschreiben von Zwischengespeicherten Konfigurationsobjekten und damit auch zum Löschen der bei den Objekten jeweils gespeicherten Daten führte.
- Überflüssige Verwendungen von BufferedOutputStream und BufferedInputStream entfernt.
- Korrektur eines Fehlers beim Empfang von leeren Archivantworten.
- Korrektur eines Fehlers der zum Deadlock führte, wenn bei Verwendung der ClientDavConnection.getData() Methode in einem Thread parallel ein Datensatz empfangen wurde und in der jeweiligen update() Methode die sendData Methode aufgerufen wurde.
- Korrektur eines Fehlers bei der Kodierung von Umlauten
- Ein Fehler, der in seltenen Fällen zu Exceptions beim Start der Konfiguration führen konnte, wurde behoben.
- Debugausgaben insbesondere in der Konfiguration überarbeitet.

2202

2203 2204
[noch nicht veröffentlicht]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/compare/v3.13.0...HEAD
[version 3.13.0]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/compare/v3.12.0...v3.13.0
2205
[version 3.12.0]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/compare/v3.11.0...v3.12.0
2206
[version 3.11.0]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/compare/v3.10.0...v3.11.0
2207
[version 3.10.0]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/compare/v3.9.7...v3.10.0
2208
[version 3.9.7]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kernsoftware/compare/v3.9.6...v3.9.7