Hello all,
I'm using Torque 3.1 in a multithreaded web app
against Oracle 10g.
The short version of my question is: is there a
"read-only" transaction in Torque? The importance of a
Transaction object for _writes_ is clear, but what
about read-only operations?
The long version: I do not have experience with
Oracle; I have some experience with OO databases.
With that background, I'm inclined to define a
TransactionManager class which has two methods --
read() and readwrite(). These methods would be
synchronized so that writers do not interfere with
readers. The readwrite() method would do a full
transaction with commit/rollback etc. The read()
method should -- in theory -- do a "lightweight" read
of the database; a rollback is not necessary.
Does this make sense in Torque? I realize that Oracle
will isolate readers from writers. That is, until a
writer commits, no one will see the changes. But I'm
concerned about a concurrent read and write -- what if
a writer commits during a long read operation? Am I
being paranoid?
The following code is my basic idea. In English: an
Action interface encapsulates access to the database;
the TransactionManager provides read() and write()
methods which call the perform() method on the Action.
In this way, the try-catch-commit-rollback paradigm
can be centralized in one place. Also, there is
strong serialization of DB access (though
I realize this may be too much serialization!).
Any comments? Again, I'm not sure if this is too
strict. It feels like I'm rewriting a framework like
Spring :-}
thanks,
Mike
[EMAIL PROTECTED]
------------------------------------------------------
interface Action {
void perform();
}
class TransactionManager {
public void readwrite(Action action) synchronized
{
Connection connection = null;
try {
connection = Transaction.begin(...);
action.perform();
Transaction.commit(connection);
connection = null;
} catch(TorqueException tex) {
Transaction.rollback(connection);
}
// log success/fail and timing info
}
public void read(Action action) synchronized {
// the "easy" way is to mimic readwrite()
// but can we make this lightweight.
// Should we even use a transaction here?
}
}
class Example implements Action {
public void run() {
TransactionManager manager = ...;
manager.read( this );
}
public void action() {
Criteria c = new Criteria();
c.add( stuff here );
List results = SomePeer.doSelect( criteria );
// populate Example with data from
// results List
}
}
__________________________________
Do you Yahoo!?
Yahoo! Mail - Easier than ever with enhanced search. Learn more.
http://info.mail.yahoo.com/mail_250
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]