坚信科学,分享技术

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

Tag Archives: java

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”结尾:

Continue reading

Posted in java | Tagged , | 5 Comments

quercus记录:php使用连接池访问数据库

上周记录了如何用quercus建立混合型项目。 http://www.54chen.com/php-tech/quercus-notes-php-java-mixed-projects.html 这里来说说与数据库的访问,使用jndi得到连接池的好处。 JNDI (Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。 正题 在quercus中可以随意使用mysql_connect与mysql_pconnect两个方法来连接数据库。 当在web.xml定义得有database相关的消息时,mysql_connect与mysql_pconnect都会自动忽略里面的参数设置,直接使用web.xml的定义。 添加jndi设置: vim WEB-INF/web.xml <?xml version="1.0" encoding="utf-8"?>   <web-app  xmlns="http://caucho.com/ns/resin">     <description>truth application</description>  

Continue reading

Posted in php | Tagged , , | 1 Comment

quercus记录:php和java的混合型项目建立手记

创业公司参与项目的人口众多、背景不一,目前市场上的主流方向为php与java,很多时候java工程师恨铁不成钢,php工程师也无可奈何。于是便有了此文,讲述如何使用quercus创建php java混合型项目。 quercus是什么? quercus是Caucho公司针对php语言的java实现,100%完成了php5的解析。是resin内建支持的功能。同时,因为使用了resin,使得php可以很容易得到连接池、分布式session、负载均衡等功能。使用resin的php项目可以更加安全,不存在很多fastcgi的问题。 性能如何? 官方:用mediawiki与drupal来做实验,要比mod_php快4倍。 有一个编译选项,在resin专业版里支持,可以把php转成java class,得到更高性能。 新建一个java项目混合php项目 web.xml是关键,里面声明了*.php文件的访问都以com.caucho.quercus.servlet.QuercusServlet来执行。 <?xml version="1.0" encoding="UTF-8"?>   <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun

Continue reading

Posted in php | Tagged , , | 4 Comments

持续构建工具hudson使用手记

hudson是一个强大的持续性构建服务器。(现在开发者们分了一个分支,改叫Jenkins。)我(54chen)在使用过程中的手记如下: 下载 地址:http://hudson-ci.org/ wget http://java.net/projects/hudson/downloads/download/war/hudson-2.0.1.war 速度不咋的,60k/s. 先决条件 系统:centos 5.5 resin4下不work,换成了tomcat。 cp /opt/soft/hudson/hudson-2.0.1.war /opt/soft/apache-tomcat-7.0.16/webapps/ 遇到的问题 1)tomcat使用utf8环境。 vim tomcat/conf/server.xml 找到8080,加入一行 URIEncoding="UTF-8"。 2)maven不工作 hudson启动后,系统管理里面,设置maven的地址:MAVEN_HOME指到maven的主目录,不是bin目录。 3)svn不工作 报re_version错误,在你的svn地址的最后面加上@HEAD 4)hudson一切正常后,有svn bug FATAL: tried to access method hudson.scm.ChangeLogSet$Entry.setParent(Lhudson/scm/ChangeLogSet;)V from class hudson.scm.SubversionChangeLogSet 报上面的错误,我(54chen)在http://i

Continue reading

Posted in java | Tagged , | 1 Comment

java log4j 日志分析工具分享

java线上项目往往有许多的exception出现了没来得及去看,通过下面的工具,可以在每天早晨上班的时候通过邮件发出头一天出现的异常次数,是提高生产力和提早发现问题的好办法。 配置: 1.解压到指定目录 /data/analyze 2.email发送配置 vim mail.pl 5行,6行,7行,14行 修改为自己的配置 3.server配置 ssh-keygen打通ssh cd server 项目名_server写服务器ip,多个机器一行一个 4.其他 可能会有不相同的log目录地址,看着修改一下shell就行。 *修改自烧饼的脚本,点击下载: http://ishare.iask.sina.com.cn/f/16530420.html

Continue reading

Posted in java | Tagged , , | Leave a comment

java实时日志大文件分析

