Category Archives: java
rose手册第三章三节:controller层:ErrorHandler支持
3.3.1 ErrorHandler的作用 一般来说传统的编程都会到处去try,特别是java里,try来try去的(如果你用erlang一定就知道,已经知道的可能性,怎么能叫异常?都try了还是让它崩了算了。。。)。 如果打开你的项目,每个java文件中的代码都有一堆的try,那这时候就是ErrorHandle上阵的时候了。 ErrorHanle致力于:统一捕捉和处理各种异常,可区分对待和返回;统一的出错体验。 非常类似做web开发时的500统一出错页面这样的东东。 3.3.2 示例 /** * @author chenzhen@xiaomi.com * 2010-12-1 */ package com.chen.controllers; import net.paoding.rose.web.ControllerErrorHandler; import net.paoding.rose.web.Invocation; public class ErrorHandler implements ControllerErrorHandler { public Object onError(Invocation inv, Throwable ex) throws Throwable { // TODO logger.error("handle err:", …
rose手册第三章二节:controller层:拦截器支持
3.2.1 拦截器作用 面向切面编程(AOP)方法可以让一个项目更加关注核心逻辑,常见的一些最佳实践包括 权限 缓存 错误处理 延时加载 调试 持久化 资源池 等等。。。 而此处的拦截器目标是在controller层提供各种在controller执行前、执行后的代码切入,以达到各种可AOP的目标。 简单地说,拦截器能干的事情就是当你的项目写了一半时发现缺少啥全局要做的事情(比如需要验证权限),不用担心,搞一个拦截器就是了。 3.2.2 拦截器例子 public class AccessTrackInterceptor extends ControllerInterceptorAdapter { public AccessTrackInterceptor() { setPriority(29600); } @Override public Clas
rose手册第三章一节:controller层:url对照规则与返回结果规则
3.1.1) url对照规则——最简单的例子 先看看怎样把url和某个方法对应起来。为了方便说明,现在我们来一起完成一个极简版的贴吧。 1)贴吧需要什么功能? 贴吧中当然会有很多“主帖”(topic),“主帖”下会有很多“跟帖”(comment)。 一般,贴吧中最基本的,会有下面这几个功能需要我们完成: 显示主帖列表 显示单个主帖和它的跟贴 显示单个跟贴 创建一个主帖 创建一个跟贴 2)设计 web API 然后让我们来规划一个REST风格的 web API :(“GET”和“POST”是指HTTP1.1中的请求方法) 显示主帖列表 GET http://github.com/myforum/topic 显示单个主帖和它的跟贴 GET http://github.com/myforum/topic/123 显示单个跟贴 GET http://github.com/myforum/topic/123/comment/456 创建一个主帖 POST http://github.com/myforum/topic 创建一个跟贴 POST http://github.com/myforum/topic/123/comment 可以发现一个共同点,所有API中,URI部分的第一级都是“/myforum”(但这并不是规定,仅仅为了演示)。 3)实现 web API 首先新建一个类,这个类的类名必须以“Controller”结尾:
rose手册第二章:配置与使用
ROSE 2.1 基础环境 * 普通的pc机,del 380 * ubuntu 10.04基本不升级 * java version "1.6.0_29" * eclipse * m2clipse * 茶一杯 2.2 maven简介 * maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。如果你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs,你一定会自问,是否有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择,将你的注意力从作业层转移到项目管理层。Maven项目已经能够知道如何构建和捆绑代码,运行测试,生成文档并宿主项目网页。 * maven对一个项目进入了固定的默认目录定义: * src/main/java 写主要的java实现 * src/main/resources 写主要的配置文件 * src/test/java 写test case * src/test/resources 写test case所需要的配置文件 …
rose手册第一章:入门指引
ROSE 1.1 简介: 人人网、糯米网释出的、开源的高效Java web开发框架。在小米米聊服务端再次被验证和使用。一个从零开始的创业公司,在大家技术背景不一的情况下,rose很简单快速地传达到了大家中间。本手册致力于让php开发人员也能快速使用上java开发高性能服务。 1)rose是什么? 基于IoC容器 (使用Spring 2.5.6). 收集最佳实践,形成规范和惯例,引导按规范惯例,简便开发. 收集通用功能,形成一些可使用的组件,提高生产效率. 特性的插拔,使用基于组合而非继承的设计. 提供可扩展的点,保持框架的可扩展性. 注重使用简易性的同时,注重内部代码设计和实现. 如果你是一个创业公司在选择php还是java,同时如果你的团队有一个人写过一年java其他人都没写过。如果你想选择一个更加大型的系统框架,请使用rose,它收集了来自人人网、糯米网、小米科技的众多工程师的经验,你可以免费拥有这些。 2)rose能做什么? 初级rose用户: rose可以用来完成一个网站。 中级rose用户: rose可以用来完成一个大型网站,它提供的jade功能使得你的项目可以快速开发,自然切入连接池;它提供的portal功能,可以将一个网页分多个线程发起向DB的请求,节省用户的时间;它提供的pipe功能类似facebook的bigpipe,让前端加速,与此同时还有portal多线程的优势。 高级rose用户: rose可以自由加入spring任何特性,比如定时执行(去TM的crontab);比如拦截器做统一权限控制。可以自
分布式实时搜索方案介绍-senseidb
名词解释 zoie:由linkedin开源的建立在lucene之上提供实时索引的系统。它利用两 个内存索引一个硬盘索引来实现实时搜索。 bobo-browse:由linkedin开源的基于lucene的分类浏览搜索系统。 zookeeper:一个分布式的,开放源码的分布式应用程序协调服务,常用来做配置服务。 senseidb:开源,分布式,实时,半结构化的数据库(官方网站上如是说)。实际上是一个将zoie、bobo-browse、zookeeper整合起来,提供各种方便的使用办法的一个项目。项目目标是达到简单易用的分布式实时搜索系统。 kafka:由linkedin开源的高吞吐量的消息系统。 norbert:norbert是一个提供分布式集群服务的开发框架,具备集群管理功能,对开发简单的通信架构,易扩展能承受高吞吐量的框架。scala实现,java无缝使用。其原理是:netty+zookeeper+pb。 IKAnalyzer:中文分词较好用的一个。 lucene:这个不用说了。 使用senseidb 1.解决中文分词问题 senseidb支持在配置上进行自定义analyzer。 要做的事情就是,建立一个jar包,里面只要一个类即可,依赖IKA的包。代码如下: public class IKAnalyzerFactory implements SenseiPluginFactory<IKAnalyzer> { @Override&nb
linkedin高吞吐量分布式消息系统kafka使用手记
kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。 支持通过kafka服务器和消费机集群来分区消息。 支持Hadoop并行数据加载。 设计侧重高吞吐量,用于好友动态,相关性统计,排行统计,访问频率控制,批处理等系统。大部分的消息中间件能够处理实时性要求高的消息/数据,但是对于队列中大量未处理的消息/数据在持久性方面比较弱。 kakfa的consumer使用拉的方式工作。 安装kafka 下载:http://people.apache.org/~nehanarkhede/kafka-0.7.0-incubating/kafka-0.7.0-incubating-src.tar.gz > tar xzf kafka-.tgz > cd kafka- > ./sbt update > ./sbt package 启动zkserver: bin/zookeeper-server-start.sh config/zookeeper.properties 启动server: bin/kafka-server-start.sh config/server.properties 就是这么简单。 使用kafka import java.util.Arrays; import java.util.List; import 
maven库nexus拖不到jar包小记
使用maven,nexus是个不错的选择。 最常见的问题: 1.SNAPSHOT拿不到最新的包。 2.明明在maven central库里搜索到的包,却提示Missing。 3.plugin提示Missing。 1.SNAPSHOT拿不到最新的包。 这个问题往往得nexus+hudson造成的。因为daily build导致与日俱增的jar包堆积在一个文件夹下,文件数目过多,导致在取最新的包时超时了。 解决办法: 浏览器打开nexus, login->scheduled tasks->add,添加一个定时清理目录的计划任务即可。最后一个选项“remove if released”需要慎重,平时开发可能不是特别正规的时候可能会snapshot和release都需要。 2.明明在maven central库里搜索到的包,却提示Missing。 网上大多数说法都是index失败了,个人经验实际不然(当然不排除你的问题就是index失败)。 当nexus.log里没有任何异常时,请注意以下内容: 在central搜索时,如果只有pom没有jar,那说明这个依赖的项目可能有多个依赖,一定要加上pom,默认是jar。 3.plugin提示Missing。 通常原因是:nexus设置的搜索顺序有问题。 login->Public Repositories -> configuration 左边的是正在使用的定义好的仓库组,右边是可以使用的,正确的顺序应该是先在Release找,然后Snapshots,然后3rd party,最后才去外网下(这时nexus才拖下来新的jar/pom)。
年终攻击hashDos-哈希表多碰撞实现拒绝服务-破解办法
起因: Wed, 28 Dec 2011 22:28:16 GMT apache tomcat公布了一个安全漏洞。 http://mail-archives.apache.org/mod_mbox/www-announce/201112.mbox/%3C4EFB9800.5010106@apache.org%3E 漏洞原理: 依靠相应语言的hashtable/hashmap实现过程(request多为此结构),当不同的key存入时如果hash值相等则以链表方式连接在前面。此漏洞利用碰撞相同的hash值得到一个长链表,重新get时,map的计算过程会将时间复杂度巨增,原来一个简单的过程将变成一个很费cpu的过程。 影响到的: 最快时间tomcat公布了解决办法。 php进行了升级。 ms也发了公告http://technet.microsoft.com/en-us/security/bulletin/ms11-100。 解决办法: tomcat 临时办法: 默认大小2097152,当maxPostSize=0时,不限制;maxPostSize=20971520时,为20M,改为一个小于10k的值,所有版本可用,会影响用户。 持久办法: 用新的版本,maxParameterCount默认值1000。 nginx 临时办法: 默认的最大请求body大小为8m,修改设置client_max_body_size=10k;此招为各种情况下万金油,会影响用户。 持久办法: 暂无,应该很快会有max_request_count的参数。 php 持久办法: php升级到5.3.9,5.2需要打
maven插件编写实例
概况 实现一个自定义的类,必须要继承自 org.apache.maven.plugin.AbstractMojo,同时实现execute方法。 maven使用了在注释中写代码,BT的写法,所以注释里的@goal @parameter都是有含义的。 实例 mvn hello:gogo 这样的一个命令,到代码里,应该是如下过程 进入 hello被叫做plugin的prefix,maven会去寻找以hello开头的插件。 在插件的pom里必须定义其名字为hello开头的,例如: <artifactId>hello-maven-plugin</artifactId> goal目标 hello后面的gogo叫做goal,目标,则以注释中写代码的方式来完成: /** *@goal gogo **/ HelloMojo extends AbstractMojo 需要的依赖 <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> <version>3.0.3</vers
SEARCH
Update
- rose手册第三章三节:controller层:ErrorHandler支持
- 54chen Twitter memo 2012-05-13
- 54chen Twitter memo 2012-05-06
- rose手册第三章二节:controller层:拦截器支持
- 54chen Twitter memo 2012-04-29
- rose手册第三章一节:controller层:url对照规则与返回结果规则
- 54chen Twitter memo 2012-04-22
- 54chen Twitter memo 2012-04-15
- rose手册第二章:配置与使用
- 54chen Twitter memo 2012-04-08
- 54chen Twitter memo 2012-04-01
- rose手册第一章:入门指引
- 54chen Twitter memo 2012-03-25
- 54chen Twitter memo 2012-03-18
- senseidb使用手记
