Modified: river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/package.html URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/package.html?rev=1634322&r1=1634321&r2=1634322&view=diff ============================================================================== --- river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/package.html (original) +++ river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/package.html Sun Oct 26 13:17:28 2014 @@ -1,1412 +1,1418 @@ -<!-- - ! 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 3.2 Final//EN"> -<html> -<head> - - -</head> -<body bgcolor="white"> - -Provides implementations of the -{@linkplain net.jini.core.transaction.server.TransactionManager} service. -Three implementations are available for use with the -{@link com.sun.jini.start} package: - -<ul> -<li> <code>com.sun.jini.mahalo.ActivatableMahaloImpl</code> - an - activatable, persistent implementation, suitable for use with - {@link com.sun.jini.start.SharedActivatableServiceDescriptor} -<li> <code>com.sun.jini.mahalo.NonActivatableMahaloImpl</code> - a - non-activatable, persistent implementation, suitable for use with - {@link com.sun.jini.start.NonActivatableServiceDescriptor} -<li> <code>com.sun.jini.mahalo.TransientMahaloImpl</code> - a - transient implementation, also suitable for use with - {@link com.sun.jini.start.NonActivatableServiceDescriptor} -</ul> - -<p> -The JAR file <code>mahalo.jar</code>, included in the <code>lib</code> -subdirectory of the Apache River release -installation, contains the classes for the three Mahalo service -implementations. The <code>mahalo-dl.jar</code> -and <code>jsk-dl.jar</code> files in the <code>lib-dl</code> subdirectory -contain -the classes needed in the codebase for its downloaded proxies. None of the -JAR files include classes from <code>jsk-platform.jar</code>, which are -included by the service starter's <code>start.jar</code> JAR file, and -need to be included in the codebase of clients. -<p> - -The object returned by the {@link net.jini.admin.Administrable#getAdmin -Administrable.getAdmin} method on a Mahalo service proxy implements {@link -net.jini.admin.JoinAdmin} and {@link com.sun.jini.admin.DestroyAdmin}. -<p> - -This document provides the following information about Mahalo: -<ul> -<li> <a href="#configuration">Configuring Mahalo</a> -<li> <a href="#access_control">Access Control Permission Targets</a> -<li> <a href="#logging">Logging</a> -<li> <a href="#examples">Examples for Running Mahalo</a> -</ul> -<p> - -<a name="configuration"> -<h2>Configuring Mahalo</h2> -</a> - -The Mahalo service implementation obtains its configuration by calling -{@link net.jini.config.ConfigurationProvider#getInstance(String[], ClassLoader) -ConfigurationProvider.getInstance} with the specified -<i>configOptions</i> and the class loader for the implementation -class. -<p> - -The implementation supports the following configuration entries, with -component <code>com.sun.jini.mahalo</code>: <p> - - <table summary="Describes the activationIdPreparer configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - activationIdPreparer</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link net.jini.security.ProxyPreparer} - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code> - new {@link net.jini.security.BasicProxyPreparer}() - </code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: <td> The proxy preparer for the service's activation - ID. The value should not be <code>null</code>. This entry is - obtained at service start and restart. This entry is only used by - the activatable implementation. <p> - - Clients call the {@link java.rmi.activation.ActivationID#activate - activate} method on instances of {@link - java.rmi.activation.ActivationID} when they need to reactivate the - service. - </table> - - <table summary="Describes the activationSystemPreparer configuration - entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - activationSystemPreparer</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link net.jini.security.ProxyPreparer} - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code> - new {@link net.jini.security.BasicProxyPreparer}()</code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: <td> The proxy preparer for the proxy for the - activation system. The value should not be <code>null</code>. This - entry is obtained at service start and restart. This entry is only - used by the activatable implementation. <p> - - The service calls the {@link - java.rmi.activation.ActivationSystem#unregisterObject - unregisterObject} method on the {@link - java.rmi.activation.ActivationSystem} when the service is - destroyed. - </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">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - discoveryManager</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link net.jini.discovery.DiscoveryManagement} - <tr valign="top"> <td>   <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>   <th scope="row" align="right"> - Description: <td> Supplies an object used to discover the lookup - services with which this service should register. 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 or specific lookup - services. This entry is obtained at service start and restart. - </table> - - <table summary="Describes the initialLookupAttributes configuration - entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - initialLookupAttributes</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> <code>{@link net.jini.core.entry.Entry}[]</code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code>new Entry[0]</code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: <td> Entries to include in the set of attributes the - service supplies when registering with lookup services, in - addition to {@link net.jini.lookup.entry.ServiceInfo} and {@link - com.sun.jini.lookup.entry.BasicServiceType} instances provided by - the service. An empty array or <code>null</code> specifies that - only the service-provided attributes should be added. The array - must not contain <code>null</code> elements. This entry is - obtained and used when the service is first started. Following - initial startup, the set of attributes is controlled though the - service's {@link net.jini.admin.JoinAdmin} administrable - interface. - </table> - - <table summary="Describes the initialLookupGroups configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - initialLookupGroups</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> <code>String[]</code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code>new String[] { "" } /* public group */</code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: <td> The names of the lookup groups that the service - should discover and join. An empty array specifies that no groups - should be joined. A <code>null</code> value specifies that all - groups should be joined. Otherwise, the value specifies the names - of the groups to join. The array must not contain - <code>null</code> elements. This entry is obtained and used when - the service is first started. Following initial startup, the set - of lookup groups is controlled through the service's {@link - net.jini.admin.JoinAdmin} administrable interface. - </table> - - <table summary="Describes the initialLookupLocators configuration - entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - initialLookupLocators</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> <code>{@link net.jini.core.discovery.LookupLocator}[]</code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code>new LookupLocator[0]</code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: <td> The locations of specific lookup services that - the service should discover and join. An empty array or - <code>null</code> specifies that no specific lookup services - should be joined. The array must not contain <code>null</code> - elements. This entry is obtained and used when the service is - first started. Following initial startup, the set of specific - lookup services is controlled through the service's {@link - net.jini.admin.JoinAdmin} administrable interface. <p> - - The <code>LookupLocator</code> instances specified in this entry - will not be prepared by the proxy preparer specified in the - <code>locatorPreparer</code> entry, and will only be prepared by - the preparer in the <code>recoveredLocatorPreparer</code> entry - when they are being recovered. - </table> - - <table summary="Describes the leasePeriodPolicy configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - leasePeriodPolicy</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link com.sun.jini.landlord.LeasePeriodPolicy} - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> -<pre> -new {@link com.sun.jini.landlord.FixedLeasePeriodPolicy}( - 3 * 60 * 60 * 1000L, // max = 3 hours - 60 * 60 * 1000L) // default = 1 hour -</pre> - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: <td> The policy for calculating lease grants and - renewals. The value should not be <code>null</code>. The default - grants leases with a maximum duration of 3 hours and a default - duration of 1 hour. This entry is obtained at service start and - restart. - </table> - - <table summary="Describes the loginContext configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - loginContext</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link javax.security.auth.login.LoginContext} - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code>null</code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: <td> If not <code>null</code>, 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. If <code>null</code>, no JAAS login is performed. This - entry is obtained at service start and restart. - </table> - - <table summary="Describes the lookupLocatorPreparer configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - lookupLocatorPreparer</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link net.jini.security.ProxyPreparer} - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code> - new {@link net.jini.security.BasicProxyPreparer}() - </code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: <td> Prepares {@link - net.jini.core.discovery.LookupLocator} instances - passed to the {@link net.jini.admin.JoinAdmin} methods. The value - should not be <code>null</code>. When registering with lookup - services, this service may call or use the constraints assigned to - the {@link net.jini.core.discovery.LookupLocator#getRegistrar - getRegistrar} methods of <code>LookupLocator</code> instances - returned from this preparer. This entry is obtained at service - start and restart. <p> - - This preparer needs to perform all operations needed to use a - newly received lookup locator, typically including verifying trust - in the lookup locator and setting constraints. The prepared lookup - locator will be retained by the service in its persistent - store. <p> - - The <code>LookupLocator</code> instances obtained from the - <code>initialLookupLocators</code> configuration entry will not be - prepared by this preparer. - </table> - -<table summary="Describes the participantPreparer configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"> - <code>participantPreparer</code></font> - - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link net.jini.security.ProxyPreparer} - - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code>new {@link net.jini.security.BasicProxyPreparer}() - </code> - - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: - <td> Preparer for - {@link net.jini.core.transaction.server.TransactionParticipant} - proxies that have joined transactions from this service - via the {@link - net.jini.core.transaction.server.TransactionManager#join join} - method. - This preparer is - used to prepare proxies only when they initially - join with this service. - The value should not - be <code>null</code>. The preparer must return a listener - which is equal to the original listener as determined by - {@link java.lang.Object#equals Object.equals}. - This entry is obtained at service start and restart. <p> - - This preparer needs to perform all operations needed to use a - newly received participant, - typically including verifying trust in - the participant proxy, granting permissions, and setting - constraints. The prepared participant will be retained - by the service in its persistent store. <p> - - The service (potentially) calls the - {@link net.jini.core.transaction.server.TransactionParticipant#abort abort}, - {@link net.jini.core.transaction.server.TransactionParticipant#commit commit}, - {@link net.jini.core.transaction.server.TransactionParticipant#prepare prepare}, and - {@link net.jini.core.transaction.server.TransactionParticipant#prepareAndCommit prepareAndCommit}, - methods. - </table> - - <table summary="Describes the persistenceDirectory configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - persistenceDirectory</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> <code>String</code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <em>Required for persistent implementations: no - default</em> - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: <td> The directory where the service's persistent - state is recorded. The value should not be <code>null</code>. This - entry is obtained at service start and restart. This entry is - required for persistent implementations and is otherwise not used. - </table> - - <table summary="Describes the recoveredLookupLocatorPreparer - configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - recoveredLookupLocatorPreparer</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link net.jini.security.ProxyPreparer} - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code> - new {@link net.jini.security.BasicProxyPreparer}() - </code> - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: <td> Prepares {@link - net.jini.core.discovery.LookupLocator} instances for use when they - are recovered from persistent storage. The value should not be - <code>null</code>. When registering with lookup services, this - service may call or use the constraints assigned to the {@link - net.jini.core.discovery.LookupLocator#getRegistrar getRegistrar} - methods of <code>LookupLocator</code> instances returned from this - preparer. This entry is obtained at service start and - restart. This entry is only used by persistent - implementations. <p> - - This preparer needs to perform only those operations whose results - are not retained in the lookup locator itself, but need to be - performed in the environment in which the lookup locator is - unmarshalled. Typically no operations are needed. <p> - - The <code>LookupLocator</code> instances obtained from the - <code>initialLookupLocators</code> configuration entry will not be - prepared by this preparer until they are being recovered. - </table> - - - <table summary="Describes the recoveredParticipantPreparer configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"> - <code>recoveredParticipantPreparer</code></font> - - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link net.jini.security.ProxyPreparer} - - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code>new {@link net.jini.security.BasicProxyPreparer}() - </code> - - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: - <td> Preparer for recovered - {@link net.jini.core.transaction.server.TransactionParticipant} - proxies that have been previously registered and prepared - with this service (via the {@link - net.jini.core.transaction.server.TransactionManager#join - TransactionManager.join} method). <P> - This preparer needs to perform only those operations whose results are - not retained in the participant itself, but need to be performed in - the environment in which the participant is unmarshalled, - typically just granting permissions. <P> - The service (potentially) calls the - {@link net.jini.core.transaction.server.TransactionParticipant#abort abort}, - {@link net.jini.core.transaction.server.TransactionParticipant#commit commit}, - {@link net.jini.core.transaction.server.TransactionParticipant#prepare prepare}, and - {@link net.jini.core.transaction.server.TransactionParticipant#prepareAndCommit prepareAndCommit}, - methods on these proxies. - </table> - - <table summary="Describes the serverExporter configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"><code> - serverExporter</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link net.jini.export.Exporter} - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> -<pre> -// Activatable implementation -new {@link net.jini.activation.ActivationExporter}( - <i>activationID</i>, - new {@link net.jini.jeri.BasicJeriExporter}( - {@link net.jini.jeri.tcp.TcpServerEndpoint#getInstance TcpServerEndpoint.getInstance}(0), - new {@link net.jini.jeri.BasicILFactory}(), false, true)) -// Non-activatable implementations -new {@link net.jini.jeri.BasicJeriExporter}( - {@link net.jini.jeri.tcp.TcpServerEndpoint#getInstance TcpServerEndpoint.getInstance}(0), - new {@link net.jini.jeri.BasicILFactory}(),false, true) -</pre> - <tr valign="top"> <td>   <th scope="row" align="right"> - Description: <td> The object to use for exporting the service. The - value should not be <code>null</code>. In the activatable case, - the call to <code>getEntry</code> will supply the activation ID in - the <code>data</code> argument. This entry is obtained at service - start and restart. - </table> <p> - -<table summary="Describes the settlerPool configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"> - <code>settlerPool</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link com.sun.jini.thread.TaskManager} - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code>new </code>{@link - com.sun.jini.thread.TaskManager#TaskManager(int, long, float) TaskManager( - 150 /* maxThreads */, - 15000 /* timeout */, - 1.0 /* loadFactor */ - )} - <tr valign="top"> <td>   <th scope="row" align="right"> - - Description: <td> The pool of threads used to settle outstanding - transactions. Outstanding transactions occur when - {@link net.jini.core.transaction.TimeoutExpiredException TimeoutExpiredException} - is thrown from versions of - {@link net.jini.core.transaction.Transaction#abort(long) abort} - and - {@link net.jini.core.transaction.Transaction#commit(long) commit} - that take a timeout parameter. - The {@link com.sun.jini.thread.TaskManager#terminate terminate} - method of this object will be called when the service is - destroyed. Obtained at service start and restart. - </table> - -<table summary="Describes the taskPool configuration entry" - border="0" cellpadding="2"> - <tr valign="top"> - <th scope="col" summary="layout"> <font size="+1">•</font> - <th scope="col" align="left" colspan="2"> <font size="+1"> - <code>taskPool</code></font> - <tr valign="top"> <td>   <th scope="row" align="right"> - Type: <td> {@link com.sun.jini.thread.TaskManager} - <tr valign="top"> <td>   <th scope="row" align="right"> - Default: <td> <code>new </code>{@link - com.sun.jini.thread.TaskManager#TaskManager(int, long, float) TaskManager( - 50 /* maxThreads */, - 15000 /* timeout */, - 3.0 /* loadFactor */ - )} - <tr valign="top"> <td>   <th scope="row" align="right"> - - Description: <td> The pool of threads used to settle - transactions. - The {@link com.sun.jini.thread.TaskManager#terminate terminate} - method of this object will be called when the service is - destroyed. Obtained at service start and restart. - </table> - -Mahalo passes its configuration when creating instances of the following -configurable classes, which may support additional configuration -entries: <p> - -<ul> -<li> {@link net.jini.discovery.LookupDiscoveryManager}, used to discover - lookup services, as specified by the <a href="#discoveryManager"> - <code>discoveryManager</code></a> configuration entry -<li> {@link net.jini.lookup.JoinManager}, used to manage lookup service - registrations -</ul> <p> - -<a name="access_control"> -<h2>Access Control Permission Targets</h2> -</a> - -The following table lists the remote methods on Mahalo's proxy objects and -the associated target names for enforcing access control using {@link -com.sun.jini.mahalo.MahaloPermission}: <p> - -<table border="1" cellpadding="5" - summary="The proxy methods and associated target names for - MahaloPermission."> - -<tr> <th scope="col"> Proxy Method <th scope="col"> Target Name - -<!-- TransactionManager --> - -<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#create - TransactionManager.create} - <td> create -<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#join - TransactionManager.join} - <td> join -<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#getState - TransactionManager.getState} - <td> getState -<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#commit - TransactionManager.commit} - <td> commit -<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#abort - TransactionManager.abort} - <td> abort - -<!-- Lease and LeaseMap --> - -<tr> <td> {@link net.jini.core.lease.Lease#renew Lease.renew} - <td> renew -<tr> <td> {@link net.jini.core.lease.Lease#cancel Lease.cancel} - <td> cancel -<tr> <td> {@link net.jini.core.lease.LeaseMap#renewAll LeaseMap.renewAll} - <td> renewAll -<tr> <td> {@link net.jini.core.lease.LeaseMap#cancelAll LeaseMap.cancelAll} - <td> cancelAll - -<!-- Administrable --> - -<tr> <td> {@link net.jini.admin.Administrable#getAdmin Administrable.getAdmin} - <td> getAdmin - -<!-- JoinAdmin --> - -<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupAttributes - JoinAdmin.getLookupAttributes} - <td> getLookupAttributes -<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupAttributes - JoinAdmin.addLookupAttributes} - <td> addLookupAttributes -<tr> <td> {@link net.jini.admin.JoinAdmin#modifyLookupAttributes - JoinAdmin.modifyLookupAttributes} - <td> modifyLookupAttributes - -<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupGroups - JoinAdmin.getLookupGroups} - <td> getLookupGroups -<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupGroups - JoinAdmin.addLookupGroups} - <td> addLookupGroups -<tr> <td> {@link net.jini.admin.JoinAdmin#removeLookupGroups - JoinAdmin.removeLookupGroups} - <td> removeLookupGroups -<tr> <td> {@link net.jini.admin.JoinAdmin#setLookupGroups - JoinAdmin.setLookupGroups} - <td> setLookupGroups - -<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupLocators - JoinAdmin.getLookupLocators} - <td> getLookupLocators -<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupLocators - JoinAdmin.addLookupLocators} - <td> addLookupLocators -<tr> <td> {@link net.jini.admin.JoinAdmin#removeLookupLocators - JoinAdmin.removeLookupLocators} - <td> removeLookupLocators -<tr> <td> {@link net.jini.admin.JoinAdmin#setLookupLocators - JoinAdmin.setLookupLocators} - <td> setLookupLocators - -<!-- DestroyAdmin --> - -<tr> <td> {@link com.sun.jini.admin.DestroyAdmin#destroy DestroyAdmin.destroy} - <td> destroy - -<!-- ProxyTrust --> - -<tr> <td> {@link net.jini.security.proxytrust.ProxyTrust#getProxyVerifier - ProxyTrust.getProxyVerifier} - <td> getProxyVerifier - -<!-- ServiceProxyAccessor --> - -<tr> <td> {@link com.sun.jini.start.ServiceProxyAccessor#getServiceProxy - ServiceProxyAccessor.getServiceProxy} - <td> getServiceProxy - -</table> <p> - -<a name="logging"> -<h2>Loggers and Logging Levels</h2> -</a> - -The Mahalo service implementation uses separate {@link -java.util.logging.Logger}s, prefixed by <code>com.sun.jini.mahalo</code>, -for each type of information it logs. The following tables describe the -type of information logged as well as the levels of information logged. -<p> - <table border="1" cellpadding="5" - summary="Describes logging performed by destroyLogger at different - logging levels"> - - <caption halign="center" valign="top"><b><code> - com.sun.jini.mahalo.destroy</code></b></caption> - - <tr> <th scope="col"> Level <th scope="col"> Description - - <tr> <td> {@link com.sun.jini.logging.Levels#HANDLED HANDLED} <td> - for exceptions handled during failed service destruction - - <tr> <td> {@link java.util.logging.Level#FINEST FINEST} <td> for low level - operation tracing during service destruction - - </table> <p> - - <table border="1" cellpadding="5" - summary="Describes logging performed by initLogger at different - logging levels"> - - <caption halign="center" valign="top"><b><code> - com.sun.jini.mahalo.init</code></b></caption> - - <tr> <th scope="col"> Level <th scope="col"> Description - - <tr> <td> {@link java.util.logging.Level#SEVERE SEVERE} <td> - for problems that prevent service startup - - <tr> <td> {@link java.util.logging.Level#CONFIG CONFIG} <td> - for configuration access during service initialization - - <tr> <td> {@link com.sun.jini.logging.Levels#HANDLED HANDLED} <td> - for exceptions handled during service initialization - - <tr> <td> {@link java.util.logging.Level#FINEST FINEST} <td> - for low level operation tracing during service initialization - - </table> <p> - - <table border="1" cellpadding="5" - summary="Describes logging performed by operationsLogger at different - logging levels"> - - <caption halign="center" valign="top"><b><code> - com.sun.jini.mahalo.operations</code></b></caption> - - <tr> <th scope="col"> Level <th scope="col"> Description - - <tr> <td> {@link java.util.logging.Level#FINER FINER} <td> - for method level tracing during service operation - - </table> <p> - - <table border="1" cellpadding="5" - summary="Describes logging performed by the participantLogger - at different logging levels"> - - <caption halign="center" valign="top"><b><code> - com.sun.jini.mahalo.participant</code></b></caption> - - <tr> <th scope="col"> Level <th scope="col"> Description - - <tr> <td> {@link java.util.logging.Level#FINEST FINEST} <td> for low level - participant processing tracing (join, commit, abort, etc.) - - </table> <p> - - <table border="1" cellpadding="5" - summary="Describes logging performed by the persistenceLogger - at different logging levels"> - - <caption halign="center" valign="top"><b><code> - com.sun.jini.mahalo.persistence</code></b></caption> - - <tr> <th scope="col"> Level <th scope="col"> Description - - <tr> <td> {@link java.util.logging.Level#SEVERE SEVERE} <td> - for problems that prevent service operation - - <tr> <td> {@link java.util.logging.Level#WARNING WARNING} <td> - for problems making modifications to persistent storage, unexpected - internal errors - - <tr> <td> {@link com.sun.jini.logging.Levels#HANDLED HANDLED} <td> - for exceptions handled when persisting service state - - <tr> <td> {@link java.util.logging.Level#FINEST FINEST} <td> - for low level persistence tracing - - </table> <p> - - <table border="1" cellpadding="5" - summary="Describes logging performed by the startup - at different logging levels"> - - <caption halign="center" valign="top"><b><code> - com.sun.jini.mahalo.startup</code></b></caption> - - <tr> <th scope="col"> Level <th scope="col"> Description - - <tr> <td> {@link java.util.logging.Level#INFO INFO} <td> for successful - service creation message. - - </table> <p> - - <table border="1" cellpadding="5" - summary="Describes logging performed by the transactionsLogger - at different logging levels"> - - <caption halign="center" valign="top"><b><code> - com.sun.jini.mahalo.transactions</code></b></caption> - - <tr> <th scope="col"> Level <th scope="col"> Description - - <tr> <td> {@link java.util.logging.Level#WARNING WARNING} <td> - for internal errors managing transactions - - <tr> <td> {@link com.sun.jini.logging.Levels#HANDLED HANDLED} <td> - for indefinite exceptions managing transactions - - <tr> <td> {@link java.util.logging.Level#FINEST FINEST} <td> for low level - transaction operation tracing (creation, commit, abort, etc.) - - </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. <p> - -<a name="examples"> -<h2>Examples for Running Mahalo</h2> -</a> - -This section provides examples of running Mahalo in various configurations. - -<ul> -<li> <a href="#assumptions">Assumptions for running the examples</a> -<li> JRMP configurations - <ul> - <li> <a href="#transient_jrmp">Transient</a> - <li> <a href="#persistent_jrmp">Persistent</a> - <li> <a href="#activatable_jrmp">Activatable</a> - </ul> -<li> Jini extensible remote invocation (Jini ERI) configurations - <ul> - <li> <a href="#transient">Transient</a> - <li> <a href="#persistent">Persistent</a> - <li> <a href="#activatable">Activatable</a> - </ul> -<li> <a href="#stop_activatable">Stopping activatable configurations</a> -</ul> <p> - -<a name="assumptions"> -<h3>Assumptions for Running the Examples</h3> -</a> - -The examples below make the following assumptions: <p> - -<ul> -<li> The Java(TM) 2 Platform, Standard Edition, (J2SE(TM)) has been - installed, and its commands are available in the current path -<li> The Apache River release has been installed in the - <var><b>install_dir</b></var> directory -<li> The example configuration and policy files described below are - available in the <var><b>config_dir</b></var> directory -<li> The local host name is <var><b>your_host</b></var> -<li> The local lookup group name is <var><b>your.group</b></var> -<li> The HTTP server for download JAR files is running on - <var><b>your_host</b></var> and is available on port - <var><b>http_port</b></var>. This HTTP server is serving files located - in the <var><b>install_dir</b></var>/lib-dl directory. You can use the - {@link com.sun.jini.tool.ClassServer} class for this purpose. -<li> The examples are being run on UNIX platforms -<li> The examples are being run on a secure network where access control - and authentication are not needed. See the <a - href="../../../../../../source/src/com/sun/jini/example/hello/index.html">hello example</a> for some - client and service configurations that enforce security. -<li> For activatable services, an activation system is running on - <var><b>your_host</b></var>. You can use the {@link - com.sun.jini.phoenix} implementation for this purpose. -</ul> <p> - -Throughout the example, items in <var><b>bold</b></var> need to be -customized for your local environment. - -<a name="transient_jrmp"> -<h3>Starting Transient Mahalo using JRMP</h3> -</a> - -To run a transient Mahalo, which does not store any information -persistently or use the activation system to restart itself, using JRMP -for remote communication, run the following command. <p> - -<blockquote> -<pre> -<!-- cut_begin=start-transient-jrmp-mahalo.sh --> -java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \ - -jar <var><b>install_dir</b></var>/lib/start.jar \ - <a href="#start_transient_jrmp_config"><var><b>config_dir</b></var>/start-transient-jrmp-mahalo.config</a> -<!-- cut_end --> -</pre> -</blockquote> <p> - -This configuration uses the following files. - -<a name="jsk_all_policy"> -<h4>File <var><b>config_dir</b></var>/jsk-all.policy</h4> -</a> - -Use this security policy file for starting and running all Mahalo -configurations. This file grants all permissions to local code included -in the <code>lib</code> subdirectory of the Apache River release installation.<p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/jsk-all.policy --> -grant codebase "file:<var><b>install_dir</b></var>/lib/*" { - permission java.security.AllPermission; -}; -<!-- cut_end --> -</pre> -</blockquote> - -<a name="start_transient_jrmp_config"> -<h4>File <var><b>config_dir</b></var>/start-transient-jrmp-mahalo.config</h4> -</a> - -Use this configuration source file to start transient Mahalo using -JRMP. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/start-transient-jrmp-mahalo.config --> -import com.sun.jini.start.NonActivatableServiceDescriptor; -import com.sun.jini.start.ServiceDescriptor; - -com.sun.jini.start { - private static codebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar" - + " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar"; - private static policy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>"; - private static classpath = "<var><b>install_dir</b></var>/lib/mahalo.jar"; - private static config = "<a href="#transient_jrmp_config"><var><b>config_dir</b></var>/transient-jrmp-mahalo.config</a>"; - - static serviceDescriptors = new ServiceDescriptor[] { - new NonActivatableServiceDescriptor( - codebase, policy, classpath, - "com.sun.jini.mahalo.TransientMahaloImpl", - new String[] { config }) - }; -} -<!-- cut_end --> -</pre> -</blockquote> - -<a name="transient_jrmp_config"> -<h4>File <var><b>config_dir</b></var>/transient-jrmp-mahalo.config</h4> -</a> - -Use this configuration source file to run transient Mahalo using JRMP. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/transient-jrmp-mahalo.config --> -import net.jini.jrmp.JrmpExporter; - -com.sun.jini.mahalo { - initialLookupGroups = new String[] { "<var><b>your.group</b></var>" }; - serverExporter = new JrmpExporter(); -} -<!-- cut_end --> -</pre> -</blockquote> - -<a name="persistent_jrmp"> -<h3>Starting Persistent Mahalo using JRMP</h3> -</a> - -To run a persistent Mahalo, which stores information persistently but does -not use the activation system to restart itself, using JRMP for remote -communication, run the following command. <p> - -<blockquote> -<pre> -<!-- cut_begin=start-persistent-jrmp-mahalo.sh --> -java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \ - -jar <var><b>install_dir</b></var>/lib/start.jar \ - <a href="#start_persistent_jrmp_config"><var><b>config_dir</b></var>/start-persistent-jrmp-mahalo.config</a> -<!-- cut_end --> -</pre> -</blockquote> <p> - -<b>Note:</b> Because JRMP does not provide a convenient way to specify -the same object ID each time a given object is exported, this -configuration is only useful for debugging -- an existing service proxy -cannot be used after the service is restarted. <p> - -This configuration uses the following additional files. - -<a name="start_persistent_jrmp_config"> -<h4>File <var><b>config_dir</b></var>/start-persistent-jrmp-mahalo.config</h4> -</a> - -Use this configuration source file to start persistent Mahalo using -JRMP. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/start-persistent-jrmp-mahalo.config --> -import com.sun.jini.start.NonActivatableServiceDescriptor; -import com.sun.jini.start.ServiceDescriptor; - -com.sun.jini.start { - private static codebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar" - + " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar"; - private static policy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>"; - private static classpath = "<var><b>install_dir</b></var>/lib/mahalo.jar"; - private static config = "<a href="#persistent_jrmp_config"><var><b>config_dir</b></var>/persistent-jrmp-mahalo.config</a>"; - - static serviceDescriptors = new ServiceDescriptor[] { - new NonActivatableServiceDescriptor( - codebase, policy, classpath, - "com.sun.jini.mahalo.NonActivatableMahaloImpl", - new String[] { config }) - }; -} -<!-- cut_end --> -</pre> -</blockquote> - -<a name="persistent_jrmp_config"> -<h4>File <var><b>config_dir</b></var>/persistent-jrmp-mahalo.config</h4> -</a> - -Use this configuration source file to run persistent Mahalo using -JRMP. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/persistent-jrmp-mahalo.config --> -import net.jini.jrmp.JrmpExporter; - -com.sun.jini.mahalo { - initialLookupGroups = new String[] { "<var><b>your.group</b></var>" }; - persistenceDirectory = "<var><b>config_dir</b></var>/mahalo.log"; - serverExporter = new JrmpExporter(); -} -<!-- cut_end --> -</pre> -</blockquote> - -<a name="activatable_jrmp"> -<h3>Starting Activatable Mahalo using JRMP</h3> -</a> - -To run an activatable Mahalo, which stores information persistently and -uses the activation system to restart itself, using JRMP for remote -communication, run the following command. <p> - -<blockquote> -<pre> -<!-- cut_begin=start-activatable-jrmp-mahalo.sh --> -java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \ - -jar <var><b>install_dir</b></var>/lib/start.jar \ - <a href="#start_activatable_jrmp_config"><var><b>config_dir</b></var>/start-activatable-jrmp-mahalo.config</a> -<!-- cut_end --> -</pre> -</blockquote> <p> - -You should remove the <var><b>config_dir</b></var>/group.log directory -before running this command. Note that the activation system will -restart the activatable Mahalo service as needed until Mahalo is -shutdown. <p> - -Remember to remove the <var><b>config_dir</b></var>/mahalo.log directory -before running this command if you want Mahalo to forget registrations and -settings made in previous invocations. <p> - -This configuration uses the following additional files. - -<a name="start_activatable_jrmp_config"> -<h4>File <var><b>config_dir</b></var>/start-activatable-jrmp-mahalo.config</h4> -</a> - -Use this configuration source file to start activatable Mahalo using -JRMP. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/start-activatable-jrmp-mahalo.config --> -import com.sun.jini.start.ServiceDescriptor; -import com.sun.jini.start.SharedActivatableServiceDescriptor; -import com.sun.jini.start.SharedActivationGroupDescriptor; - -com.sun.jini.start { - private static mahaloCodebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar" - + " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar"; - private static mahaloPolicy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>"; - private static mahaloClasspath = "<var><b>install_dir</b></var>/lib/mahalo.jar"; - private static mahaloConfig = "<a href="#activatable_jrmp_config"><var><b>config_dir</b></var>/activatable-jrmp-mahalo.config</a>"; - - private static groupPolicy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>"; - private static groupClasspath = "<var><b>install_dir</b></var>/lib/sharedvm.jar"; - private static groupPersistenceDirectory = "<var><b>config_dir</b></var>/group.log"; - - static serviceDescriptors = new ServiceDescriptor[] { - new SharedActivationGroupDescriptor( - groupPolicy, groupClasspath, groupPersistenceDirectory, - null /* serverCommand */, - null /* serverOptions */, - null /* serverProperties */), - new SharedActivatableServiceDescriptor( - mahaloCodebase, mahaloPolicy, mahaloClasspath, - "com.sun.jini.mahalo.ActivatableMahaloImpl", - groupPersistenceDirectory, - new String[] { mahaloConfig }, - true /* restart */) - }; -} -<!-- cut_end --> -</pre> -</blockquote> - -<a name="activatable_jrmp_config"> -<h4>File <var><b>config_dir</b></var>/activatable-jrmp-mahalo.config</h4> -</a> - -Use this configuration source file to run activatable Mahalo using -JRMP. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/activatable-jrmp-mahalo.config --> -import java.rmi.activation.ActivationID; -import net.jini.jrmp.JrmpExporter; - -com.sun.jini.mahalo { - initialLookupGroups = new String[] { "<var><b>your.group</b></var>" }; - persistenceDirectory = "<var><b>config_dir</b></var>/mahalo.log"; - serverExporter = new JrmpExporter((ActivationID) $data, 0); -} -<!-- cut_end --> -</pre> -</blockquote> - -<a name="stop_activatable"> -<h3>Stopping Activatable Mahalo</h3> -</a> - -To destroy the activation group running an activatable Mahalo, under -a JRMP or Jini ERI configuration, run the following command. <p> - -<blockquote> -<pre> -<!-- cut_begin=stop-activatable-mahalo.sh --> -java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \ - -jar <var><b>install_dir</b></var>/lib/destroy.jar \ - <a href="#stop_activatable_config"><var><b>config_dir</b></var>/stop-activatable-mahalo.config</a> -<!-- cut_end --> -</pre> -</blockquote> <p> - -Running this command will remove the -<var><b>config_dir</b></var>/group.log directory. <p> - -Note that this command does not actually destroy the service itself, but -just destroys the activation group the service is running in. You may -want to first destroy the service using Mahalo's administrable interface, -or to remove the <var><b>config_dir</b></var>/mahalo.log directory after -destroying the activation group. <p> - -This command uses the following additional file. - -<a name="stop_activatable_config"> -<h4>File <var><b>config_dir</b></var>/stop-activatable-mahalo.config</h4> -</a> - -Use this configuration source file to destroy the activation group for -an activatable Mahalo. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/stop-activatable-mahalo.config --> -import com.sun.jini.start.ServiceDescriptor; -import com.sun.jini.start.SharedActivatableServiceDescriptor; - -com.sun.jini.start { - private static codebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/group-dl.jar"; - private static policy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>"; - private static classpath = "<var><b>install_dir</b></var>/lib/group.jar"; - private static persistenceDirectory = "<var><b>config_dir</b></var>/group.log"; - - static serviceDestructors = new ServiceDescriptor[] { - new SharedActivatableServiceDescriptor( - codebase, policy, classpath, - "com.sun.jini.start.SharedGroupImpl", - persistenceDirectory, - null /* config */, - false /* restart */) - }; -} -<!-- cut_end --> -</pre> -</blockquote> - -<a name="transient"> -<h3>Starting Transient Mahalo using Jini ERI</h3> -</a> - -To run a transient Mahalo, which does not store any information -persistently or use the activation system to restart itself, using Jini -ERI for remote communication, run the following command. <p> - -<blockquote> -<pre> -<!-- cut_begin=start-transient-mahalo.sh --> -java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \ - -jar <var><b>install_dir</b></var>/lib/start.jar \ - <a href="#start_transient_config"><var><b>config_dir</b></var>/start-transient-mahalo.config</a> -<!-- cut_end --> -</pre> -</blockquote> <p> - -This configuration uses the following additional files. - -<a name="start_transient_config"> -<h4>File <var><b>config_dir</b></var>/start-transient-mahalo.config</h4> -</a> - -Use this configuration source file to start transient Mahalo using -Jini ERI. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/start-transient-mahalo.config --> -import com.sun.jini.start.NonActivatableServiceDescriptor; -import com.sun.jini.start.ServiceDescriptor; - -com.sun.jini.start { - private static codebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar" - + " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar"; - private static policy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>"; - private static classpath = "<var><b>install_dir</b></var>/lib/mahalo.jar"; - private static config = "<a href="#transient_config"><var><b>config_dir</b></var>/transient-mahalo.config</a>"; - - static serviceDescriptors = new ServiceDescriptor[] { - new NonActivatableServiceDescriptor( - codebase, policy, classpath, - "com.sun.jini.mahalo.TransientMahaloImpl", - new String[] { config }) - }; -} -<!-- cut_end --> -</pre> -</blockquote> - -<a name="transient_config"> -<h4>File <var><b>config_dir</b></var>/transient-mahalo.config</h4> -</a> - -Use this configuration source file to run transient Mahalo using Jini -ERI. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/transient-mahalo.config --> -com.sun.jini.mahalo { - initialLookupGroups = new String[] { "<var><b>your.group</b></var>" }; -} -<!-- cut_end --> -</pre> -</blockquote> - -<a name="persistent"> -<h3>Starting Persistent Mahalo using Jini ERI</h3> -</a> - -To run a persistent Mahalo, which stores information persistently but does -not use the activation system to restart itself, using Jini ERI for -remote communication, run the following command. <p> - -<blockquote> -<pre> -<!-- cut_begin=start-persistent-mahalo.sh --> -java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \ - -jar <var><b>install_dir</b></var>/lib/start.jar \ - <a href="#start_persistent_config"><var><b>config_dir</b></var>/start-persistent-mahalo.config</a> -<!-- cut_end --> -</pre> -</blockquote> <p> - -This configuration uses the following additional files. - -<a name="start_persistent_config"> -<h4>File <var><b>config_dir</b></var>/start-persistent-mahalo.config</h4> -</a> - -Use this configuration source file to start persistent Mahalo using Jini -ERI. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/start-persistent-mahalo.config --> -import com.sun.jini.start.NonActivatableServiceDescriptor; -import com.sun.jini.start.ServiceDescriptor; - -com.sun.jini.start { - private static codebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar" - + " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar"; - private static policy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>"; - private static classpath = "<var><b>install_dir</b></var>/lib/mahalo.jar"; - private static config = "<a href="#persistent_config"><var><b>config_dir</b></var>/persistent-mahalo.config</a>"; - - static serviceDescriptors = new ServiceDescriptor[] { - new NonActivatableServiceDescriptor( - codebase, policy, classpath, - "com.sun.jini.mahalo.NonActivatableMahaloImpl", - new String[] { config }) - }; -} -<!-- cut_end --> -</pre> -</blockquote> - -<a name="persistent_config"> -<h4>File <var><b>config_dir</b></var>/persistent-mahalo.config</h4> -</a> - -Use this configuration source file to run persistent Mahalo using Jini -ERI. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/persistent-mahalo.config --> -import net.jini.id.UuidFactory; -import net.jini.jeri.BasicILFactory; -import net.jini.jeri.BasicJeriExporter; -import net.jini.jeri.tcp.TcpServerEndpoint; - -com.sun.jini.mahalo { - initialLookupGroups = new String[] { "<var><b>your.group</b></var>" }; - persistenceDirectory = "<var><b>config_dir</b></var>/mahalo.log"; - serverExporter = new BasicJeriExporter( - TcpServerEndpoint.getInstance(<var><b>obj_port</b></var>), - new BasicILFactory(), - false, - true, - UuidFactory.create("<var><b>obj_UUID_string</b></var>")); -} -<!-- cut_end --> -</pre> -</blockquote> - -The <var><b>obj_port</b></var> is the fixed TCP port to use for -listening for requests for this object. The -<var><b>obj_UUID_string</b></var> is the {@linkplain net.jini.id.Uuid -universally unique ID} for the exported object. These IDs have the form -<code>"01234567-89ab-cdef-0123-456789abcdef"</code>. <p> - -Remember to remove the <var><b>config_dir</b></var>/mahalo.log directory -before restarting persistent Mahalo if you want it to forget registrations -and settings made in previous invocations. - -<a name="activatable"> -<h3>Starting Activatable Mahalo using Jini ERI</h3> -</a> - -To run an activatable Mahalo, which stores information persistently and -uses the activation system to restart itself, using Jini ERI for remote -communication, run the following command. <p> - -<blockquote> -<pre> -<!-- cut_begin=start-activatable-mahalo.sh --> -java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \ - -jar <var><b>install_dir</b></var>/lib/start.jar \ - <a href="#start_activatable_config"><var><b>config_dir</b></var>/start-activatable-mahalo.config</a> -<!-- cut_end --> -</pre> -</blockquote> <p> - -You should remove the <var><b>config_dir</b></var>/group.log directory -before running this command. Note that the activation system will -restart the activatable Mahalo service as needed until Mahalo is -shutdown. <p> - -Remember to remove the <var><b>config_dir</b></var>/mahalo.log directory -before running this command if you want Mahalo to forget registrations and -settings made in previous invocations. <p> - -This configuration uses the following additional files. - -<a name="start_activatable_config"> -<h4>File <var><b>config_dir</b></var>/start-activatable-mahalo.config</h4> -</a> - -Use this configuration source file to start activatable Mahalo using Jini -ERI. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/start-activatable-mahalo.config --> -import com.sun.jini.start.ServiceDescriptor; -import com.sun.jini.start.SharedActivatableServiceDescriptor; -import com.sun.jini.start.SharedActivationGroupDescriptor; - -com.sun.jini.start { - private static mahaloCodebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar" - + " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar"; - private static mahaloPolicy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>"; - private static mahaloClasspath = "<var><b>install_dir</b></var>/lib/mahalo.jar"; - private static mahaloConfig = "<a href="#activatable_config"><var><b>config_dir</b></var>/activatable-mahalo.config</a>"; - - private static groupPolicy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>"; - private static groupClasspath = "<var><b>install_dir</b></var>/lib/sharedvm.jar"; - private static groupPersistenceDirectory = "<var><b>config_dir</b></var>/group.log"; - - static serviceDescriptors = new ServiceDescriptor[] { - new SharedActivationGroupDescriptor( - groupPolicy, groupClasspath, groupPersistenceDirectory, - null /* serverCommand */, - null /* serverOptions */, - null /* serverProperties */), - new SharedActivatableServiceDescriptor( - mahaloCodebase, mahaloPolicy, mahaloClasspath, - "com.sun.jini.mahalo.ActivatableMahaloImpl", - groupPersistenceDirectory, - new String[] { mahaloConfig }, - true /* restart */) - }; -} -<!-- cut_end --> -</pre> -</blockquote> - -<a name="activatable_config"> -<h4>File <var><b>config_dir</b></var>/activatable-mahalo.config</h4> -</a> - -Use this configuration source file to run activatable Mahalo using Jini -ERI. <p> - -<blockquote> -<pre> -<!-- cut_begin=config_dir/activatable-mahalo.config --> -com.sun.jini.mahalo { - initialLookupGroups = new String[] { "<var><b>your.group</b></var>" }; - persistenceDirectory = "<var><b>config_dir</b></var>/mahalo.log"; -} -<!-- cut_end --> -</pre> -</blockquote> - -@see net.jini.core.transaction.server.TransactionManager - -</BODY> -</HTML> +<!-- + ! 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 3.2 Final//EN"> +<html> +<head> + + +</head> +<body bgcolor="white"> + +Provides implementations of the +{@linkplain net.jini.core.transaction.server.TransactionManager} service. +Three implementations are available for use with the +{@link com.sun.jini.start} package: + +<ul> +<li> <code>com.sun.jini.mahalo.ActivatableMahaloImpl</code> - an + activatable, persistent implementation, suitable for use with + {@link com.sun.jini.start.SharedActivatableServiceDescriptor} +<li> <code>com.sun.jini.mahalo.NonActivatableMahaloImpl</code> - a + non-activatable, persistent implementation, suitable for use with + {@link com.sun.jini.start.NonActivatableServiceDescriptor} +<li> <code>com.sun.jini.mahalo.TransientMahaloImpl</code> - a + transient implementation, also suitable for use with + {@link com.sun.jini.start.NonActivatableServiceDescriptor} +</ul> + +<p> +The JAR file <code>mahalo.jar</code>, included in the <code>lib</code> +subdirectory of the Apache River release +installation, contains the classes for the three Mahalo service +implementations. The <code>mahalo-dl.jar</code> +and <code>jsk-dl.jar</code> files in the <code>lib-dl</code> subdirectory +contain +the classes needed in the codebase for its downloaded proxies. None of the +JAR files include classes from <code>jsk-platform.jar</code>, which are +included by the service starter's <code>start.jar</code> JAR file, and +need to be included in the codebase of clients. +<p> + +The object returned by the {@link net.jini.admin.Administrable#getAdmin +Administrable.getAdmin} method on a Mahalo service proxy implements {@link +net.jini.admin.JoinAdmin} and {@link com.sun.jini.admin.DestroyAdmin}. +<p> + +This document provides the following information about Mahalo: +<ul> +<li> <a href="#configuration">Configuring Mahalo</a> +<li> <a href="#access_control">Access Control Permission Targets</a> +<li> <a href="#logging">Logging</a> +<li> <a href="#examples">Examples for Running Mahalo</a> +</ul> +<p> + +<a name="configuration"> +<h2>Configuring Mahalo</h2> +</a> +<p> +The Mahalo service implementation obtains its configuration by calling +{@link net.jini.config.ConfigurationProvider#getInstance(String[], ClassLoader) +ConfigurationProvider.getInstance} with the specified +<i>configOptions</i> and the class loader for the implementation +class. +</p> +<p> +The implementation supports the following configuration entries, with +component <code>com.sun.jini.mahalo</code>: </p> + + <table summary="Describes the activationIdPreparer configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + activationIdPreparer</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link net.jini.security.ProxyPreparer} + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code> + new {@link net.jini.security.BasicProxyPreparer}() + </code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: <td> The proxy preparer for the service's activation + ID. The value should not be <code>null</code>. This entry is + obtained at service start and restart. This entry is only used by + the activatable implementation. <p> + + Clients call the {@link java.rmi.activation.ActivationID#activate + activate} method on instances of {@link + java.rmi.activation.ActivationID} when they need to reactivate the + service. + </table> + + <table summary="Describes the activationSystemPreparer configuration + entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + activationSystemPreparer</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link net.jini.security.ProxyPreparer} + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code> + new {@link net.jini.security.BasicProxyPreparer}()</code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: <td> The proxy preparer for the proxy for the + activation system. The value should not be <code>null</code>. This + entry is obtained at service start and restart. This entry is only + used by the activatable implementation. <p> + + The service calls the {@link + java.rmi.activation.ActivationSystem#unregisterObject + unregisterObject} method on the {@link + java.rmi.activation.ActivationSystem} when the service is + destroyed. + </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">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + discoveryManager</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link net.jini.discovery.DiscoveryManagement} + <tr valign="top"> <td>   <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>   <th scope="row" align="right"> + Description: <td> Supplies an object used to discover the lookup + services with which this service should register. 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 or specific lookup + services. This entry is obtained at service start and restart. + </table> + + <table summary="Describes the initialLookupAttributes configuration + entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + initialLookupAttributes</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> <code>{@link net.jini.core.entry.Entry}[]</code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code>new Entry[0]</code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: <td> Entries to include in the set of attributes the + service supplies when registering with lookup services, in + addition to {@link net.jini.lookup.entry.ServiceInfo} and {@link + com.sun.jini.lookup.entry.BasicServiceType} instances provided by + the service. An empty array or <code>null</code> specifies that + only the service-provided attributes should be added. The array + must not contain <code>null</code> elements. This entry is + obtained and used when the service is first started. Following + initial startup, the set of attributes is controlled though the + service's {@link net.jini.admin.JoinAdmin} administrable + interface. + </table> + + <table summary="Describes the initialLookupGroups configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + initialLookupGroups</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> <code>String[]</code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code>new String[] { "" } /* public group */</code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: <td> The names of the lookup groups that the service + should discover and join. An empty array specifies that no groups + should be joined. A <code>null</code> value specifies that all + groups should be joined. Otherwise, the value specifies the names + of the groups to join. The array must not contain + <code>null</code> elements. This entry is obtained and used when + the service is first started. Following initial startup, the set + of lookup groups is controlled through the service's {@link + net.jini.admin.JoinAdmin} administrable interface. + </table> + + <table summary="Describes the initialLookupLocators configuration + entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + initialLookupLocators</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> <code>{@link net.jini.core.discovery.LookupLocator}[]</code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code>new LookupLocator[0]</code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: <td> The locations of specific lookup services that + the service should discover and join. An empty array or + <code>null</code> specifies that no specific lookup services + should be joined. The array must not contain <code>null</code> + elements. This entry is obtained and used when the service is + first started. Following initial startup, the set of specific + lookup services is controlled through the service's {@link + net.jini.admin.JoinAdmin} administrable interface. <p> + + The <code>LookupLocator</code> instances specified in this entry + will not be prepared by the proxy preparer specified in the + <code>locatorPreparer</code> entry, and will only be prepared by + the preparer in the <code>recoveredLocatorPreparer</code> entry + when they are being recovered. + </table> + + <table summary="Describes the leasePeriodPolicy configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + leasePeriodPolicy</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link com.sun.jini.landlord.LeasePeriodPolicy} + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> +<pre> +new {@link com.sun.jini.landlord.FixedLeasePeriodPolicy}( + 3 * 60 * 60 * 1000L, // max = 3 hours + 60 * 60 * 1000L) // default = 1 hour +</pre> + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: <td> The policy for calculating lease grants and + renewals. The value should not be <code>null</code>. The default + grants leases with a maximum duration of 3 hours and a default + duration of 1 hour. This entry is obtained at service start and + restart. + </table> + + <table summary="Describes the loginContext configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + loginContext</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link javax.security.auth.login.LoginContext} + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code>null</code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: <td> If not <code>null</code>, 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. If <code>null</code>, no JAAS login is performed. This + entry is obtained at service start and restart. + </table> + + <table summary="Describes the lookupLocatorPreparer configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + lookupLocatorPreparer</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link net.jini.security.ProxyPreparer} + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code> + new {@link net.jini.security.BasicProxyPreparer}() + </code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: <td> Prepares {@link + net.jini.core.discovery.LookupLocator} instances + passed to the {@link net.jini.admin.JoinAdmin} methods. The value + should not be <code>null</code>. When registering with lookup + services, this service may call or use the constraints assigned to + the {@link net.jini.core.discovery.LookupLocator#getRegistrar + getRegistrar} methods of <code>LookupLocator</code> instances + returned from this preparer. This entry is obtained at service + start and restart. <p> + + This preparer needs to perform all operations needed to use a + newly received lookup locator, typically including verifying trust + in the lookup locator and setting constraints. The prepared lookup + locator will be retained by the service in its persistent + store. <p> + + The <code>LookupLocator</code> instances obtained from the + <code>initialLookupLocators</code> configuration entry will not be + prepared by this preparer. + </table> + +<table summary="Describes the participantPreparer configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"> + <code>participantPreparer</code></font> + + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link net.jini.security.ProxyPreparer} + + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code>new {@link net.jini.security.BasicProxyPreparer}() + </code> + + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: + <td> Preparer for + {@link net.jini.core.transaction.server.TransactionParticipant} + proxies that have joined transactions from this service + via the {@link + net.jini.core.transaction.server.TransactionManager#join join} + method. + This preparer is + used to prepare proxies only when they initially + join with this service. + The value should not + be <code>null</code>. The preparer must return a listener + which is equal to the original listener as determined by + {@link java.lang.Object#equals Object.equals}. + This entry is obtained at service start and restart. <p> + + This preparer needs to perform all operations needed to use a + newly received participant, + typically including verifying trust in + the participant proxy, granting permissions, and setting + constraints. The prepared participant will be retained + by the service in its persistent store. <p> + + The service (potentially) calls the + {@link net.jini.core.transaction.server.TransactionParticipant#abort abort}, + {@link net.jini.core.transaction.server.TransactionParticipant#commit commit}, + {@link net.jini.core.transaction.server.TransactionParticipant#prepare prepare}, and + {@link net.jini.core.transaction.server.TransactionParticipant#prepareAndCommit prepareAndCommit}, + methods. + </table> + + <table summary="Describes the persistenceDirectory configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + persistenceDirectory</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> <code>String</code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <em>Required for persistent implementations: no + default</em> + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: <td> The directory where the service's persistent + state is recorded. The value should not be <code>null</code>. This + entry is obtained at service start and restart. This entry is + required for persistent implementations and is otherwise not used. + </table> + + <table summary="Describes the recoveredLookupLocatorPreparer + configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + recoveredLookupLocatorPreparer</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link net.jini.security.ProxyPreparer} + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code> + new {@link net.jini.security.BasicProxyPreparer}() + </code> + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: <td> Prepares {@link + net.jini.core.discovery.LookupLocator} instances for use when they + are recovered from persistent storage. The value should not be + <code>null</code>. When registering with lookup services, this + service may call or use the constraints assigned to the {@link + net.jini.core.discovery.LookupLocator#getRegistrar getRegistrar} + methods of <code>LookupLocator</code> instances returned from this + preparer. This entry is obtained at service start and + restart. This entry is only used by persistent + implementations. <p> + + This preparer needs to perform only those operations whose results + are not retained in the lookup locator itself, but need to be + performed in the environment in which the lookup locator is + unmarshalled. Typically no operations are needed. <p> + + The <code>LookupLocator</code> instances obtained from the + <code>initialLookupLocators</code> configuration entry will not be + prepared by this preparer until they are being recovered. + </table> + + + <table summary="Describes the recoveredParticipantPreparer configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"> + <code>recoveredParticipantPreparer</code></font> + + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link net.jini.security.ProxyPreparer} + + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code>new {@link net.jini.security.BasicProxyPreparer}() + </code> + + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: + <td> Preparer for recovered + {@link net.jini.core.transaction.server.TransactionParticipant} + proxies that have been previously registered and prepared + with this service (via the {@link + net.jini.core.transaction.server.TransactionManager#join + TransactionManager.join} method). <P> + This preparer needs to perform only those operations whose results are + not retained in the participant itself, but need to be performed in + the environment in which the participant is unmarshalled, + typically just granting permissions. <P> + The service (potentially) calls the + {@link net.jini.core.transaction.server.TransactionParticipant#abort abort}, + {@link net.jini.core.transaction.server.TransactionParticipant#commit commit}, + {@link net.jini.core.transaction.server.TransactionParticipant#prepare prepare}, and + {@link net.jini.core.transaction.server.TransactionParticipant#prepareAndCommit prepareAndCommit}, + methods on these proxies. + </table> + + <table summary="Describes the serverExporter configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"><code> + serverExporter</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link net.jini.export.Exporter} + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> +<pre> +// Activatable implementation +new {@link net.jini.activation.ActivationExporter}( + <i>activationID</i>, + new {@link net.jini.jeri.BasicJeriExporter}( + {@link net.jini.jeri.tcp.TcpServerEndpoint#getInstance TcpServerEndpoint.getInstance}(0), + new {@link net.jini.jeri.BasicILFactory}(), false, true)) +// Non-activatable implementations +new {@link net.jini.jeri.BasicJeriExporter}( + {@link net.jini.jeri.tcp.TcpServerEndpoint#getInstance TcpServerEndpoint.getInstance}(0), + new {@link net.jini.jeri.BasicILFactory}(),false, true) +</pre> + <tr valign="top"> <td>   <th scope="row" align="right"> + Description: <td> The object to use for exporting the service. The + value should not be <code>null</code>. In the activatable case, + the call to <code>getEntry</code> will supply the activation ID in + the <code>data</code> argument. This entry is obtained at service + start and restart. + </table> <p> + +<table summary="Describes the settlerPool configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"> + <code>settlerPool</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link java.util.concurrent/ExecutorService ExecutorService} + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code>new </code>{@link + java.util.concurrent/ThreadPoolExecutor ThreadPoolExecutor}( + 15 * processor cores /* core pool size */, + 15 * processor cores /* ignored */ + 15000 /* timeout */, + TimeUnit.MILLISECONDS, + new LinkedBlockingQueue(), /* Unbounded Queue */ + new NamedThreadFactory("TxnMgr settlerPool", false) + ) + <tr valign="top"> <td>   <th scope="row" align="right"> + + Description: <td> The pool of threads used to settle outstanding + transactions. Outstanding transactions occur when + {@link net.jini.core.transaction.TimeoutExpiredException TimeoutExpiredException} + is thrown from versions of + {@link net.jini.core.transaction.Transaction#abort(long) abort} + and + {@link net.jini.core.transaction.Transaction#commit(long) commit} + that take a timeout parameter. + The {@link java.util.concurrent/ExecutorService#shutdown shutdown} + method of this object will be called when the service is + destroyed. Obtained at service start and restart. + </table> + +<table summary="Describes the taskPool configuration entry" + border="0" cellpadding="2"> + <tr valign="top"> + <th scope="col" summary="layout"> <font size="+1">•</font> + <th scope="col" align="left" colspan="2"> <font size="+1"> + <code>taskPool</code></font> + <tr valign="top"> <td>   <th scope="row" align="right"> + Type: <td> {@link java.util.concurrent/ExecutorService ExecutorService} + <tr valign="top"> <td>   <th scope="row" align="right"> + Default: <td> <code>new </code>{@link + java.util.concurrent/ThreadPoolExecutor ThreadPoolExecutor}( + 5 * processor cores /* core pool size */, + 5 * processor cores /* ignored */ + 15000 /* timeout */, + TimeUnit.MILLISECONDS, + new LinkedBlockingQueue(), /* Unbounded Queue */ + new NamedThreadFactory("TxnMgr taskPool", false) + ) + <tr valign="top"> <td>   <th scope="row" align="right"> + + Description: <td> The pool of threads used to settle + transactions. + The {@link java.util.concurrent/ExecutorService#shutdown shutdown} + method of this object will be called when the service is + destroyed. Obtained at service start and restart. + </table> + +Mahalo passes its configuration when creating instances of the following +configurable classes, which may support additional configuration +entries: <p> + +<ul> +<li> {@link net.jini.discovery.LookupDiscoveryManager}, used to discover + lookup services, as specified by the <a href="#discoveryManager"> + <code>discoveryManager</code></a> configuration entry +<li> {@link net.jini.lookup.JoinManager}, used to manage lookup service + registrations +</ul> <p> + +<a name="access_control"> +<h2>Access Control Permission Targets</h2> +</a> + +The following table lists the remote methods on Mahalo's proxy objects and +the associated target names for enforcing access control using {@link +com.sun.jini.mahalo.MahaloPermission}: <p> + +<table border="1" cellpadding="5" + summary="The proxy methods and associated target names for + MahaloPermission."> + +<tr> <th scope="col"> Proxy Method <th scope="col"> Target Name + +<!-- TransactionManager --> + +<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#create + TransactionManager.create} + <td> create +<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#join + TransactionManager.join} + <td> join +<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#getState + TransactionManager.getState} + <td> getState +<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#commit + TransactionManager.commit} + <td> commit +<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#abort + TransactionManager.abort} + <td> abort + +<!-- Lease and LeaseMap --> + +<tr> <td> {@link net.jini.core.lease.Lease#renew Lease.renew} + <td> renew +<tr> <td> {@link net.jini.core.lease.Lease#cancel Lease.cancel} + <td> cancel +<tr> <td> {@link net.jini.core.lease.LeaseMap#renewAll LeaseMap.renewAll} + <td> renewAll +<tr> <td> {@link net.jini.core.lease.LeaseMap#cancelAll LeaseMap.cancelAll} + <td> cancelAll + +<!-- Administrable --> + +<tr> <td> {@link net.jini.admin.Administrable#getAdmin Administrable.getAdmin} + <td> getAdmin + +<!-- JoinAdmin --> + +<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupAttributes + JoinAdmin.getLookupAttributes} + <td> getLookupAttributes +<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupAttributes + JoinAdmin.addLookupAttributes} + <td> addLookupAttributes +<tr> <td> {@link net.jini.admin.JoinAdmin#modifyLookupAttributes + JoinAdmin.modifyLookupAttributes} + <td> modifyLookupAttributes + +<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupGroups + JoinAdmin.getLookupGroups} + <td> getLookupGroups +<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupGroups + JoinAdmin.addLookupGroups} + <td> addLookupGroups +<tr> <td> {@link net.jini.admin.JoinAdmin#removeLookupGroups + JoinAdmin.removeLookupGroups} + <td> removeLookupGroups +<tr> <td> {@link net.jini.admin.JoinAdmin#setLookupGroups + JoinAdmin.setLookupGroups} + <td> setLookupGroups + +<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupLocators + JoinAdmin.getLookupLocators} + <td> getLookupLocators +<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupLocators + JoinAdmin.addLookupLocators} + <td> addLookupLocators +<tr> <td> {@link net.jini.admin.JoinAdmin#removeLookupLocators + JoinAdmin.removeLookupLocators} + <td> removeLookupLocators +<tr> <td> {@link net.jini.admin.JoinAdmin#setLookupLocators + JoinAdmin.setLookupLocators} + <td> setLookupLocators + +<!-- DestroyAdmin --> + +<tr> <td> {@link com.sun.jini.admin.DestroyAdmin#destroy DestroyAdmin.destroy} + <td> destroy + +<!-- ProxyTrust --> + +<tr> <td> {@link net.jini.security.proxytrust.ProxyTrust#getProxyVerifier + ProxyTrust.getProxyVerifier} + <td> getProxyVerifier + +<!-- ServiceProxyAccessor --> + +<tr> <td> {@link com.sun.jini.start.ServiceProxyAccessor#getServiceProxy + ServiceProxyAccessor.getServiceProxy} + <td> getServiceProxy + +</table> <p> + +<a name="logging"> +<h2>Loggers and Logging Levels</h2> +</a> + +The Mahalo service implementation uses separate {@link +java.util.logging.Logger}s, prefixed by <code>com.sun.jini.mahalo</code>, +for each type of information it logs. The following tables describe the +type of information logged as well as the levels of information logged. +<p> + <table border="1" cellpadding="5" + summary="Describes logging performed by destroyLogger at different + logging levels"> + + <caption halign="center" valign="top"><b><code> + com.sun.jini.mahalo.destroy</code></b></caption> + + <tr> <th scope="col"> Level <th scope="col"> Description + + <tr> <td> {@link com.sun.jini.logging.Levels#HANDLED HANDLED} <td> + for exceptions handled during failed service destruction +
[... 746 lines stripped ...]
