OSGI creating modular web application

前端 未结 4 1090
南方客
南方客 2021-02-01 10:25

I have been looking for a solution to create a modular web application, which is modular in the sense that user can provide its own plugin in form of a simple jar which will the

4条回答
  •  被撕碎了的回忆
    2021-02-01 10:40

    The OSGi spec details the WAB (Web Archive Bundle) format.

    And Pax Web offers great support for WAB/WAR webapps (PAX Web runs fine on Equinox, Felix, etc)

    Using pax web you get the BundleContext via the ServletContext, eg:

    BundleContext bundleContext = (BundleContext) getServletContext().getAttribute("osgi-bundlecontext");
    

    For the user driven pluggability you mention, I'd suggested you provide some service interfaces for the plugin bundles to implement and in your webapp use a ServiceTracker to listen for their registration (unless you're using Declarative Services). You also easily be able to install bundles from an upload servlet.

    I'm guessing users uploading plugins would have to be logged in and authorized, so security issues will have been met at this point.


    EDIT: replying to comment here as not enough space in comment field

    Apologies, think I misinterpreted you question - you have an existing webapp container(s) and you want to deploy a WAR with OSGi functionality? If that's the case then either use the ServletBridge as others have mentioned or embed an OSGi framework into your WAR (this is relatively easy, see this for example).

    You could even make this optional by attempting to get the BundleContext from the ServletContext and if this returns null then launch your own embedded framework. That way it'll run in a native OSGi container (e.g. Glassfish) or in a Java EE app server.

    Otherwise, PaxWeb is an implementation of the HttpService and WebApp OSGi specs, but with lots of extensions to make life easier - but you deploy this to an OSGi container.

提交回复
热议问题