blob: 50eb8364e7b7b93529259d0404c9e9e0728521f5 [file] [log] [blame]
<!--
! 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.
!-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/1998/REC-html40-19980424/strict.dtd">
<html>
<head>
<title>Service Browser</title>
</head>
<body text="#000000" bgcolor="#ffffff" link="#9b37cc"
vlink="#cc1877" alink="#ffffff">
A visualization tool for exploring Jini Network Technology
communities (<i>djinns</i>) with support for ServiceUI. The Service Browser
lets you discover lookup services and inspect the various
services registered within those lookup services. This tool
is provided as an example program within the Apache River release
but many who use it think
of it more as a utility than an example.
<p>
This document provides the following information about the Service Browser:
<ul>
<li><a href="#running">Running the Service Browser</a>
<li><a href="#discovering">Discovering and Selecting a Lookup Service</a>
<li><a href="#inspecting">Inspecting Services</a>
<li><a href="#filtering">Filtering Services</a>
<li><a href="#miscops">Other Operations</a>
<li><a href="#configuring">Configuring the Service Browser</a>
<li><a href="#logging">Loggers and Logging Levels</a>
<li><a href="#examples">Examples for Running the Service Browser</a>
</ul>
<a name="running"></a>
<h2>Running the Service Browser</h2>
The Service Browser is started with the following command line
structure:
<blockquote><pre>
% java <var><b>java_options</b></var>
-jar <var><b>install_dir</b></var>/lib/browser.jar
<var><b>config_options</b></var>
</pre></blockquote>
where <var><b>java_options</b></var> includes such things as the security
policy file and the RMI codebase annotation, <var><b>install_dir</b></var>
is the directory where the Apache River release is installed, and
<var><b>config_options</b></var> includes any
{@link net.jini.config.Configuration} provider options. The
Service Browser can be run with no <var><b>config_options</b></var>.
For the RMI codebase annotation,
the system property <code>java.rmi.server.codebase</code> should be set to
two URLs that provide HTTP-based access to the Service Browser's download
JAR files,
<code><var><b>install_dir</b></var>/lib-dl/browser-dl.jar</code> and
<code><var><b>install_dir</b></var>/lib-dl/jsk-dl.jar</code>, in that order.
<p>
The Service Browser also can be run as a nonactivatable entity under the
{@linkplain com.sun.jini.start Service Starter}, using
<code>com.sun.jini.example.browser.Browser</code> for the implementation
class, <code><var><b>install_dir</b></var>/lib/browser.jar</code> for the
implementation class path, and a codebase containing URLs for
<code><var><b>install_dir</b></var>/lib-dl/browser-dl.jar</code> and
<code><var><b>install_dir</b></var>/lib-dl/jsk-dl.jar</code> (in that order).
<a name="discovering"></a>
<h2>Discovering and Selecting a Lookup Service</h2>
The lookup services that will be discovered are initially controlled
by configuration entries, with the default being to perform multicast
discovery for all lookup services. If you specify one or more groups or
addresses in a configuration file (as described in
<a href="#configuring">Configuring the Service Browser</a>),
the browser only discovers lookup services that are members of those groups
or that are at those addresses.
<p>
The Service Browser presents a single window when it is started. The
window has the menu items <b>File</b>, <b>Registrar</b>, <b>Options</b>,
<b>Services</b>, and <b>Attributes</b>. The upper text area changes to
show which groups and/or addresses are being used for discovery and
how many lookup services have been discovered.
The picture below shows a typical Service Browser main window, in which
nine lookup services have been discovered, but none have yet been selected.
<p>
<img src="doc-files/browser1.gif"
Alt="Picture of the lookup browser as it looks when it first starts.">
<p>
As lookup services are discovered,
they appear under the <b>Registrar</b> menu, listed by unicast address.
A specific lookup service can then be selected from this menu for browsing.
When a lookup service is selected, the upper text area will be revised to
show the number of services registered in that lookup service, and the lower
folder area will show the registered services. Administrable services
are shown with a blue icon, and non-administrable services are shown with
a gray icon. As new services register or existing services unregister,
the contents of the window will change automatically to reflect them.
<p>
After initial start up, different lookup services can be discovered
using several items available from the <b>File</b> menu:
<ul>
<li><b>Find All</b> will perform multicast discovery for all lookup
services. This is the default behavior of the
browser when it first starts.</li>
<li><b>Find Public</b> will perform multicast discovery for all lookup
services that are members of the <code>public</code> group.</li>
<li><b>Find By Group...</b> will present a dialog box allowing you to
specify one or more group names (separated by commas or whitespace).
Multicast discovery will then be performed to find all lookup
services that are members of those groups.</li>
<li><b>Find By Address...</b> will present a dialog box allowing you to
specify one or more unicast addresses (separated by commas or
whitespace). Unicast discovery will then be performed to find the
lookup services at those adddresses.</li>
</ul>
<p>
For example, the picture below shows the dialog box presented when the
<b>Find By Group...</b> menu item is selected.
<p>
<img src="doc-files/browser2.gif"
Alt="Picture of the lookup browser with File menu pulled down.">
<p>
In this next picture, the group name <code>examples.jini.sun.com</code>
will be entered.
<p>
<img src="doc-files/browser3.gif"
Alt="Picture of the lookup browser with group dialog box visible.">
<p>
After the group <code>examples.jini.sun.com</code> has been entered, a list of
discovered lookup services will appear in the <b>Registrar</b> menu.
In this example, only the host
<code>kahlua</code> has a lookup service running that is a member of
<code>examples.jini.sun.com</code>, so <code>kahlua</code> is the only
address in the drop-down list from the <b>Registrar</b> menu.
<p>
<img src="doc-files/browser4.gif"
Alt="Picture of the lookup browser with drop-down registrar list visible.">
<p>
When <code>kahlua</code> is selected from the <b>Registrar</b>
menu, the window contents change as shown in the next picture.
In this example, six services are registered:
<p>
<img src="doc-files/browser5.gif"
Alt="Picture of the lookup browser with six services visible.">
<a name="inspecting"></a>
<h2>Inspecting Services</h2>
Double clicking on a service listed in the lower area of the main window
will open a new window, which can be used to inspect and optionally edit
attributes of the selected service. The window is titled <b>ServiceItem
Editor</b> if the service's administrative proxy implements any of the
administrative interfaces supported by the Service Browser, otherwise it is
titled <b>ServiceItem Browser</b>. In our running example,
double clicking on the <b>net.jini.core.lookup.ServiceRegistrar</b>
item opens this window:
<p>
<img src="doc-files/browser6.gif"
Alt="Picture of the ServiceItem editor when first opened.">
<p>
The window shows all of the attribute sets
that can be inspected and, in some cases, altered. Attribute sets and
attributes with blue icons can be edited, those with gray icons cannot.
An attribute set can be edited if it is not
{@link net.jini.lookup.entry.ServiceControlled} and the service's
administrative proxy implements the {@link net.jini.admin.JoinAdmin} interface.
Within an editable attribute set, an attribute can be edited if it is of
type <code>String</code> or one of the primitive wrapper classes.
The two attribute sets shown in the example above are <b>ServiceInfo</b>
and <b>BasicServiceType</b>.
Each of these entries can be expanded by double-clicking on them
as illustrated in the next two pictures.
<p>
Expanding the <b>BasicServiceType</b> entry:
<p>
<img src="doc-files/browser7.gif"
Alt="Picture of the ServiceItem editor with BasicServiceType expanded.">
<p>
Expanding the <b>ServiceInfo</b> entry:
<p>
<img src="doc-files/browser8.gif"
Alt="Picture of the ServiceItem editor with all items expanded.">
<p>
Double clicking again on an entry collapses the view. In an expanded entry,
double clicking on an editable attribute brings up a dialog box that
allows you to input a new value for the attribute. You can also use
the <b>Edit</b> menu in the <b>ServiceItem Editor</b> window to
add and remove attribute sets, if the service's administrative proxy
implements the {@link net.jini.admin.JoinAdmin} interface.
Select <b>Add attribute...</b> from the <b>Edit</b> menu to add an
attribute set. (Note that for this to work, you will have to run the
Service Browser in such a way that the desired attribute set classes
are in both its class path and its codebase.)
Click on an attribute set and then select <b>Remove attribute</b> from
the <b>Edit</b> menu to delete an attribute set.
<a name="filtering"></a>
<h2>Filtering Services</h2>
Back in the main window, the <b>Services</b> menu shows various types that
the registered services are instances of. You can select one or more of
these types to add them your current template to refine the set of
services displayed in the lower area of the window. When you select a
type, it appears in the upper text area to show you what your new
template contains, the revised number of matching services is shown,
and only the services that are instances of all of the selected types are
displayed in the lower area.
<p>
Similarly, the <b>Attributes</b> menu shows attribute set classes (with
package prefixes removed) that can be added to your current template to
refine the set of services.
When you select a class, it appears in the upper text area to
show you what your new template contains, the revised number of
matching services is shown, and only the services with such an attribute
set are displayed in the lower area. In addition, the selected menu item
changes to a pull-aside menu.
You can go back to the <b>Attributes</b> menu to select
additional attribute set classes, or traverse a pull-aside menu to
see the names of attributes, each of which is itself a pull-aside
menu. You can traverse these to see the possible values for the
attributes, and select one to further refine your search. You
can deselect existing attribute choices, and you can deselect
the <code>(match)</code> menu item to deselect an entire class.
<p>
By default, the <b>Services</b> menu only shows service interface types. You
can select <b>Service classes</b> from the <b>Options</b> menu to see service
implementation classes instead. By default, only the most-derived interfaces
or classes are shown, but you can select <b>Service supertypes</b> from the
<b>Options</b> menu to see supertypes as well. Similarly, by default only the
most-derived attribute set classes are shown in the <b>Attributes</b>
menu, but you can select <b>Attribute supertypes</b> from the
<b>Options</b> menu to see superclasses as well.
<p>
Select <b>Reset</b> from the <b>File</b> menu of the main window
to reset the template to the initial (empty) state.
<a name="miscops"></a>
<h2>Other Operations</h2>
In the lower area of the main window, you can right click on a service
to obtain a popup menu. Select <b>Show Info</b> from this menu to see
details about service ID and service types. If the service's administrative
proxy implements any of the administrative interfaces supported by the Service
Browser, selecting <b>Admin Service</b> from this menu brings up the
<b>ServiceItem Editor</b> window. Selecting <b>Browse Service</b> from
this menu brings up the <b>ServiceItem Browser</b> window. If the service
is a JavaSpaces service and either its proxy implements the
{@link net.jini.space.JavaSpace05} interface or its administrative proxy
implements the {@link com.sun.jini.outrigger.JavaSpaceAdmin}
interface, selecting <b>Browse Entries</b> from this menu brings up a
window that displays all of the current entries.
<p>
In a <b>ServiceItem Editor</b> window, the <b>Admin</b> menu allows
various administrative operations to be performed on the service.
If the service's administrative proxy implements the
{@link net.jini.admin.JoinAdmin} interface,
you can use the <b>Joining groups...</b> and <b>Joining locators...</b>
menu items to control which lookup groups and lookup locators the
service uses for lookup discovery and join.
If the service is itself a lookup service and its administrative proxy
implements the {@link net.jini.lookup.DiscoveryAdmin} interface, you can use
the <b>Member groups...</b> menu item to control
which groups the lookup service is a member of, and you can
use the <b>Unicast port...</b> menu item to control
which unicast port the lookup service uses for its lookup locator.
If the service's administrative proxy implements the
{@link com.sun.jini.admin.DestroyAdmin}
interface, you can use the <b>Destroy</b> menu item to destroy the
service. This last menu selection is illustrated in the picture below.
<p>
<img src="doc-files/browser9.gif"
Alt="Picture of the ServiceItem editor with Destroy selected from the Admin menu.">
<a name="configuring"></a>
<h2>Configuring the Service Browser</h2>
The Service Browser obtains its configuration by calling
{@link net.jini.config.ConfigurationProvider#getInstance(String[],ClassLoader)
ConfigurationProvider.getInstance} with the <var><b>config_options</b></var>
specified on the command line and the class loader for the main
implementation class.
<p>
The Service Browser supports the following configuration
entries, with component <code>com.sun.jini.example.browser</code>:
<p>
<a name="adminPreparer"></a>
<table summary="Describes the adminPreparer configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
adminPreparer</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> {@link net.jini.security.ProxyPreparer}
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td> <code>
new {@link net.jini.security.BasicProxyPreparer}()
</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> Prepares administrative proxies obtained by calling
the {@link net.jini.admin.Administrable#getAdmin Administrable.getAdmin}
method on service proxies. The value should not be <code>null</code>.
The Service Browser only calls methods on an administrative proxy if
administrative operations are performed using menu items. Methods of
the {@link net.jini.admin.JoinAdmin},
{@link net.jini.lookup.DiscoveryAdmin},
{@link com.sun.jini.admin.DestroyAdmin}, and
{@link com.sun.jini.outrigger.JavaSpaceAdmin} interfaces can be invoked.
</table>
<a name="discoveryManager"></a>
<table summary="Describes the discoveryManager configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
discoveryManager</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> {@link net.jini.discovery.DiscoveryManagement}
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td>
<pre>
new {@link net.jini.discovery.LookupDiscoveryManager}(
{@link net.jini.discovery.DiscoveryGroupManagement#NO_GROUPS},
null, // locators
null, // listener
this) // config
</pre>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> Supplies the object used to discover lookup services.
The value should not be <code>null</code>. The object returned must
also implement {@link net.jini.discovery.DiscoveryGroupManagement} and
{@link net.jini.discovery.DiscoveryLocatorManagement}, and should be
configured initially to discover no groups and no specific lookup
services.
</table>
<a name="exitActionListener"></a>
<table summary="Describes the exitActionListener configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
exitActionListener</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> {@link java.awt.event.ActionListener}
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td> see the {@link com.sun.jini.example.browser.Browser}
constructors for details
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> The action listener for the <b>Exit</b> item of
the <b>File</b> menu.
</table>
<a name="folderView"></a>
<table summary="Describes the folderView configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
folderView</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> <code>boolean</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td> <code>true</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> Controls the format of the main window.
If <code>true</code>, the main window is split into two areas
as described in the rest of this documentation. If <code>false</code>,
the main window a single text area, and many of the browsing and
administrative operations are not available; the <b>Show Matches</b>
item of the <b>File</b> menu must be used to display services
registered in the selected lookup service.
</table>
<a name="initialLookupGroups"></a>
<table summary="Describes the initialLookupGroups configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
initialLookupGroups</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> <code>String[]</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td> <code>null</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> The names of the lookup groups that the Service
Browser should initially discover. An empty array specifies that no groups
should be discovered. A <code>null</code> value specifies that all
lookup services should be discovered. Otherwise, the value specifies the
names of the groups to discover. The array must not contain
<code>null</code> elements. This entry used when the Service Browser is
first started; after initial startup, lookup service discovery is
controlled through the <b>File</b> menu.
</table>
<a name="initialLookupLocators"></a>
<table summary="Describes the initialLookupLocators configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
initialLookupLocators</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> <code>{@link net.jini.core.discovery.LookupLocator}[]</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td> <code>null</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> The locators for specific lookup services that
the Service Browser should initially discover. An empty array or
<code>null</code> specifies that no specific lookup services
should be discovered. The array must not contain <code>null</code>
elements. This entry is used when the Service Browser is first started;
after initial startup, lookup service discovery is controlled through
the <b>File</b> menu.
<p>
Note that the constraints specified in the <code>locatorConstraints</code>
configuration entry will not be used for these initial locators; any
desired constraints should be attached directly to the initial locators.
</table>
<a name="leaseManager"></a>
<table summary="Describes the leaseManager configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
leaseManager</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> {@link net.jini.lease.LeaseRenewalManager}
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td> <code>new LeaseRenewalManager(this /* config */)</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> Supplies the lease renewal manager used to
renew leases for remote event registrations and when obtaining the
entries of a JavaSpaces service. The value should not be
<code>null</code>.
</table>
<a name="leasePreparer"></a>
<table summary="Describes the leasePreparer configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
leasePreparer</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> {@link net.jini.security.ProxyPreparer}
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td> <code>
new {@link net.jini.security.BasicProxyPreparer}()
</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> Prepares leases obtained from registering
for event notifications with lookup services and from requesting
the entries of a JavaSpaces service. The value should not be
<code>null</code>.
<p>
The Service Browser calls the {@link net.jini.core.lease.Lease#renew
renew} and {@link net.jini.core.lease.Lease#cancel cancel} methods on
leases, and the {@link net.jini.core.lease.LeaseMap#renewAll renewAll}
method on lease maps created (via the {@link
net.jini.lease.LeaseRenewalManager}) from leases.
</table>
<a name="listenerExporter"></a>
<table summary="Describes the listenerExporter configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
listenerExporter</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> {@link net.jini.export.Exporter}
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td>
<pre>
new {@link net.jini.jeri.BasicJeriExporter}(
{@link net.jini.jeri.tcp.TcpServerEndpoint#getInstance TcpServerEndpoint.getInstance}(0),
new {@link net.jini.jeri.BasicILFactory}(), false, false)
</pre>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> The object to use for exporting all
{@link net.jini.core.event.RemoteEventListener} instances used
by the Service Browser when registering for event notifications from
lookup services. The value should not be <code>null</code>.
</table>
<a name="locatorConstraints"></a>
<table summary="Describes the locatorConstraints configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
locatorConstraints</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> {@link net.jini.core.constraint.MethodConstraints}
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td> <code>null</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> Constraints to attach to any
{@link net.jini.core.discovery.LookupLocator} instances constructed
from the addresses entered using the <b>Find By Address...</b> menu item.
<p>
These constraints are not attached to the locators obtained from the
<code>initialLookupLocators</code> configuration entry.
</table>
<a name="loginContext"></a>
<table summary="Describes the loginContext configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
loginContext</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> {@link javax.security.auth.login.LoginContext}
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td> <code>null</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> Specifies the JAAS login context to use for
performing a JAAS login and supplying the
{@link javax.security.auth.Subject} to use when running the
Service Browser. If <code>null</code>, no JAAS login is performed
and no subject is used.
</table>
<a name="servicePreparer"></a>
<table summary="Describes the servicePreparer configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
servicePreparer</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> {@link net.jini.security.ProxyPreparer}
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td> <code>
new {@link net.jini.security.BasicProxyPreparer}()
</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> Prepares service proxies obtained from lookup servics.
The value should not be <code>null</code>. The Service Browser
calls the {@link net.jini.admin.Administrable#getAdmin
Administrable.getAdmin} method on a service proxy for most
administrative operations, and calls the
{@link net.jini.space.JavaSpace05#contents JavaSpace05.contents}
method on a JavaSpaces service proxy to browse entries.
</table>
<a name="uninterestingInterfaces"></a>
<table summary="Describes the uninterestingInterfaces configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
uninterestingInterfaces</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> <code>String[]</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td>
<pre>
new String[]{
"java.io.Serializable",
"java.rmi.Remote",
"net.jini.admin.Administrable",
"net.jini.core.constraint.RemoteMethodControl",
"net.jini.id.ReferentUuid"
"net.jini.security.proxytrust.TrustEquivalence"}
</pre>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> Supplies the set of interface names that are not
interesting to choose when displaying service instances the lower
area of the main window. If the service proxy implements exactly
one interface that is not in this list, the name of that interface
is used to name the service, otherwise the concrete class of the
service proxy is used appended with all the names of the 'interesting'
interfaces implemented by that proxy. The value should not be
<code>null</code>.
</table>
<a name="autoConfirm"></a>
<table summary="Describes the autoConfirm configuration entry"
border="0" cellpadding="2">
<tr valign="top">
<th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
<th scope="col" align="left" colspan="2"> <font size="+1"><code>
autoConfirm</code></font>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Type: <td> <code>boolean</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Default: <td> <code>false</code>
<tr valign="top"> <td> &nbsp <th scope="row" align="right">
Description: <td> Controls whether a confirmation window must popup that
requires a confirmation for the update or removal of the service editor
window. In case set to <code>true</code> closing of the service editor
window will occur automatically in case a service is removed, in case of
modifications to the lookup attributes of a service the service editor
window will be updated.
</table>
<p>
Note that additional entries can also be specified to configure the
{@link net.jini.lease.LeaseRenewalManager},
{@link net.jini.discovery.LookupDiscovery}, and
{@link net.jini.discovery.LookupLocatorDiscovery} components. For
example, the Service Browser assumes you have configured the discovery
manager (obtained from the <code>discoveryManager</code> configuration
entry) to enforce any desired constraints for multicast discovery
and to perform any desired proxy preparation for all discovered lookup
services.
<p>
The most commonly used configuration entries are likely to be:
<ul>
<li><a href="#initialLookupGroups"><code>initialLookupGroups</code></a>
<li><a href="#initialLookupLocators"><code>initialLookupLocators</code></a>
</ul>
<p>
Secure deployments typically will provide values for most of the following
configuration entries:
<ul>
<li><a href="#loginContext"><code>loginContext</code></a>
<li><a href="#leasePreparer"><code>leasePreparer</code></a>
<li><a href="#servicePreparer"><code>servicePreparer</code></a>
<li><a href="#adminPreparer"><code>adminPreparer</code></a>
<li><a href="#listenerExporter"><code>listenerExporter</code></a>
<li><a href="#locatorConstraints"><code>locatorConstraints</code></a>
</ul>
plus the following configuration entries for <code>LookupDiscovery</code>
(if groups are used for discovery):
<ul>
<li><code>registrarPreparer</code></li>
<li><code>discoveryConstraints</code></li>
</ul>
and the following configuration entry for <code>LookupLocatorDiscovery</code>
(if locators are used for discovery):
<ul>
<li><code>registrarPreparer</code></li>
</ul>
<a name="logging"></a>
<h2>Loggers and Logging Levels</h2>
The Service Browser uses the {@link java.util.logging.Logger} named
<code>com.sun.jini.example.browser</code> to log
information at the following logging levels:
<p>
<table border="1" cellpadding="5"
summary="Describes logging performed by Service Browser at different
logging levels">
<caption halign="center" valign="top"><b><code>
com.sun.jini.example.browser</code></b></caption>
<tr> <th scope="col"> Level <th scope="col"> Description
<tr> <td> {@link java.util.logging.Level#SEVERE SEVERE} <td>
Problems that prevent Service Browser startup
<tr> <td> {@link java.util.logging.Level#INFO INFO} <td> Potentially
interesting exceptions that occur when performing operations
<tr> <td> {@link com.sun.jini.logging.Levels#HANDLED HANDLED} <td>
Less interesting exceptions that occur when performing operations
</table>
<p>
See the {@link com.sun.jini.logging.LogManager} class for one way to use the
<code>HANDLED</code> logging level in standard logging configuration files.
<a name="examples"></a>
<h2>Examples for Running the Service Browser</h2>
An example command line for starting the Service Browser is:
<blockquote><pre>
% java -Djava.security.policy=<a href="#policy">browser.policy</a>
-Djava.rmi.server.codebase="http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/browser-dl.jar http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar"
-Djava.protocol.handler.pkgs=net.jini.url
-jar <var><b>install_dir</b></var>/lib/browser.jar
</pre></blockquote>
In this example, the local host is assumed to have the name
<var><b>your_host</b></var>, running an HTTP server on port
<var><b>http_port</b></var>, serving files in the <code>lib</code>
subdirectory of <var><b>install_dir</b></var>, the directory where the
Apache River release is installed.
When the Service Browser is run this way, without a configuration file, it
will perform multicast discovery to find all available lookup
services, and will use Jini extensible remote invocation (Jini ERI)
over TCP/IP for its remote event listeners.
<p>
An example command line for starting the Service Browser with a
configuration file is:
<blockquote><pre>
% java -Djava.security.policy=<a href="#policy">browser.policy</a>
-Djava.rmi.server.codebase="http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/browser-dl.jar http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar"
-Djava.protocol.handler.pkgs=net.jini.url
-jar <var><b>install_dir</b></var>/lib/browser.jar
<a href="#public">public.config</a>
</pre></blockquote>
The example configuration file <code>public.config</code> only discovers
lookup services in the public group:
<a name="public"></a>
<blockquote><pre>
com.sun.jini.example.browser {
initialLookupGroups = new String[]{""};
}
</pre></blockquote>
<p>
The following example configuration file initially discovers no
lookup services and uses JRMP for its remote event listeners:
<blockquote><pre>
com.sun.jini.example.browser {
initialLookupGroups = new String[]{};
listenerExporter = new net.jini.jrmp.JrmpExporter();
}
</pre></blockquote>
<p>
In all the above command lines, the policy file <code>browser.policy</code>
was specified for the <code>java.security.policy</code> system property.
An example policy file is:
<a name="policy"></a>
<blockquote><pre>
grant codebase "file:<var><b>install_dir</b></var>/lib/browser.jar" {
permission java.security.AllPermission;
};
grant codebase "file:<var><b>install_dir</b></var>/lib/jsk-platform.jar" {
permission java.security.AllPermission;
};
grant codebase "file:<var><b>install_dir</b></var>/lib/jsk-lib.jar" {
permission java.security.AllPermission;
};
grant {
permission java.net.SocketPermission "*:1024-", "connect";
};
</pre></blockquote>
<p>
<b>Note:</b> Of course, a more restrictive policy file could be used;
the one shown here is for illustrative purposes only.
<p>
An example of running under the Service Starter is:
<blockquote><pre>
% java -Djava.security.policy=<a href="#start_policy">start.policy</a>
-Djava.protocol.handler.pkgs=net.jini.url
-jar <var><b>install_dir</b></var>/lib/start.jar
<a href="#start_config">start.config</a>
</pre></blockquote>
<p>
where <code>start.config</code> is the following configuration file:
<a name="start_config"></a>
<blockquote><pre>
import com.sun.jini.start.NonActivatableServiceDescriptor;
import com.sun.jini.start.ServiceDescriptor;
com.sun.jini.start {
serviceDescriptors = new ServiceDescriptor[]{
new NonActivatableServiceDescriptor(
"http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/browser-dl.jar http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar",
"<a href="#policy">browser.policy</a>",
"<var><b>install_dir</b></var>/lib/browser.jar",
"com.sun.jini.example.browser.Browser",
new String[]{"<a href="#public">public.config</a>"})
};
}
</pre></blockquote>
An example policy file for <code>start.policy</code> is:
<a name="start_policy"></a>
<blockquote><pre>
grant codebase "file:<var><b>install_dir</b></var>/lib/start.jar" {
permission java.security.AllPermission;
};
grant codebase "file:<var><b>install_dir</b></var>/lib/jsk-platform.jar" {
permission java.security.AllPermission;
};
</pre></blockquote>
</body>
</html>