|Latest 7 Posts
| First Steps to Code Coverage Analysis in Domino Plugins|
Thu, Nov 9th 2017 7
| New Small Project: p2site-maven-plugin|
Thu, Oct 26th 2017 4
| Side-Project Monday Evening|
Tue, Jun 27th 2017 3
| Including a Headless DDE Build in a Maven Tree|
Tue, Mar 14th 2017 3
| That Java Thing, Part 17: My Current XPages Plug-in Dev Environment|
Sun, Feb 26th 2017 7
| Slides From My Connect 2017 Presentations|
Fri, Feb 24th 2017 6
| The State of Domino App Dev Post-Connect-2017|
Fri, Feb 24th 2017 6
| Using a ViewHandler to Serve a Different XPage|
Sat, May 3rd 2014 24
| How I Maven-ized My Framework|
Mon, Dec 8th 2014 11
| Setting up nginx in Front of a Domino Server|
Thu, Sep 18th 2014 10
| Change Is In The Air|
Fri, Aug 26th 2016 10
| Cramming Rails Into A Maven Tree|
Mon, Sep 26th 2016 9
| Reforming the Blog in Darwino, Part 2|
Thu, Feb 16th 2017 9
| I Posted My WrapBootstrap Ace Renderkit|
Tue, Sep 30th 2014 8
| The Trouble With Developing on Domino|
Tue, Jul 8th 2014 7
| Be a Better Programmer, Part 4|
Thu, Aug 14th 2014 7
| Quick Tip: Wrapping a lotus.domino.Document in a DominoDocument|
Tue, Mar 3rd 2015 7
||Things I Rarely Use: sessionScope
As this post's title implies, I'm considering making this a series on XPages
anti-patterns, but no promises there.
In any event, this is a topic that's been stewing in my brain for a little
while: my antipathy towards the session scope in XPages. Now, don't get me
wrong: other than the "not reset on logout" thing that may be fixed by now, I
have no technical qualms with sessionScope; it does what it says on the tin.
However, I've often found that many people use it very frequently, whereas I
have found fewer and fewer uses over time where it is appropriate.
To set the stage, I use the various scopes in roughly this order by descending
The main things that I use sessionScope for are things that truly make sense
only for the current browser session, such as the current date range to view in
a log-viewing app. Other than that, I generally don't use it for:
Though it's not wrong, per se, to use the session for this, I've found it
better overall to use the applicationScope, either directly
(applicationScope.put("someCachedValue", whatever)) or by putting a Map keyed
by username in there. The latter gets the same user-specific cache benefits of
sessionScope (and more reliable, too, due to the potential for switched
authentication) while also having the benefit of keeping the cache if the user
logs in from another device. This is particularly potent with Anonymous. This
is not a hard-and-fast rule, though - you may decide otherwise for cache-size
or other reasons.
Primary Navigation or Context
Unlike the previous one, this is a hard-and-fast rule: do not use sessionScope
for important page context. The worst would be something like having an "open
document" button that puts the desired document UNID (or, worse, note ID) in
sessionScope and then navigates to the page. Never do this! Though XPage URLs
are a continuing problem, they're still the correct place for target-document
information. The rule of thumb is that you should be able to copy the URL any
time, paste it into another browser, and be in basically the same place.
By this I mean things like the active linksbar category for the current page.
I've seen things like having a navigation bar link that sends the user to a
certain page while also setting a sessionScope variable to indicate the active
menu bar. This is a huge problem for a number of reasons: it's a maintenance
nightmare (having to code every link to do this), it's just asking for bugs
(links setting the wrong or no value), and it breaks completely when the user
bookmarks the page or comes back after session expiration. It's technically
better than the previous crime, but only barely. The correct place for this
information is handled somewhere in the page structure, though the specifics
get murky. I generally take a page from the Extension Library example DB and
use a "navigationPath" properly on my layout control to define a
slash-delimited hierarchy of navigation context.
I'm thinking of things like a task-tracking system where you're looking at a
Client document and want to add a Task to them, providing the Client document's
ID for context. This is another area where the URL is the correct choice:
ending up with a URL like "/task.xsp?clientId=whatever" makes the intent
("create a new task for client with ID 'whatever'") clear and stable across
Overall, I think of sessionScope as the Petyr Baelish of XPage features: there
are some cases where you have to deal with it, but you should generally
consider it extremely unreliable and untrustworthy.
Jul 03, 2014
| Recent Blog Posts
First Steps to Code Coverage Analysis in Domino Plugins|
Thu, Nov 9th 2017 2:53p Jesse Gallagher
I'm always interested in getting the computer to tell me how to tell it what to
do more successfully, and, to further that pursuit, I've started taking an
interest in code coverage.
If you're not familiar with the term, "code coverage" refers to reporting on
which lines of code were actually executed during runtime, most commonly in
association with unit tests. Eclipse (and presumably other IDEs) has support
for this, and I've decided to give it a shot.
Since I'm starting this out
New Small Project: p2site-maven-plugin|
Thu, Oct 26th 2017 5:17p Jesse Gallagher
It's no secret that I have a love/hate relationship with developing for OSGi
platforms with Maven. The giant divide between "all-in" Tycho projects (which
limit your options with normal Maven features) and trying to bolt on OSGi
support in an otherwise-normal project creates an array of problems big and
Some of those hurdles would be difficult to bridge, such as any automated tests
that want to test the proper functioning of OSGi services. However, not all
projects need that - i
Side-Project Monday Evening|
Tue, Jun 27th 2017 1:49p Jesse Gallagher
Yesterday, in one of my various Slack chats, the topic of JShell - the Java 9
REPL - came up in the context of how useful it would be for XPages development.
Being able to open up a "shell" into a running XPages application could be
really useful in a lot of ways - and I think that the XPages Debug Toolbar has
an SSJS-evaluate feature that would do something like this.
Still, it got me looking around a bit, and I ran across Groovysh Server, which
is a project that combines Apache's SSH
Including a Headless DDE Build in a Maven Tree|
Tue, Mar 14th 2017 4:45p Jesse Gallagher
Most of my Domino projects nowadays have two components: a suite of OSGi
plugins/features and at least one NSF. Historically, I've kept the NSF part
separate from the OSGi plugin projects - I'll keep the ODP in the repo, but
then usually also keep a recent "build" made by copying the database from my
dev server, and then include that built version in the result using the Maven
Assembly plugin. This works, but it's not quite ideal: part of the benefit of
having a Maven project being au
That Java Thing, Part 17: My Current XPages Plug-in Dev Environment|
Sun, Feb 26th 2017 4:23p Jesse Gallagher
It's been a while since I started this series on Java development, but I've
been meaning for a bit now to crack it back open to discuss my current
development setup for plug-ins, since it's changed a bit.
The biggest change is that, thanks to Serdar's work on the latest XPages SDK
release, I now have Domino running plug-ins from my OS X Eclipse workspace.
Previously, I switched between either running on the Mac and doing manual
builds or slumming it in Eclipse in Windows. Having just t
Slides From My Connect 2017 Presentations|
Fri, Feb 24th 2017 9:29p Jesse Gallagher
At this year's Connect, Philippe Riand and I co-presented two sessions: one on
ways to integrate your apps into the Connections UI and one on Darwino's role
for Domino developers. I've uploaded the slides to SlideShare:
DEV-1430 - IBM Connections Integration: Exploring the Long List of Options
DEV-1467 - Give a New Life to Your Notes/Domino Applications and Leverage IBM
Bluemix, Watson, & Connections (effectively, "the Darwino session")
The State of Domino App Dev Post-Connect-2017|
Fri, Feb 24th 2017 9:28p Jesse Gallagher
I'm en route back from this year's IBM Connect in San Francisco, and this plane
ride is giving me a good chance to chew over the implications for Domino
First off, I'll put my bias in this matter right up front: Darwino, which I've
been working on and discussing quite a bit, is one of the three "chosen"
vendors for app enhancement/modernization/what-have-you. So, while this post
isn't going to be about Darwino specifically, it's certainly pertinent for me.
In any case,
Reforming the Blog in Darwino, Part 2|
Thu, Feb 16th 2017 8:41p Jesse Gallagher
During the run-up to Connect next week, I turned my gaze back to my
indefinite-term project of reforming this blog in Darwino.
When last I left it publicly, I had set up replication between a copy of the
database and a Darwino app. After that post, I did a bit of tinkering in the
direction of building a (J)Ruby on Rails front-end for it, next to the "j2ee"
project. That side effort may bear fruit in time (as I recall, I got the
embedded web app serving default pages, but didn't implemen
Connect 2017 Final Stretch|
Wed, Feb 15th 2017 12:16p Jesse Gallagher
IBM Connect 2017 is less than a week away, and I've been furiously prepping for
a couple parts of what is promising to be a busy conference.
On Monday, before the official kickoff of the conference, OpenNTF is co-hosting
a Hackathon, where attendees will work on one of several potential projects.
The goal is to learn about new development methods, work with new people, and
hopefully kick off some useful open-source projects to boot.
During the conference proper, I'll be presenting two se
December Is Self-Aggrandizement Month, Apparently|
Sat, Dec 17th 2016 3:21p Jesse Gallagher
It's been a busy month (couple of years, really), but the last few weeks in
particular have involved a couple minor announcements that I'm quite
On the 14th, IBM announced the 2017 class of IBM Champions for ICS, and they
included me on the list. It's been a joy to be considered a Champion for the
last few years, and 2017 promises to be an interesting year to continue that in
our slice of the development world.
Mere days later, IBM sent out notifications about Connect