[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| [p2-dev] approaches to Install Handlers | 
Hi,
I have looked into the issues of supporting "install handler like  
functionality" in p2. And I am trying an approach to provision the  
"install handlers" using p2 (as opposed to doing something similar to  
the current install handler functionality with a specially packaged  
jar).  Before continuing the work - I wonder if you considered using  
(full) javascript to describe installation actions? One idea could be  
to use org.mozilla.javascript 1.6.6 which is in Orbit (size is 615 kB).
An IU could contain the full definition of the actions required. As  
long as you have the IU you will never lose the definitions. It is  
simply a matter of providing access to an appropriate set of objects  
from java script.
Don't know if you considered this and rejected the idea?
When comparing a javascript solution with an p2 based alternative  -  
one needs to consider these things:
- If a plan is created that requires operations on IU's that have  
"install handlers" - these needs to be provisioned into the running  
agent environment
- If the running agent environment is the same as the target  
environment, the original plan may be wrong and needs to be redone  
once the install of the "install handlers" have been performed.
- Different agents may over time operate on the installed target -  
they all need to have the "install handlers" installed - to do this  
they must find them somewhere
- If the agents are to get them from remote repositories - it may be  
impossible to uninstall an IU if the "install handler" is no longer  
present in any repository
- If an agent is written with a different technology than the original  
agent, the  "install handler" must be resolved against a repository  
where all its required capabilities are found - this may be remote -  
and again, may have been removed - thus making it impossible to  
uninstall an IU.
- Once an agent has used an "install handler" it should probably get  
rid of it to avoid bloat in the agent profile, and to avoid potential  
problems later when the same agent needs to install something that  
conflicts with a previous install operation.
The solution for "missing bundles" would be to start by mirroring them  
into a special local repository only holding what is required for  
install handlers (Thereby securing that they at least are available  
locally). If p2 "applications" use profiles in one known location the  
install handlers could be installed there as that would solve a  
problem of having install handlers that have dependencies on platform  
and UI.  Currently, I don't think that is the case (i.e. installer  
etc. are not downloaded into some shared location). A worst case would  
be where user first downloads the installer, then wants to install  
something that requires install handlers with bundles that require UI.  
User then installs the thing they want to install, and p2 yet again  
downloads the same bundles that were installed first for the  
installer, and then for the install handlers).
This is still quite kludgy, and still breaks if two different users  
run their own setups, and a super user tries to help another user with  
provisioning actions - the super user would need to also get the  
"install handlers" into the agent instances used by the super user. (I  
am sure there are other problem scenarios as well).
I think solutions is a bit too loosely coupled for my taste.
A Javascript solution would naturally not be as powerful - it would  
not be possible to write a complete GUI for instance (unless someone  
provides the needed glue), but I think that can be worked around quite  
easily.
- Authors of IUs that require install handlers always (as they do  
today) have the option to write custom installers (with their own  
touch points, actions, etc.). These installers can have advanced GUI,  
Wizards etc. The problem is that the user would need to first download  
their installer and run it.
- A IU with javascript could easily have instructions that provisions  
and executes a second custom p2 based installer (or any other type of  
installer for that matter).
- To reduce the need to write custom installers the javascript could  
be given access to a simple API that allows some basic user  
interaction (ask a question, show a message, etc.) as this can easily  
be provided in both a headless and a GUI version.
A related idea is to provide a two phased approach where the first  
install bequests a second provisioning run when the target starts.  
There are situations where this is the preferred approach. Say I want  
to checkout projects in a workspace and get them built. In order to do  
so from any p2 installer, the installer would need to get a *lot* of  
bundles - practically turning it into a full IDE (when the initial  
download is done by a browser the user does not benefit from parallell  
downloads, compression optimization etc). If p2 instead could bequest  
a provisioning operation on startup of the target the initial  
installer can stay small. The bequest mechanism could then naturally  
be used when custom install handlers in java are required.
So - which of the ideas do you think are worth exploring?
- The p2 (only) based approach
- Using a jar file like the update manager's install handler (it has  
its own set of issues that I did not describe above).
- Using java script
- Using bequests
Regards
Henrik Lindberg
henrik.lindberg@xxxxxxxxxxxxxx