OpenJUMP
What are PlugIn, Extension and Registry ?

Here are some explanations from Martin Davis, designer of JUMP workbench about PlugIn, Extension and Registry, three important OpenJUMP workbench concepts for every people who want to contribute :

“Originally JUMP just had the concept of plugins, but this quickly turned
out to be limiting. Many JUMP add-ons (to use a neutral term) comprise
a whole collection of inter-operating plugins. They may also contain
other things, such as objects or classes which need to be added to the
Registry (more on this later). Also, while plugins can self-install,
sometimes it’s more convenient to have another piece of code manage
their installation (note: just like as the JUMPConfiguration class!)

A JUMP Extension was intended to be a way of managing a whole collection
of plugins and associate objects. It provides a single place where the
developer can do all the various house-keeping tasks needed to install &
configure a large add-on. The extension class “gets control” during the
load, and gets full access to the JUMP core.

An extension also provides a way of managing a set of plugins which are
related. The extension has a version number and a name. If JUMP
allowed you to unload things, it would be extensions which were unloaded.

Hopefully that clears things up, and convinces people that Extensions
really are a necessary and fundamental JUMP concept.

As for the Registry, I’m not sure if people really grok what this is
for. There are more and more things in JUMP which aren’t plugins, but
which need to be installed, managed, discovered and used by plugins
which actually do work. These are things like I/O drivers, Datastore
drivers, Decorators, Geometry Functions, etc etc. The Registry was
developed as a central place where these things could be managed. The
Registry formalizes and provides a standard pattern for doing this. It
of course can have new Categories of objects added to it (by an
Extension, naturally).”

Martin Davis


Question: It seems to me the purpose of the Extension Class is to provide a container that allows for the easy installation and configuration of a set of plug-ins and cursor tools. Is this correct?

Answer:

Yes, installing GUI components is the primary use for extensions … but
this is not there sole purpose.

Extensions are intended as a method of automatically injecting an
initialization routine into Jump. For example: reading properties,
loading layers, creating GUI components, checking for external drivers
... Installing plugins.

Keep in mind, you will be executing in the GUI thread, so longer
exercises (for example creating DB connections) should be spawned in a
new thread.

David Zwiers
Vivid Solutions Inc.