Class TXProcessImpl

java.lang.Object
com.iizix.txp.impl.TXProcessImpl
All Implemented Interfaces:
ITimeoutListener, ITXProcess

public class TXProcessImpl extends Object implements ITXProcess, ITimeoutListener
Basic and crude (for now) ITXProcess implementation
Author:
Freggle
  • Constructor Details

    • TXProcessImpl

      protected TXProcessImpl(ITXPid pid, TXPCoordinatorImpl coordinator)
      Constructs a process.
      Parameters:
      pid - the pid for this process
  • Method Details

    • useLocalPolicy

      public void useLocalPolicy(ITXPPolicy policy)
      Description copied from interface: ITXProcess
      Have the coordinator use the specified local policy for this process. To stop using a local policy specify null.
      Specified by:
      useLocalPolicy in interface ITXProcess
      Parameters:
      policy - the policy
    • getLocalPolicy

      public ITXPPolicy getLocalPolicy()
      Description copied from interface: ITXProcess
      Return the process local policy
      Specified by:
      getLocalPolicy in interface ITXProcess
      Returns:
      the process local policy or null if none is used
    • getPid

      public ITXPid getPid()
      Description copied from interface: ITXProcess
      Gets the pid of his process
      Specified by:
      getPid in interface ITXProcess
      Returns:
      the pid
    • getTimeout

      public long getTimeout()
      Description copied from interface: ITXProcess
      Returns the nr of milliseconds this process waits for all nodes. The timeout is applied when setStartTimeout() is called on the process. It is up to the coordinator (and maybe policy) to decide how to deal with a timeout but the nodes needs to be signalled that the process timed out and the defined behaviour for the node is to stop the work and wait for rollback unless the coordinator decides to CONTINUE or IGNORE the timeout.
      Specified by:
      getTimeout in interface ITXProcess
      Returns:
      the timeout time in milliseconds
    • associate

      public void associate(ITXPNode node)
      Description copied from interface: ITXProcess
      Associate an atomic unit of work (a node) with this process. This will cause a begin() call in the node.
      Specified by:
      associate in interface ITXProcess
      Parameters:
      node - the node
    • getState

      public ITXProcess.State getState()
      Description copied from interface: ITXProcess
      Get the state of this process.
      Specified by:
      getState in interface ITXProcess
      Returns:
      the state
    • ready

      public void ready(ITXPNode node, ITXPNode.State nodeState)
      Description copied from interface: ITXProcess
      A node will call this method to signal its state after attempting to do the work.
      Specified by:
      ready in interface ITXProcess
      Parameters:
      node - the node
      nodeState - the current state of the node
    • timeout

      public void timeout(ITXPNode node)
      Description copied from interface: ITXProcess
      Called by a node indicating it timed out waiting on the process. The process (and coordinator) must assume that the node abandoned the process and rolled back any change they made on behalf of it.
      Specified by:
      timeout in interface ITXProcess
      Parameters:
      node - the node
    • commit

      public void commit() throws TXPException
      Description copied from interface: ITXProcess
      Called by the process logic/application (not the nodes!)to request that the transactional process gets committed.
      Specified by:
      commit in interface ITXProcess
      Throws:
      TXPException - a coordinator and policy dependent exception (today 1 of 3, more details later)
    • rollback

      public void rollback() throws TXPException
      Description copied from interface: ITXProcess
      Called by the process logic/application (not the nodes) to request that the transactional process rolls back the work.
      Specified by:
      rollback in interface ITXProcess
      Throws:
      TXPException - a coordinator and policy dependent exception (today 1 of 3, more details later)
    • addAttribute

      public void addAttribute(String name, Object value)
      Description copied from interface: ITXProcess
      Adds a named attribute.
      Specified by:
      addAttribute in interface ITXProcess
      Parameters:
      name - the attribute name
      value - the attribute value
    • getAttribute

      public Object getAttribute(String name)
      Description copied from interface: ITXProcess
      Gets a named attribute.
      Specified by:
      getAttribute in interface ITXProcess
      Parameters:
      name - the attribute name
      Returns:
      the attribute value
    • removeAttribute

      public Object removeAttribute(String name)
      Description copied from interface: ITXProcess
      Removes a named attribute.
      Specified by:
      removeAttribute in interface ITXProcess
      Parameters:
      name - the attribute name
      Returns:
      the attribute value
    • setStartTimeout

      public void setStartTimeout(long millisecs)
      Set the timeout time in milliseconds AND START THE TIMER!. -1L for indefinite (the default so you do not have to call it in that case) You should call this method after you associated all the nodes and all other initialization.
      Specified by:
      setStartTimeout in interface ITXProcess
      Parameters:
      millisecs - the timeout time in milliseconds
    • onTimeout

      public void onTimeout()
      Description copied from interface: ITimeoutListener
      Called when timeout is reached.
      Specified by:
      onTimeout in interface ITimeoutListener
    • log

      protected ITXProcessLogger log()
    • getRemainingTime

      public long getRemainingTime()
      Gets the remaining time before timeout. This value just keeps on counting, even when the timeout has occurred or the task is stopped.
      Specified by:
      getRemainingTime in interface ITXProcess
      Returns:
      A time in milliseconds >= zero indicating the remaining timeout time, or < zero if the task has timed out. The return value is Long.MAX_VALUE if the timeout is indefinite or never set.