Case Study: JSF 2.0 Using Session – Unwelcomed Interaction

Client: A leading independent provider of healthcare information management services supporting commercial, Medicare Part D, and Medicaid

Development Category: Project Recovery

Services Performed: Requirement Specification, Technical Strategy, Application Enhancement, Implementation

The Challenge

The organization found itself with ineffective software. Written in Java Server Faces (JSF) 2.0 using Session, the applications in question were not designed to support multiple instances per session. As a metaphor, think of shopping with separate people but being required to use the same cart for all items. Manageable in the real world, but in the web world it caused the “items” to interfere with each other and share data. The applications weren’t designed to handle the specific needs of the organization: to allow a user to have multiple instances of the application per session and keep them separate. The project context included no time to rewrite the application or to even make major enhancements.

The challenge became how to fix the software without breaking anything else in the application.

The Process

With the inability to heavily alter the applications and in a time crunch, a strategic plan was paramount to the success of this project. After extensive analytical decisions regarding non-viable options (like using ViewScoped managed beans instead of SessionScoped), it was decided that the solution would use Custom Scope and available frameworks in tandem.

The Keyhole Software Feature Team utilized a JSF scope (new in 2.0) called Custom Scope. As the name implies, this scope had the ability to be customized to the organization’s needs. Keyhole Software configured the scope to behave just like Session Scope, but with the key difference that each time the same user launched a new instance of the application, the application would act as if it had its very own and separate piece of the session.

As with many successful solutions, existing open source implementations were leveraged: JBoss Seam and MyFaces Orchestra. The solution allowed the use of a Servlet filter to override the encodeURL call (a call that is made when rendering the response of clicking the link). Using this call as a “hook,” the PartitionID was added to every link on the response page.

Utilizing a customization feature within the established framework kept application impacts down while allowing an important change in the behavior of the application.

This solution was very clean and simple, avoiding the need to change any application pages. While this particular technical requirement was challenging, other team members were simultaneously providing additional functionality including add Spring security to other existing applications, introducing a consistent application launch bar that linked applications built on different technologies into a single launch pad, and functionality for deep linking from one application into the middle of another.

Keyhole’s Role In The Solution

The approach went from requirement specification to implementation in just a four-week sprint. Configuring JSF Custom Scope to bend to the client’s needs and leveraging technology from JBoss Seam and MyFaces Orchestra solved the issue. This challenge of making an application behave in a way that it was not designed to — without any pervasive application changes — was complex, but not that uncommon in the enterprise. The primary accomplishment for this client was in achieving near impossible deadlines with little-to-no ramp up time, while adding new key functionality and not regressing the quality of the application.