Posted by Niklas Heidloff | March 19, 2012
Phil Riand and I have created a new
project which shows how to use
a very powerful feature in IBM Domino 8.5.3. The project contains samples
demonstrating how to create threads and Eclipse jobs from XPages to run
longer taking operations asynchronously without blocking the XPages user
interface or to run scheduled tasks.
Watch this video
to see the sample in action (video has no tone).
An example is a task that checks on
a scheduled basis for new messages in mailboxes, databases, social networks
like Facebook and Twitter, etc. Server side code of an XPages application
can then get the latest messages simply by reading the cached information
from the task.
All samples in this project use a new
feature in Domino 8.5.3. com.ibm.domino.xsp.module.nsf.SessionCloner can
be used to clone a Domino session of the currently authenticated user.
This allows developing threads that run on behalf of a specific user which
can use the Domino Java APIs even after the user's HTTP session has expired.
com.ibm.domino.xsp.module.nsf.ThreadSessionExecutor which leverages SessionCloner
adds additional convenience functionality to set context like the current
database, it handles session timeouts, etc.
The Eclipse
jobs framework is a powerful framework
used by Eclipse rich client developers. Eclipse jobs are essentially threads
plus extra functionality like scheduling, progress monitoring, pooling
etc. The XPages runtime supports these Eclipse jobs also server side since
the necessary plugin comes with the XPages runtime similarly to the OSGi
core framework.
In order to run the samples Domino 8.5.3
is needed. The extension library or upgrade pack 1 is only needed to check
and display progress in an XPage via the xe:jsonRpcService control.
The Java code for threads and jobs can
either be run in a NSF or as plugin. If run in a NSF the java.policy file
needs to be changed to grant permissions. For plugins that is not necessary.
Check out the project for more details.
These capabilities are advanced capabilities
in addition to the 8.5.3 synchronization improvements as mentioned in Karsten
Lehmann's blog:
From Phil Riand: "Synchronization
no longer happens on the session itself, but on the page instance. In
short, it can now execute 2 different page instances at the same time,
while it locks for postback calls to the same page instance and execute
them sequentially."
From Karsten: "there will be a
new database property called xsp.session.transient. This flag means that
unique session objects will be created per request to the server and discarded
right after the request ended. This is a first attempt to provide session
less mode. If you use this option, then you can create one database with
all the services and no synchronization will happen, as each request will
have its own session object."