Does JIRA use a third-party library for User Preferences or is it In-House?

 

1 answer

1 accepted

This widget could not be displayed.
Chris Fuller Atlassian Team Oct 12, 2016

This depends on exactly what you mean, but the best answer is probably "a bit of both".  I'll try to give the complete picture of things as best as I can.

  • The Shared Access Layer (SAL) utilities for cross-product development defines a UserSettingsService.  SAL is in-house.
  • The JIRA implementation of the UserSettingsService is a thin wrapper around its UserPropertyManager, a JIRA-specific API.
  • JIRA's UserPreferencesManager is also just a thin wrapper around UserPropertyManager. It's pretty worthless, except that it presents the properties as a Preferences object from the atlassian-core library. That was a noble but ultimately doomed effort to unify a common cross-product platform and predates SAL.  It's mostly useless today, but there are still a few things that need it, like the cron expression editor on the filter subscription page.
  • The UserPropertyManager delegates to the  JiraPropertySetFactory using the entity name ApplicationUser and the entity ID of the app_user row that corresponds to the user.  This is also a JIRA-specific API.
  • The JiraPropertySetFactory creates instances of an OpenSymphony PropertySet, a typed key-value store in an Open Source library that you can find on BitBucket.  The OpenSymphony libraries are best known as the original authors of Webwork (still in JIRA, but most other products have moved on to using Struts).  Although PropertySet is open source, I'm not aware of anybody else that uses it outside of Atlassian.
  • The implementation for PropertySet is split across two main ones that JIRA uses (there are several others in existence which JIRA does not use, including those based on Hibernate, non-cluster-safe caching strategies, EJB, and more):
    • The original implementation is OFBizPropertySet, which you can find in the main PropertySet library.  As you can see in its implementation, it interacts directly with the GenericDelegator from Atlassian's OFBiz Entity Engine Fork. This is a very old fork of a small portion of the Apache OFBiz project.  Although OFBiz itself has many products that use it, JIRA is very likely the only consumer of our highly customized fork of its entity engine.  (The other Atlassian products use Hibernate for this.)
    • In most cases (including user preferences) the PropertySet implementation we use is one that I wrote, and it uses QueryDSL under the hood.  That implementation is closed source, but if you have access to JIRA's sources, you can find its implementation split across CachingOfBizPropertySet and CachingOfBizPropertyEntryStore.

Fantastic. Thank you for your wonderfully thorough answer. Good stuff!

Suggest an answer

Log in or Sign up to answer
Community showcase
Posted Tuesday in Jira

What modern development practices are at the heart of how your team delivers software?

Hey Community mates! Claire here from the Software Product Marketing team. We all know software development changes rapidly, and it's often tough to keep up. But from our research, we've found the h...

196 views 1 3
Join discussion

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you