Checkstyle是一款为Java代码实施编码约定和最佳时间规则的开源工具,尽管它最初被设计用于实施编码标准,但现在它也允许用户检查最佳编码实践。它分析Java源代码并报告违反标准的情况,可以通过插件将其继承到自己喜欢的继承开发环境中,以便开发人员能够立即看到并纠正违反正式标准的情况。
Checkstyle提供了现成的标准Sun约定,包括120个规则和标准,这些约定能够处理各种问题:从代码格式、命名约定,企业JavaBean(EJB)最佳时间,到代码复杂性度量。Checkstyle支持与以下方面有关的标准:
-
Javadoc注释
-
命名约定
-
文件头
-
导入语句
-
空白
-
修饰符
-
代码块
-
编码问题
-
类设计
-
J2EE
Eclipse安装和使用Checkstyle操作步骤
在Eclipse中Checkstyle插件的安装
选择Help->Eclipse Market->Search。搜索Checkstyle插件,并安装
为特定项目激活Checkstyle检查
--
论文链接:http://www.cs.cornell.edu/fbs/publications/chainreplicosdi.pdf
--
摘要:针对分布式对象存储系统,满足副本的强一致性,同时支持高吞吐高可用的设计方案。简称链式复制。
文章提出了链式复制的方案,并给出了查询、更新操作的流程,节点故障恢复方案。并和primary backups的方案进行了对比。认为链式复制的方案在吞吐上更优。从文章的实验结论看,应该是在更新操作比例小时,吞吐更优。
从个人理解来看,链式复制在吞吐上并没有优势。更多的是在高可用性上的优势比较明显。
--
系统背景:
1. 分布式对象存储系统
2. 支持对象查询和更新操作
不想数据库这么重量级,又比文件系统支持更多的应用语义。
QoS:
1. 高可用
2. 高吞吐
3. 强一致
api前提:
1. query、update是按某种顺序执行的
2. 更新操作生效后,会被后续的查询感知到
3. 查询操作幂等,更新操作不保证幂等。客户端的更新操作没有收到落地反馈需要重发,客户端不区分发起失败与服务处理失败。由于更新不幂等,客户端需要等待发起的更新操作的反馈,需要控制请求流量。
--
每个几点维护一个历史处理对象id集合Hist{ObjectIds}, 和待处理对象id集合Pending{ObjectIds}。更新请求都发到Head节点,查询请求都发到Tail节点。请求到来append到Pending集合,Tail节点处理完成从Pending集合删除,并加入到Hist集合。
有一个master来管理,master负责:1. 检测故障机器,2. 通知每个机器它的前驱和后继节点, 3. 通知客户端链的Head和Tail节点。
master通过Paxos来协调多个master副本。避免单点故障。
Head节点故障,删除原Head节点,将Head节点的后继作为新的head节点。
Tail节点故障,删除原Tail节点,将Tail节点的前驱作为新的Tail节点。
中间节点S故障,删除S节点,master通知S的后继其前驱改为S的前驱,然后通知S的前驱其后继改为S的后继。
Extending a Chain:故障节点被master从chain中摘除后,为了可靠性,需要扩展chain的节点。选择一个节点T+加入chain的尾部。通知T不再是Tail节点且其后继为T+。T+作为新的Tail节点。后续查询请求发送到T+。
Tail落地后将ack反向返回到head,各层节点更新Hist和Pending 集合。
primary/Backups模型:顺序化请求;客户端请求处理广播到backups,并等待全部非故障的backups的反馈。如果primary挂了,选择一个backup作为新的master。primary返回给client。
Struts中的路径用的是action路径,而不是jsp路径,所以用的时候尽量不要用相对路径而是绝对路径。绝对路径才是王道。
现在有连个jsp页面,分别为index.jsp和path.jsp。
1、index.jsp文件
<?xml version="1.0" encoding="GB18030" ?> <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%-- String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; //在head中<base href>指定basePath --%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>Insert title here</title> </head> <body> <a href=/blog_article/"path/path.action">路径问题说明</a>/index.html </body> </html>
2、path.jsp文件
<?xml version="1.0" encoding="GB18030" ?> <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@taglib uri="/struts-tags" prefix="s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <base href=/blog_article/"<%=basePath%>"/index.html /> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>Insert title here</title> </head> <body> struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。<br /> <a href=/blog_article/"index.jsp">index.jsp</a>/index.html <br /> 虽然可以用redirect方式解决,但redirect方式并非必要。 <br /> 解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径) <br /> 或者使用myeclipse经常用的,指定basePath </body> </html>
注意,这里使用basePath来制定文件的绝对路径
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>getContextPath()根据当前的内容得到路劲,getScheme()得到的是http,getServerName()得到的是127.0.0.1(即IP地址),getServerPort()得到当前端口8080,path得到当前项目所在路径,也就是Struts2_0400_Path,最后basePath其实就是http://localhost:8080/Struts2_0400_Path。
然后在每一个的jsp的连接前面都加上basePath就可以得到这个连接的绝对路径。
3、struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="path" extends="struts-default" namespace="/path"> <action name="path" class="com.bjsxt.struts2.path.action.PathAction"> <result name="path">/path.jsp</result> </action> </package> </struts>
4、PathAction.java
package com.bjsxt.struts2.path.action; public class PathAction { public String execute() { return "path"; } }