001/* 002 * Copyright 2007-2024 Ping Identity Corporation 003 * All Rights Reserved. 004 */ 005/* 006 * Copyright 2007-2024 Ping Identity Corporation 007 * 008 * Licensed under the Apache License, Version 2.0 (the "License"); 009 * you may not use this file except in compliance with the License. 010 * You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, software 015 * distributed under the License is distributed on an "AS IS" BASIS, 016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017 * See the License for the specific language governing permissions and 018 * limitations under the License. 019 */ 020/* 021 * Copyright (C) 2007-2024 Ping Identity Corporation 022 * 023 * This program is free software; you can redistribute it and/or modify 024 * it under the terms of the GNU General Public License (GPLv2 only) 025 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only) 026 * as published by the Free Software Foundation. 027 * 028 * This program is distributed in the hope that it will be useful, 029 * but WITHOUT ANY WARRANTY; without even the implied warranty of 030 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 031 * GNU General Public License for more details. 032 * 033 * You should have received a copy of the GNU General Public License 034 * along with this program; if not, see <http://www.gnu.org/licenses>. 035 */ 036package com.unboundid.ldap.sdk; 037 038 039 040import com.unboundid.util.Extensible; 041import com.unboundid.util.NotNull; 042import com.unboundid.util.Nullable; 043import com.unboundid.util.ThreadSafety; 044import com.unboundid.util.ThreadSafetyLevel; 045 046 047 048/** 049 * This interface defines an API that may be implemented by a class that should 050 * be notified whenever an LDAP connection is closed for any reason. (whether 051 * the connection was closed at the request of the client via a method like 052 * {@link LDAPConnection#close}, terminated by the server, or closed due to an 053 * internal error). This interface may be used by applications to attempt to 054 * automatically re-establish connections as soon as they are terminated, 055 * potentially falling over to another server. 056 * <BR><BR> 057 * It is acceptable to attempt to re-connect the connection that has been 058 * disconnected, but in general that should only be attempted if 059 * {@link DisconnectType#isExpected(DisconnectType)} returns {@code true} for 060 * the provided {@code disconnectType} value. The disconnect handler will be 061 * temporarily de-registered from the connection so that closing the connection 062 * in the course of processing the {@link DisconnectHandler#handleDisconnect} 063 * method will not cause it to be recursively re-invoked. 064 * <BR><BR> 065 * Implementations of this interface should be threadsafe to ensure that 066 * multiple connections will be able to safely use the same 067 * {@code DisconnectHandler} instance. 068 */ 069@Extensible() 070@ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE) 071public interface DisconnectHandler 072{ 073 /** 074 * Performs any processing that may be necessary in response to the closure 075 * of the provided connection. 076 * 077 * @param connection The connection that has been closed. 078 * @param host The address of the server to which the connection 079 * had been established. 080 * @param port The port of the server to which the connection had 081 * been established. 082 * @param disconnectType The disconnect type, which provides general 083 * information about the nature of the disconnect. 084 * @param message A message that may be associated with the 085 * disconnect. It may be {@code null} if no message 086 * is available. 087 * @param cause A {@code Throwable} that was caught and triggered 088 * the disconnect. It may be {@code null} if the 089 * disconnect was not triggered by a client-side 090 * exception or error. 091 */ 092 void handleDisconnect(@NotNull LDAPConnection connection, 093 @NotNull String host, int port, 094 @NotNull DisconnectType disconnectType, 095 @Nullable String message, 096 @Nullable Throwable cause); 097}