+1 from me as discussed offline. Azeez
On Tue, Sep 23, 2014 at 7:51 PM, Sagara Gunathunga <[email protected]> wrote: > > According to Axis2 architecture it calls all registered deployers during > the ConfigurationContext creation process, this is perfectly ok for both > Axis2 standalone server and deploying Axis2 as a web application. But in > Carbon servers we use Axis2 as a generic server building framework hence > above behaviour is not accurate. > > In Carbon servers, creation of ConfigurationContext does not implies > server is ready to deploy artifacts in fact OSGi runtime manage loading > required bundle/services etc. This leads to number of issues. > > 1. When a deployer deploy artifacts some of the OSGi services may not be > loaded, hence special workarounds are required to handle these cases. > > 2. When a deployer deploy artifacts some of the server extensions may not > be loaded by OSGi runtime this result into unexpected runtime behaviours. > > Example - In AS to extend container features it is possible to write > ServletContainerInitializer[1] implementations, we already have such > extensions to support WebSocket, ProtocolBuffer etc. but at the time of web > applications get deploy there is no guarantee that all > ServletContainerInitializer are loaded by the server this leads lot of > unexpected runtime issues. > > 3. At the time of artifact deployment ConfigurationContext is not yet > registered as OSGi service hence not possible to access > ConfigurationContext from server extensions such as Tomcat > LifecycleListener. > > > > *Solution* > > Decouple deployment from ConfigurationContext creation process and call > artifact deployment in a later stage where ConfigurationContext and other > services are available. > > > 1.) For super tenant > > - Disable loadServices() logic from CarbonAxisConfigurator class. > > - Implement a ServerStartupObserver and call loadServices() logic from > there. > > With this change it's possible to delay deployment till we load all > services marked as "ListenerManager-RequiredServices" , as an example > custom ServletContainerInitializer services can be marked as > "ListenerManager-RequiredServices" this ensures those > ServletContainerInitializers will be available at artifact deployment time. > > Note - "ListenerManager-RequiredServices" header is already available > Carbon feature. > > > 2.) For tenants > > - Disable loadServices() logic from TenantAxisConfigurator class. > > - Implement a Axis2ConfigurationContextObserver and call loadServices() > logic from there. > > > [1]- > http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContainerInitializer.html > > > > Thanks ! > -- > Sagara Gunathunga > > Senior Technical Lead; 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 3320919blog: **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*
_______________________________________________ Architecture mailing list [email protected] https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