日志分析时经常会遇到这个问题:一个正在增长中的大文件,要分析新增的每一行的固定内容进行统计并展示啥的。用java的RandomAccessFile盯住文件的末尾,是一个不错的选择,下面的实现,是一个高效的java tail工具,实现类似linux的tail工具的功能。用来做大日志文件的实时分析,是一个不错的选择。 public class LogFileTailer extends Thread { private Logger logger = LoggerFactory.getLogger(LogFileTailer.class); /** * How frequently to check for file changes; defaults to 5 seconds */ private long sampleInterval = 5000; /** * The log file to tail */ …

Continue reading

Posted in java | Tagged , , | 5 Comments

改写java TreeMap制造方便查询的ip内存库

国库流行的ip库记录数大约在6万条左右,数据格式大约都是如下: start,end,country... 要查询的时候都是放到mysql里去,然后select * from ip where start>=xx and end end <=xx来得到ip信息,我(54chen)在搞一个实时监控时,因为并发量非常大,全部查询IP库,需要好几万每秒的查询,特改了java的TreeMap的get方法,将所有数据放到内存里来操作,put的时候还是保持TreeMap的红黑树实现,以start作为key,而在get的时候有一个 compare的过程,在发现compare是大于0的时候进行如下修改: else if (cmp > 0) { int start = ((Data) p.value).getStart(); int end = ((Data) p.value).getEnd(); int intKey = Integer.parseInt(k.toString()); if (intKey >= start && intKey <= …

Continue reading

Posted in java | Tagged , , | 2 Comments

maven项目代码质量检测工具sonar使用手记

Sonar是一个开源代码质量控制工具。把它加到现在的持续集成工具中就能够让你的java开发项目集中处于质量控制之下。下面是安装和使用记录 : 修改.m2/settings.xml 增加下边的内容到profiles段落中: <profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <!-- EXAMPLE FOR MYSQL --> <sonar.jdbc.url> jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8 </sonar.jdbc.url> <sonar.jdbc.driverClassName>com.mysql.jdbc.Driver</sonar.jdbc.driverClassName> <sonar.jdbc.username>sonar</sonar.jdbc.username> <sonar.jdbc.password>sonar</sonar.jdbc.password> <!-- SERVER ON A REMOTE HOST --> <sonar.host.url

Continue reading

Posted in java | Tagged , | 2 Comments

关于maven,做错的十件事

maven管理的java项目越来越多,令人遗憾的是在使用maven的时候,多多少少都会遇到这样那样的问题,于是会有各种各样的解决办法,下面是一个列表,列出了使用maven的误区和解决办法。 1.频繁在所有项目使用mvn install并且随时在更新 这是我见过的最常见的问题,解决了这个问题有许多的好处。在maven的文档中找不到一句对这种情况的描述,不过我坚信一句话:每个artifact在maven仓库中都有一个家。 在你的公司里,应该有一个仓库管理工具。每一个你开发的模块都应该发布到这个仓库上去。你可能会问,应该什么时候发布?答案是,每次在你的构建服务器构建之后,都需要发到仓库。我们通常都使用Hudson来做这件事情,另外还有Continuum和TeamCity也还不错。 现在,当你所有的项目都在仓库里有的时候,你的项目就不再需要不断地mvn install了。如果你修改一个模块,你只需要重建这个模块,其余依赖的模块会由maven自动从仓库中下载。 2.你和你的团队成员依靠复制.m2文件夹来解决项目里的依赖找不到的问题 这看起来很疯狂,不过这件事情经常发生。解决的办法,设置一名仓库管理员。一旦管理好了仓库,就不会再出现大家找u盘复制.m2文件夹的事情了。因为可以加速,你不应该把本地的仓库整个地删除掉,毕竟在本地读取仓库是最快的。 3. 你为了解决依赖找不到一个老版本构件的问题,把最新的pom文件修改了版本弄到了老文件里后安装 考虑到这种情况,有人把一个模块的版本从1.3-SNAPSHOT修改成了1.4-SNAPSHOT。你马上要去度假,所以呢你就不想再更新和安装1.3的版

Continue reading

Posted in java | Tagged , | 6 Comments

分布式日志系统scribe使用手记

scribe 是facebook 开源的分布式日志系统 。其使用了thrift传输log,由于使用thrift,所以不论是什么语言的项目都可以实现日志收集,可达到远程或者是本地同步远程的分布式日志收集效果,在其示例配置中,并发量可达到max_msg_per_second=2000000,对普通的应用来说,每秒上百万的访问量可能性很小,因此基本上即使最简单的配置,远程收集所有项目的log也是可靠的,如果压力大的话,可以采取主从的配置,将日志打到本地后由scribe的主从配置来自动同步。下面讲述如何安装和使用scribe。 下载boost、thrift、scribe boost_1_45_0.tar.gz thrift-0.5.0.tar.gz facebook-scribe-2ee14d3.zip 通过yum安装需要的依赖 yum install libevent libevent-devel python-devel yum install gcc-c++ yum install automake yum install byacc flex 安装boost tar -zxvf boost_1_45_0.tar.gz cd boost_1_45_0 ./bootstrap.sh ./bjam install --prefix=/opt/soft/bootstrap 安装thrift-0.5.0 tar zxvf thrift-0.5.0.tar.gz ./configure --with-php-config=/opt/soft/php/bin/php-config &hel

Continue reading

Posted in linux | Tagged , | 13 Comments
Page 1 of 41234