class TxnManagerImpl extends Object implements TxnManager, LeaseExpirationMgr.Expirer, LogRecovery, TxnSettler, TimeConstants, LocalLandlord, ServerProxyTrust, ProxyAccessor, Startable
| Modifier and Type | Class and Description |
|---|---|
private class |
TxnManagerImpl.DestroyThread
Termination thread code.
|
private static class |
TxnManagerImpl.FutureFactory |
Landlord.RenewResultsTransactionManager.Created| Modifier and Type | Field and Description |
|---|---|
private ActivationID |
activationID |
private boolean |
activationPrepared
Whether the activation ID has been prepared
|
private ActivationSystem |
activationSystem
The activation system, prepared
|
private Configuration |
config |
private AccessControlContext |
context |
(package private) static Logger |
destroyLogger
Logger for service destruction related messages
|
private LeaseExpirationMgr |
expMgr
LeaseExpirationMgr used by our LeasePolicy. |
protected Exporter |
exporter
The exporter for exporting and unexporting
|
private static SecureRandom |
idGen
The generator for our IDs.
|
private static byte[] |
idGenBuf
The buffer for generating IDs.
|
(package private) static Logger |
initLogger
Logger for service re/initialization related messages
|
private JoinStateManager |
joinStateManager |
private LeaseFactory |
leaseFactory
LandLordLeaseFactory we use to create leases |
private LifeCycle |
lifeCycle
Cache of our
LifeCycle object |
protected LoginContext |
loginContext
The login context, for logging out
|
private LogManager |
logmgr |
private static long |
MAX_UNEXPORT_DELAY
Maximum delay for unexport attempts
|
(package private) static Logger |
operationsLogger
Logger for service operation messages
|
(package private) static Logger |
participantLogger
Logger for transaction participant related messages
|
private ProxyPreparer |
participantPreparer
Proxy preparer for listeners
|
private String |
persistenceDirectory |
(package private) static Logger |
persistenceLogger
Logger for transaction persistence related messages
|
private boolean |
persistent |
private ReadyState |
readyState |
private TxnManager |
serverStub
Cache of our inner proxy.
|
private java.util.concurrent.ExecutorService |
settlerpool |
private WakeupManager |
settlerWakeupMgr
wakeup manager for
SettlerTask |
private InterruptedStatusThread |
settleThread |
private boolean |
started |
(package private) static Logger |
startupLogger
Logger for (successful) service startup message
|
private java.util.concurrent.ExecutorService |
taskpool |
private WakeupManager |
taskWakeupMgr
wakeup manager for
ParticipantTask |
private Throwable |
thrown |
private Uuid |
topUuid |
(package private) static Logger |
transactionsLogger
Logger for transaction related messages
(creation, destruction, transition, etc.)
|
private LeasePeriodPolicy |
txnLeasePeriodPolicy |
private TxnMgrAdminProxy |
txnMgrAdminProxy
The admin proxy of this server
|
private TxnMgrProxy |
txnMgrProxy
The outer proxy of this server
|
private java.util.concurrent.ConcurrentMap<Long,TxnManagerTransaction> |
txns |
private Queue<Long> |
unsettledtxns |
MAHALOABORTED, ACTIVE, COMMITTED, NOTCHANGED, PREPARED, VOTINGDAYS, HOURS, MINUTES, SECONDS| Modifier | Constructor and Description |
|---|---|
(package private) |
TxnManagerImpl(ActivationID activationID,
MarshalledObject data)
Constructs an activatable transaction manager.
|
private |
TxnManagerImpl(String[] configArgs,
ActivationID activID,
boolean persistant,
Object[] logMessage) |
(package private) |
TxnManagerImpl(String[] args,
LifeCycle lc,
boolean persistent)
Constructs a non-activatable transaction manager.
|
| Modifier and Type | Method and Description |
|---|---|
void |
abort(long id)
Abort the transaction.
|
private void |
abort(long id,
boolean doExpiryCheck) |
void |
abort(long id,
long waitFor)
Abort the transaction, waiting for participants to be notified of
the decision.
|
private void |
abort(long id,
long waitFor,
boolean doExpiryCheck) |
void |
addLookupAttributes(Entry[] attrSets)
Add attribute sets for the service.
|
void |
addLookupGroups(String[] groups)
Add new groups to the set to join.
|
void |
addLookupLocators(LookupLocator[] locators)
Add locators for specific new lookup services to join.
|
private static Entry[] |
attributesFor()
Create the service owned attributes for an Mahalo server
|
void |
cancel(Uuid uuid)
Cancels the lease on a
Transaction. |
Map |
cancelAll(Uuid[] cookies)
Bulk cancel of leases on
Transactions. |
private void |
cleanup() |
void |
commit(long id)
Commit the transaction.
|
void |
commit(long id,
long waitFor)
Commit the transaction, waiting for participants to be notified of
the decision.
|
TransactionManager.Created |
create(long lease)
Begin a new top-level transaction.
|
private Uuid |
createLeaseUuid(long txnId) |
void |
destroy()
Cleans up and exits the transaction manager.
|
private static boolean |
ensureCurrent(LeasedResource resource)
Utility method that check for valid resource
|
private TxnManagerTransaction |
enterTMT(long cookie) |
Object |
getAdmin()
Returns the administration object for the
transaction manager.
|
private Long |
getLeaseTid(Uuid uuid) |
Entry[] |
getLookupAttributes()
Get the current attribute sets for the service.
|
String[] |
getLookupGroups()
Get the list of groups to join.
|
LookupLocator[] |
getLookupLocators()
Get the list of locators of specific lookup services to join.
|
Object |
getProxy()
Returns a proxy object for this remote object.
|
TrustVerifier |
getProxyVerifier()
Returns a
TrustVerifier that can be used to verify that
a proxy can be trusted as a proxy for the service; that is, the
isTrustedObject method of the
returned verifier can be called with a candidate proxy. |
Object |
getServiceProxy()
Returns a proxy object for this object.
|
int |
getState(long id)
Returns the current state of the given transaction.
|
Transaction |
getTransaction(long id)
Method from
TxnManager which produces
a Transaction from its ID. |
protected void |
initFailed(Throwable e)
Log information about failing to initialize the service and rethrow the
appropriate exception.
|
void |
join(long id,
TransactionParticipant part,
long crashCount)
Join a transaction that is managed by this transaction manager.
|
TransactionManager |
manager()
Returns a reference to the
TransactionManager
interface. |
void |
modifyLookupAttributes(Entry[] attrSetTemplates,
Entry[] attrSets)
Modify the current attribute sets, using the same semantics as
ServiceRegistration.modifyAttributes.
|
(package private) static long |
nextID()
gets the next available transaction ID.
|
void |
noteUnsettledTxn(long tid)
Informs the transaction manager to attempt to
settle a given transaction.
|
void |
recover(long cookie,
LogRecord rec)
This method recovers state changes resulting from
committing a transaction.
|
void |
removeLookupGroups(String[] groups)
Remove groups from the set to join.
|
void |
removeLookupLocators(LookupLocator[] locators)
Remove locators for specific lookup services from the set to join.
|
long |
renew(Uuid uuid,
long extension)
Requests the renewal of a lease on a
Transaction. |
Landlord.RenewResults |
renewAll(Uuid[] cookies,
long[] extensions)
Bulk renewal request of leases on
Transactions. |
private ServerTransaction |
serverTransaction(Transaction baseTr) |
void |
setLookupGroups(String[] groups)
Replace the list of groups to join with a new list.
|
void |
setLookupLocators(LookupLocator[] locators)
Replace the list of locators of specific lookup services to join
with a new list.
|
private void |
settleTxns() |
void |
start()
Called after construction, this method enables objects to delay
starting threads or exporting until after construction is complete,
to allow safe publication of the service in accordance with the JMM.
|
private void |
verifyLeaseUuid(Uuid uuid) |
static final Logger startupLogger
static final Logger initLogger
static final Logger destroyLogger
static final Logger operationsLogger
static final Logger transactionsLogger
static final Logger participantLogger
static final Logger persistenceLogger
private volatile LogManager logmgr
private final java.util.concurrent.ExecutorService settlerpool
private final WakeupManager settlerWakeupMgr
SettlerTaskprivate final java.util.concurrent.ExecutorService taskpool
private final WakeupManager taskWakeupMgr
ParticipantTaskprivate final java.util.concurrent.ConcurrentMap<Long,TxnManagerTransaction> txns
private final InterruptedStatusThread settleThread
private final String persistenceDirectory
private final ActivationID activationID
private final boolean activationPrepared
private final ActivationSystem activationSystem
private volatile ProxyPreparer participantPreparer
protected final Exporter exporter
protected volatile LoginContext loginContext
private static final SecureRandom idGen
private static final byte[] idGenBuf
private volatile LeaseExpirationMgr expMgr
LeaseExpirationMgr used by our LeasePolicy.private final LeasePeriodPolicy txnLeasePeriodPolicy
private volatile LeaseFactory leaseFactory
LandLordLeaseFactory we use to create leasesprivate final JoinStateManager joinStateManager
private final Uuid topUuid
private volatile TxnMgrProxy txnMgrProxy
private volatile TxnMgrAdminProxy txnMgrAdminProxy
private volatile TxnManager serverStub
private volatile LifeCycle lifeCycle
LifeCycle objectprivate final ReadyState readyState
private final boolean persistent
private Configuration config
private AccessControlContext context
private Throwable thrown
private boolean started
private static final long MAX_UNEXPORT_DELAY
TxnManagerImpl(String[] args, LifeCycle lc, boolean persistent)
args - Service configuration optionslc - LifeCycle reference used for callbackTxnManagerImpl(ActivationID activationID, MarshalledObject data) throws IOException, ClassNotFoundException
activationID - activation ID passed in by the activation daemon.data - state data needed to re-activate a transaction manager.IOExceptionClassNotFoundExceptionprivate TxnManagerImpl(String[] configArgs, ActivationID activID, boolean persistant, Object[] logMessage)
public void start()
throws Exception
StartableIn addition to starting threads after construction, it also allows objects to avoid throwing an exception during construction to avoid finalizer attacks.
The implementation is required to ensure start() is idempotent (only executed once, additional invocations must return immediately).
public TransactionManager.Created create(long lease) throws LeaseDeniedException
TransactionManagercreate in interface TransactionManagerlease - the requested lease time for the transactionLeaseDeniedException - if this manager is unwilling to
grant the requested lease timepublic void join(long id,
TransactionParticipant part,
long crashCount)
throws UnknownTransactionException,
CannotJoinException,
CrashCountException,
RemoteException
TransactionManagercrashCount marks the state of the storage used by
the participant for transactions. If the participant attempts to
join a transaction more than once, the crash counts must be the same.
Each system crash or other event that destroys the state of the
participant's unprepared transaction storage must cause the crash
count to increase by at least one.join in interface TransactionManagerid - the transaction IDpart - the participant joining the transactioncrashCount - the participant's current crash countUnknownTransactionException - if the transaction
is unknown to the transaction manager, either
because the transaction ID is incorrect or because the
transaction is complete and its state has been
discarded by the manager.CannotJoinException - if the transaction is known
to the manager but is no longer active.CrashCountException - if the crash count provided
for the participant differs from the crash count
in a previous invocation of the same pairing of
participant and transactionRemoteException - if there is a communication errorServerTransaction.join(net.jini.core.transaction.server.TransactionParticipant, long)public int getState(long id)
throws UnknownTransactionException
TransactionManagerTransactionConstants values.getState in interface TransactionManagerid - the transaction IDint representing the state of the transactionUnknownTransactionException - if the transaction
is unknown to the transaction manager, either
because the transaction ID is incorrect or because the
transaction is complete and its state has been
discarded by the manager.ServerTransaction.getState(),
TransactionConstantspublic void commit(long id)
throws UnknownTransactionException,
CannotCommitException,
RemoteException
TransactionManagerNOTCHANGED
or the COMMITTED state, without waiting for the
transaction manager to notify all participants of the decision.
If the transaction must be aborted (because one or more participants
are unable to prepare), CannotCommitException is thrown
without waiting for the transaction manager to notify all participants
of the decision.commit in interface TransactionManagerid - the transaction IDUnknownTransactionException - if the transaction
is unknown to the transaction manager, either
because the transaction ID is incorrect or because the
transaction is complete and its state has been
discarded by the manager.CannotCommitException - if the transaction is being or already
has been abortedRemoteException - if there is a communication errorpublic void commit(long id,
long waitFor)
throws UnknownTransactionException,
CannotCommitException,
TimeoutExpiredException,
RemoteException
TransactionManagerNOTCHANGED or the
COMMITTED state, and the transaction manager has
notified all participants of the decision, before the specified
timeout expires. If the transaction must be aborted (because one
or more participants are unable to prepare),
CannotCommitException is thrown if the transaction
manager is able to notify all participants of the decision before
the specified timeout expires. If the transaction manager reaches
a decision, but is unable to notify all participants of that
decision before the specified timeout expires, then
TimeoutExpiredException is thrown. If the specified
timeout expires before the transaction manager reaches a decision,
TimeoutExpiredException is not thrown until the
manager reaches a decision.commit in interface TransactionManagerid - the transaction IDwaitFor - timeout to wait, from the start of the call until
all participants have been notified of the transaction manager's
decisionUnknownTransactionException - if the transaction
is unknown to the transaction manager, either
because the transaction ID is incorrect or because the
transaction is complete and its state has been
discarded by the manager.CannotCommitException - if the transaction is being or already
has been abortedTimeoutExpiredException - if the transaction manager reaches
a decision, but is unable to notify all participants of that
decision before the specified timeout expiresRemoteException - if there is a communication errorpublic void abort(long id)
throws UnknownTransactionException,
CannotAbortException
TransactionManagerabort in interface TransactionManagerid - the transaction IDUnknownTransactionException - if the transaction
is unknown to the transaction manager, either
because the transaction ID is incorrect or because the
transaction is complete and its state has been
discarded by the manager.CannotAbortException - if the transaction is known to have
previously reached the COMMITTED state due to an earlier
commitprivate void abort(long id,
boolean doExpiryCheck)
throws UnknownTransactionException,
CannotAbortException
public void abort(long id,
long waitFor)
throws UnknownTransactionException,
CannotAbortException,
TimeoutExpiredException
TransactionManagerTimeoutExpiredException
is thrown.abort in interface TransactionManagerid - the transaction IDwaitFor - timeout to wait, from the start of the call until
all participants have been notified of the transaction manager's
decisionUnknownTransactionException - if the transaction
is unknown to the transaction manager, either
because the transaction ID is incorrect or because the
transaction is complete and its state has been
discarded by the manager.CannotAbortException - if the transaction is known to have
previously reached the COMMITTED state due to an earlier
commitTimeoutExpiredException - if the timeout expires before
all participants have been notifiedprivate void abort(long id,
long waitFor,
boolean doExpiryCheck)
throws UnknownTransactionException,
CannotAbortException,
TimeoutExpiredException
public void recover(long cookie,
LogRecord rec)
throws LogException
recover in interface LogRecoverycookie - the transaction's IDrec - the LogRecordLogExceptionpublic void noteUnsettledTxn(long tid)
noteUnsettledTxn in interface TxnSettlertid - the transaction's IDprivate void settleTxns()
throws InterruptedException
InterruptedExceptionpublic Transaction getTransaction(long id) throws UnknownTransactionException
TxnManager which produces
a Transaction from its ID.getTransaction in interface TxnManagerid - the IDUnknownTransactionExceptionTransaction,
TxnManagerpublic long renew(Uuid uuid, long extension) throws UnknownLeaseException, LeaseDeniedException
Transaction.renew in interface Landlordrenew in interface LocalLandlorduuid - identifies the leased resourceextension - requested lease extensionUnknownLeaseException - if landlord does not know about
a lease with the specified cookieLeaseDeniedException - if the landlord is unwilling to
renew the leaseLease,
LeasedResource,
LeaseManagerpublic void cancel(Uuid uuid) throws UnknownLeaseException
Transaction.cancel in interface Landlordcancel in interface LocalLandlordcancel in interface LeaseExpirationMgr.Expireruuid - identifies the leased resourceUnknownLeaseException - if landlord does not know about
a lease with the specified cookieLease,
LeasedResource,
LeaseManagerpublic Landlord.RenewResults renewAll(Uuid[] cookies, long[] extensions)
Transactions.renewAll in interface Landlordcookies - identifies the leased resourcesextensions - requested lease extensionsLease,
LeasedResource,
LeaseManagerpublic Map cancelAll(Uuid[] cookies)
Transactions.cancelAll in interface Landlordcookies - identifies the leased resourcescookies
could be cancelled return null. Otherwise,
return a Map that for each failed cancel
attempt maps the corresponding cookie object to an
exception describing the failure.Lease,
LeasedResource,
LeaseManagerstatic long nextID()
private ServerTransaction serverTransaction(Transaction baseTr) throws UnknownTransactionException
UnknownTransactionExceptionpublic TransactionManager manager()
TransactionManager
interface.manager in interface TxnManagerTransactionManagerprivate TxnManagerTransaction enterTMT(long cookie)
public void destroy()
destroy in interface DestroyAdminpublic Object getAdmin()
getAdmin in interface AdministrableJoinAdminpublic Entry[] getLookupAttributes()
JoinAdmingetLookupAttributes in interface JoinAdminpublic void addLookupAttributes(Entry[] attrSets)
JoinAdminaddLookupAttributes in interface JoinAdminattrSets - the attribute sets to addpublic void modifyLookupAttributes(Entry[] attrSetTemplates, Entry[] attrSets)
JoinAdminmodifyLookupAttributes in interface JoinAdminattrSetTemplates - the templates for matching attribute setsattrSets - the modifications to make to matching setsServiceRegistration.modifyAttributes(net.jini.core.entry.Entry[], net.jini.core.entry.Entry[])public String[] getLookupGroups()
JoinAdmingetLookupGroups in interface JoinAdminJoinAdmin.setLookupGroups(java.lang.String[])public void addLookupGroups(String[] groups)
JoinAdminaddLookupGroups in interface JoinAdmingroups - groups to joinJoinAdmin.removeLookupGroups(java.lang.String[])public void removeLookupGroups(String[] groups)
JoinAdminremoveLookupGroups in interface JoinAdmingroups - groups to leaveJoinAdmin.addLookupGroups(java.lang.String[])public void setLookupGroups(String[] groups)
JoinAdminsetLookupGroups in interface JoinAdmingroups - groups to joinJoinAdmin.getLookupGroups()public LookupLocator[] getLookupLocators()
JoinAdmingetLookupLocators in interface JoinAdminJoinAdmin.setLookupLocators(net.jini.core.discovery.LookupLocator[])public void addLookupLocators(LookupLocator[] locators) throws RemoteException
JoinAdminaddLookupLocators in interface JoinAdminlocators - locators of specific lookup services to joinRemoteExceptionJoinAdmin.removeLookupLocators(net.jini.core.discovery.LookupLocator[])public void removeLookupLocators(LookupLocator[] locators) throws RemoteException
JoinAdminremoveLookupLocators in interface JoinAdminlocators - locators of specific lookup services to leaveRemoteExceptionJoinAdmin.addLookupLocators(net.jini.core.discovery.LookupLocator[])public void setLookupLocators(LookupLocator[] locators) throws RemoteException
JoinAdminsetLookupLocators in interface JoinAdminlocators - locators of specific lookup services to joinRemoteExceptionJoinAdmin.getLookupLocators()private static Entry[] attributesFor()
public Object getProxy()
ProxyAccessornull is returned.getProxy in interface ProxyAccessornullpublic Object getServiceProxy()
ServiceProxyAccessornull.getServiceProxy in interface ServiceProxyAccessorprotected void initFailed(Throwable e) throws Exception
e - the exception produced by the failureExceptionprivate void cleanup()
public TrustVerifier getProxyVerifier()
ServerProxyTrustTrustVerifier that can be used to verify that
a proxy can be trusted as a proxy for the service; that is, the
isTrustedObject method of the
returned verifier can be called with a candidate proxy. The verifier
should be able to verify all proxies for the service, including
proxies for resources (such as leases and registrations).getProxyVerifier in interface ServerProxyTrustTrustVerifier that can be used to verify that
a proxy can be trusted as a proxy for the serviceprivate static boolean ensureCurrent(LeasedResource resource)
private Uuid createLeaseUuid(long txnId)
private void verifyLeaseUuid(Uuid uuid) throws UnknownLeaseException
UnknownLeaseExceptionCopyright 2007-2013, multiple authors.
Licensed under the Apache License, Version 2.0, see the NOTICE file for attributions.