net.jini.space.JavaSpace05
interface (note, JavaSpace05
extends the
net.jini.space.JavaSpace
interface so any implementation of
JavaSpace05
can also be used as a JavaSpace
). For
a listing of the additional interfaces implemented by Outrigger, please
consult Outrigger's
package documentation.
net.jini.space.JavaSpace05
Extension to JavaSpaces technology
net.jini.space.JavaSpace05
extension to JavaSpaces
technology. The JavaSpace05
interface extends the
JavaSpace
interface to provide methods that allow clients to
perform batch operations on the space (which are generally more efficient
than performing an equivalent set of singleton operations) and to more
easily develop applications where a given Entry
needs to be
read by multiple clients. See the API documentation for the JavaSpace05
interface for details.
Store
Implementation, PSEPro Runtime Classes Not
Included in Release
org.apache.river.outrigger.Store
.
Previous releases included one implementation of the Store
interface, logstore.
This release adds a second implementation, snaplogstore.
While all the necessary classes are included with this release to run the
transient version of Outrigger, or the persistent version using the new
snaplogstore implementation of Store
, the logstore
implementation of Store
requires the runtime classes for
Progress Software's ObjectStore PSEPro for Java
(PSEPro). Unfortunately, because of issues relating to the transition in
licensing, this release does not include the PSEPro runtime classes,
without which logstore will not work. We are sorry for any inconvenience
this will cause. We hope to make a release with a complete version of
logstore available as a separate download in the future.
Where v2.0.n releases used logstore as the default Store
implementation, this release has no default store. In order to switch an
existing set of configuration files, security policy files, etc., from
using logstore to snaplogstore, you will need to change the
org.apache.river.outrigger.store
configuration entry (or add a
store
if you don't already have one) to yield a
org.apache.river.outrigger.snaplogstore.LogStore
object. You will
also need to ensure that outrigger-snaplogstore.jar
has been
granted sufficient permissions (see Outrigger's package documentation
for a sample security policy file.).
Note that depending on the nature of your application snaplogstore can have a significantly different performance profile than logstore.
The storage formats used by snaplogstore and logstore are mutually incompatible.
Store
Interface
org.apache.river.outrigger.Store
.
This release makes incompatible changes to a subsidiary interface, org.apache.river.outrigger.LogOps
in order to support the implementation of the JavaSpace05
interface. New methods were added and existing methods were changed, so old
implementations will need to be changed to work with the current
release, and any implementation that works with the current release will
need to be changed to work with previous releases.
Note, we consider the Store
and its associated subsidiary
interfaces to be experimental. They will often change incompatibly between
releases, and could be removed completely.
JavaSpace05
,
we made incompatible changes to Outrigger's persistent store. The files
generated by previous releases will not be compatible with this release.
JavaSpace.write
calls, the network protocol used to
communicate between Outrigger's proxy and server was incompatibly
changed. Note, for most installations this should not cause a problem as
clients will transparently download the new version of the proxy that uses
the new protocol.
JavaSpaceAdmin
,
ConstrainableJavaSpaceAdmin
, and AdminIterator
Interfaces Have Been Deprecated
org.apache.river.outrigger.JavaSpaceAdmin
and
org.apache.river.outrigger.ConstrainableJavaSpaceAdmin
interfaces. Outrigger's admin proxy still implements
JavaSpaceAdmin
(and if deployed with a Java(TM) Remote Method
Invocation implementation that supports remote method constraints,
ConstrainableJavaSpaceAdmin
), but it is our intention to stop
doing so in a future release. The primary function provided by
JavaSpaceAdmin
and ConstrainableJavaSpaceAdmin
was the creation of org.apache.river.outrigger.AdminIterator
instances that could be used to semi-exhaustively read through the contents
of the space. Similar functionality is now provided through the JavaSpace05.contents
method.
JavaSpaceAdmin
extends the net.jini.admin.JoinAdmin
and org.apache.river.admin.DestroyAdmin
interfaces. It is our intention for Outrigger's admin proxy to continue
implementing JoinAdmin
and DestroyAdmin
after
support for JavaSpaceAdmin
is dropped.
outrigger.jar
, outrigger-logstore.jar
,
etc.) may require changes to the security policy files used for Outrigger
servers. Permissions must now be granted to jsk-lib.jar
in
addition to Outrigger's other server side JAR files. The changes to
outrigger-dl.jar
have an impact on how Outrigger's codebase is
specified. Outrigger now requires a multi-element codebase that includes
both outrigger-dl.jar
and jsk-dl.jar
. Also note
that all of the starter kit's "-dl.jar
" files, including
outrigger-dl.jar
, have been moved out of the lib
directory and into the new lib-dl
directory.For more details on the JAR file changes, please see the note in the Jini Technology Starter Kit Release Notes on JAR file changes.
For examples on how to start Outrigger and a description of Outrigger JAR file structure, please see Outrigger's package documentation.
take
,
non-transactional takeIfExists
, or entry lease cancellation to
be made visible before the removal of the entry was made durable. This race
condition could give rise to scenarios where an entry flits out of, and
then back into existence. For example:
null
, implying
that O had succeeded, and
DestroyAdmin.destroy
method was called, CPU usage would peak for up to two minutes and the
process of destroying the server would be delayed. This was caused by
Outrigger making repeated attempts to nicely unexport the server
with no pause between attempts. This version addresses this issue by
introducing a pause between unexport attempts. This delay can be controlled
using the unexportRetryDelay
configuration entry. This version also introduces the maxUnexportDelay
configuration entry, which can be used to control how long Outrigger will
attempt nice unexport attempts before giving up and forcefully unexporting
itself (see the maxUnexportDelay
configuration entry for more
details).
What this meant in practice was that if you had entry, E, read
locked under two transactions T1, and T2 and a blocked
take
(or takeIfExists
) under T1 whose
template matched E, then the take
would not unblock
if T2 was prepared (the take
would unblock if
T2 was aborted) even though the prepare resolved the last
conflicting transaction. A take
(or takeIfExists
)
under T1 started after the prepare of T2 would function
properly. The take would also eventually unblock if the maximum server
query timeout feature was being used.
org.apache.river.outrigger.AdminIterator
or the net.jini.space.JavaSpace05.contents
method
while at the same time writing entries of a type the iteration could return
would cause a deadlock. Note, in practice this was much more likely
to happen with AdminIterator
than contents
.
This issue has been fixed in this release.