.. java:import:: java.util Collection .. java:import:: java.util Collections .. java:import:: java.util HashMap .. java:import:: java.util List .. java:import:: java.util Map .. java:import:: java.util Set .. java:import:: org.apache.shiro.subject Subject .. java:import:: org.caosdb.datetime UTCDateTime .. java:import:: org.caosdb.server.accessControl Principal .. java:import:: org.caosdb.server.database DatabaseAccessManager .. java:import:: org.caosdb.server.database.access Access .. java:import:: org.caosdb.server.database.backend.transaction InsertTransactionHistory .. java:import:: org.caosdb.server.database.exceptions TransactionException .. java:import:: org.caosdb.server.database.misc TransactionBenchmark .. java:import:: org.caosdb.server.entity EntityIdRegistry .. java:import:: org.caosdb.server.entity EntityInterface .. java:import:: org.caosdb.server.entity Message .. java:import:: org.caosdb.server.entity.container TransactionContainer .. java:import:: org.caosdb.server.jobs Job .. java:import:: org.caosdb.server.jobs Schedule .. java:import:: org.caosdb.server.jobs ScheduledJob .. java:import:: org.caosdb.server.jobs TransactionStage .. java:import:: org.caosdb.server.jobs.core AccessControl .. java:import:: org.caosdb.server.jobs.core CheckDatatypePresent .. java:import:: org.caosdb.server.jobs.core CheckEntityACLRoles .. java:import:: org.caosdb.server.jobs.core JobFailureSeverity .. java:import:: org.caosdb.server.jobs.core PickUp .. java:import:: org.caosdb.server.permissions EntityACL .. java:import:: org.caosdb.server.utils AbstractObservable .. java:import:: org.caosdb.server.utils Info .. java:import:: org.caosdb.server.utils Observer .. java:import:: org.caosdb.server.utils UseCacheResource .. java:import:: org.caosdb.server.utils UseCacheResourceDelegate Transaction =========== .. java:package:: org.caosdb.server.transaction :noindex: .. java:type:: public abstract class Transaction extends AbstractObservable implements EntityTransactionInterface, UseCacheResource Abstract base implementation for all EntityTransactions (Transaction involving entities). Handles caching, benchmark timing, the access to the back end, generates and checks entity ids, holds the state of the transaction and triggers the scheduler to run the jobs. :author: Timm Fitschen Fields ------ CLEAN_UP ^^^^^^^^ .. java:field:: public static final String CLEAN_UP :outertype: Transaction idRegistry ^^^^^^^^^^ .. java:field:: protected EntityIdRegistry idRegistry :outertype: Transaction Constructors ------------ Transaction ^^^^^^^^^^^ .. java:constructor:: protected Transaction(C container) :outertype: Transaction Transaction ^^^^^^^^^^^ .. java:constructor:: protected Transaction(C container, Observer o) :outertype: Transaction Methods ------- check ^^^^^ .. java:method:: protected final void check() :outertype: Transaction **See also:** :java:ref:`{@link.execute()}` cleanUp ^^^^^^^ .. java:method:: protected abstract void cleanUp() :outertype: Transaction **See also:** :java:ref:`{@link.execute()}` commit ^^^^^^ .. java:method:: protected void commit() throws Exception :outertype: Transaction **See also:** :java:ref:`{@link.execute()}` execute ^^^^^^^ .. java:method:: @Override public final void execute() throws Exception :outertype: Transaction The main transaction execution method. This method calls the following other internal methods and scheduled jobs stored in the \ :java:ref:`internal Schedule object `\ : .. #. \ :java:ref:`init`\ - Make \ :java:ref:`Schedule`\ , resolve names to ids, aquire read access. #. \ :java:ref:`Schedule.runJobs(INIT)`\ - See \ :java:ref:`TransactionStage.INIT`\ . #. \ :java:ref:`preCheck`\ - Load/generate \ :java:ref:`EntityACL`\ s, check if any updates are to be processed. #. \ :java:ref:`Schedule.runJobs(PRE_CHECK)`\ - See \ :java:ref:`TransactionStage.PRE_CHECK`\ . #. \ :java:ref:`check`\ - only run the jobs in the CHECK stage, see \ :java:ref:`TransactionStage.CHECK`\ . #. \ :java:ref:`Schedule.runJobs(POST_CHECK)`\ - See \ :java:ref:`TransactionStage.POST_CHECK`\ . #. \ :java:ref:`postCheck`\ - currently, nothing happens here (just there for consistency). #. \ :java:ref:`preTransaction`\ - acquire write access (if necessary) #. \ :java:ref:`Schedule.runJobs(PRE_TRANSACTION)`\ - See \ :java:ref:`TransactionStage.PRE_TRANSACTION`\ . #. \ :java:ref:`transaction`\ : This is typically the main method of a Transaction. #. \ :java:ref:`Schedule.runJobs(POST_TRANSACTION)`\ - See \ :java:ref:`TransactionStage.POST_TRANSACTION`\ . #. \ :java:ref:`postTransaction`\ - Add success messages #. \ :java:ref:`writeHistory`\ - write the transaction history logs #. \ :java:ref:`commit`\ - commit the changes #. \ :java:ref:`rollBack`\ : Only in the case of errors - rollback any changes (also file-system changes). #. \ :java:ref:`cleanUp`\ : Always - cleanup the transaction (e.g. remove temporary files). #. \ :java:ref:`notifyObservers(CLEAN_UP)`\ : Also always - for any jobs that do their own clean-up. **See also:** :java:ref:`{@linkTransactionStage}.` getAccess ^^^^^^^^^ .. java:method:: public final Access getAccess() :outertype: Transaction getAccessManager ^^^^^^^^^^^^^^^^ .. java:method:: public static DatabaseAccessManager getAccessManager() :outertype: Transaction getCache ^^^^^^^^ .. java:method:: @SuppressWarnings public Map getCache(String name) :outertype: Transaction getContainer ^^^^^^^^^^^^ .. java:method:: public C getContainer() :outertype: Transaction getSchedule ^^^^^^^^^^^ .. java:method:: public Schedule getSchedule() :outertype: Transaction Return the internal \ :java:ref:`Schedule`\ object. The Schedule stores jobs which are also triggered by this transaction (see \ :java:ref:`execute()`\ for details). getTimestamp ^^^^^^^^^^^^ .. java:method:: public UTCDateTime getTimestamp() :outertype: Transaction getTransactionBenchmark ^^^^^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override public TransactionBenchmark getTransactionBenchmark() :outertype: Transaction getTransactor ^^^^^^^^^^^^^ .. java:method:: public Subject getTransactor() :outertype: Transaction getUseCacheResourceDelegate ^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override public UseCacheResource getUseCacheResourceDelegate() :outertype: Transaction init ^^^^ .. java:method:: protected abstract void init() throws Exception :outertype: Transaction **See also:** :java:ref:`{@link.execute()}` logHistory ^^^^^^^^^^ .. java:method:: public abstract boolean logHistory() :outertype: Transaction Return true iff this transaction should be logged in the transaction history logs. makeSchedule ^^^^^^^^^^^^ .. java:method:: protected void makeSchedule() :outertype: Transaction Implementation note: Not called in this class, but may be used by subclasses. E.g. in \ :java:ref:`Retrieve`\ and \ :java:ref:`WriteTransaction`\ . matchIdPattern ^^^^^^^^^^^^^^ .. java:method:: @Override public boolean matchIdPattern(String id) :outertype: Transaction postCheck ^^^^^^^^^ .. java:method:: protected abstract void postCheck() :outertype: Transaction **See also:** :java:ref:`{@link.execute()}` postTransaction ^^^^^^^^^^^^^^^ .. java:method:: protected abstract void postTransaction() throws Exception :outertype: Transaction **See also:** :java:ref:`{@link.execute()}` preCheck ^^^^^^^^ .. java:method:: protected abstract void preCheck() throws InterruptedException, Exception :outertype: Transaction **See also:** :java:ref:`{@link.execute()}` preTransaction ^^^^^^^^^^^^^^ .. java:method:: protected abstract void preTransaction() throws InterruptedException :outertype: Transaction **See also:** :java:ref:`{@link.execute()}` rollBack ^^^^^^^^ .. java:method:: protected void rollBack() :outertype: Transaction **See also:** :java:ref:`{@link.execute()}` setAccess ^^^^^^^^^ .. java:method:: protected void setAccess(Access a) :outertype: Transaction setUseCacheResourceDelegate ^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. java:method:: @Override public void setUseCacheResourceDelegate(UseCacheResource delegate) :outertype: Transaction transaction ^^^^^^^^^^^ .. java:method:: protected abstract void transaction() throws Exception :outertype: Transaction **See also:** :java:ref:`{@link.execute()}`