Well, you have to store the initialization state in some data somewhere :-) Now we have 3 or 4 ideas:
I think the simplest solution is going to be with BundleContext.getDataFile: getDataFile <https://osgi.org/javadoc/r4v41/org/osgi/framework/BundleContext.html#getDataFile(java.lang.String)> you could put the logic in a bundle activator or possibly in a DS component activate method. Create a file in the bundle private data area when the initialization completes and check for its existence before the initialization. David Jencks > On Jun 7, 2018, at 10:56 PM, Christian Schneider <[email protected]> > wrote: > > How about storing the fact that the initialization is done in the data? > > I have seen this with liquibase. > Liquibase is a tool that manages database updates. It stores the version of > the installed data in a table. > So when you install a new version it can do the necessary updates and then > stores the new version. > > Best > Christian > > Am Fr., 8. Juni 2018 um 03:42 Uhr schrieb Max Spring <[email protected] > <mailto:[email protected]>>: > Not sure I understand your notion of "service changed" :-) > I use the term "service" in a colloquial sense. I don't mean "OSGi service". > > Let me try it that way: > > My release build produces a self-contained tarball of the entire code of my > service. > My "devops" automation (in Jenkins) deploys the tarball on a test VM together > with the production data. > > After this deployment, the very first time the Karaf container starts up, I > want to run some initialization logic. > But only this very first time. Any subsequent Karaf container start up should > not do this initialization any more. > > -Max > > > On 06/07/2018 05:48 PM, Leschke, Scott wrote: > > You mean the logic should only execute if the service is "changed", but not > > in the case where the service is stopped and restarted? > > > > -----Original Message----- > > From: Max Spring [mailto:[email protected] > > <mailto:[email protected]>] > > Sent: Thursday, June 07, 2018 7:40 PM > > To: [email protected] <mailto:[email protected]> > > Subject: execute only at first startup? > > > > I've got a Karaf-based service. > > Whenever I deploy a new revision of my service, I need to execute some code > > only at the very first startup. > > I have this first-time functionality available as a Karaf command which I > > currently run manually each time right after startup after a new deployment. > > I'd like to automate this. > > > > I'm thinking of using a marker file somewhere to indicate "first startup". > > I'd have a new bundle checking for this file when it starts up. When it > > detect the file, the bundle executes my business logic initialization and > > then deletes the marker file. > > > > Or, is there something better for this scenario? > > > > -Max > > > > > -- > -- > Christian Schneider > http://www.liquid-reality.de <http://www.liquid-reality.de/> > > Computer Scientist > http://www.adobe.com <http://www.adobe.com/> >
