/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.jini.io.context;
/**
* A server context element for registering interest in receiving an
* acknowledgment that the remote call's result data has been
* delivered to and processed by the client.
*
* @author Sun Microsystems, Inc.
* @see net.jini.export.ServerContext#getServerContextElement
* @since 2.0
**/
public interface AcknowledgmentSource {
/**
* Registers the specified listener as interested in receiving an
* acknowledgment that the remote call's result data has been
* processed by the client. Multiple listeners may be registered
* with this object.
*
* <p>The implementation of this interface may refuse a
* registration, such as if the remote call's result data has
* already been written. This method returns <code>true</code> if
* the listener was successfully registered, and
* <code>false</code> if the registration was refused.
*
* @param listener the listener to register
*
* @return <code>true</code> if the listener was successfully
* registered, and <code>false</code> if the registration was
* refused
*
* @throws NullPointerException if <code>listener</code> is
* <code>null</code>
**/
boolean addAcknowledgmentListener(Listener listener);
/**
* A callback object for registering with an {@link
* AcknowledgmentSource} server context element to handle the
* receipt of an acknowledgment that the remote call's result data
* has been processed by the client.
**/
interface Listener {
/**
* Handles either receipt of an acknowledgment that the remote
* call's result data has been processed by the client or an
* indication that no acknowledgment will be received.
*
* <p>If <code>received</code> is <code>true</code>, then a
* positive acknowledgment has been received that the remote
* call's result data has been processed by the client.
*
* If <code>received</code> is <code>false</code>, then the
* implementation of this interface has determined that no
* positive acknowledgment for the associated data will be
* received (perhaps due, for example, to connection failure
* or timeout).
*
* @param received <code>true</code> if an acknowledgment was
* received, and <code>false</code> if no acknowledgment will
* be received
**/
void acknowledgmentReceived(boolean received);
}
}