lizongbo at 618119.com 工作,生活,Android,前端,Linode,Ubuntu,nginx,java,apache,tomcat,Resin,mina,Hessian,XMPP,RPC

2008年12月29日

jsper编译遇到”SEVERE: Invalid PUBLIC ID”的解决办法

Filed under: Tomcat — 标签:, , — lizongbo @ 13:36
用到了自定义标签,且tld声明为:
<?xml version=”1.0″ encoding=”ISO-8859-1″ ?>
<!DOCTYPE taglib
PUBLIC “-//Sun Microsystems, Inc.//
DTD JSP Tag Library 1.1//EN”
http://java.sun.com/j2ee/dtds/
web-jsptaglibrary_1_1.dtd”>
结果使用tomcat预编译时出错,出错信息:
jspc:
[jasper] Dec 16, 2008 8:24:41 PM org.apache.jasper.xmlparser.MyEntityResolver resolveEntity
[jasper] SEVERE: Invalid PUBLIC ID: -//Sun Microsystems, Inc.// DTD JSP Tag Library 1.1//EN
BUILD FAILED
/usr/local/build_file/build_webapp.xml:121: org.apache.jasper.JasperException: Unable to initialize TldLocationsCache: XML parsing error on file /WEB-INF/tlds/lizongbo.tld
Total time: 6 seconds
经查tomcat的jsper代码,找到org.apache.jasper.xmlparser.ParserUtils
发现对没有缓存的dtd采取的是访问url进行下载方式检查,
已经缓存的dtd在org.apache.jasper.Constants 中有定义
public static final String TAGLIB_DTD_PUBLIC_ID_11 =
“-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN”;
于是修改dtd定义为:
<?xml version=”1.0″ encoding=”ISO-8859-1″ ?>
<!DOCTYPE taglib
PUBLIC ” “-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN”
http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd“>
重新编译通过。

2008年12月28日

service集群的快速失败转移策略选择

Filed under: Cluster — 标签: — lizongbo @ 02:13

前提,Service是多个,数组方式存在,hashcode取模方式负载均衡,
当某个 service出现故障时的快速失败转移策略。
1.N+1模式,
N个正常运行的service,1个备份service。
类似心跳检测,当某个service的方法无法调用时,
从数组中将其替换为备份是service,是n对1模式,
优点是替换简便,缺点是始终留一个冷备。
如果同时坏两个的时候不好处理。
还有切换之后待故障service恢复之后的切换回。
可以采取类似浮动ip模式以抢ip的方式来进行切换。

2.rehash

N个正常运行的Service.无备份。
类似心跳检测,当某个service的方法无法调用时。
将按qq取模落在该service上的请求,重新hash,
将其分散到另外N-1个Service上。
如果再坏一个,就rehash到剩下的N-2个。

缺点是算法复杂,优点是无需冷备。不浪费资源

Powered by WordPress