Hi Enrico, Wow, that's a detailed description. I can't really tell if your method is sound, but if you want to override the "decision behavior" of whether modules get installed or not, I think you want to take a look at ModuleManagerImpl and especially at info.magnolia.module.ModuleManagerImpl.checkForInstallOrUpdates()
So to me it looks like you could override your VersionHandlers getDeltas() method to always return a Delta when your flag file is present. The delta could contain exactly the tasks you need for this case, so then you wouldn't have to do all the overriding of getExtraInstallTasks()... Regards from Vienna, Richard > -----Ursprüngliche Nachricht----- > Von: user-list-ow...@magnolia-cms.com > [mailto:user-list-owner@magnolia- cms.com] Im Auftrag von Enrico > Cammarota (via Magnolia Forums) > Gesendet: Mittwoch, 28. Oktober 2015 13:15 > An: Magnolia User List > Betreff: [magnolia-user] Force Modules Re-installation even if version > number is not changed > > Hello Magnolians! > I'm opening this 3d since I'm trying to create a code snippet that > will permit me to re-install automatically certain modules in my repository. > > I'd like to achieve this because we have to deploy on our Test Server > on a daily basis and I don't want to be forced to change the version > number because within our Development cycle we have to maintain the > same version number(x.y.z-SNAPSHOT). > > Basically the process is based on a file that I add in the > tomcat/webapps folder. This file will act as a "flag" and in case it's > not present some modules will be re-installed. > > I added into a getExtraInstallTask(), defined in my Handler class, a > call to the > getStartupTasks() (that has been overridden). Inside the overridden > getStartupTasks() this is what I do: > > Preliminary controls: > 1. Check if the webapp directory in the tomcat's installation exists > or not > > 2. Check if the file already exists or not > > The file exists: > > 3. I leave to Magnolia the further steps since I assume that if the > file exists, I don't want to reload any module. So the process will > continue by himself and at the end I'll login into the Magnolia UI without > any issue. > > The file doesn't exists: > > 3. I create the file and put it in the tomcat/webapps directory > > 4. I get all the installed modules by doing: > > [code] > // I get all the installed modules > > Map<String, ModuleDefinition> map = new HashMap<String, ModuleDefinition>(); > try { > > > map = new BetwixtModuleDefinitionReader().readAll(); > } catch > (ModuleManagementException e) { > > e.printStackTrace(); > } > [/code] > > 5. Now that I have all the modules in a map I want to get only the > modules that are part of my client business. At this point I added a > filter based on the > CanonicalName() and ClassName() of my modules. > > 6. I split the two modules types: > 6.1 Some from Magnolia that I don't want to touch > 6.2 Some made by me that have for example a > canonicalName().contains("com.acme") > 7. I create a RemoveNodeTask since the modules(6.2) are the ones that > have to be deleted and installed > > [code] > // here is where the deletion tasks are created for(Entry<String, > String> entry : vitecModulesMap.entrySet()) { > Task removeNodeTask = new RemoveNodeTask("Delete Acme Module: " > + entry.getKey(), "Delete Acme Modules to optimize > installation",RepositoryConstants.CONFIG, "/modules/" + entry.getKey()); > taskForModulesToRemove.add(new NodeExistsDelegateTask("Deletion of > Acme's modules", "This task will delete the old Acme modules from the > application", RepositoryConstants.CONFIG, "/modules/" + > entry.getKey(), removeNodeTask)); } [/code] > > 8. The tasks that I create are attached to the getExtraInstallTask() > return list and finally executed. Everything goes fine until this > stage [b]UNLESS[/b] the fact that I don't know how to reinstall the > modules that have been just deleted. > > What I tried so far: > - Override the following methods from > [b]AbstractModuleVersionHandler[/b] class [code] > getBasicInstallTasks(InstallContext installContext); // to fix > ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING > getInstall(InstallContext installContext); // to fix few null pointer > exceptions that I was having during the development > getStartupTask(InstallContext installContext); //to add the logic > described in the steps 1..8 [/code] > > - Change a bit the methods from [b]ModuleManagerImpl[/b] class > according to my needs. All the changes are pure overloading of the existing > methods. > The overloading is used to pass the various variables to avoid > nullPointerExceptions and further errors. Methods updated are: > [code] > checkForInstallOrUpdates(InstallContextImpl installContextImpl, > [b]List<ModuleDefinition> acmeModulesDefinitions[/b]) > performInstallOrUpdate(final ModuleManagementState state, > [b]List<ModuleDefinition> modulesDefinitionsList[/b]) > loadModulesRepositories([b]List<ModuleDefinition> > modulesDefinitions[/b]) [/code] > > The addings that I made are in [b]bold[/b]. As you can see the > overloading involves just the ModuleDefinition list. This is because > the ModuleManagerImpl class has got a list: > [code] > /** > * List<ModuleDefinition> of modules found to be deployed. > */ > private List<ModuleDefinition> orderedModuleDescriptors; [/code] > > That is private and for this reason can't be used from other classes. > > This is what I made since today. > > After all these writing I'm wondering if I've been able to explain > properly what I'm trying to achieve but anyway, if anybody have an > answer to the > question: [b]What to do to trigger a modules re-installation after the > step 8?[/b] Or need further information please comment. > > PS. > I tried by overriding framework classes(as described above) but if > anybody has got any suggestion (maybe easier than my approach), please > let me know! > > Thanks for your time and for your further help. > Regards, > > -- > Context is everything: http://forum.magnolia- > cms.com/forum/thread.html?threadId=6a1862fe-6da8-4277-a57d- > f4a648f53345 > > > ---------------------------------------------------------------- > For list details, see http://www.magnolia-cms.com/community/mailing- > lists.html > Alternatively, use our forums: http://forum.magnolia-cms.com/ To > unsubscribe, E-mail to: <user-list-unsubscr...@magnolia-cms.com> > ---------------------------------------------------------------- ---------------------------------------------------------------- For list details, see http://www.magnolia-cms.com/community/mailing-lists.html Alternatively, use our forums: http://forum.magnolia-cms.com/ To unsubscribe, E-mail to: <user-list-unsubscr...@magnolia-cms.com> ----------------------------------------------------------------