X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db%2Fsrc%2Forg%2Fsimantics%2Fdb%2Frequest%2FMultiRead.java;fp=bundles%2Forg.simantics.db%2Fsrc%2Forg%2Fsimantics%2Fdb%2Frequest%2FMultiRead.java;h=01aa4c58b8c5231e27660fd7e0d9954ff29970a6;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db/src/org/simantics/db/request/MultiRead.java b/bundles/org.simantics.db/src/org/simantics/db/request/MultiRead.java new file mode 100644 index 000000000..01aa4c58b --- /dev/null +++ b/bundles/org.simantics.db/src/org/simantics/db/request/MultiRead.java @@ -0,0 +1,96 @@ +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.db.request; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Session; +import org.simantics.db.exception.CancelTransactionException; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.procedure.AsyncMultiProcedure; + +/** + * The GraphRequest interface is used to create transaction + * requests to Simantics database implementations. Both read and write + * transaction requests use the same interface. + * + *

+ * The actual work carried out by the implemented request should be done in the + * perform method. It receives a Graph instance as + * the only argument which is the interface for actually reading and writing the + * graph data model. + * + *

+ * Transaction requests can be made to the database by creating your own + * GraphRequest instance and putting it in the request queue of + * the database session through the {@link Session} interface. The database + * session is responsible for executing the queued requests in a thread of its + * choice, or possibly/preferably multiple threads. The database session can + * allow multiple read-only requests to occur simultaneously, but read-write + * requests require exclusive database access. In other words only one + * read-write request can be in execution simultaneously. + * + *

+ * This interface also has two callbacks - handleException for + * allowing handling any exceptions thrown by perform and + * requestCompleted for performing actions after a request has + * been successfully completed. + * + *

+ * Clients of this interface are encouraged to extend the provided abstract + * implementations or this class or extend their own helper implementations for + * ones particular needs. The provided abstract implementations are: + *

+ * + * @author Tuukka Lehtonen + * @see ReadGraphRequestAdapter + * @see GraphRequestRunner + * @see GraphRequestStatus + * @see GraphRequestWithResult + * @see Session + * @see SimpleGraphRequest + */ +public interface MultiRead { + + /** + * When a GraphRequest is serviced by the database session + * the method perform is invoked. + * + *

+ * Perform receives an object instance implementing the SyncReadGraph + * interface which provides the only way to read/write the graph data model. + * The Graph instance must only be valid during the execution of the + * perform method and therefore should not be stored for use + * outside of its execution. + * + *

+ * The general contract of the method perform is that it may + * take any action whatsoever which involves reading or writing the data + * model through the received Graph instance. + * + * @param g an interface for reading and writing the data model + * @return the result status of the request which affects how the + * transaction proceeds, see GraphRequestStatus for more information + * @throws Exception when anything goes wrong inside the request thread + * @throws CancelTransactionException to indicate that the request needs to + * be cancelled and any changes rolled back + */ + void perform(ReadGraph graph, AsyncMultiProcedure callback) throws DatabaseException; + + }