Thats a good point. Given that in the current model it's expected that
the plugin is initialized each time its used we may not be able to
follow the init once strategy. It would be nice if we can work towards
that though.
In any case, the bigger issue is if we can remove access to the
rendering model in plugins. I still think that's important and
something we should do for 3.0.
-- Allen
Anil Gangolli wrote:
I remember running into essentially this problem before.
Plugins like bookmark plugin could be initialized per website, but do
need access to site-specific (bookmark) data. The topictag plugin can
refer to bookmarks as well, but I think most people run with this
disabled because it is not efficient.
The instantiation and initialization model are coupled, since one
expects that the plugin may store instance data/references at
initialization time, and use it when called subsequently to process the
entry. If the call to process the entry could pass in enough contextual
information to relieve the plugin from keeping this state, it would
allow sharing instances of the plugins and initialize them only once.
In other words, init should pass in server-wide configuration
information, and the call to process the entry should pass in all
contextual references necessary.
--a.
----- Original Message ----- From: "Allen Gilliland"
<[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, September 01, 2006 11:14 AM
Subject: Re: cleanup weblog entries plugins
okay, this has been committed to the 3.0 branch.
there is one more important little change that i would like to propose
with regards to the entry plugins. the entry plugin architecture was
cleaned up quite a bit for 3.0, but one thing was left which i would
like to address. the current entry plugin interface has this method ...
public void init(WebsiteData weblog, Map model) throws RollerException;
... which initializes the plugin for the given weblog. i would like
to change this method signature to not pass in the model Map to
plugins for a few reasons ...
1. security. giving a plugin access to the model is potentially
dangerous because a plugin could then remove/modify existing items in
the model or add potentially harmful or inappropriate items to the
model. we have specifically designed the rendering model architecture
to accomplish this task. Model objects are what should be added to
the rendering model, not random items via entry plugins.
2. simplicity. i don't think plugins need the model to do their job.
they are currently only meant to take the entry content and transform
it in some way and that shouldn't require access to the model.
3. performance. technically if a plugin doesn't need to be
initialized each time with model data relevant to a given request then
it would be possible to initialize the plugins only once and then
reuse them.
also note, right now the only plugin that even makes use of the model
that is passed in at init time is the Textile plugin, which i have not
included in the core src tree as a supported plugin mainly because it
requires an additional library and i think those kinds of plugins
really should be added on externally.
what do others think?
-- Allen
Allen Gilliland wrote:
for the current set of plugins I think that's fine, we can just move
all the current plugins in to the core src tree and then modify the
config to only enable a subset of them. i'll go ahead and take this
approach since it really is the easiest in our current situation.
the main reason i proposed this though is that i believe very
strongly that moving forward it's not our job to maintain all the
plugins directly in the src tree. we don't have many people who do
this right now, but eventually we want to build a user community that
really does create and share plugins and that has to happen outside
of the core project. we already have 10 plugins, what happens if the
list grows to 20, 50, etc?
as long as we make it easy for people to add in a plugin then i think
it's best that they be developed and maintained outside of the core src.
-- Allen
Sean Gilligan wrote:
Anil Gangolli wrote:
Sorry for entering this conversation a bit late.
How about shipping these plugins but not enabling them by default.
For example, I'd rather they ship as part of the normal install but
we just comment them out in roller.properties.
Or we could have an admin page to enable them like for editor pages.
-- Sean