- 浏览: 79554 次
- 性别:
- 来自: 北京
最新评论
-
闫昌盛:
服务方异步通知消费方怎么实现的?
Dubbo暴露服务和引用服务的实现源码分析 -
daAoBaMapigu:
引用" target="_blank&qu ...
springBean的生命周期
文章列表
Spring mvc是非常优秀的MVC框架,Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀。他和Struts2的思想还是一样的都有一个前端拦截器进行请求转发,只不过Struts2是filter,spring mvc是servlet,但spring mvc非常简单不论是学习还是使用。
这里我列出spring的几个关键类和接口,
1、
1. Dubbo概述
Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的方案。它的核心功能包括:
#remoting:远程通讯基础,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。
#Cluster: 服务框架核心,提供基于接口方法的远程过程调用,包括多协议支持,并提供软负载均衡和容错机制的集群支持。
#registry: 服务注册中心,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
由于Dubbo团队的文档和代码都非常优秀 ...
1.8. 使用POJO代替ChannelBuffer
目前为止所有的实例程序都是使用ChannelBuffer做为协议消息的原始数据结构。在这一节,我们将改进时间协议服务的客户/服务端实现,使用POJO 而不是ChannelBuffer做为协议消息的原始数据结构。
在你的ChannelHandler实现中使用POJO的优势是很明显的;从你的ChannelHandler实现中分离从 ChannelBuffer获取数据的代码,将有助于提高你的ChannelHandler实现的可维护性和可重用性。在时间协议服务的客户/服务端代码 中,直接使用ChannelBuffer读取一个32位的整数并不是 ...
1.9. 关闭你的应用
如果你运行了TimeClient,你肯定可以注意到,这个应用并没有自动退出而只是在那里保持着无意义的运行。跟踪堆栈记录你可以发现, 这里有一些运行状态的I/O线程。为了关闭这些I/O线程并让应用优雅的退出,你需要释放这些由ChannelFactory分配的资源。
一个典型的网络应用的关闭过程由以下三步组成:
关闭负责接收所有请求的server socket。
关闭所有客户端socket或服务端为响应某个请求而创建的socket。
释放ChannelFactory使用的所有资源。
为了让TimeClient执行这三步,你需要在TimeClient.ma ...
第二章. 架构总览
在这个章节,我们将阐述Netty提供的核心功能以及在此基础之上如何构建一个完备的网络应用。
2.1. 丰富的缓冲实现
Netty使用自建的buffer API,而不是使用NIO的ByteBuffer来代表一个连续的字节序列。与ByteBuff ...
1.7. 流数据的传输处理
1.7.1. Socket Buffer的缺陷
对于例如TCP/IP这种基于流的传输协议实现,接收到的数据会被存储在socket的接受缓冲区内。不幸的是,这种基于流的传输缓冲区并不是一个包队列,而是一个字节队列。这意味着 ...
1.5. 时间协议服务
这一节需要实现的协议是TIME协议 。这是一个与先前所介绍的不同的例子。这个例子里,服务端返回一个32位的整数消息,我们不接受请求中包含的任何数据并且当消息返回完毕后立即关闭连接。通过这个例子你将学会如何构建和发送消息,以及当完成处理后如何主动关闭连接。
因为我们会忽略接收到的任何数据而只是返回消息,这应当在建立连接后就立即开始。因此这次我们不再使用messageReceived方法,取而代之的是使用channelConnected方法。下面是具体的实现:
package org.jboss.netty.example.time;
@Chan ...
1. 问题
现在,我们使用适合一般用途的应用或组件来和彼此通信。例如,我们常常使用一个HTTP客户端从远程服务器获取信息或者通过web services进行远程方法的调用。
然而,一个适合普通目的的协议或其实现并不具备其规模 ...
Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。
Java NIO非堵塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端口,如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不堵塞了 ...
Netty使用了异步的事件驱动模型,来触发网络I/O的各种操作,其在socket层上面封装一层异步事件驱动模型,使得业务代码不需要关心网络底层,就可以编写异步的无网络I/O阻塞的代码。
Netty的异步事件驱动模型主要涉及到下面几个核心的概念:
Channel:表示一个与socket关联的通道
ChannelPipeline: 管道,一个Channel拥有一个ChannelPipeline,ChannelPipeline维护着一个处理链(严格的说是两 个:upstream、downstream),处理链是由很多处理句柄ChannelHandler所构成,每个Channel ...
springBean的生命周期
- 博客分类:
- spring
Spring Bean 生命周期
任何一个事物都有自己的生命周期,生命的开始、生命中、生命结束。大家最熟悉的应该是servlet
的生命周期吧。和
servlet
一样
spring bean
也有自己的生命周期。本文我就向大家讲述
spring bean
的生命周期,这个对理解
spring
框架有非常好的作用。
大家应该知道spring
中有几种供
springbean
生存的容器:
BeanFactory
、
ApplicationContext
、
webApplicationContext
。由于
ApplicationCo ...
oracle的体系结构
- 博客分类:
- oracle
Oracle 的体系结构
把这张图分成上下两部分
上面的部分是内存数据:
存在于内存中 在内存中的数据没实体在大方框中的部分我们把这部分称之为实例 实例由
SGA(
共享全局区
)
和一组后台进程组成,椭圆部 ...
Oracle的块
概念:Oracle
数据块是
Oracle
能够读或写的最小存储单元,但不是最小分配单元
一个数据块对应一个或多个(
被分配了数据文件的
)
操作系统块组成,数据块大小应当是 操作系统块大小的整数倍,以避免不必要的
I/O
。
Oracle
是以块为单位读取数据。
Oracle
每次请求数据的时候,都是以块为单位。也就是说,
Oracle
每次请求的数据是块的整数倍。如果
Oracle
请求的数据量不到一块,
Oracle
也会读取整个块。所以说,“块”是
Oracle
读写数据的最小单位或者最基本 ...
Oracle段(
segment
)
Oracle中最重要的一个逻辑结构,因为用户直接操作的就是对象,对它进行增删改查等。
概念:一个堆表所占用所有物理空间,
这里的
"
所有物理空间
"
就指的是一个段
.(
分区表除外
,
分区表有多个段
)
,段是占有一定存储空间的对象 可以理解为是对占用空间的对象的另一种命名方法,表是段
,
索引也是段,上图可以看到段可以跨越多个数据文件,一个表空间由一个或多个段组成 一个段由一个或多个区组成。
在这里我主要介绍比较主要的段:
1、
表
spring的ioc之beanFactory
- 博客分类:
- spring
一、IOC
依赖注入
概念:这个概念要理解有一定的难度,我阐述一下我的理解:
它包括两个内容:
其一是控制
其二是反转
那到底是什么东西的“控制”被“反转”了呢?我借鉴《Sring3.x
企业级开发》的例子:一部电影要拍摄要有导演、剧本、演员等,而剧本里的角色由哪些演员来扮演
?
是谁控制呢?一般的思路是剧本里的角色被固定一个演员。“控制”是指选择一个角色扮演者的控制权,“反转”是指这种控制权从剧本中移除,转交到导演手中。这样剧本就活了,不会因为一个演员不干了,电影就不能拍了。
在软件中,即是某一接口具体实现类的选择控制权从调 ...