net.jini.space.JavaSpace Maven / Gradle / Ivy
The newest version!
/*
* 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.space;
import java.rmi.MarshalledObject;
import java.rmi.RemoteException;
import net.jini.core.entry.Entry;
import net.jini.core.entry.UnusableEntryException;
import net.jini.core.event.EventRegistration;
import net.jini.core.event.RemoteEventListener;
import net.jini.core.lease.Lease;
import net.jini.core.transaction.Transaction;
import net.jini.core.transaction.TransactionException;
/**
* This interface is implemented by servers that export a
* JavaSpaces technology service. The operations in this interface
* are the public methods that all such spaces support.
*
* @author Sun Microsystems, Inc.
*
* @see Entry
*/
public interface JavaSpace {
/**
* Write a new entry into the space.
*
* @param entry the entry to write
* @param txn the transaction object, if any, under which to
* perform the write
* @param lease the requested lease time, in milliseconds
* @return a lease for the entry that was written to the space
*
* @throws TransactionException if a transaction error occurs
* @throws RemoteException if a communication error occurs
*/
Lease write(Entry entry, Transaction txn, long lease)
throws TransactionException, RemoteException;
/**
* Wait for no time at all. This is used as a timeout value in
* various read and take calls.
*
* @see #read
* @see #readIfExists
* @see #take
* @see #takeIfExists
*/
long NO_WAIT = 0;
/**
* Read any matching entry from the space, blocking until one exists.
* Return null
if the timeout expires.
*
* @param tmpl The template used for matching. Matching is
* done against tmpl
with null
* fields being wildcards ("match anything") other
* fields being values ("match exactly on the
* serialized form").
* @param txn The transaction (if any) under which to work.
* @param timeout How long the client is willing to wait for a
* transactionally proper matching entry. A
* timeout of NO_WAIT
means to wait
* no time at all; this is equivalent to a wait
* of zero.
*
* @return a copy of the entry read from the space
* @throws UnusableEntryException if any serialized field of the entry
* being read cannot be deserialized for any reason
* @throws TransactionException if a transaction error occurs
* @throws InterruptedException if the thread in which the read
* occurs is interrupted
* @throws RemoteException if a communication error occurs
* @throws IllegalArgumentException if a negative timeout value is used
*/
Entry read(Entry tmpl, Transaction txn, long timeout)
throws UnusableEntryException, TransactionException,
InterruptedException, RemoteException;
/**
* Read any matching entry from the space, returning
* null
if there is currently is none. Matching and
* timeouts are done as in read
, except that blocking
* in this call is done only if necessary to wait for transactional
* state to settle.
*
* @param tmpl The template used for matching. Matching is
* done against tmpl
with null
* fields being wildcards ("match anything") other
* fields being values ("match exactly on the
* serialized form").
* @param txn The transaction (if any) under which to work.
* @param timeout How long the client is willing to wait for a
* transactionally proper matching entry. A
* timeout of NO_WAIT
means to wait
* no time at all; this is equivalent to a wait
* of zero.
*
* @return a copy of the entry read from the space
* @throws UnusableEntryException if any serialized field of the entry
* being read cannot be deserialized for any reason
* @throws TransactionException if a transaction error occurs
* @throws InterruptedException if the thread in which the read
* occurs is interrupted
* @throws RemoteException if a communication error occurs
* @throws IllegalArgumentException if a negative timeout value is used
* @see #read
*/
Entry readIfExists(Entry tmpl, Transaction txn, long timeout)
throws UnusableEntryException, TransactionException,
InterruptedException, RemoteException;
/**
* Take a matching entry from the space, waiting until one exists.
* Matching is and timeout done as for read
.
*
* @param tmpl The template used for matching. Matching is
* done against tmpl
with null
* fields being wildcards ("match anything") other
* fields being values ("match exactly on the
* serialized form").
* @param txn The transaction (if any) under which to work.
* @param timeout How long the client is willing to wait for a
* transactionally proper matching entry. A
* timeout of NO_WAIT
means to wait
* no time at all; this is equivalent to a wait
* of zero.
*
* @return the entry taken from the space
* @throws UnusableEntryException if any serialized field of the entry
* being read cannot be deserialized for any reason
* @throws TransactionException if a transaction error occurs
* @throws InterruptedException if the thread in which the take
* occurs is interrupted
* @throws RemoteException if a communication error occurs
* @throws IllegalArgumentException if a negative timeout value is used
* @see #read
*/
Entry take(Entry tmpl, Transaction txn, long timeout)
throws UnusableEntryException, TransactionException,
InterruptedException, RemoteException;
/**
* Take a matching entry from the space, returning
* null
if there is currently is none. Matching is
* and timeout done as for read
, except that blocking
* in this call is done only if necessary to wait for transactional
* state to settle.
*
* @param tmpl The template used for matching. Matching is
* done against tmpl
with null
* fields being wildcards ("match anything") other
* fields being values ("match exactly on the
* serialized form").
* @param txn The transaction (if any) under which to work.
* @param timeout How long the client is willing to wait for a
* transactionally proper matching entry. A
* timeout of NO_WAIT
means to wait
* no time at all; this is equivalent to a wait
* of zero.
*
* @return the entry taken from the space
* @throws UnusableEntryException if any serialized field of the entry
* being read cannot be deserialized for any reason
* @throws TransactionException if a transaction error occurs
* @throws InterruptedException if the thread in which the take
* occurs is interrupted
* @throws RemoteException if a communication error occurs
* @throws IllegalArgumentException if a negative timeout value is used
* @see #read
*/
Entry takeIfExists(Entry tmpl, Transaction txn, long timeout)
throws UnusableEntryException, TransactionException,
InterruptedException, RemoteException;
/**
* When entries are written that match this template notify the
* given listener
with a RemoteEvent
that
* includes the handback
object. Matching is done as
* for read
.
*
* @param tmpl The template used for matching. Matching is
* done against tmpl
with null
* fields being wildcards ("match anything") other
* fields being values ("match exactly on the
* serialized form").
* @param txn The transaction (if any) under which to work.
* @param listener The remote event listener to notify.
* @param lease the requested lease time, in milliseconds
* @param handback An object to send to the listener as part of the
* event notification.
* @return the event registration to the the registrant
* @throws TransactionException if a transaction error occurs
* @throws RemoteException if a communication error occurs
* @throws IllegalArgumentException if the lease time requested
* is not Lease.ANY and is negative
* @see #read
* @see net.jini.core.event.EventRegistration
*/
EventRegistration
notify(Entry tmpl, Transaction txn, RemoteEventListener listener,
long lease, MarshalledObject handback)
throws TransactionException, RemoteException;
/**
* The process of serializing an entry for transmission to a JavaSpaces
* service will be identical if the same entry is used twice. This is most
* likely to be an issue with templates that are used repeatedly to search
* for entries with read
or take
. The client-side
* implementations of read
and take
cannot
* reasonably avoid this duplicated effort, since they have no efficient
* way of checking whether the same template is being used without
* intervening modification.
*
* The snapshot
method gives the JavaSpaces service implementor
* a way to reduce the impact of repeated use of the same entry. Invoking
* snapshot
with an Entry
will return another
* Entry
object that contains a snapshot of the
* original entry. Using the returned snapshot entry is equivalent to
* using the unmodified original entry in all operations on the same
* JavaSpaces service. Modifications to the original entry will not
* affect the snapshot. You can snapshot
a null
* template; snapshot
may or may not return null given a
* null
template.
*
* The entry returned from snapshot
will be guaranteed
* equivalent to the original unmodified object only when used with
* the space. Using the snapshot with any other JavaSpaces service
* will generate an IllegalArgumentException
unless the
* other space can use it because of knowledge about the JavaSpaces
* service that generated the snapshot. The snapshot will be a different
* object from the original, may or may not have the same hash code,
* and equals
may or may not return true
* when invoked with the original object, even if the original
* object is unmodified.
*
* A snapshot is guaranteed to work only within the virtual machine
* in which it was generated. If a snapshot is passed to another
* virtual machine (for example, in a parameter of an RMI call),
* using it--even with the same JavaSpaces service--may generate
* an IllegalArgumentException
.
*
* @param e the entry to take a snapshot of.
* @return a snapshot of the entry.
* @throws RemoteException if a communication error occurs
*/
Entry snapshot(Entry e) throws RemoteException;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy