Code review comment: ```suggestion                 throw Utils.createNatsError("Timeout error occurred on graceful stop"); ```

Code under review:
public static void gracefulStop(Strand strand, ObjectValue listenerObject) {
        ObjectValue connectionObject = (ObjectValue) listenerObject.get(Constants.CONNECTION_OBJ);
        if (connectionObject == null) {
            LOG.debug("Connection object reference does not exist. Possibly the connection is already closed.");
            return;
        }
        Connection natsConnection =
                (Connection) connectionObject.getNativeData(Constants.NATS_CONNECTION);
        if (natsConnection == null) {
            LOG.debug("NATS connection does not exist. Possibly the connection is already closed.");
            listenerObject.set(Constants.CONNECTION_OBJ, null);
            return;
        }
        @SuppressWarnings("unchecked")
        List<Dispatcher> dispatcherList = (List<Dispatcher>) listenerObject.getNativeData(DISPATCHER_LIST);
        dispatcherList.forEach(natsConnection::closeDispatcher);

        int clientsCount =
                ((AtomicInteger) connectionObject.getNativeData(Constants.CONNECTED_CLIENTS)).decrementAndGet();

        if (clientsCount == 0) {
            try {
                
                natsConnection.drain(Duration.ZERO);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                throw Utils.createNatsError("Listener interrupted while closing NATS connection");
            } catch (TimeoutException e) {
                throw Utils.createNatsError("Timeout error occurred, initial flush timed out");
            }
        }
    }

Line commented on: throw Utils.createNatsError("Timeout error occurred, initial flush timed out");

Revised code:
public static void gracefulStop(Strand strand, ObjectValue listenerObject) {
        ObjectValue connectionObject = (ObjectValue) listenerObject.get(Constants.CONNECTION_OBJ);
        if (connectionObject == null) {
            LOG.debug("Connection object reference does not exist. Possibly the connection is already closed.");
            return;
        }
        Connection natsConnection =
                (Connection) connectionObject.getNativeData(Constants.NATS_CONNECTION);
        if (natsConnection == null) {
            LOG.debug("NATS connection does not exist. Possibly the connection is already closed.");
            return;
        }
        @SuppressWarnings("unchecked")
        List<Dispatcher> dispatcherList = (List<Dispatcher>) listenerObject.getNativeData(DISPATCHER_LIST);
        dispatcherList.forEach(natsConnection::closeDispatcher);

        int clientsCount =
                ((AtomicInteger) connectionObject.getNativeData(Constants.CONNECTED_CLIENTS)).decrementAndGet();

        if (clientsCount == 0) {
            try {
                
                natsConnection.drain(Duration.ZERO);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                throw Utils.createNatsError("Listener interrupted on graceful stop.");
            } catch (TimeoutException e) {
                throw Utils.createNatsError("Timeout error occurred, on graceful stop.");
            } catch (IllegalStateException e) {
                throw Utils.createNatsError("Connection is already closed.");
            }
        }
    }