Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [platform-update-dev] Looking for Recommendations


Hi Christophe,

Thanks for the reply.  Currently all of my features and plugins are on the same site and the same location.

OK, so if I understand this I could just create an update site containing my leaf features like you suggested:

My Update Site
    |
    +--Product 'X' Feature (for developing apps for Product 'X')
    |
    +--Product 'Y' Feature (for developing apps for Product 'Y')


So, then in my feature.xml for these features, I would include as nested features all of the features I need to run?  So, for example, if I did a Help > Software Updates > Manage Configuration on my product it would look something like this:

My Platform
  |
  +--C:\some\path\to\it
       |
       +--Product 'X' Feature (for developing apps for Product 'X')

        |    |
        |    +--Platform Core Feature (branding)
       |    +--Install Feature (custom install handlers)
       |    |

        |    +--Core Development Feature (required by ALL products)
       |    |

        |    +--Product 'X' Core Feature (required by all Product 'X's)
       |

        |
        +--Product 'Y' Feature (for developing apps for Product 'Y')
             |
             +--Platform Core Feature (branding)
            +--Install Feature (custom install handlers)
            |

             +--Core Development Feature (required by ALL products)
            |

             +--Product 'Y' Core Feature (required by all Product 'Y's)


Looking at the above, I am still tempted to factor out the branding and install features into a top-level "Core Platform Features" feature, and not nested in the products, but I'll mull that one over.  It would mean one more entry in the update site to check off when you performed an update.

So, assuming this is what you meant - I have some more questions ;o)
  1. If I nest features like this, do I still declare a dependency that Product 'X' requires those features that it is nesting?  If the "requires" clause only means that the required features and plugins must be present *before* installing Product 'X', then I would assume I do not declare the dependency.  Although - this seems counter-intuitive to me because Product 'X' *requires* those feature to function correctly...although it is including them...  Hmm...so I guess the dependency here is an "install-time" dependency rather than an execution-time one?
  2. You're also saying if I decide to disable/remove Product 'X' above that the *duplicate* features it nested will not be disabled/removed because Product 'Y' still needs them?  I assume you hold some sort of reference count somewhere?
  3. Updating.  I realize this will be an issue as it is an issue now, but I'm not sure how this is going to work.  If I update Product 'X' only in the scenario above I assume the update site will install the latest version of all of its nested plugins and features as well.  This will undoubtedly affect Product 'Y' - which is OK, because that's the way it works now - you must upgrade everything at once or you break your platform.  However, let's say the user does the wrong thing and only installs an update for Product 'X' (and hence all of its sub-features).  What happens to Product 'Y' (this is the part I am the foggiest on)?  Does it:
           a) Continue to try to function, using the updated versions of its nested features installed as a side-effect of the update to Product 'X'?
           b) Attempt to use the versions of the plugins and features specified in its feature.xml - which are no longer active because they have been upgraded?
           c) Disable itself because it is all screwed up. ;o)

I guess what I don't fully understand is what exactly happens when a feature is installed and is declaring that it contains a nested feature (or plugin) of version 1.0.0 (for example), and by some other mechanism, that feature (or plugin) has been upgraded to v1.0.1?  And does this behavior depend on what order the features are loaded/activated?  What if in the above scenario, Product 'Y' is actually parsed/loaded/activated first, referencing the *older* versions of the nested features and plugins, and then the Product 'X' feature is loaded?
 
Sorry for all the questions, but the reason I am in such a state today is because I really don't "get it" 100% just yet.  I'm almost there, though!  ;o)

Thanks,
Mark.
----------------------------------------------------------



Christophe Elek <celek@xxxxxxxxxx>
Sent by: platform-update-dev-bounces@xxxxxxxxxxx

06/08/2006 12:54 PM

Please respond to
"Eclipse Platform Update component developers list." <platform-update-dev@xxxxxxxxxxx>

To
"Eclipse Platform Update component developers list." <platform-update-dev@xxxxxxxxxxx>
cc
platform-update-dev@xxxxxxxxxxx, platform-update-dev-bounces@xxxxxxxxxxx
Subject
Re: [platform-update-dev] Looking for Recommendations





Hello Mark,

Can you tell me why we cannot have just this ?

My Update Site
    |
    +--Product 'X' Feature (for developing apps for Product 'X')
    |
    +--Product 'Y' Feature (for developing apps for Product 'Y')


And let the feature.xml and <site archive tag> do the rest ?

When we designed the site.xml , our idea was to list 'only' what can be
'installable' (meaning product X or product Y)
Then the feature.xml of each product will describe what is included, what
is needed and what is optional
The archive tag (if present) can route to another part of the site or a
completely different site (like eclipse.org)


Uninstalling should work fine, we should only uninstall if no other enabled
feature requires this feature...

Are all your features in the same site and same location ?
Same for all your plugins ?

feel free to ping me :)

