`
lengyun3566
  • 浏览: 452637 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
D59180b9-02f1-3380-840c-ea34da46143c
《Spring Secur...
浏览量:383487
社区版块
存档分类
最新评论

OSGi技术在Java Web开发中的应用

    博客分类:
  • OSGi
 
阅读更多

 

随着Java SE对模块化功能原生支持的一再推迟(据最新的消息,Jigsaw项目——Java SE中的标准模块系统——的开发工作相对滞后,已经延期到了Java 9,而Java 92015年才有希望发布),OSGi作为事实标准的Java模块化实现得到了长足的发展,尤其是随着云计算和分布式技术的兴起,OSGi这种模块化、动态部署的核心功能将会受到越来越多的重视。

目前OSGi规范的主流实现框架是Eclipse Equinox以及Apache Felix,其实际的应用场景也早就从起初的嵌入式设备扩展到桌面应用甚至Java企业级开发领域。最为大家所熟知的OSGi应用是Eclipse IDE,其实像Sun GlassFishIBM WebSphere Application ServerJBoss Application Server以及Apache的大量开源项目如CamelSlingServiceMixKafaf等都使用了OSGi技术,随着其应用的日益广泛,技术的可用性和成熟度经受了充分的考验,实践证明OSGi是一项可靠的技术,完全可以应用于企业级应用的开发。尤其值得一提的是,随着OSGi Core Release 5OSGi Enterprise Release 5版本的发布,预计OSGi技术将会受到更多的关注,国内外已经有将OSGi应用于云计算和分布式计算的案例。

本文将选取OSGi应用于传统Java Web开发的场景,介绍借助于OSGi技术,怎样实现将web应用拆分成满足OSGi规范的bundle,实现组件的动态部署。目前,为了实现在bundle中支持JSPServletJava Web开发技术和规范,有两种主要的开发部署方式,本文都将进行介绍,但是这两种方案在实现上与传统的Java Web应用开发模式有较大的不同,且对JEE规范的支持尚不完整

 

按照Eclipse Equinox的习惯,会将bundle称为插件,在后文中会根据具体的应用场景穿插使用这两个名词,但其本质是相同的。 

 

<!--[if !supportLists]-->一、将Web容器作为bundle置于 Equinox中进行开发 

在这种模式下,我们需要将支持JEE规范的容器也以bundle形式发布到OSGi容器中,而包含JSPServletbundle将会使用该容器接受对请求的访问,这种方式的好处在于OSGi容器管理整个运行环境,是个纯粹的可热插拔运行环境,其缺点在于需要Web容器支持以bundel的形式进行发布,对运行环境有一定的限制,目前支持该要求的Web容器有TomcatJetty,但是主流的企业级应用服务器尚不支持这种部署方式。

鉴于Eclipse开发环境中已经包含了Jetty服务器,所以我们将会使用该服务器进行Web应用的开发。

首先我们需要使用Eclipse的工程向导创建一个插件工程。根据工程的需要,我们不生成启动类(activator),不使用任何模版,插件过程如下:

新建一个插件工程:



 输入工程的基本信息:



 此处我们不使用任何模版,因为我们不会用到EclipseUI功能:



 新建完成的项目结构如下所示:



 为了测试进行Web开发,我们新建目录结构/WebRoot/jsp(该目录名称是任意的,只需在后续定义扩展点时进行匹配即可)并在该目录下创建一个JSP文件,此时的工程结构如下:



 JSP的代码如下:

 

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Hello,world!
</body>
</html> 

 

为了使用JSPServlet,我们需要使用一个扩展点,该扩展的名称为org.eclipse.equinox.http.registry.servlets,我们需要使用该扩展点进行JSP目录和访问地址的匹配,在我们这个样例中我们匹配了/WebRoot/jsp目录,其访问地址的前缀将会是/jsp/


 除此以外,我们还需要添加对org.eclipse.equinox.jsp.jasper.registry插件的依赖,以实现JSP的编译功能。


 最后,我们还需要在运行时配置里将testwebJetty所依赖的插件全部选中,如下:

 



 然后点击“Run”按钮,此时就会启动OSGi运行环境,我们可以在控制台通过使用“ss”命令来查看运行插件的状态情况:


 

此时,我们可以在浏览器中输入http://localhost/jsp/index.jspJetty的默认端口是80,可进行配置),就会看到我们所编写的JSP的代码了:



          要实现访问Servlet和静态资源(CSS、图片等),也需要类似的配置,下图是一个包含静态资源和Servlet的配置样例:

 

 

<?xml version="1.0" encoding="UTF-8"?> 
 <?eclipse version="3.4"?> 
 <plugin> 
 <extension 
 	point="org.eclipse.equinox.http.registry.servlets"> 
	 <servlet 
	 	 alias="/servlet/myfirstservlet" 
	 	 class="testjsp.LoginServlet"
	 	 load-on-startup="true"> 	
	 </servlet> 
	 <servlet 
	 	alias="/jsp/*.jsp"
	 	class="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/WebRoot/jsp/"> 
	 </servlet> 
 </extension>
 <extension
       point="org.eclipse.equinox.http.registry.resources">
        <resource
     alias="/web"
     base-name="/WebRoot/images"/>
 </extension> 
 </plugin>
 

 

二、Equinox置于web容器中进行开发

以上的开发模式对于习惯于传统JEE开发模式的开发人员在接受上有一定的难度,直接使用Equinox作为运行环境在解决集群部署方面也有一定的难度,除此以外,主流的应用服务器并不提供bundle形式的jar以运行在OSGi容器中。所以,开发人员摸索出了另一种开发和部署模式。

在这种模式中,会将Equinox和我们开发的插件都打成一个标准的war包的格式,因此可以运行在任意支持JEE的容器中。Equinox的生命周期是通过Servlet来进行控制。这种模式被称为桥接模式。Equinox官方提供了该模式的实现,后来的社区贡献者基于此进行了功能的完善。

将下载后的代码导入到Eclipse中,工程目录如下所示:



 从该目录可以看出,这是一个典型JEE工程,可以运行在任意的支持规范的Web容器或应用服务器中,查看web.xml,我们可以看到这样的配置:

<servlet id="bridge">
		<servlet-name>equinoxbridgeservlet</servlet-name>
		<display-name>Equinox Bridge Servlet</display-name>
		<description>Equinox Bridge Servlet</description>
		<servlet-class>org.eclipse.equinox.servletbridge.BridgeServlet</servlet-class>
		<init-param>
			<param-name>commandline</param-name>
			<param-value>-console</param-value>			
		</init-param>		
		<init-param>
			<param-name>enableFrameworkControls</param-name>
			<param-value>true</param-value>			
		</init-param>
		<init-param>
			<param-name>extendedFrameworkExports</param-name>
			<param-value></param-value>			
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>equinoxbridgeservlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>equinoxbridgeservlet</servlet-name>
		<url-pattern>*.jsp</url-pattern>
	</servlet-mapping>	
 我们可以看到这个Servlet拦截了所有的请求,由该Servlet代理所有的请求。

在部署阶段,可以把插件打成jar包,放到/WEB-INF/eclipse/plugins目录下即可。如将我们上例中的testweb导出为jar包后,置于指定目录下。然后在Tomcat中运行该应用。访问http://localhost:8080/bridge/jsp/index.jsp就可以看到我们编写的JSP页面了。

使用以上的模式进行开发,对原有的开发和部署模式冲击较小而且支持所有的应用服务器。

 

参考资料:

http://www.ibm.com/developerworks/cn/web/0907_osgiweb_liuqing/

 

 

  • 大小: 44.8 KB
  • 大小: 56.4 KB
  • 大小: 66.1 KB
  • 大小: 5.2 KB
  • 大小: 6.4 KB
  • 大小: 18.9 KB
  • 大小: 11.2 KB
  • 大小: 148.4 KB
  • 大小: 37.6 KB
  • 大小: 21.7 KB
  • 大小: 10.6 KB
分享到:
评论

相关推荐

    基于OSGi和Spring开发Web应用.doc

    在基于 OSGi 和 Spring 的 Web 应用开发中,我们可以使用 Spring-DM 来实现模块化部署和管理。Spring-DM 是 Spring 开发组织在 2008 年发布的,将 OSGi 和 Spring 结合的第一个版本。dm Server 是一个完全模块化部署...

    基于OSGi和Spring开发Web应用

    Spring-DM,即Spring Dynamic Modules,是Spring官方在2008年推出的项目,旨在将Spring框架与OSGi模块化平台相结合,为Java开发者提供了一套全面的工具和API,以支持在OSGi环境中开发、部署和管理Spring应用程序。...

    基于OSGi和Spring开发Web应用教程

    在基于OSGi和Spring开发Web应用中,OSGi(Open Services Gateway Initiative)是一个开放标准,用于创建模块化Java应用程序。它允许开发者将应用程序分解为独立的模块,称为bundle,每个bundle都包含自己的类路径、...

    OSGi与Web容器的整合

    为了在Eclipse中开发OSGi Web应用,需要安装相应的插件,如Gemini Web的支持,以便创建和管理WAB项目。 **2.4 设置目标平台** 目标平台是开发和运行OSGi应用的基础,需要包含必要的OSGi框架(如Equinox)、Gemini ...

    基于OSGi和Spring开发Web应用的Demo

    在基于OSGi和Spring的Web应用开发中,通常会将业务逻辑、服务接口和Web层分别封装在不同的模块中。根据压缩包子文件的文件名称,我们可以推测这些文件可能代表了这样的模块结构: 1. `...

    OSGi Web示例工程

    Web示例工程是使用OSGi技术构建的一个具体应用,通常包括了如何在OSGi环境中部署和运行Web应用程序的实例。 在OSGi框架中,Equinox是Eclipse基金会提供的一个实现,它是OSGi规范的主要实现之一,广泛应用于服务器端...

    OSGi, Spring , Web

    "html5演示"暗示有HTML5技术的应用实例,HTML5是现代Web开发的标准,提供了更好的多媒体支持、离线存储和更强大的表单控件。"freemarker运用"则提到了Freemarker,这是一款开源的模板引擎,常用于生成动态HTML页面,...

    基于osgi整合ssm框架注解开发

    SSM(Spring、SpringMVC、MyBatis)框架是Java Web开发中常见的技术栈,而OSGi(Open Service Gateway Initiative)则是一种模块化系统,主要用于解决Java应用程序的动态性、可扩展性和版本管理问题。将SSM框架与...

    osgi 在web容器中部署

    在Web容器中部署OSGi应用,特别是像Tomcat这样的流行Servlet容器,可以提高应用的灵活性、可维护性和可扩展性。本文将详细介绍如何使用桥接技术(如Apache Felix的WebConsole或Pax Web)在Tomcat中部署OSGi程序。 ...

    OSGI中包含web服务器配置需要的jar.zip

    在OSGI中集成Web服务器配置,是为了能够在模块化的环境中运行Web应用。这个压缩包"OSGI中包含web服务器配置需要的jar.zip"很可能包含了运行OSGI环境下的Web工程所需的特定jar文件。这些jar文件可能包括了OSGI容器...

    基于OSGi和Spring开发企业级Web应用

    ### 基于OSGi和Spring开发企业级Web应用 #### OSGi与Spring结合的重要性 ...综上所述,将OSGi和Spring结合起来使用,可以有效地解决企业级应用开发中面临的许多挑战,是一种值得推广的技术方案。

    基于OSGI的Web开发例子

    本示例以“基于OSGI的Web开发例子”为主题,主要介绍了如何利用Equinox框架在OSGi环境中进行Web应用的开发,通过一个简单的“Hello World”项目来展示其工作原理。 首先,我们需要理解Equinox。Equinox是Eclipse...

    基于virgo环境的OSGI+Maven的web开发代码下载(spring+hibernate+GWT)

    标题中的“基于virgo环境的OSGI+Maven的web开发代码下载”表明这是一个使用OSGi(模块化Java系统)和Maven构建的Web应用程序项目,运行在Virgo服务器上。Virgo是SpringSource推出的一个OSGi应用服务器,它支持Spring...

    开发一个简单的 OSGi Web 应用实例

    ### 开发一个简单的 OSGi Web 应用实例 #### 一、项目概述 本教程旨在通过一个具体的示例来介绍如何使用OSGi框架开发一个简单的Web应用。这个示例应用能够计算两个数字的和或乘积,并展示了OSGi bundle的动态部署...

    基于OSGi的Web应用开发系列(全).pdf

    **基于OSGi的Web应用开发**是现代软件开发中的一种技术实践,它允许开发者构建模块化、可扩展和可维护的Web应用。OSGi(Open Service Gateway Initiative)是一种开放的标准,提供了一种服务导向的、模块化的Java...

Global site tag (gtag.js) - Google Analytics