OSGI creating modular web application

前端 未结 4 1038
南方客
南方客 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:39

    You may want to try ChonCMS - http://www.choncms.com

    Its architecture is based exactly on what you are asking, it comes with few plugins to enable base CMS functionality, it is modular platform with minor web app container using felix and plugins can be added/removed at run time as well.

    Disadvantage might be that it has lack of documentation, but you may ask, it is open source, I'm sure they will be happy to answer questions, and even better you can contribute - it is still in incubation phase.

    0 讨论(0)
  • 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.

    0 讨论(0)
  • 2021-02-01 10:43

    You might want to look into Apache Sling. It is a web framework that has an embedded OSGi container. The OSGi container is called Apache Felix and is pretty good.

    0 讨论(0)
  • 2021-02-01 10:48

    ServletBridge is for embedding an OSGI contianer within a web container. The other option is to embed a web container (as a bundle) in an OSGI container. The following article has some details on how to achieve this.

    http://java.dzone.com/articles/osgi-and-embedded-jetty

    0 讨论(0)
提交回复
热议问题