org.apache.slide.common
Class AbstractService

java.lang.Object
  |
  +--org.apache.slide.common.AbstractService
All Implemented Interfaces:
Service, javax.transaction.xa.XAResource

public abstract class AbstractService
extends java.lang.Object
implements Service

Slide Service abstract implementation with support for multiple simultaneous transaction context.

Version:
$Revision: 1.1 $
Author:
Remy Maucherat, Juergen Pill

Field Summary
protected  java.util.Hashtable currentContexts
          Current transaction context.
protected  Namespace namespace
          Namespace.
static int TX_IDLE
           
static int TX_PREPARED
           
static int TX_SUSPENDED
           
 
Fields inherited from interface javax.transaction.xa.XAResource
TMENDRSCAN, TMFAIL, TMJOIN, TMNOFLAGS, TMONEPHASE, TMRESUME, TMSTARTRSCAN, TMSUCCESS, TMSUSPEND, XA_OK, XA_RDONLY
 
Constructor Summary
AbstractService()
           
 
Method Summary
 boolean cacheResults()
          Indicates whether or not the objects managed by this service should be cached.
 void commit(javax.transaction.xa.Xid xid, boolean onePhase)
          Commit the global transaction specified by xid.
abstract  void connect()
          Connects to the underlying data source (if any is needed).
 boolean connectIfNeeded()
          Connects to the service, if we were not previously connected.
abstract  void disconnect()
          Disconnects from the underlying data source.
 void end(javax.transaction.xa.Xid xid, int flags)
          Ends the work performed on behalf of a transaction branch.
 void forget(javax.transaction.xa.Xid xid)
          Tell the resource manager to forget about a heuristically completed transaction branch.
 int getTransactionTimeout()
          Obtain the current transaction timeout value set for this XAResource instance.
 void initialize(NamespaceAccessToken token)
          Initializes service.
abstract  boolean isConnected()
          This function tells whether or not the service is connected.
 boolean isSameRM(javax.transaction.xa.XAResource xares)
          This method is called to determine if the resource manager instance represented by the target object is the same as the resouce manager instance represented by the parameter xares.
 int prepare(javax.transaction.xa.Xid xid)
          Ask the resource manager to prepare for a transaction commit of the transaction specified in xid.
 javax.transaction.xa.Xid[] recover(int flag)
          Obtain a list of prepared transaction branches from a resource manager.
abstract  void reset()
          Deletes service underlying data source, if possible (and meaningful).
 void rollback(javax.transaction.xa.Xid xid)
          Inform the resource manager to roll back work done on behalf of a transaction branch.
 void setNamespace(Namespace namespace)
          Namespace setter.
abstract  void setParameters(java.util.Hashtable parameters)
          Initializes the service with a set of parameters.
 boolean setTransactionTimeout(int seconds)
          Set the current transaction timeout value for this XAResource instance.
 void start(javax.transaction.xa.Xid xid, int flags)
          Start work on behalf of a transaction branch specified in xid If TMJOIN is specified, the start is for joining a transaction previously seen by the resource manager.
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

TX_IDLE

public static final int TX_IDLE

TX_PREPARED

public static final int TX_PREPARED

TX_SUSPENDED

public static final int TX_SUSPENDED

currentContexts

protected java.util.Hashtable currentContexts
Current transaction context.

namespace

protected Namespace namespace
Namespace.
Constructor Detail

AbstractService

public AbstractService()
Method Detail

setNamespace

public void setNamespace(Namespace namespace)
Namespace setter.
Specified by:
setNamespace in interface Service

setParameters

public abstract void setParameters(java.util.Hashtable parameters)
                            throws ServiceParameterErrorException,
                                   ServiceParameterMissingException
