The difference of PlugIn and Extension and Registry

From OpenJUMP Wiki
Jump to navigation Jump to search

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.