locking in a session-less context

Can isolation levels and lockmode be used in a session-less context? IE, can I do something like

http://localhost/tamino/mydb/_xql=…?_isolationLevel=committedCommand

The manual says:
uncommittedDocument - This value is the default value for the _isolationLevel parameter if used in database operations in a session-less context.

Does that imply that you can set isolationLevel to anything, or does it mean that setting isolation level in a session-less context has no meaning?

Bill

Hi Bill,

you can set _isolationLevel also with session-less requests. But note, that every command immediately commits or rolls back its transaction and consequently releases all locks.

Regards
Michael

Thanks Michael.

OK, we were able to get locking in a session-less context to work here. However, in order to be able to specify an _isolationLevel you need to also specify _lockMode=none. Otherwise, Tamino seems to ignore whatever isolationLevel you specified, and does dirty reads. (This is different than the procedure for a _connect call, where you only need to specify isolationLevel.)

So, it ended up being something like:

_xquery=...&_isolationLevel=committedCommand&_lockmode=none



Any comments? Seems like you should either change this behavior or update the documentation.

Bill

Also, can _transactionTimeout be specified in a session-less context?

Basically, the problem is that the X-Machine doc says that _isolationLevel, _transactionTimeout, etc. can only be set when a session is started (on the _connect command), but the Java API doc states that these values can be set/reset at the start of each transaction. In auto-commit (a.k.a. session-less context) mode, each command is in it’s own transaction, and thus the parameters can be set for each command.

Bill

Hi Bill,

it is a bug that you can/have to specify _lockMode=none when defining an isolation level for a sessionless request. This will be fixed with next major release (V4.2).

_isolationLevel can be set for every transaction (also sessionless). _lockWait and _lockMode can be set for every request (also sessionless). This will be clarified in the documentation of the next major release.

_transactionTimeout only has an effect when connecting to the database and applies for the entire session. In all other cases it will be ignored.

Regards,

Michael

Thank you Michael.

As usual your reply is very helpful. So, transactionTimeout is unique in that in can only be set at connect time.

On a related note, regarding API4J and .NET API, transactionTimeout cannot be set at all; you may want to add this feature. Also, the cursor related options of scroll=yes/no (X-Query and XQuery) and sensitive=vague/no (XQuery only) are also unavailable through the API. I assume you would want to add those options to the API too.

Bill

Hi Bill,

regarding the transactionTimeout, we will support this with the next version of both APIs.
For the other options, you mentioned, we are currently investigating them.

Best regards,
Christian.