OSGI企业应用开发(一)OSGI简介】的更多相关文章

一.OSGI简介 OSGI全称为Open Service Gateway Initiative(开放服务网关规范),有两个层面的含义,一方面它指OSGi Alliance组织:另一方面指该组织制定的一个基于Java语言的服务(业务)规范--OSGi服务平台(Service Platform). 一般Java开发人员所说的OSGI是指由OSGi Alliance组织制定的Java模块化规范,该规范的核心部分是一个框架,其中定义了应用程序的生命周期模式和服务注册.基于这个框架定义了大量的OSGi服务…
上篇文章介绍了OSGI Web应用的两种开发模式,并把Jetty应用服务器以Bundle的形式整合到Equinox容器中,已这种模式开发Web应用,所有的应用程序资源,例如Servlet.JSP.HTML页面等,都需要使用OSGI规范提供的HttpService服务进行注册,否则无法通过浏览器请求服务器端资源. 一.HttpService服务详解 接着我们就来了解一些HttpService服务,它实际上就是一个接口,具体的服务类由OSGI框架(例如Felix.Equinox等)实现,HttpSe…
前面文章中介绍了如何在OSGI应用中整合Spring和Mybatis框架,本篇文章开始介绍如何使用OSGI技术开发Web应用.对于传统的Java EE应用,应用中涉及到的Web元素无非就是Servlet.JSP.静态资源等,其中静态资源包括HTML页面.CSS.图片等等.当然还有Portlet.Filter.Listener等,由于不太常用,本文就不涉及这方面的内容了. 一.OSGI Web应用两种开发模式介绍 看过OSGI相关书籍的朋友应该都知道,OSGI Web应用开发有两种模式,第一种模式…
上篇文章介绍了标准的Blueprint 规范与 Gemini Blueprint如何自定义Bean配置文件路径,本文接着上篇文章继续介绍Blueprint的使用. 一.Bean的配置 前面提到过,Gemini Blueprint即实现了Blueprint 规范,又兼容Spring DM风格的配置,本节我们再来了解一下Blueprint与Spring DM在Bean的配置上的差异,具体如下表所示: (注意:这两种风格Gemini Blueprint都支持.) 如上图所示,Spring DM风格的B…
上篇文章中,我们开发了一个自定义的Bundle,接着从网络中下载到Spring和Blueprint的Bundle,然后复制到DynamicRuntime项目下. 需要注意的是,这些Bundle并不能在Eclipse自带的Equinox启动管理工具中显示,因为我们并没有將这些Bundle添加到自定义的Target Platform中,接下来我们就来完成这一操作. 一.启动Spring和Blueprint相关Bundle 单击Window=>Preferences菜单,然后单击Plug-in Dev…
上篇文章中介绍了如何使用独立的Equinox发行包搭建OSGI运行环境,而不是依赖与具体的Eclipse基础开发工具,本文开始介绍如何使用Blueprint將Spring框架整合到OSGI中. 一.开发一个自己Bundle 在整合之前,我们接着上篇文章的内容,先来开发一个自己的Bundle. 首先新建一个Plug-in Project,名称为com.csdn.osgi.common,如下图: an OSGI framework选项依然选择standard,表示使用标准的OSGI规范,单击Next…
上篇文章介绍了什么是OSGI以及使用OSGI构建应用的优点,接着介绍了两款常用的OSGI实现,分别为Apache Felix和Equinox,接下来开始介绍如何在Eclipse中使用Apache Felix和Equinox搭建OSGI运行环境. 一.搭建Apache Felix运行环境 上篇文章中介绍了Felix的下载与使用,本节我们在Eclipse中搭建Felix运行环境,并开发一个自己的Bundle,然后发布到Felix容器中,下载解压后的Felix框架文件结构如下: felix-frame…
作为一个企业级的Web应用,MVC框架是必不可少的.Spring MVC目前使用也比较广泛,本文就来介绍一下如何在OSGI应用中实现Spring.Mybatis.Spring MVC框架的整合,其中Spring MVC的整合比较困难,原因是Spring整合到OSGI中后,每个Bundle都拥有一个孤立的ApplicationContext,也就是说不同Bundle中实例化的Bean之间的依赖注入就存在一定的问题,前面文章中提到过,这个问题可以通过Bean的注册和引用机制解决. 而实例化Sprin…
上篇文章中,我们完成了在OSGI应用中整合Spring和Mybatis框架的准备工作,本节我们继续Spring和Mybatis框架的整合. 一.解决OSGI整合Spring中的Placeholder问题 使用Spring框架的朋友应该都知道,我们可以在Bean的配置文件中,使用${key}的形式访问properties文件中对应的value值,需要用到Spring中的PropertyPlaceholderConfigurer类,使用方式如下,首先需要配置placeholder,例如: <bean…
上篇文章介绍了如何使用Blueprint將Spring框架整合到OSGI应用的Bundle中,从上篇文章中我们大概了解了Blueprint与Gemini Blueprint的关系,简单的说,Blueprint是OSGI Alliance借鉴了Spring Dynamic Modules 的思想,为OSGI制定的依赖注入(DI)规范,而Gemini Blueprint的前生是Spring DM,它即兼容之前的Spring DM,又实现了Blueprint规范.本篇文章开始,我们就来了解一下Gemi…
前面文章中,我们已经完成了OSGI应用中Spring.Mybatis.Spring MVC的整合,本篇文章我们就在这个基础上来完成一个简单的登录应用,其中用户名和密码需要从数据库中查询. 前面文章中,我们已经搭建好的工作空间如下图所示: 本篇文章中,我们只需要在com.csdn.osgi.user.web工程中添加页面及Controller即可. 首先新增一个登录界面,文件路径为在WebContent/WEB-INF/jsp/login.jsp,内容如下: <%@ page language=&qu…
使用OSGI模块化标准构建Java EE项目,其中比较繁琐的一个方面就是Bundle资源的获取,因为很多开源框架官方都没有发布Bundle版本的Jar文件,这也是使用OSGI开发企业应用首先要解决的问题. 本篇文章中,我们来总结一下Bundle资源的获取途径,包括如下几种方式: 一.从SpringSource Enterprise Bundle Repository下载 这种方式前面文章中已经提到过,SpringSource Enterprise Bundle Repository是目前最全面的…
上篇文章介绍了如何在Eclipse中搭建Felix的运行环境,我们需要將Bundle发布到Felix框架的bundle目录下,Felix框架启动时才会自动加载这些Bundle,否则需要在Felix框架启动后手动安装Bundle,我们可以发现Bundle的管理非常麻烦,而且一旦Bundle启动报错,我们修改代码后,又需要重新发布Bundle进行调试,虽然我们可以使用自动化工具Ant或者Maven进行管理,但是一个项目中如果有几百个自定义的Bundle,这些Bundle管理起来就相当繁琐. 本文开始…
上篇文章中,我们已经完成了OSGI应用中Spring和Mybatis框架的整合,本文就来介绍一下,如何在其他Bundle中,使用Mybatis框架来操作数据库. 为了方便演示,我们新建一个新的Plug-in Project工程,名称为com.csdn.osgi.user,表示用户模块. 上篇文章中,我们使用<osgi:service/>标签將用于操作数据库的SqlSessionTemplate实例注册为服务,配置如下: <osgi:service id="sqlMapServi…
到目前为止,我们已经学习了如何使用Blueprint將Spring框架整合到OSGI应用中,并学习了Blueprint&Gemini Blueprint的一些使用细节.本篇文章开始,我们將Mybatis框架整合到OSGI应用中. 一.获取Mybatis框架Bundle Mybatis框架的Bundle获取比较简单,因为Mybatis框架在发布Release版本时就考虑到用户可能会在OSGI应用中使用Mybatis,所以从官方地址下载得到的Jar包本身就是一个Bundle,MANIFEST.MF文…
第一步,搭建OSGI环境: 打开eclipse,点击run->run configration..,配置如下,点击run. 运行结果如下图所示:说明OSGI环境搭建完毕. 第二步:搭建基于OSGI的web开发环境 两种方式:第一种,勾选需要的Bundle,列表如下图 第二种,勾选如下,点击添加需要的Bundle,如下图 点击运行,结果如下: Web访问,显示如下信息,说明OSGI的Web环境搭建完毕. 第三步:编写一个简单的WEB服务验证结果(字典查询为例) 新建一个DictQuery插件工程,…
创建并启动连接器实例之后,连接器就会基于Http协议向指定的数据接收服务器发送xmlfeed格式数据,我们可以通过配置http代理服务器抓取当前基于http协议格式的数据(或者也可以通过其他网络抓包工具抓取) // 设置代理 /Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("IP地址", "端口")); synchronized (this) { uc = (HttpURLConnect…
简介:应用程序开发长期以来一直是IT部门和业务部门面临的问题. IT部门总是被新的应用程序需求弄得不堪重负.他们不可能完成业务部门想要完成的每一个项目. 同时,业务部门的用户厌倦了等待,并开始完全绕过IT部门. 今天,我们来探索一下“低代码开发”这个概念,并阐述它将如何帮助解决这个问题,为企业应用开发提速. 首先,我要问你一个问题:在你的企业里,应用程序开发工作是否跟得上业务需求? 当用户需要一个解决方案时,他们要等待多长时间?这个问题是许多企业常见的问题来源. 开发远远落后于需求,用户需要等待…
第九章 企业项目开发--分布式缓存Redis(1) 注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis 1.1.为什么用分布式缓存(或者说本地缓存存在的问题)? 见<第八章 企业项目开发--分布式缓存memcached> 1.2.有了memcached,为什么还要用redis? 见<第一章 常用的缓存技术> 2.代码实现 2.1.ssmm0 pom.xml 只在dev环境下添加了以下代码…
连接器里面采用的什么样的数据结构,我们先从Document迭代器开始入手,具体的Document迭代器类都实现了DocumentList接口,该接口定义了两个方法 public interface DocumentList { public Document nextDocument() throws RepositoryException; public String checkpoint() throws RepositoryException; } 前者用于获取Document对象,后者获…
在哪里调用监控器管理对象snapshotRepositoryMonitorManager的start方法及stop方法,然后又在哪里调用CheckpointAndChangeQueue对象的resume方法获取List<CheckpointAndChange> guaranteedChanges集合 下面跟踪到DiffingConnectorTraversalManager类的相关方法,在该类实现的方法中,调用了监控器管理对象snapshotRepositoryMonitorManager的相…
注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis 1.1.为什么用分布式缓存(或者说本地缓存存在的问题)? 见<第八章 企业项目开发--分布式缓存memcached> 1.2.有了memcached,为什么还要用redis? 见<第一章 常用的缓存技术> 2.代码实现 2.1.ssmm0 pom.xml 只在dev环境下添加了以下代码: <!-- redis:多台服务器支架用什么…
注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存越来越小,最后系统会被拖慢(这一点与第二点联系起来) 本地缓存存于本机,其缓存数量与大小受本机内存大小限制 本地缓存存于本机,其他机器的访问不到这样的缓存 解决方案:分布式缓存 Jboss cache:缓存还存于本机,但是会同步更新到其他机器(解决了第三个问题,解决不了第一和第二个问题),如果缓存机器数量很多…
开篇 分布式应用 AgileEAS.NET基于Microsoft .Net构件技术而构建,Microsoft .Net最吸引人的莫过于分布式应用技术,基已经提供了XML WebService. .Net Remoting.WCF等技 术.AgileEAS.NET平台所实现的分布式包含两层一次,一次是广义的分成式应用,其意义是应用服务定位器提供本地服务组件及不同分布式服务的发现.定位与集 成;狭义的分布式系统是基于信息系统类应用场景所实现的分布式数据访问.分布式ORM.远程方法调用这样的分布式这实…
前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,IDE是Intellij,数据库为mySql.在Spring Web中,一般把系统划分为3个部分: 1.持久层----数据库的操作 2.业务层----主要的业务逻辑判断 3.展现层----展示给用户的操作界面 这是一种大而化之的分类方式,比如展现层可能是html,也可能是移动端的App.持久层可能操作的数据库也…
Day-1 记录自己学习spring的笔记 提要:根据<Spring 3.x 企业应用开发实战>开头一个用户登录的例子,按照上面敲的. 1.项目分层…
有关Spring的介绍这里就不赘述了,主要是学习了陈雄华版的<Spring 3.x企业应用开发实战>并做了一点笔记,以助于后期的回顾和复习. 废话不多说,直接进入主题,以下所有代码基于<Spring 3.x企业应用开发实战>一书,可能有些部分加了自己在学习过程中的一点总结和尝试. 原书的Spring版本是3.0.5,我在学习的过程中使用的是3.2.4版本,并在Tomcat 6.0和WebLogic 10.3.6上运行,有些地方可能与原书不同.使用的环境是MyEclipse 10和J…
猜想: 懵逼 实践: 微信公众号开发的手册中甚至给出了只需要修改几个参数就能使用的范例.企业微信开发中在一个很不显眼的地方放了一个sample. https://work.weixin.qq.com/api/doc#10128 看似很好理解(并不,背后封装了不算简单的加密方法) 获取参数->解密->输出解密后的参数 然而却因为一个函数引用传参知识点的缺失而困扰了许久 public function VerifyURL($sMsgSignature, $sTimeStamp, $sNonce,…
一.本节要点 1.获取通讯录密钥 获取方式: 登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步”  ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取或者编辑通讯录. 获取通讯录密钥的目的: 通过企业ID(CorpId)和 通讯录密钥可以获取通讯录相关接口的使用凭证(AccessToken).有了AccessToken,就可以使用通讯录相关接口了. 凭证的获取方式有两种(此处暂时存疑,以待勘误): 通讯录AccessToken:CorpId+通讯录密钥 其…
一.本节要点 1.临时素材有效期 media_id是可复用的,同一个media_id可用于消息的多次发送(3天内有效) 2.上传文件时的http请求里都有啥 具体原理可参看: 为什么上传文件的表单需要设置enctype="multipart/form-data" (http://blog.csdn.net/mazhibinit/article/details/49667511) 3.上传本地临时素材到微信服务器的流程 (1)建立与微信服务器的网络连接 (2)从连接中获取输出流(写入微信…