From: Frederik D. <ma...@fr...> - 2006-03-30 08:41:04
|
> > I'm wrong on this. Extension point > org.columba.core.component is a "core" extension > point, according to its name, e.g. > "org.columba.core.*". > > Hence, extensions added to this extension point are > added to ComponentExtensionHandler during the call to > PluginManager.initCorePlugins(). Then, when the > ComponentManager.init() is called, all defined > component extensions are fully processed, including > the call to their init() method. > > A suggestion: You may want to change the method name > PluginManager.initCorePlugins() to > initCoreExtensions(). From my read of the code, a > plugin may comprise many extensions. Am I right that > it is really extensions that are "core" or "external", > and not plugins? There are two little problems in this whole code, artefacts from old times, which I didn't have the time yet to refactor. All the extension handlers retrieve the internal extensions automatically on instanciation. PluginManager.initPlugins() is therefore only used to load all real plugins containing external extensions. I can't check in the sourcecode from work, so I hope I don't tell you anything wrong here. For the last release I've cleanued up a lot and actually planned to get rid of all the extension handlers! Because they don't contain any useful code anymore, anyways. They only define an ID and the location of the xml extension list. I plan to use only a single extension handler class in the future. Regarding the ComponentManager as its very central. I remember there was an issue with it. We had to call it twice because some extensions were not registered yet. I don't remember exactly but I know that there's someone weird about this. I would have to look into the sources myself to check your component manager questions. > > I'd now guess that the distinction between "core" and > "external" **extensions** is drawn simply to make sure > that external extensions are processed after the > extension handlers on which they depend are created. This of course makes sense. The extension can be registered only after the extension handler was created before. Furthermore, external extensions use a different classloader. I guess you spoke of this weird part of the implementation I can't remember anymore. But, there was definitly an issue there. Have to look into the sourcecode. >> >> 3. What is the purpose of the component extension >> constructor versus its init() and postStartup() >> methods? In other words, how should I split the >> functionality between these methods? > > I'd still appreciate your guidance on this point. Are > there any real rules or guidance on how to divide > functionality between these methods? If so, can you > please add comments to IComponentPlugin to document > this advice? > Currently, there isn't. I remember we once had a need for such distinguished call backs but not anymore. So, you should use whatever suits you. I suggest you follow the examples of the other components, especially chat/calendar should be helpful. Best regards, -Frederik |