karaf-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jean-Baptiste Onofré ...@nanthrax.net>
Subject Re: Karaf Feature autoupdate
Date Wed, 26 Aug 2015 17:15:02 GMT
Why not using bundle:watch ?

Regards
JB

On 08/26/2015 05:29 PM, sreeraaman wrote:
> Dear All,
>
> We have a requirement, wherein, all updates should happen automatically.
> Our application is packaged as a custom karaf distro and run as a service in
> the end-user environment. All the application specific bundles / features
> are hosted in our nexus repo and the same is added to the
> org.ops4j.pax.url.mvn.cfg file under the property
> org.ops4j.pax.url.mvn.repositories. Hence, all bundle / feature resolution
> will pickup our nexus repository.
>
> Now, to enable an auto update for our application, we were thinking of the
> following possibility.
>
> Have a quartz scheduler that will run everyday at a pre-determined time and
> trigger our AutoUpdater Service which is a SCR Component.
>
> The component looks like this.
>
> @Component(name="AppUpdater",provide=IAutoUpdater.class,immediate=true)
> public class AutoUpdater implements IAutoUpdater{
>
> //we inject the FeaturesService & MavenResolver (pax url aether)
>
> FeaturesService featureService;
> MavenResolver mavenResolver;
>
> @Reference(service=MavenResolver.class,optional=false)
> public void setMavenResolver(..){
> ..
> }
>
> @Reference(service=FeaturesService.class,optional=false)
> public void setFeatureService(...){
> ..
> }
>
> The IAutoUpdater interface has a method with the following signature.
>
> public void update(String[] featuresToUpdate);
>
> In the implementation of the update method, we do the following:
>
> public void update(String[] featuresToUpdate){
> for (String feature:featuresToUpdate){
> //Try to retrieve the feature by name
> Feature f = featureService.getFeature(feature);
> if (f != null) { // feature is already installed
>    //we build the feature url. for eg.
> mvn:mygroupid/feature/LATEST/features/xml //feature name &
>    //artifact ids are the same.
>   String featureUrl = buildFeatureUrl(feature);
>    //This resolves and downloads the feature xml file
>    File file = mavenResolver.resolve(featureUrl);
>    //parse the xml to obtain the latest feature version.
>    String latestVersion = parseFeatureFile(file);
>    //compare the latestversion with the installed feature version.
>    if (!f.getVersion().equals(latestVersion)){
>      //feature requires an update.
>      //remove the current feature
>      featureService.uninstallFeature(feature);
>     //remove the repository as well
>
> featureService.removeRepository(featureService.getRepositoryUriFor(feature,
> f.getVersion()), true);
>     featureService.addRepository(file.toURI());
>     featureService.installFeature(feature);
>   else{
>     //you are already running the latest version of the feature. leave it as
> it is.
>   }
>
> }
>
> }
>
> }
>
>
> }
>
>
> Just wanted to understand if this is the right way of doing it or is there
> any other approach that can be
> adopted.
>
> Note: MavenResolver is available only as of pax-url-aether 2.4.1.
>
> This solution would work only on karaf 3.0.4 +.
>
> best regards
> Sriraman.
>
>
>
> --
> View this message in context: http://karaf.922171.n3.nabble.com/Karaf-Feature-autoupdate-tp4042069.html
> Sent from the Karaf - User mailing list archive at Nabble.com.
>

-- 
Jean-Baptiste Onofré
jbonofre@apache.org
http://blog.nanthrax.net
Talend - http://www.talend.com

Mime
View raw message