OSGi原理与实践-Day5

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

OSGi原理与实战(5)Web:昨日回顾jBpmWeb与MVCOSGi与Web应用OSGi与常见框架集成分布式OSGi回顾经验分享课程总结和交流昨日回顾企业应用集成EAIESBMULEESBMain启动Equinox从main调用OSGi从OSGi容器调用Main昨日回顾Java模块化之路ProjectJigsawJava8(可能2013年初)资源监控和隔离OS级别对进程的处理虚拟化技术企业内部OBR工作流与jBpmjBpmjBpm原理分析常用jBpm节点介绍jBpm与SpringjBpmjBpm原理分析流程节点迁移任务分配流程定义与代码分离jBpmProcessEngineRepositoryServiceExecutionServiceHistoryServiceManagementServiceTaskServiceIdentityServicejBpmtask分配方式assigneecandidate-userscandidate-groupsswimlaneassignment-handler常用jBpm节点介绍javastatetaskcustomdecisionfork/joinforeachsubprocessasynclistenerjBpmjBpm与Spring集成,来看一个例子Web与MVCWeb的本质Request-Response模式浏览器与WebServerHTTP协议基于HTTP协议的数据内容Web与MVCWeb开发-语言PHPPythonRubyJavaC#……Web与MVCWeb开发-框架StrutsSpringMVCDjango……Web与MVCWeb开发与语言和框架的关系ClientServerTCP/IPHTTPHTTPWeb与MVCWebServer的工作监听端口、建立连接接收请求(请求的资源是多种多样的)处理请求生成结果把结果传递给客户端Web与MVCJavaEE的ServletInBound、OutBound的思想singletonJavax.servlet.Servletpublicvoidservice(ServletRequestreq,ServletResponseres)Web与MVCjavax.servlet.http.HttpServletdoGet(HttpServletRequest,HttpServletResponse)doPost(HttpServletRequest,HttpServletResponse)Servlet是JavaEE定义的模型,这个只是为了方便的去实现Web应用的功能Web与MVCHttpServlet与Http请求的对应web-appservlet-nametunningLoad/servlet-nameservlet-classorg.vanadies.mywebapp.TunningLoadServlet/servlet-classinit-paramparam-nameloopCount/param-nameparam-value5000/param-value/init-param/servlet-nameservlet-mappingservlet-nametunningLoad/servlet-nameurl-pattern/tunningLoad/url-pattern/servlet-mapping/web-appWeb与MVCuri1-servlet1uri2-servlet2uri3-servlet3……Web与MVCWeb与MVCController处理uri-处理器的映射Model处理请求,生成处理结果View渲染生成的处理结果,生成最后的结果Web与MVCMVC实现原理分析Controller了解uri和model以及view的对应关系接管所有的Http请求根据Http请求,找到Model生成数据,然后找对应的view渲染Model处理Http请求,生成结果(这个是没有格式的结果)View给Model处理的结果,加上格式OSGi与WebOSGi与Web如何集成呢把OSGi嵌入到Web中把Web服务器嵌入到OSGi框架中OSGi与Web把Web服务器嵌入到OSGi框架中应该用什么方案来完成?HttpServiceHttpServiceHttpService的两种支持注册Servlet注册资源HttpService实体HttpContext允许Bundle在Servlet或者Resources注册的时候提供信息HttpService允许框架中的其他Bundle动态的注册/注销Resources或者ServletHttpServiceHttpService注册/注销registerServlet(String,javax.servlet.Servlet,Dictionary,HttpContext)registerResources(String,String,HttpContext)注销采用unregisterServlet或者unregisterResources完成对于URL的解析和MappingHttpService内部处理映射关系HttpService让我们来做一个基于HttpService的例子OSGi嵌入到Servlet容器把OSGi嵌入到Web中应该用什么样的思路来完成?Eclipsebridge.war主要是打通容器到OSGi框架的通道OSGi嵌入到Servlet容器把Bridge.war部署到web应用中OSGi嵌入到Servlet容器相关的几个项目org.eclipse.equinox.servletbridge(ServletBridge)该Bundle会启动OSGi,使得Equinox可以嵌入到现有的servlet容器中运行,通过提供一个供Hook注册的功能,使OSGi框架可以能够处理容器接受的HTTP请求。OSGi嵌入到Servlet容器相关的几个项目org.eclipse.equinox.servletbridge.http(HTTPServletBridge)注册到ServletBridge中用作为Hook,将servlet容器中的HTTP请求转发到OSGI的HTTPService来最终完成HTTP请求的处理。以上两个bundle是将应用服务器作为bundle集成进入OSGi大环境的关键。OSGi嵌入到Servlet容器相关的几个项目org.eclipse.equinox.http.servlet(HTTPServlet)该Bundle提供了一个注册到OSGiHttpService上的HttpServiceServletOSGi嵌入到Servlet容器相关的几个项目org.eclipse.equinox.http.registry(这个是可选的)提供了在OSGiHttpService上的servlet,resource,httpcontext的扩展点OSGi嵌入到Servlet容器实现分析ServletBridge提供了一个入口,能让OSGI(这里是Equinox)来处理HTTP请求能够通过Web来对OSGI框架进行控制最关键的是对ClassLoader的处理OSGi嵌入到Servlet容器让我们来试用一下bridge.war的功能MyBridge.warMyHttpService基于Spring-DM来完成Web应用还记得在Spring-DM?似曾相识?spring-osgi-webspring-osgi-web-extender基于Spring-DM来完成Web应用创建工程导入需要的包编写Servlet代码以及Html代码编写web.xml基于Spring-DM来完成Web应用加入Spring的ApplicationContext–为了引用OSGi的Servicecontext-paramparam-namecontextClass/param-nameparam-valueorg.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext/param-value/context-paramlistenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listener基于Spring-DM来完成Web应用看一个Spring-DM的Web的应用例子OSGi集成OSGi与集成一个核心ClassLoader两个基本点集成控制在一个Bundle内跨Bundle要能够解决ClassLoader的问题第三个层面多机系统?这个已经跟OSGi没关系了OSGi与HibernateHibernate限制在独立BundleHibernate跨Bundle通过扩展点来实现跨Bundle的加载分布式OSGi回顾通过例子,看一下反射、动态代理、序列化和反序列化的应用分布式OSGi回顾ClientRemoteServiceProxyRegistryServerRemoteServiceImplementationRegistryIHelloWorld(DynamicInvocationHandler动态代理)RemoteServiceStub(序列化/反序列化/通信)RequestObject--ResponseObjectHelloWorldImpl(反射)RemoteConsumerProxy(序列化/反序列化/通信)经验分享和交流经验分享和交流模块化设计面向服务的组件模型设计动态性设计面向接口的开发经验分享和交流OSGi的设计模式树状设计模式根枝叶模块化动态性可扩展性面向服务的设计OSGi最佳实践接口和实现分离为不同的Bundle保持系统动态性不强依赖任何OSGi服务监听系统的动态的变化OSGi最佳实践搭建公司级别的OBR创建共享的Bundle库最小化依赖避免启动顺序依赖经验分享网站从小到大遇到的问题模块化的需求我们的应对策略网站从小到大遇到的问题服务器ApplicationServerDB交易商品用户商品表交易表用户表•连接数据库使用了JDBC•模块之间的调用是JVM内部的方法调用JDBCInJVMmethodinvocation网站从小到大遇到的问题将应用(App)和数据库(DB)拆分到两台机器上这对开发、测试、部署,没什么影响。服务器ApplicationServerDB交易商品用户商品表交易表用户表JDBCInJVMmethodinvocation服务器访问量又上升了访问量持续上升,应用服务器的压力也变的很大应用从1台拆分到了两台服务器ApplicationServerDB交易商品用户交易表用户表JDBCInJVMmethodinvocation服务器服务器ApplicationServer交易商品用户InJVMmethodinvocationJDBC商品表App拆分-Session的问题要保证访问的AppServer上,有请求携带的SessionId的具体Session数据解法1:Session-Sticky解法

1 / 78
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功