Das liegt ggf. am Connection-Pooling.
Solange dein Java-Programm noch aktiv ist, wird ein Close der Verbindung nicht durchgeführt sondern diese in den Pool gestellt.
Da die AS/400 Dateien ggf. offen hält (ODP's), bleibt die Datei eben im Zugriff (Shared-Sperre).
Wenn du die Sperre explizit freigeben willst, musst du die Verbindung so schließen, dass diese nicht in den Pool zurückgeht. Ggf. ist das Pooling (mit leichten Performance-Nachteilen) auszuschließen.