Hi, In Standalone service mode, we support deploying multiple service instances. That's the main concern I have. If a user adds multiple services, the initialization step will run multiple times. Let's look at my suggestion in next release.
I made changes and sent a PR [1]. The init() methods are synchronized and it will initialize only once. [1] https://github.com/wso2/product-mss/pull/86 <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fwso2%2Fproduct-mss%2Fpull%2F86&sa=D&sntz=1&usg=AFQjCNFUEw0YxfBXCvAomqRpGjxGFJmHpA> On Fri, Dec 18, 2015 at 11:57 AM, Sagara Gunathunga <[email protected]> wrote: > > > On Fri, Dec 18, 2015 at 11:33 AM, Isuru Perera <[email protected]> wrote: > >> Hi all, >> >> I'm trying to refactor code and move the initialization logic out from >> the interceptors we have. i.e. MetricsInterceptor [1] and >> HTTPMonitoringInterceptor [2]. With current lifecycle method support, we >> can write some initialization code within the service only [3]. >> > > Since we are very close to GA release, let's continue with current service > lifecycle approach and finish refactoring of above 2 Interceptor as we > planed, while we can continue this discussion separately. > >> >> I understand that it's better to have a separate class for initialization >> logic. But I need to make sure that initialization runs only once. That's >> why I initially wrote the initialization logic at the interceptor level. >> The user will add interceptor only once to the MSS application [4]. >> >> If there are multiple services (as in sample [4]], we cannot ask user to >> initialize in each service as the initialization will run multiple times. >> We can solve that by changing the initialization code to run once. But I >> don't think that a good idea. There will be duplicate code in each service >> to initialize Metrics and HTTP Monitoring. >> > > Basically we have two deployment modes. > > 1.) Standalone service mode (aka MSS-lite) > > - In this mode we deploy single service per single application hence IMO > service lifecycle annotations are sufficient because initialization code > anyway run only one time. BTW did you find any use cases that we can't > cover with service LC methods under this mode ? > > 2.) OSGi server mode > > Since this mode is based on OSGi, can't we just use OSGi features such as > bundle activators, OSGi-service annotations[1] such as @Acitvate, > @Deactivate instead of inventing something new ? We already use above OSGi > features to register/deregister microservices, register/deregister > Interceptor etc. > > [1] - > https://kishanthan.wordpress.com/2014/03/29/using-annotation-with-osgi-declarative-services/ > > Thanks ! > > >> >> Is it possible to have lifecycle method support for the entire MSS >> application as well? Something similar to ServletContextListener [5]? >> >> Thanks! >> >> Best Regards, >> >> [1] >> https://github.com/wso2/product-mss/blob/v1.0.0-alpha/carbon-mss/components/org.wso2.carbon.mss/src/main/java/org/wso2/carbon/mss/metrics/MetricsInterceptor.java#L47-L85 >> [2] >> https://github.com/wso2/product-mss/blob/v1.0.0-alpha/carbon-mss/components/org.wso2.carbon.mss/src/main/java/org/wso2/carbon/mss/httpmonitoring/HTTPMonitoringInterceptor.java#L80-L196 >> [3] https://github.com/wso2/product-mss/tree/master/samples/lifecycle >> [4] >> https://github.com/wso2/product-mss/blob/v1.0.0-alpha/samples/metrics/src/main/java/org/wso2/carbon/mss/example/Application.java#L39-L40 >> [5] >> http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html >> >> >> >> On Sun, Nov 15, 2015 at 7:46 PM, Sagara Gunathunga <[email protected]> >> wrote: >> >>> >>> >>> On Sun, Nov 15, 2015 at 7:40 PM, Afkham Azeez <[email protected]> wrote: >>> >>>> Can you fix the metric code to ise this? >>>> >>> I can work with IsuruP, still metrics/DAS code are not familiar to me. >>> >>> Thanks ! >>> >>>> On Nov 15, 2015 6:32 PM, "Sagara Gunathunga" <[email protected]> wrote: >>>> >>>>> >>>>> >>>>> On Thu, Nov 12, 2015 at 8:41 PM, Afkham Azeez <[email protected]> wrote: >>>>> >>>>>> >>>>>> >>>>>> On Thu, Nov 12, 2015 at 5:05 AM, Sagara Gunathunga <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Use case >>>>>>> -------------- >>>>>>> MS F/W should support at least two bean lifecycle methods so that >>>>>>> one method get call during the service start-up while other one get call >>>>>>> just before the service shutdown. We already have following use cases >>>>>>> but >>>>>>> this should be a much lengthy list when implementing real world use >>>>>>> cases. >>>>>>> >>>>>>> 1) Service stat publishing - During the service start-up, it should >>>>>>> be possible to initialize DAS agents and make connections, then during >>>>>>> the >>>>>>> service shutdown it should be possible to terminate DAS agents properly >>>>>>> and >>>>>>> close any connection remains. >>>>>>> >>>>>> >>>>>> How are we doing the above now with the metrics component? >>>>>> >>>>> >>>>> Initially IsuruP looked for such lifecycle extension points, but since >>>>> it was not there it seems he has incorporated init logic into the >>>>> constructor of the MetricsInterceptor, although it's not nice to mix >>>>> separate aspect together technically it worked. Further there was no >>>>> proper >>>>> place to call any cleaning code during server shutdown. >>>>> >>>>> Thanks ! >>>>> >>>>> >>>>>> >>>>>> >>>>>>> >>>>>>> 2.) Metadata publishing - During the service start-up, it should be >>>>>>> possible to publish service and endpoint metadata into a centralized >>>>>>> metadata repository such as G-Reg and during the service shutdown it >>>>>>> should >>>>>>> be possible to remove/deactivate service or endpoint metadata on >>>>>>> metadata >>>>>>> repository. >>>>>>> >>>>>>> 3.) Handle connection establishment and termination for data sources >>>>>>> such as RSBMS, LDAPs , legacy systems etc. >>>>>>> >>>>>>> >>>>>>> Solution >>>>>>> -------------- >>>>>>> >>>>>>> Instead of introducing our own proprietary approaches we could use >>>>>>> @PostConstruct[1] and @PreDestroy[2] annotations available with JDK. >>>>>>> Users just need to annotate their init and termination methods as >>>>>>> follows. >>>>>>> Additionally this is a natural choice for those who familiar with >>>>>>> JAX-WS/JAX-RS programming models where above annotation are used for >>>>>>> same >>>>>>> purpose. >>>>>>> >>>>>>> @PostConstruct >>>>>>> public void init() { >>>>>>> LOG.info("Helloworld :: calling PostConstruct method"); >>>>>>> } >>>>>>> >>>>>>> @PreDestroy >>>>>>> public void close() { >>>>>>> LOG.info("Helloworld :: calling PreDestroy method"); >>>>>>> } >>>>>>> >>>>>>> >>>>>>> I have added above 2 annotation support to MS trunk, please refer >>>>>>> following working sample[3]. >>>>>>> >>>>>>> >>>>>>> @IsuruP , since we have service lifecycle support now, we need to >>>>>>> refactor your analytics sample to use proper annotations and it will >>>>>>> become >>>>>>> a real world sample as well, [3] is too simple to demonstrate real world >>>>>>> use cases. >>>>>>> >>>>>>> >>>>>>> [1] - >>>>>>> https://docs.oracle.com/javaee/5/api/javax/annotation/PostConstruct.html >>>>>>> [2] - >>>>>>> https://docs.oracle.com/javaee/5/api/javax/annotation/PreDestroy.html >>>>>>> [3] - >>>>>>> https://github.com/wso2/product-mss/tree/master/samples/lifecycle >>>>>>> >>>>>>> >>>>>>> Thanks ! >>>>>>> -- >>>>>>> Sagara Gunathunga >>>>>>> >>>>>>> Architect; WSO2, Inc.; http://wso2.com >>>>>>> V.P Apache Web Services; http://ws.apache.org/ >>>>>>> Linkedin; http://www.linkedin.com/in/ssagara >>>>>>> Blog ; http://ssagara.blogspot.com >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> *Afkham Azeez* >>>>>> Director of Architecture; WSO2, Inc.; http://wso2.com >>>>>> Member; Apache Software Foundation; http://www.apache.org/ >>>>>> * <http://www.apache.org/>* >>>>>> *email: **[email protected]* <[email protected]> >>>>>> * cell: +94 77 3320919 <%2B94%2077%203320919>blog: * >>>>>> *http://blog.afkham.org* <http://blog.afkham.org> >>>>>> *twitter: **http://twitter.com/afkham_azeez* >>>>>> <http://twitter.com/afkham_azeez> >>>>>> *linked-in: **http://lk.linkedin.com/in/afkhamazeez >>>>>> <http://lk.linkedin.com/in/afkhamazeez>* >>>>>> >>>>>> *Lean . Enterprise . Middleware* >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Sagara Gunathunga >>>>> >>>>> Architect; WSO2, Inc.; http://wso2.com >>>>> V.P Apache Web Services; http://ws.apache.org/ >>>>> Linkedin; http://www.linkedin.com/in/ssagara >>>>> Blog ; http://ssagara.blogspot.com >>>>> >>>>> >>> >>> >>> -- >>> Sagara Gunathunga >>> >>> Architect; WSO2, Inc.; http://wso2.com >>> V.P Apache Web Services; http://ws.apache.org/ >>> Linkedin; http://www.linkedin.com/in/ssagara >>> Blog ; http://ssagara.blogspot.com >>> >>> >> >> >> -- >> Isuru Perera >> Associate Technical Lead | WSO2, Inc. | http://wso2.com/ >> Lean . Enterprise . Middleware >> >> about.me/chrishantha >> Contact: +IsuruPereraWSO2 <https://www.google.com/+IsuruPereraWSO2/about> >> > > > > -- > Sagara Gunathunga > > Architect; WSO2, Inc.; http://wso2.com > V.P Apache Web Services; http://ws.apache.org/ > Linkedin; http://www.linkedin.com/in/ssagara > Blog ; http://ssagara.blogspot.com > > -- Isuru Perera Associate Technical Lead | WSO2, Inc. | http://wso2.com/ Lean . Enterprise . Middleware about.me/chrishantha Contact: +IsuruPereraWSO2 <https://www.google.com/+IsuruPereraWSO2/about>
_______________________________________________ Architecture mailing list [email protected] https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