Initializes the service with a set of parameters. Those could be :
  • User name, login info
  • Host name on which to connect
  • Remote port
  • JDBC driver whoich is to be used :-)
  • Anything else ...
    Specified by:
    setParameters in interface Service
    Parameters:
    parameters - Hashtable containing the parameters' names and associated values
    Throws:
    ServiceParameterErrorException - Incorrect service parameter
    ServiceParameterMissingException - Service parameter missing

  • connect

    public abstract void connect()
                          throws ServiceConnectionFailedException
    Connects to the underlying data source (if any is needed).
    Specified by:
    connect in interface Service
    Throws:
    ServiceConnectionFailedException - Connection failed

    disconnect

    public abstract void disconnect()
                             throws ServiceDisconnectionFailedException
    Disconnects from the underlying data source.
    Specified by:
    disconnect in interface Service
    Throws:
    ServiceDisconnectionFailedException - Disconnection failed

    initialize

    public void initialize(NamespaceAccessToken token)
                    throws ServiceInitializationFailedException
    Initializes service.
    Specified by:
    initialize in interface Service
    Parameters:
    token - Namespace access token, needed if the service needs to access objects or data within the namespace during its initialization
    Throws:
    ServiceInitializationFailedException - May throw an exception if the service has already been initialized before

    reset

    public abstract void reset()
                        throws ServiceResetFailedException
    Deletes service underlying data source, if possible (and meaningful).
    Specified by:
    reset in interface Service
    Throws:
    ServiceResetFailedException - Reset failed

    isConnected

    public abstract boolean isConnected()
                                 throws ServiceAccessException
    This function tells whether or not the service is connected.
    Specified by:
    isConnected in interface Service
    Returns:
    boolean true if we are connected
    Throws:
    ServiceAccessException - Service access error

    connectIfNeeded

    public boolean connectIfNeeded()
                            throws ServiceConnectionFailedException,
                                   ServiceAccessException
    Connects to the service, if we were not previously connected.
    Specified by:
    connectIfNeeded in interface Service
    Returns:
    boolean true if we were not already connected
    Throws:
    ServiceAccessException - Unspecified service access error
    ServiceConnectionFailedException - Connection failed

    cacheResults

    public boolean cacheResults()
    Indicates whether or not the objects managed by this service should be cached. Caching is enabled by default.
    Specified by:
    cacheResults in interface Service
    Returns:
    boolean True if results should be cached

    commit

    public void commit(javax.transaction.xa.Xid xid,
                       boolean onePhase)
                throws javax.transaction.xa.XAException
    Commit the global transaction specified by xid.
    Specified by:
    commit in interface javax.transaction.xa.XAResource
    Parameters:
    xid - A global transaction identifier
    onePhase - If true, the resource manager should use a one-phase commit protocol to commit the work done on behalf of xid.
    Throws:
    javax.transaction.xa.XAException - An error has occurred. Possible XAExceptions are XA_HEURHAZ, XA_HEURCOM, XA_HEURRB, XA_HEURMIX, XAER_RMERR, XAER_RMFAIL, XAER_NOTA, XAER_INVAL, or XAER_PROTO. If the resource manager did not commit the transaction and the paramether onePhase is set to true, the resource manager may throw one of the XA_RB* exceptions. Upon return, the resource manager has rolled back the branch's work and has released all held resources.

    end

    public void end(javax.transaction.xa.Xid xid,
                    int flags)
             throws javax.transaction.xa.XAException
    Ends the work performed on behalf of a transaction branch. The resource manager disassociates the XA resource from the transaction branch specified and let the transaction be completed. If TMSUSPEND is specified in flags, the transaction branch is temporarily suspended in incomplete state. The transaction context is in suspened state and must be resumed via start with TMRESUME specified. If TMFAIL is specified, the portion of work has failed. The resource manager may mark the transaction as rollback-only. If TMSUCCESS is specified, the portion of work has completed successfully.
    Specified by:
    end in interface javax.transaction.xa.XAResource
    Parameters:
    xid - A global transaction identifier that is the same as what was used previously in the start method.
    flags - One of TMSUCCESS, TMFAIL, or TMSUSPEND
    Throws:
    javax.transaction.xa.XAException - An error has occurred. Possible XAException values are XAER_RMERR, XAER_RMFAILED, XAER_NOTA, XAER_INVAL, XAER_PROTO, or XA_RB*.

    forget

    public void forget(javax.transaction.xa.Xid xid)
                throws javax.transaction.xa.XAException
    Tell the resource manager to forget about a heuristically completed transaction branch.
    Specified by:
    forget in interface javax.transaction.xa.XAResource
    Parameters:
    xid - A global transaction identifier
    Throws:
    javax.transaction.xa.XAException - An error has occurred. Possible exception values are XAER_RMERR, XAER_RMFAIL, XAER_NOTA, XAER_INVAL, or XAER_PROTO.

    getTransactionTimeout

    public int getTransactionTimeout()
                              throws javax.transaction.xa.XAException
    Obtain the current transaction timeout value set for this XAResource instance. If XAResource.setTransactionTimeout was not use prior to invoking this method, the return value is the default timeout set for the resource manager; otherwise, the value used in the previous setTransactionTimeout call is returned.
    Specified by:
    getTransactionTimeout in interface javax.transaction.xa.XAResource
    Returns:
    the transaction timeout value in seconds.
    Throws:
    javax.transaction.xa.XAException - An error has occurred. Possible exception values are XAER_RMERR, XAER_RMFAIL.

    isSameRM

    public boolean isSameRM(javax.transaction.xa.XAResource xares)
                     throws javax.transaction.xa.XAException
    This method is called to determine if the resource manager instance represented by the target object is the same as the resouce manager instance represented by the parameter xares.
    Specified by:
    isSameRM in interface javax.transaction.xa.XAResource
    Parameters:
    xares - An XAResource object whose resource manager instance is to be compared with the resource manager instance of the target object.
    Returns:
    true if it's the same RM instance; otherwise false.
    Throws:
    javax.transaction.xa.XAException - An error has occurred. Possible exception values are XAER_RMERR, XAER_RMFAIL.

    prepare

    public int prepare(javax.transaction.xa.Xid xid)
                throws javax.transaction.xa.XAException
    Ask the resource manager to prepare for a transaction commit of the transaction specified in xid.
    Specified by:
    prepare in interface javax.transaction.xa.XAResource
    Parameters:
    xid - A global transaction identifier
    Returns:
    A value indicating the resource manager's vote on the outcome of the transaction. The possible values are: XA_RDONLY or XA_OK. If the resource manager wants to roll back the transaction, it should do so by raising an appropriate XAException in the prepare method.
    Throws:
    javax.transaction.xa.XAException - An error has occurred. Possible exception values are: XA_RB*, XAER_RMERR, XAER_RMFAIL, XAER_NOTA, XAER_INVAL, or XAER_PROTO.

    recover

    public javax.transaction.xa.Xid[] recover(int flag)
                                       throws javax.transaction.xa.XAException
    Obtain a list of prepared transaction branches from a resource manager. The transaction manager calls this method during recovery to obtain the list of transaction branches that are currently in prepared or heuristically completed states.
    Specified by:
    recover in interface javax.transaction.xa.XAResource
    Parameters:
    flag - One of TMSTARTRSCAN, TMENDRSCAN, TMNOFLAGS. TMNOFLAGS must be used when no other flags are set in flags.
    Returns:
    The resource manager returns zero or more XIDs for the transaction branches that are currently in a prepared or heuristically completed state. If an error occurs during the operation, the resource manager should throw the appropriate XAException.
    Throws:
    javax.transaction.xa.XAException - An error has occurred. Possible values are XAER_RMERR, XAER_RMFAIL, XAER_INVAL, and XAER_PROTO.

    rollback

    public void rollback(javax.transaction.xa.Xid xid)
                  throws javax.transaction.xa.XAException
    Inform the resource manager to roll back work done on behalf of a transaction branch.
    Specified by:
    rollback in interface javax.transaction.xa.XAResource
    Parameters:
    xid - A global transaction identifier
    Throws:
    javax.transaction.xa.XAException - An error has occurred

    setTransactionTimeout

    public boolean setTransactionTimeout(int seconds)
                                  throws javax.transaction.xa.XAException
    Set the current transaction timeout value for this XAResource instance.
    Specified by:
    setTransactionTimeout in interface javax.transaction.xa.XAResource
    Parameters:
    seconds - the transaction timeout value in seconds.
    Returns:
    true if transaction timeout value is set successfully; otherwise false.
    Throws:
    javax.transaction.xa.XAException - An error has occurred. Possible exception values are XAER_RMERR, XAER_RMFAIL, or XAER_INVAL.

    start

    public void start(javax.transaction.xa.Xid xid,
                      int flags)
               throws javax.transaction.xa.XAException
    Start work on behalf of a transaction branch specified in xid If TMJOIN is specified, the start is for joining a transaction previously seen by the resource manager. If TMRESUME is specified, the start is to resume a suspended transaction specified in the parameter xid. If neither TMJOIN nor TMRESUME is specified and the transaction specified by xid has previously been seen by the resource manager, the resource manager throws the XAException exception with XAER_DUPID error code.
    Specified by:
    start in interface javax.transaction.xa.XAResource
    Parameters:
    xid - A global transaction identifier to be associated with the resource
    flags - One of TMNOFLAGS, TMJOIN, or TMRESUME
    Throws:
    javax.transaction.xa.XAException - An error has occurred. Possible exceptions are XA_RB*, XAER_RMERR, XAER_RMFAIL, XAER_DUPID, XAER_OUTSIDE, XAER_NOTA, XAER_INVAL, or XAER_PROTO.