Christophe Elek - Senior Software Analyst
IBM Rational Serviceability Architect
IBM Toronto Lab 8200 Warden Avenue, Markham, Ontario, L6G 1C7
Phone Number: (905) 413-3467
Email: celek@xxxxxxxxxx (Embedded image moved to file: pic19577.gif)
Web:http://www.ibm.com/software/rational/


                                                                         
            Mark_Melvin@amis.                                            
            com                                                          
            Sent by:                                                   To
            platform-update-d         platform-update-dev@xxxxxxxxxxx    
            ev-bounces@eclips                                          cc
            e.org                                                        
                                                                  Subject
                                      [platform-update-dev] Looking for  
            06-08-2006 12:05          Recommendations                    
            PM                                                            
                                                                         
                                                                         
            Please respond to                                            
            "Eclipse Platform                                            
            Update component                                              
            developers list."                                            
            <platform-update-                                            
            dev@xxxxxxxxxxx>                                              
                                                                         
                                                                         





Hi Everyone,

I have mailed this list before with my convoluted feature structuring
issues in the past, but we have come to a crossroads with our product where
we can make a breaking change and I would like to choose the best solution
moving forward and implement it, cleaning things up once and for all.  I
was hoping with the huge amount of update effort that went into Callisto I
could get some feedback as to the best way to approach my particular
situation.

Here's the scenario.  We have quite a few "products" that share between
them a significant number of common functionality plugins.  A customer
could have one or many of these products installed at once.  I originally
grouped all of the common stuff into "core" features and then had all of
the individual product features depend on this core functionality.  This
worked out well and avoided duplication.  However, it quickly spiralled out
of control on the update site as more stuff was generalized into yet more
"core" features, and more products sharing those features were created.
Currently, when the user hits an update site we have something like the
following:

My Update Site
    |
    +--Core Platform Features (required by ALL products)
    |        |
    |        +--Platform Core Feature (branding)
    |        +--Install Feature (custom install handlers)
    |
    +--Core Development Features
    |        |
    |        +--Core Development Feature (required by ALL products)
    |
    +--Product 'X' Features
    |        |
    |        +--Product 'X' Core Feature (required by all Product 'X's)
    |        +--Product 'X1' Feature (a product based on 'X')
    |        +--Product 'X2' Feature (another product based on 'X')
    |
    +--Product 'Y' Features
             |
             +--Product 'Y' Core Feature (required by all Product 'Y's)
             +--Product 'Y1' Feature (a product based on 'Y')
             +--Product 'Y2' Feature (another product based on 'Y')


So, if a user simply wants to install support for "Product X1" for
instance, they have to install:
     Platform Core Feature
     Install Feature
     Core Development Feature
     Product X Core Feature
     Product X1 Feature

This is similar to the whackload of dependencies you run into if you want
to install and use a product that depends on GEF, EMF, JDT, etc.  This is
quite common (TPTP, WTP) and in my opinion is fine for separate,
interdependent  projects like this, but it doesn't fit my idea of a
simple-to-obtain-and-use commercial product.  Ideally, what I want to have
is something like the following:

My Update Site
    |
    +--My Platform Core Feature (invisibly nesting the install handlers
and branding required by all)
    |
    +--Product 'X' Feature (for developing apps for Product 'X')
    |
    +--Product 'Y' Feature (for developing apps for Product 'Y')


I only break out the core platform stuff because our install handler
features require an exclusive installation, so it seems logical to group it
with the branding of the platform as well.  Then, all the user has to do is
install one "leaf" feature which provides support for the product they want
to develop for.  What confuses me is what exactly is the best way to deploy
this??  As I see it I have two options:
  1. Keep the features and feature dependencies I have, but take all of
     the common stuff needed by all "leaf" features and deploy them as
     nested features.  Essentially invert the tree of features I have now.
  2. Get rid of all of the common core features I currently have, and
     re-include all of their constituent plugins in each leaf feature

I don't think #1 will work because then uninstalling Product 'X', would not
be allowed because it would want to uninstall its nested features - which
Product 'Y' also requires (and nests).  In fact, I'm not even sure if two
installed features can nest the same dependent feature??

#2 seems to me like the way to go but just seems like an awful waste of
space and duplication in terms of "deployment".  Especially given the
number of common plugins we have.  I assume in this case, if I uninstall
Product 'X' the platform would figure out in this case that Product 'Y' is
still using Common Plugin 'Z' and not remove it, so the dependencies should
all work.

Anyway, I am just trying to make this simple for my users.  Can anyone give
me any pointers based on:
     What issues you faced and conquered with Callisto
     What you know may be coming in the future based on outstanding update
     issues found with Callisto
Any feedback or recommendations would be very much appreciated.

Thanks,
Mark.


AMI Semiconductor - "Silicon Solutions for the Real World"
NOTICE: 
This electronic message contains information that may be confidential or privileged. The information is intended for the use of the individual or entity named above. If you are not the intended recipient, please be aware that any disclosure, copying, distribution or use of the contents of this information is prohibited. If you received this electronic message in error, please notify the sender and delete the copy you received.





Back to the top