Developing Plugins
IdentityIQ stores the .zip archive file of the Plugin in the IdentityIQ database in a data LONGBLOB in the spt_file_bucket
table. The data in the spt_file_bucket
table is referenced ID to an entry in the spt_persisted_file
table.
Plugins are loaded from this .zip file after installation or after an application server restart. The .zip file is extracted, and all important files are cached for later use. There are several accessor methods to reference the cached files, but they can also be referenced by the url prefix /identityiq/plugin/pluginName followed by the path found in the build structure. Compiled java classes are loaded and cached from the .zip archive using the PluginClassLoader class.
Note: The single exception to these requirements are version numbers with -dev appended to the end. This suffix causes version number validation to be bypassed.
To provide better support for upgrading plugins, plugin version numbers must be numeric, contain no alphabetic or other characters, and must separate the elements of the version number with decimal points. Within each segment of the version number, the values between the decimal points, the values are cast as integers, and leading zeroes are trimmed.
For example:
- 04 and 00004 are both interpreted as 4
- A segment containing any non-numeric values is interpreted as 0
- 1.004.alpha is parsed as 1.4.0
- 2.3.4a is parsed as 2.3.0
A plugin is defined in IdentityIQ by the Plugin XML object. This object defines the parameters of the plugin, such as REST Resources, Snippets, Widgets, and Settings. This Plugin object is defined in the manifest.xml file. The Plugin Object is an XML object that defines the features of the plugin. This object tells IdentityIQ what features are in your plugin by defining them as attributes of a Plugin Object. In the Plugin Object you also define items such as the name of the plugin, the rights required for using the plugin, version, snippets, and REST resources.
These attributes are included in the plugin model:
Attribute Name |
Description |
name |
Unique Name of the plugin |
installDate |
Date that plugin is installed |
displayName |
Display Name for the plugin |
disabled |
Status of the plugin |
rightRequired |
What SPRIGHT is required for this plugin |
version |
The version of the plugin |
minSystemVersion |
The minimum version of IdentityIQ that the plugin will run on |
maxSystemVersion |
The maximum version of IdentityIQ that the plugin will run on |
attributes |
List of configurable attributes |
file |
Reference to the persisted file in the database |
A plugin can include the following components:
-
Manifest file
-
Build file(s)
-
Database Scripts
-
UI Elements
-
XML Artifacts
-
Java Classes
-
Java JAR libraries
Not all of these components are required for a plugin - it can be as basic as the manifest, and some javascript/xhtml pages. In order to understand how a plugin operates, and how best to create one, it is important to understand what each of these components does, and how they interact.