Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
464 views
in Technique[技术] by (71.8m points)

tomcat - Trouble understanding the whole OSGi web eco system

I am pretty new to the whole Java and OSGi world and I have trouble understanding the eco system of a OSGi web application.

To be more precise I am at the moment trying to understand how all the parts of the eco system are related to each other:

  • OSGi Framework (e.g. Apache Felix, Equinox, Knoplerfish)
  • OSGi Runtime (e.g. Spring DM Server, Pax Runner, Apache Karaf)
  • Web Extender (e.g. Pax Web Extender, Spring Web Extender)
  • Web Container (e.g. Apache Tomcat, Jetty)

To give you a visual representation of my actual understanding of their relationship check out this image:

alt text

As far as I know the OSGi Framework is a implementation of the OSGi specification. The runtime is a distribution which adds additional functionality on top of the OSGi specification like logging for instance. Since there seem to be some differences in the classpath mechanism of OSGi and web containers like Tomcat you need some kind of translator. This part is handled by the "Web Extender".

Would you please clarify this whole thing for me? Am I understanding everything correct?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

OSGi is a standard in terms of API and packaging for interacting software modules. This is similar to other API standards like JPA or Java EE.

An OSGi runtime is a server which follows the OSGi standard, it is an implementation of the standard. You mention some common ones: Knopflerfish, Eqinox. These let you run OSGi bundles.

A web container usually refers to an implementation of the web-specific parts of Java EE (servlets). The servlet standard also defines an API and packaging, just like OSGi, only different.

You need a server to run your Java EE web apps. You package your app as a Java Web Archive (WAR), and ask your application server to start it. There are several servers, as you mention, like Tomcat, Jetty, but also bigger servers which cover larger parts of the Java EE standard, like Glassfish and JBoss.

A web extender tries to unify the servlet standard with OSGi. By adding some OSGi-specific data to your already packaged WAR, the WAR will be automatically parsed and started by your OSGi runtime. Your WAR servlets will be published to the OSGi http service by the web extender. With a web extender, you can run both standard OSGi applications as well as WARs using only a OSGi runtime, without the need for a Java EE-compliant server like Tomcat.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...