??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲三级电影网址,91亚洲导航深夜福利,亚洲熟女乱色一区二区三区http://m.tkk7.com/zhugf000/零碎片断Q杂七杂八?/description>zh-cnMon, 12 May 2025 02:34:46 GMTMon, 12 May 2025 02:34:46 GMT60一个通用的文仉|框?/title><link>http://m.tkk7.com/zhugf000/archive/2008/02/10/179556.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Sun, 10 Feb 2008 07:44:00 GMT</pubDate><guid>http://m.tkk7.com/zhugf000/archive/2008/02/10/179556.html</guid><wfw:comment>http://m.tkk7.com/zhugf000/comments/179556.html</wfw:comment><comments>http://m.tkk7.com/zhugf000/archive/2008/02/10/179556.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zhugf000/comments/commentRss/179556.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhugf000/services/trackbacks/179556.html</trackback:ping><description><![CDATA[<h1>一个通用的文仉|框?/h1> <br /> <h2>配置需求说?/h2> 在工作中,目需要实现多U程序配|方?每种E序配置均有各自的文件复?变量替换(替换文本文g中的变量占位W?,修改脚本文g的需? 为减重复代?化配|实?我们实现了此配置框架.需求片断示?<br /> <ol> <li>复制文g到某? <li>创徏/append 某个 properties/txt 文本文g <li>修改脚本文g,插入一D|本到脚本文g某处 <li>通过JMX/JNDIq接到远E应用服务器, 用Java code修改应用服务器的配置. </li> </ol> <br /> <h2>需求分?/h2> 从上q需求来?W一印象是用ANT或类ANT XML文g可以很好的满上述需? 但是q需要做下面增强才会(x)好用:<br /> <ol> <li>配置q程需要有cM于事务的机制,以保证多处改动的一致? <li>各种配置q程之间有许多相同之?为减重?可以考虑引入公共配置片断文g. <li>׃配置q程相对固定, ANT BUILD XML文g的多个target以及(qing)依赖关系(g)查就不需要了,但是需要更加灵zȝ条g判断机制来控制单个配|动作和变量赋? </li> </ol> <h2>实现?/h2> Ҏ(gu)上述分析,目最l的XML配置文g格式如下:<br /> <font style="background-color: #d4d0c8"><span style="font-size: 10pt; font-family: Courier"><font style="font-family: ; background-color: #d4d0c8"><root><br style="font-family: " />     <common><br style="font-family: " />         <resource-bundle>ResourceBundle Message Class</resource-bundle><br style="font-family: " />         <variables><br style="font-family: " />             <!-- If contains CONFIG_XINFO ,copy it to PLATCODE --><br style="font-family: " />             <variable name="PLATCODE" value="${CONFIG_XINFO}"><br style="font-family: " />                 <condition><br style="font-family: " />                     <varexists name="CONFIG_XINFO" /><br style="font-family: " />                 </condition><br style="font-family: " />             </variable><br style="font-family: " />             <!-- Give it a default value --><br style="font-family: " />             <variable name="IS_WINDOWS" value="FALSE" /><br style="font-family: " />             <variable name="IS_WINDOWS" value="TRUE"><br style="font-family: " />                 <condition><br style="font-family: " />                     <or><br style="font-family: " />                        <variable name="PLATCODE" value="windows"/><br style="font-family: " />                        <variable name="PLATCODE" value="windows64"/><br style="font-family: " />                     </or><br style="font-family: " />                 </condition><br style="font-family: " />             </variable><br style="font-family: " />         </variables><br style="font-family: " />     </common><br style="font-family: " />     <configure><br style="font-family: " />         <action-invoke<br style="font-family: " />             class="CustomizedActionClass"<br style="font-family: " />             index="1"<br style="font-family: " />         /><br style="font-family: " />         <action-copy <br style="font-family: " />             file="${Source File Variable}"<br style="font-family: " />             dest="${Dest file Variable}"<br style="font-family: " />             index="60"<br style="font-family: " />             reason="Error Reason Key"<br style="font-family: " />             /><br style="font-family: " />         <action-write<br style="font-family: " />             file="${File to Write}"<br style="font-family: " />             index="20" <br style="font-family: " />             reason="Error Reason Key"<br style="font-family: " />         ><![CDATA[QUALDIR=${QUALDIR}<br style="font-family: " /> ]]></action-write><br style="font-family: " />         <action-expand <br style="font-family: " />             file="${File to be expanded}"<br style="font-family: " />             index="30"<br style="font-family: " />         /><br style="font-family: " />     </configure><br style="font-family: " /> </root></font><br style="font-family: " /> </span></font><br /> <form> 与ANT BUILD XML相类似的,分ؓ(f)变量定义区域和配|动作定义区? 为实现方?变量可以被覆?变量赋D句可以带条g.<br /> 具体配置q程由多个action-***规定,配置框架已经预提供标准动? action-copy/action-write/action-expand {等, action-invoke可以插入自定义Java代码.<br /> <br /> <br /> Z解决问题1,配置框架实现了一套类g两阶D|交的机制. 每个Action实现c需要实C个方?<br /> </form> <ol> <li>Action.performAction(): 实现正常配置动作,如果p|则返回错误码. <li>Action.performCompensation(): 实现回滚动作,负责配|对?如文件内?回滚C改前的状? <li>Action.performComplete(): 实现正常配置完成动作, 负责释放配置q程占用的(f)时资?<br /> </li> </ol> 配置框架依次Ҏ(gu)个要执行的动作调用performAction动作,如果当前Actionq回p|错误?则对已经成功执行的Action反向依次调用 performCompensation动作,执行回滚操作,从而保证配|过E的一致? 如果全部成功,则依ơ调用performComplete操作,释放占用的(f)时资?如下?<br /> <img alt="" src="http://m.tkk7.com/images/blogjava_net/zhugf000/configure_actions.gif" border="0" /><br /> <br /> <br /> 决问?,我们为每个action指定了一个index,用它规定执行序,配置框架从公共配|文件和U有配置文g中合qƈ排序所有的配置 action, 通过预先分配common action和private action的index范围, 每个单独的配|过E可以完全抽出重复配|动?<br /> <br /> 决问?, 每个action,每个变量定义(property 标记) 都可以有自己的condition 定义. 如此一?配置文g的写法更cM于程序的执行q程,从开发角度也更加自然.<br /> <br /> <br /> <h2>其它Ҏ(gu)?脚本文g自动分析和插入配|行</h2> 应用服务器的启动脚本是用户可定制?我们无法预见文g格式. 册个问?我们采用了如下方?<br /> <ol> <li>对脚本进行语法分?扑և脚本的Java启动?或Windows Service讄?,q而找出可用的shell变量和插入位|? 期望q种方式能够解决大多数用戯定义脚本.<br /> <li>对于复杂或分析条件不充分的脚?如变量位于别的文?, 用户需要在合适位|插入一行有指定格式和参数的注释?UC为anchor),配置框架?x)自动在该行后插入配|代? q种方式的主要的问题是用L(fng)解困?目l支持的工作量大;不过q也是没有办法的办法?<br /> </li> </ol> <br /> <h2>ȝ</h2> 本文介绍了一U多文g操作配置框架的思\,q具体解释类事务的配|动作实现过E? 该配|框架在目实践中达C预期目的,收到不错的效?<br /> <br /> <img src ="http://m.tkk7.com/zhugf000/aggbug/179556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhugf000/" target="_blank">W笨</a> 2008-02-10 15:44 <a href="http://m.tkk7.com/zhugf000/archive/2008/02/10/179556.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSRB设计思想Q无状态的,_粒度的SERVICEhttp://m.tkk7.com/zhugf000/archive/2007/12/20/168346.htmlW笨W笨Thu, 20 Dec 2007 06:23:00 GMThttp://m.tkk7.com/zhugf000/archive/2007/12/20/168346.htmlhttp://m.tkk7.com/zhugf000/comments/168346.htmlhttp://m.tkk7.com/zhugf000/archive/2007/12/20/168346.html#Feedback2http://m.tkk7.com/zhugf000/comments/commentRss/168346.htmlhttp://m.tkk7.com/zhugf000/services/trackbacks/168346.htmlJSRB设计思想Q无状态的,_粒度的SERVICE Z提高性能和负载均衡实现的考虑QJSRB 采取了无状态的Q粗_度的SERVICEh和响应机制?br /> 该思想与有状态的ORB(如CORBA或EJB Container)的设计思想截然相反.本文详q原?


JSRB定位与想要解决的问题

JSRB定位于传l的SERVICE REQUEST BROKERC,是原始意义上的中间件的位置: 负责大量客L(fng)(N千或N?的请?排队到几十或几百个的h处理q程(U程)?最优化的用系l资?从而达到吞吐量最大化的目?
从这个角度来? EJB Container和CORBA ORB是标准的中间? Java Web Container׃内徏了线E池,也算是中间g(前端协议HTTP,后端协议是JDBC).

无状态vs有状?q程调用的选择.

有状态要求服务器在远E调用之间保存对应客L(fng)的Session数据,q种设计思想?x)简化程序代?有助于将分布式的E序写得?strong>?/span>非分布式E序.

但是在某些情况下,q种设计?x)带来严重的性能问题.在金融的在线交易pȝ?业务pȝ需要处理十万至千万U别的用户信?例如|银pȝ),而中间g服务器较为合适的session池数量不q万.要在中间件服务器的JVM内存中处理如此巨量的数据,肯定?x)将pȝ撑爆; 而如果存储大部分数据到硬?钝化技?来应?则就?x)面临IO性能q不?RDBMS 的窘? RDBMS 在目前阶D始l是最快速的数据存储Ҏ(gu).

当业务系l面临大数据量的问题?需要采用应用相关的解决Ҏ(gu)(数据分区,存储q程{等)解决.问题推l应用服务器固然方便,但是却会(x)带来pȝ的性能和可扩展性的问题.q程调用的代h来就很大,不必要让ORB再承担session数据的重担了.与之相反,无状态的q程调用在可扩展性和负蝲均衡斚w的实现要单得?也没有sessionq移的问?


SERVICE的粒度问?/h2> SERVICEq程调用的粒度需要粗一?在保证SERVICE可重用的前提?应该量减少SERVICE的调用次? 因ؓ(f)SERVICE的调用开销非常?一般的q程调用都是以毫U记,而普通方法的执行旉是以微秒或纳Uؓ(f)单位?.
有状态SERVICE的一个副作用是Ҏ(gu)出现q细_度的设?同时׃Stub/Skeleton的生成很方便,q种设计更加容易出C),D交互ơ数q多,?x)严重降低业务系l的性能.

q方面一个鲜明的Ҏ(gu)是大型机的智能终端和telnet协议.l端只有{到用户填充完一个表单ƈ认发送后,才会(x)请求数据发送到L,q且自行解释和显CZ回的数据(非常像Broswer/HTTP), 而telnet协议则将每个按键事g发送到L,L处理保存有所有的session数据. L可以毫不费劲的处理N万个q发的客L(fng),而UNIXL在连接了几千个telnet客户端后,自n的正常运行都?x)出问题?

Z说一? cM? 从个人项目经历来? ׃ Hibernate 隐藏JDBC调用很成?查询或更新数据库非常方便, E序员就很容易滥? 有可能导致程序从逻辑上来看毫无问? 但是q行h却出现性能低下, q且q种性能问题q很难改?性能低下是由于数据库查询q多引v?要调整的代码遍布整个目).


其它

  1. 本文的一些思想来源于MidWay(midway.sourceforge.net)和个人的目l验,仅ؓ(f)一家之a.
  2. 大型目(企业U?和小目(部门U?的区别主要就在于,大项目在各个阶段都要非功能性的要求(性能,定w,恢复,分布?响应旉,事务{等)攑֜设计/实现/试首要考虑的位|?而小目则几乎无需考虑q样的问?
  3. 本文和JSRB主要集中在真正的中间? Service/Object Request Broker/EJB Container).




W笨 2007-12-20 14:23 发表评论
]]>
Java Service Request Broker?/title><link>http://m.tkk7.com/zhugf000/archive/2007/12/12/167098.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Tue, 11 Dec 2007 16:15:00 GMT</pubDate><guid>http://m.tkk7.com/zhugf000/archive/2007/12/12/167098.html</guid><wfw:comment>http://m.tkk7.com/zhugf000/comments/167098.html</wfw:comment><comments>http://m.tkk7.com/zhugf000/archive/2007/12/12/167098.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.tkk7.com/zhugf000/comments/commentRss/167098.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhugf000/services/trackbacks/167098.html</trackback:ping><description><![CDATA[<h1>Java Service Request Broker ?/h1> Java Service Request Broker(JSRB)是一?Java/C/C++ 的开源项?br /> Project URL http://jsrb.sourceforge.net<br /> <br /> 目目标按照优先序依次?<br /> 1 高效,透明的通讯框架,屏蔽本地/q程|络架构的复杂?高效来源于基于poll/epoll的NIO通讯框架,透明来源于多个JSRB Server之间的动态联机?.<br /> 2 高效?E_的服务请求处理机?高效来源于服务端为C语言实现,E_来源于对服务q程的不间断监控和自动重启动机制)<br /> 3 分布式事务处理能?JSRB 作ؓ(f)分布式事务管理器,初步实现了DTP XA协议,q在开发过E中).<br /> 4 客户端语a中立(语言无关通讯协议,客户端提供Java或C API?.<br /> <br /> JSRB 大致架构如下:<br /> <img alt="" src="http://m.tkk7.com/images/blogjava_net/zhugf000/jsrb/jsrb_overview.gif" width="796" height="543" /><br /> <br /> <br /> <h2>JSRB SERVICE Ҏ(gu)?讉K方式</h2> 1 SERVICE 无状?通过二进制数据传递输入输出数?br /> 2 q行?可以有多个SERVICE实现q程, JSRB?x)^衡调度这些进E?<br /> <br /> SERVICE支持同步/异步两种讉K方式:<br /> SERVICE之间也支持forward和嵌套调用两U方?br /> <br /> 同步讉KSERVICE: <br /> <em><span style="font-family: Courier;">Response Data = JsrbConection.syncCall("SERVICE NAME",Request Data);</span></em><br /> 当客L(fng)从syncCall中返回时,它已l获得SERVICE的返回数?br /> <img alt="" src="http://m.tkk7.com/images/blogjava_net/zhugf000/jsrb/jsrb_call_svc.gif" width="412" height="310" /><br /> <br /> <br /> 异步讉KSERVICE<br /> <em><span style="font-family: Courier;">long key = JsrbConnection.asyncCall("SERVICE",Request Data);<br /> ...<br /> Response Data = JsrbConnection.fetchReply(key);<br /> </span></em>客户端可以提交服务请求后,q一D|间再d试获取数? 便衣客户端同时提交多个服务请?增加q发?<br /> <img alt="" src="http://m.tkk7.com/images/blogjava_net/zhugf000/jsrb/jsrb_acall_svc.gif" width="412" height="310" /><br /> <br /> <br /> <br /> SERVICE FORWARD<br /> 客户端访问SVC1, SVC1完成后将该请求forward到SVC2, SVC2完成后直接返回客L(fng)数据.<br /> <img alt="" src="http://m.tkk7.com/images/blogjava_net/zhugf000/jsrb/jsrb_forward_svc.gif" width="412" height="310" /><br /> <br /> <br /> SERVICE的嵌套调?br /> SVC1 调用SVC2 q获得SVC2的返回数?<br /> <img alt="" src="http://m.tkk7.com/images/blogjava_net/zhugf000/jsrb/jsrb_nest_svc.gif" width="668" height="310" /><br /> <br /> <br /> <br /> <br /> <br /> <br /> 一般问?<br /> 1 Z么会(x)选择用Java 实现Service Request Broker<br /> {? Java跟C语言相比, 代码执行速度其实q不? 我们一般感觉J2EE 应用?主要是由于IO(特别是socket和JDBC)慢造成?<br /> Java 在多U程~程, 开发的方便性方面比C/C++?<br /> JSRB在实现过E中,自行定义和实C一套NIO框架, 增加了对于Linux epoll(Edge Triggered Mode)的支? 同时Z实现与Cq程的高效通讯,自行实现了Sysv IPC和创建子q程斚w的Native代码.<br /> <br /> <br /> 2 Z么要用C实现业务代码,作ؓ(f)Service的实现语a.<br /> 从企业端的应用来? 企业应用必定要跟数据库打交道, 实际上C语言讉K数据库要比Java讉K数据库快1C个数量. 甚至可以? J2EE应用响应的大部分的gq时间都耗费在JDBC? <br /> 从大型项目的实施l验来看, 这部分代码攑֜Cq程? 管要多付出通讯斚w的代?Mq是要比UJava的方案快得多.<br /> <br /> <br /> 3 Z么分布式事务的优先最?br /> 从大型项目的实施l验来看, 分布式事务由于运行代仯? 业务pȝ中用到的概率很小(基本上直接用数据库的事务). 对于CICS/TUXEDO应用而言,首先q是CICS/TUXEDO 作ؓ(f)一个高?E_的通讯和服务请求处理排队框架来?<br /> 如果真要有分布式的交易的需?一般采用流水对?冲正处理方式解决.<br /> <br /> <br /> 4 Z么选择无状态方式实现SERVICE<br /> 无状态是提高q发效率, 实现透明故障q移的最x? Server端资源有?为ƈ发的成千上万个用户同时维护状态是非常困难?q样也会(x)造成集群实现的困?<br /> ׃Client端是有状态的,所以这在实C其实问题不大.<br /> <br /> <br /> <br /> 今后得空q会(x)慢慢写更多文档介lJSRB的一些组件的实现方式和特?<br /> <br /> <br /> <img src ="http://m.tkk7.com/zhugf000/aggbug/167098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhugf000/" target="_blank">W笨</a> 2007-12-12 00:15 <a href="http://m.tkk7.com/zhugf000/archive/2007/12/12/167098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DTP/XA 规范?qing)XA API调用研究http://m.tkk7.com/zhugf000/archive/2007/12/06/165645.htmlW笨W笨Thu, 06 Dec 2007 06:07:00 GMThttp://m.tkk7.com/zhugf000/archive/2007/12/06/165645.htmlhttp://m.tkk7.com/zhugf000/comments/165645.htmlhttp://m.tkk7.com/zhugf000/archive/2007/12/06/165645.html#Feedback3http://m.tkk7.com/zhugf000/comments/commentRss/165645.htmlhttp://m.tkk7.com/zhugf000/services/trackbacks/165645.html
分布式事?Distributed Transaction Processing/XA)规范是一个业界标准规范,它定义了分布式事务中各方角色和标准两阶段提交的协议规?XA Protocol)Q该规范为广Z界所支持(CICS/TUXEDO/EnicaQ后来的OTS/JTS规范以及(qing)微Y的MTS的莫不源于此?br />
XA规范中关键角色简q如?br /> AP: 客户应用E序Q负责连接TM,RMQ用RM的提供的API讉K和更Ҏ(gu)据,声明分布式事务的开始和l束阶段?Transaction Demarcation)?br /> TM: 事务理器,负责理、协调、准备和提交分布式事务,对AP的接口标准ؓ(f)TX接口, q所有的 TM 实现都遵循这个标? 但是都会(x)提供cM的接口函?
RM: 资源理器,在AP讉K数据Ӟ兌事务相关的数据修改,q根据TM的命令提交或回滚数据修改Q通常为数据库, IBM MQSeries实现了RM接口?br /> RM分ؓ(f)静态和动态两U?静态RM需要TM明确调用xa_start/xa_end兌事务与RM的联p? 动态RM在数据发生更Ҏ(gu),?x)自动回调TM提供的ax_reg/ax_unreg函数,动态关联到当前zd的分布式事务?



XA API中定义的xa_****和ax_****函数?br /> ax_reg      向事务管理器注册资源理器?br /> ax_unreg     向事务管理器取消注册资源理器?br /> xa_close     l止应用E序对资源管理器的用?br /> xa_commit     通知资源理器提交事务分支?br /> xa_complete     试异步 xa 操作是否完成?br /> xa_end     取消U程与事务分支的兌?br /> xa_forget     允许资源理器丢弃启发完成的事务分支的信息?br /> xa_open     初始化资源管理器Q供应用E序使用?br /> xa_prepare     h资源理器准备提交事务分支?br /> xa_recover     获取资源理器已准备或启发完成的事务标识W?(XID) 列表?br /> xa_rollback     通知资源理器回滚事务分支?br /> xa_start     启动或恢复事务分支;?XID 与资源管理器hU程的未来工作关联?br />
ax_ 例程可让资源理器调用事务管理器Q所有事务管理器必须提供q些例程。在 DTP 环境中操作时Qxa_ 例程p源管理器提供Qƈ׃务管理器调用。当应用E序调用事务理器以启动全局事务Ӟ事务理器可以?xa_ 接口通知事务分支的资源管理器?br />
分布式事务各个阶D늛关API调用如下Q?br /> 1 AP 通知TM打开RMq接Q?AP-->TM tx_open()
TM ?x)在该函C调用RM提供的xa_open函数Q打开到RM的连接?br /> 在TUXEDO SERVICE中,需要在tpsvrinit()函数中调用tpopen()函数完成q项工作?br />
2 AP 声明事务开?AP-->TM tx_begin()
在声明后Q该U程后箋对RM的所有访问和更新均属于该事务?br /> 对于static RM, TM 需要调用xa_start() 明确兌事务和RM?br />
在TUXEDO SERVICE/CLIENT中,tpbegin()函数完成cM工作.
当TUXEDO SERVICE被调用时, 如果已经处于事务? TUXEDO ?x)自动调用与SERVICE兌的RM的xa_start()函数(只对?static RM).

3 AP讉KRMQ用RM规定的API讉KQXA规范未作定义?br /> 对于dynamic RM, 如果讉K时发生了数据更改,例如提交一个UPDATE SQL 语句,  RM?x)自动回调TM的ax_reg函数兌到当前事?

4 AP声明事务分支l束
在TUXEDO SERVICE调用完成? 自动调用 RM 的xa_end()函数(对于static RM和未调用ax_unreg的dynamic RM)?br />
说明: Ҏ(gu)业务需?上述2-4步骤?x)在不同的进E?TUXEDO SERVICE)中重复出? 只要事务ID( Global XID )相同,q多个事务分?Branch) 均被认ؓ(f)属于同一个事?

5 AP 要求提交或回滚事?TM tx_commit/tx_rollback )
AP要求提交事务? TM 需要检查事务状? 定事务q未标记为MARKED_ROLLBACK(只能回滚),否则?x)回滚ƈ报告错?

TUXEDO CLIENT/SERVICE 调用 tpcommit/tpabort 提交或回滚事?
在TUXEDO?׃实现的原?所有xa_prepare/xa_commit/xa_rollback都是由单独的TMSq程发v调用? TUXEDO SERVICE q程不会(x)发v相关调用.
TUXEDO配置文g?每个TUXEDO SERVICE GROUP可以兌一个RM和多个TMS,每个GROUP内的SERVICE q程和TMSq程启动旉?x)用相同?XA OpenInfo String打开到RM的连?


标准两阶D事务提交过E?
1 (准备)更改事务状态ؓ(f)PREPARING, 依次调用事务兌RM的xa_prepare(), LRMq回错误则进入回滚过E? RM都PREPARE完成事务状态改变ؓ(f)PREPARED.
2 (提交)更改事务状态ؓ(f)COMMITTING, 记录事务日志到硬盘中, 依次调用RM的xa_commitҎ(gu),再更C务日? 更改事务状态ؓ(f)COMMITTED.事务提交完成.
3 (回滚)更改事务状态ؓ(f)ROLLING_BACK, 依次调用事务兌RM的的xa_rollback,更改事务状态ؓ(f)ROLLED_BACK

化一阶段事务提交q程:
1 (提交)更改事务状态ؓ(f)COMMITTING, 记录事务日志到硬盘中, 调用RM的xa_commit(TMONEPHASE)Ҏ(gu),再更C务日? 更改事务状态ؓ(f)COMMITTED.事务提交完成.

启发式事务提交和回滚:
部分RM支持启发式提交或回滚, xa_commit/xa_rollback q回?可能?x)返回XA_HEUR***的? 表明RM执行了启发式优化.
此时TM需要后l调用RM的xa_forget(), 让RMd释放该事务相关的资源.


目前JSRB(Java Service Request Broker)已经部分实现上述TM的功? 目l箋q展?..: http://jsrb.sourceforge.net

参考资料:(x)
Distributed Transaction Processing_ The XA Specification

IBM WebSphere 开发者技术期? 在中间g环境中配|和使用 XA
http://www.ibm.com/developerworks/cn/websphere/techjournal/0704_sood/0704_sood.html

XA接口的一阶段提交与两阶段提交有何区别Q?
http://www-1.ibm.com/support/docview.wss?uid=csc148256d65004dc82448256d65004276f0



W笨 2007-12-06 14:07 发表评论
]]>
中文全文(g)索的实现以及(qing)一些经?Java)http://m.tkk7.com/zhugf000/archive/2007/07/30/133397.htmlW笨W笨Mon, 30 Jul 2007 09:55:00 GMThttp://m.tkk7.com/zhugf000/archive/2007/07/30/133397.htmlhttp://m.tkk7.com/zhugf000/comments/133397.htmlhttp://m.tkk7.com/zhugf000/archive/2007/07/30/133397.html#Feedback10http://m.tkk7.com/zhugf000/comments/commentRss/133397.htmlhttp://m.tkk7.com/zhugf000/services/trackbacks/133397.html中文全文(g)索的实现以及(qing)一些经?Java)

最q在目中面临中文全文检索的需求,关键需求如下:(x)

1 支持中文、英文字词的全文(g)索,待检索文本是古文a文?br>2 全文(g)索表辑ּ支持Q?AND,OR,NOT,NEAR,BEFORE q算W,支持()?br>3 速度要求Q?00M文本Q要求在2-5U内能够(g)索完毕?br>


试Lucene以及(qing)攑ּ原因Q?/h3> 在尝试Lucene和不同的中文Analyzer后,l告攑ּ?br>原因如下Q?br>׃待检索文本是古文Q中文分词技术无法派上用场。在分隔存储每个汉字后Q发CLucene中检索到的文本远q少于关键字实际匚w的文本,q一问题对于较长的检索关键字其明显?br>因ؓ(f)对于(g)索准程度要求很高,故此攑ּQ但是Lucene出的q个问题的原因尚不清楚,希望能够有h提出解答?br>


自行实现中文全文(g)索原理以?qing)方法?x)

1 构徏q程Q忽略标点符P自行计算每个汉字在每个文本文件中的偏U量Qƈ保存?br>2 (g)索过E,定位每个汉字的偏U量Q如果检索表辑ּ中每个汉字的预期偏移量与实际偏移量吻合,则匹配成功?br>3 采用 MappedByteBuffer 加快(g)索速度Q采用二分查扑֊快偏U量匚w速度Q?个左右的关键字复合检索能够在1U内完成匚wQ要求操作系l有_大的~存Q?br>

目前实现的一些局限和优势Q?/h3> 0 中文(g)索速度_Q准度比Lucene高(如果有高手能够解册个问题,我会(x)很高兴的废弃掉这些类的)(j)
1 合适于中文Q不适用英文文本
2 全文(g)索烦(ch)引文件与原始文本文g的大大Uؓ(f)2:3-3:4之间Q?00M大小Q比Lucene大约?0M?br>3 索引文g的构建时间长Q?00M大约需?时Q同时由于如果Q何文本文件更斎ͼ都需要重新构建烦(ch)引文Ӟ
因此不合适要l常变化的文本烦(ch)引?br>



全文(g)索代码示?TestFullTextQuery.java)Q?br>File storeDir = new File("C:\\temp\\fulltext\\index");
StoreSearcher searcher = new StoreSearcher(storeDir);
String str = "??& 阉K"; //同时出现 "?? ?"阉K"Q??代表L字符
searcher.queryBegin(str, true);
while(true){
    StoreSearcherResult ssr = searcher.getNextQueryResult();
    if ( ssr == null ){
        break;
    }
    System.out.println("ID "+ssr.docId+":"+ssr.matchedCount);
}
searcher.queryEnd();
searcher.close();

q行l果
ID T01n0001.TXT:320
ID T01n0002.TXT:3
ID T01n0004.TXT:2
ID T01n0005.TXT:202
ID T01n0006.TXT:131
....



附:(x)全文(g)索表辑ּ举例

关键字中间可以出?Q表明匹配Q意字W?br>
q算W名Uͼ(x)q算W字W?br>AND:&
OR:,
BEFORE:*
NEAR:+
NOT:-

表达式D例:(x)
(KEY1 <AND|OR|BEFORE|NEAR> KEY2) & (NOT KEY3)
KEY1 KEY2 (关键字之间无q算W假设ؓ(f)AND)



附:(x)全文(g)索文件格式信?br>
DocInfoStore(文档信息)
--HEAD--
DocCount:Integer                    文档数目
--DOC HEAD(PER DOC)--
DocSeq:    Integer                        文档序P内部使用
DocId:     Char[128]                    文档唯一IDQ字W串格式
DocSepOfs: Integer                文档分隔W数l的Ofs
--DOC SEP OFS(PER DOC)--
DocOfs:    ArrayOfInteger        文档分隔数组


WordInfoStore(每个汉字信息)
--HEAD--
WordCount:Integer                    汉字?br>--WORD IDX(Per Word)--
WordChar:Integer                    汉字的Unicode?br>WordInfoOfs:Integer                汉字信息在文件中的偏U量
WordInfoSize:Integer            汉字信息大小
--WORD INFO(Per Word)--
DocCount:                                    汉字出现的文档数
DocSeq(Per Doc):                  每个文档的顺序号
WordInDocs:ArrayOfInteger 每个文档中出现的汉字的偏ULl,从小到大排列


源文件及(qing)CLASS下蝲地址Q?br>http://m.tkk7.com/Files/zhugf000/foreader2_ftsearch.zip


W笨 2007-07-30 17:55 发表评论
]]>在龙芯盒子上~译 Eclipse-3.2.2http://m.tkk7.com/zhugf000/archive/2007/03/15/104003.htmlW笨W笨Thu, 15 Mar 2007 06:06:00 GMThttp://m.tkk7.com/zhugf000/archive/2007/03/15/104003.htmlhttp://m.tkk7.com/zhugf000/comments/104003.htmlhttp://m.tkk7.com/zhugf000/archive/2007/03/15/104003.html#Feedback6http://m.tkk7.com/zhugf000/comments/commentRss/104003.htmlhttp://m.tkk7.com/zhugf000/services/trackbacks/104003.html在龙芯盒子上~译 Eclipse-3.2.2
 
by zhugf 2007/03/15
 
软g准备Q?br />安装 GNOME 开发包 apt-get install libgnome*
安装 X11 开发报 apt-get install libxtst*
安装 ant 下蝲 apache-ant-1.7.0
准备特别版本 jdk
1 ?/usr/lib/jvm/sun-java 复制到本地目录,改名 jdk_1.5.0_142
2 ?jdk1.4.2/jre/lib/rt.jar 中找?java/io/Writer.class ?java/io/PrintWriter.classQ?
  替换?jdk_1.5.0_142/jre/lib/rt.jar 中对应文?/div>
 
 
 
讄环境变量Q?br />ANT_HOME=apache-ant-1.7.0
export ANT_HOME
JAVA_HOME=jdk_1.5.0_142
export JAVA_HOME
PATH=$ANT_HOME/bin:$JAVA_HOME/bin:$PATH
export PATH
 
 
 
 
释放文gQ?/div>
下蝲eclipse-sourceBuild-srcIncluded-3.2.2.zip q解开到某个目?eclipse-3.2.2
?eclipse-src-3.2.2目录下的文g覆盖掉解开的目录下同名的文?/div>
 
 

~译Q?/div>
 
1 手工~译 Eclipse native ?/div>
 
cd eclipse-3.2.2/plugins/org.eclipse.core.filesystem/natives/unix/linux
make
mkdir ../../../../org.eclipse.core.filesystem.linux.mips32/os/
mkdir ../../../../org.eclipse.core.filesystem.linux.mips32/os/linux/
mkdir ../../../../org.eclipse.core.filesystem.linux.mips32/os/linux/mips32
cp lib*.so ../../../../org.eclipse.core.filesystem.linux.mips32/os/linux/mips32/
 
 
cd eclipse-3.2.2/plugins/org.eclipse.update.core.linux/src
ant
 
 
2 ~译 Eclipse
cd eclipse-3.2.2
./build -os linux -ws gtk -arch mips32 -java5home /usr/lib/jvm/sun-java -compilelibs
 
整个~译q程需要半个小时或更长Q编译后目录在:(x) eclipse-3.2.2/eclipse
~译时如果出现某个Java文g~译错误Q而错误原因是 Eclipse JDT Compiler 内部错误Q可以将此文件的头部License注释删除Q再重新~译?/div>
 
3 复制 Eclipse 启动文g
cd eclipse-3.2.2
cp launchertmp/eclipse eclipse
 
 
替换 jar 包:(x)
~译好后?eclipse ׃部分文g修改错误Q会(x)D启动p|的问题,q时需要用 eclipse-3.2.2-linux-x86.tgz 文g中的原始文g来替换?/div>
替换如下文gQ?/div>
org.eclipse.osgi_3.2.2.R32x_v20070118.jar
org.eclipse.sdk_3.2.2.r322_v20070212
org.eclipse.ui.cheatsheets_3.2.1.R321_v20060720.jar
org.eclipse.jdt_3.2.1.r321_v20060823.jar
org.eclipse.osgi.services_3.1.100.v20060601.jar
org.eclipse.osgi.util_3.1.100.v20060601.jar
org.eclipse.pde.ui_3.2.1.v20060816-0800.jar
org.eclipse.ui.console_3.1.100.v20060605.jar
 
 
 
文档l束

eclipse_ls2.jpg

W笨 2007-03-15 14:06 发表评论
]]>ASP E序的国际化/本地?/title><link>http://m.tkk7.com/zhugf000/archive/2006/03/20/36357.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Mon, 20 Mar 2006 08:11:00 GMT</pubDate><guid>http://m.tkk7.com/zhugf000/archive/2006/03/20/36357.html</guid><wfw:comment>http://m.tkk7.com/zhugf000/comments/36357.html</wfw:comment><comments>http://m.tkk7.com/zhugf000/archive/2006/03/20/36357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zhugf000/comments/commentRss/36357.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhugf000/services/trackbacks/36357.html</trackback:ping><description><![CDATA[ <p>前段旉在写一个小E序。用的是 ASP+MSSQL/MYSQL。要求能够同时出/J中文版本?br />qC一些ASP的国际化、本地化的问题,其中的一些处理技巧,与大家共享?/p> <p>1 HTML面、Web应用、ASP E序源文件全部采?UTF-8 ~码?br />在文件头部加入行<%@ LANGUAGE=JScript CODEPAGE=65001%></p> <p>2 SQL Server 2000 数据库:(x)<br />    1 数据库字W串字段采用 NVARCHAR/NTEXT/NCHAR Unicode 字符cd?br />    2 数据库操作SQL 中,字符串全部加 N 前缀Q?SELECT * FROM TABLE WHERE FIELD LIKE N'中文%' </p> <p>3 ASP E序如果要访问文Ӟ需要用如下代码打开 UTF-16 格式文gQ?br />FileSystemObject.OpenTextFile(file,1,false,-1);<br />保证在不同^CQ相同文仉能够正确d?/p> <p>4 ASP 源文件中Q不包含M语言相关字符Ԍ如标题、错误消息。这些消息统一保存到某个文件inc_l10n.asp中。另外,提供一?inc_strutil.asp E序Q辅助格式化字符丌Ӏ?br />q样Q要更换语言版本Q只要更新的 inc_l10n.asp 卛_?/p> <p> <font face="Courier New">inc_l10n.asp<br /><%<br />var l10n_title = "ASP Application Title";<br />var l10n_about= "About ASP Application";<br />var l10n_dict_homename = "HOME NAME";<br />%></font> </p> <p> <font face="Courier New">inc_strutil.asp:<br /><%<br />//Replace a substring in a String<br />//<br />function replaceAll(data, from, to) {<br />    var buf = "";<br />    var pos = -1;<br />    var i = 0;<br />    while ((pos = data.indexOf(from, i)) != -1) {<br />        buf = buf + (data.substring(i, pos))+ to;<br />        i = pos + from.length;<br />    }<br />    buf = buf + data.substring(i);<br />    return buf;<br />}</font> </p> <p> <font face="Courier New">//return the substitution result from Resource String<br />//Invoke examples: getString("Substitution Example: $1 $2","111","222")<br />//Invoke Result: "Substitution Example: 111 222"<br />function getString()<br />{<br />    if ( arguments.length == 0 )<br />        return "";<br />    if ( arguments.length == 1 )<br />        return ""+arguments[0];<br />    var rawStr = arguments[0];<br />    var i = 0;<br />    for(i=1;i<arguments.length;i++){<br />        rawStr = replaceAll(rawStr,"$"+i,arguments[i]);    <br />    }<br />    return rawStr;<br />}<br />%><br /></font> </p> <img src ="http://m.tkk7.com/zhugf000/aggbug/36357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhugf000/" target="_blank">W笨</a> 2006-03-20 16:11 <a href="http://m.tkk7.com/zhugf000/archive/2006/03/20/36357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JVM 内存l构的一张小?/title><link>http://m.tkk7.com/zhugf000/archive/2006/02/06/29695.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Mon, 06 Feb 2006 06:21:00 GMT</pubDate><guid>http://m.tkk7.com/zhugf000/archive/2006/02/06/29695.html</guid><wfw:comment>http://m.tkk7.com/zhugf000/comments/29695.html</wfw:comment><comments>http://m.tkk7.com/zhugf000/archive/2006/02/06/29695.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://m.tkk7.com/zhugf000/comments/commentRss/29695.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhugf000/services/trackbacks/29695.html</trackback:ping><description><![CDATA[<P><A HREF="/images/blogjava_net/zhugf000/jvm_mem.gif"><IMG height=457 alt=jvm_mem.gif src="http://m.tkk7.com/images/blogjava_net/zhugf000/jvm_mem.gif" width=391 border=0></A></P><img src ="http://m.tkk7.com/zhugf000/aggbug/29695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhugf000/" target="_blank">W笨</a> 2006-02-06 14:21 <a href="http://m.tkk7.com/zhugf000/archive/2006/02/06/29695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>架构师的工作http://m.tkk7.com/zhugf000/archive/2005/12/17/24403.htmlW笨W笨Sat, 17 Dec 2005 12:13:00 GMThttp://m.tkk7.com/zhugf000/archive/2005/12/17/24403.htmlhttp://m.tkk7.com/zhugf000/comments/24403.htmlhttp://m.tkk7.com/zhugf000/archive/2005/12/17/24403.html#Feedback13http://m.tkk7.com/zhugf000/comments/commentRss/24403.htmlhttp://m.tkk7.com/zhugf000/services/trackbacks/24403.html架构师的工作

qW所理解Q其实很单:(x)
1 把意图表辑և来,主要做法是画图?BR>2 把意图诏M去,主要做法是喷Q对象是目l、客戗公叔R对{?BR>
arch_fig1.gif


业务架构的目?/B>

按照优先U排?BR>1 固化开发和试模式Q减开发h员的自由发挥余地Q从而做刎ͼ(x)
    1 业务代码实现简单化和固定化Q降低对开发h员的技术要求(如要求了解J2EE框架或HTTP交互q程{)(j)
    2 复用开发h员的l验Q在下个使用业务架构的项目中Q不需要再行学?BR>
2 减少目的基?STRONG>技术代?/STRONG>开发工作和步骤Q这里的技术代码,指与业务无关的部分,如配|、日志、文件上传、ORM {等。这个目标需要在l织U维护跨目?STRONG>技术框?/STRONG>Q单靠个人是无法做到的?BR>
3 实现寚w目的业务代码的重用。这个目标几乎不可能实现Q业务代码重用的前提是它l过业务专家的提点{业务过E完整、可完全配置。假如这个目标能够实玎ͼ那么开发h员的角色cM?SAP 实施人员Q主要工作是配置Q而不是写代码?BR>



国内公司的业务架构实现的困境

对于国内公司来说Q由于中长期利益与短期利益的冲突Q架构一般很隑֝持下厅R?BR>国内公司限于成本压力Q经怼(x)要求架构师在目中实C务框Ӟ但是q个目标与项目的直接目标是有冲突的?BR>
业务框架Z辑ֈ可重用的目标Q是需要比目完成要多做好多工作的Q如框架文档、辅助工L(fng){,q需要大量的开发工作量Q会(x)与项目的直接目标发生冲突Q而冲H出现时Q公司和目l理一般都?x)选择牺牲重用的业务框架这个目标,保证目的完成?在项目完成后Q公怹很少单独l织人力寚w目成果进行评估和重构Q结果最l还是得不到一个重用的业务框架?BR>


W笨 2005-12-17 20:13 发表评论
]]>
ZJ2EE的业务?框架(PPT)http://m.tkk7.com/zhugf000/archive/2005/12/15/24007.htmlW笨W笨Thu, 15 Dec 2005 04:49:00 GMThttp://m.tkk7.com/zhugf000/archive/2005/12/15/24007.htmlhttp://m.tkk7.com/zhugf000/comments/24007.htmlhttp://m.tkk7.com/zhugf000/archive/2005/12/15/24007.html#Feedback3http://m.tkk7.com/zhugf000/comments/commentRss/24007.htmlhttp://m.tkk7.com/zhugf000/services/trackbacks/24007.html点击q里下蝲?br>

提纲
?/span>
技术品与业务产品的差别比?br>j2ee_frame_fig1.gif
业务产品的结构层ơ与实现重点
j2ee_frame_fig2.gif


应用业务框架
  • 业务框架发展{略
  • 业务框架支持代码复用
  • 业务框架支持CMM实施



感谢 好刚?同志对这文E的意见Q感?ji_cao 同志的从博弈度看待Y件开发的思\?/font>


W笨 2005-12-15 12:49 发表评论
]]>
变,q是不变Q?/title><link>http://m.tkk7.com/zhugf000/archive/2005/12/13/23594.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Tue, 13 Dec 2005 02:05:00 GMT</pubDate><guid>http://m.tkk7.com/zhugf000/archive/2005/12/13/23594.html</guid><wfw:comment>http://m.tkk7.com/zhugf000/comments/23594.html</wfw:comment><comments>http://m.tkk7.com/zhugf000/archive/2005/12/13/23594.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/zhugf000/comments/commentRss/23594.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhugf000/services/trackbacks/23594.html</trackback:ping><description><![CDATA[<P><STRONG>变,q是不变Q?/STRONG></P> <P><STRONG>变的是概念,不变的是产品<BR></STRONG>IBM ?MQ Series 的定位从老早?Link/Queue Q变?MOM Q再变ؓ(f) EAI Q再变ؓ(f) SOA 的基架构。MQ Series 产品的结构始l不变,?IBM 它用不同的概念包装hQ推向市(jng)场;客户为概念付费,?IBM 在收L(fng)金白银?/P> <P><STRONG>变的是皮毛,不变的是基础<BR>变的是排列组合,不变的是基本原理</STRONG><BR>仔细考究q些概念Q就?x)发玎ͼ概念其实只不q是对角艌Ӏ数据、处理和它们之间的相互关p,其固定化和明确化,再v个新名词。很多现在热炒的新概念,?0q代的主Z可以扑ֈ原型Q代码不是OOP q是 AOP Q最l还是要译成机器码Q由CPU 执行的?BR>别被新概늻骗了Q我们现在用的计机的结构,?950's Z曼提出开始,没有什么新变化。在可预见的来Q除非h工智能或量子计算机有什么新H破Q我们还是要l箋跟诺伊曼体系打交道?/P> <P><BR><STRONG>变的是银弹,不变的是失望(?)<BR></STRONG>巨型厂商所推的概念Q更多程度上是ؓ(f)了营销所作的吹嘘。从用户角度来看Q只要开发速度_快,q行E_Q后l支持维护升U能够跟上;到底采用什么技术,是无所谓的事情。而技术或框架之间的差别,其实也没有它们的UC间的差别那么大?BR></P><img src ="http://m.tkk7.com/zhugf000/aggbug/23594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhugf000/" target="_blank">W笨</a> 2005-12-13 10:05 <a href="http://m.tkk7.com/zhugf000/archive/2005/12/13/23594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式说?/title><link>http://m.tkk7.com/zhugf000/archive/2005/12/12/23414.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Mon, 12 Dec 2005 01:16:00 GMT</pubDate><guid>http://m.tkk7.com/zhugf000/archive/2005/12/12/23414.html</guid><wfw:comment>http://m.tkk7.com/zhugf000/comments/23414.html</wfw:comment><comments>http://m.tkk7.com/zhugf000/archive/2005/12/12/23414.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://m.tkk7.com/zhugf000/comments/commentRss/23414.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhugf000/services/trackbacks/23414.html</trackback:ping><description><![CDATA[ <p align="center"> <font color="#ff0000" size="1">Java 正则表达式的译文档Q附带有中文部分扩展说明Q源代码?a href="/Files/zhugf000/fodian_common.rar">q里</a><br /></font> </p> <h1 align="center">正则表达式说? <hr width="100%" size="2" /></h1> <h3>目录</h3>正则表达式介l?a href="#man_match_mode"><br />匚w模式</a><br /><a href="#man_char_class">字符子集</a><br /><a href="#man_line_terminator">行结束符</a><br /><a href="#man_group">分组和引?/a><br /><a href="#man_unicode">Unicode支持</a><br /><br /><br /><a href="#reference">正则表达式语法参?/a><br /><ol><li><a href="#ref_chars">字符</a></li><li><a href="#ref_logicopr">逻辑操作W?/a></li><li><a href="#ref_backref">向后引用</a></li><li><a href="#ref_boundmeta">边界元字W?/a></li><li><a href="#ref_repeatindicator">重复指示W?/a></li><li><a href="#ref_char_class">字符子集</a></li><li><a href="#ref_predef_meta">预定义子集(元字W)(j)</a></li><li>扩展子集Q元字符Q? </li><li><a href="#ref_chinese_meta">扩展中文子集Q元字符Q?/a></li><li><a href="#ref_posix_subset">POSIX字符子集Q只适用于ASCIIQ?/a></li><li><a href="#ref_unicode_category">Unicode块和分类</a><br /></li></ol><br />替换表达?br /><a href="#man_subexp">替换表达?br /></a><ol><li><a href="#subexp_chars">Ҏ(gu)字符</a></li><li><a href="#subexp_custtbl">自定义替换表</a><br /></li></ol><hr width="100%" size="2" /><h3><a name="man_match_mode"></a>匚w模式</h3>匚w模式指得是正则表辑ּ引擎以何种模式匚w字符丌Ӏ?br /><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top">模式名称<br /></td><td valign="top">启用Q禁?br /></td><td valign="top">~省启用<br /></td><td valign="top">说明<br /></td></tr><tr><td valign="top">UNIX_LINES<br /></td><td valign="top">(?d)启用Q??-d)用<br /></td><td valign="top">?br /></td><td valign="top">启用Unix行模式?br />在此模式下,只有 <tt>'\n'</tt>被认为是行结束符。它?x)?jing)?tt>.</tt>, <tt>^</tt>, ?<tt>$</tt> 的行为?br /><br /></td></tr><tr><td valign="top">CASE_INSENSITIVE<br /></td><td valign="top">(?i)启用Q??-i)用<br /></td><td valign="top">?br /></td><td valign="top">启用忽略大小写模式?br />~省Ӟ忽略大小写模式只?x)?jing)?ASCII字符的匹配?而Unicode范围的忽略大写匚w需要通过 UNICODE_CASE 标志与本标志联合使用?br />启用此模式会(x)影响匚w性能?br /><br /></td></tr><tr><td valign="top">COMMENTS<br /></td><td valign="top">(?x)启用Q??-x)用<br /></td><td valign="top">?br /></td><td valign="top">允许I格和注释出现在正则表达式中?br />在此模式下,I格被忽略,?开始的单行注释被忽略?<br /></td></tr><tr><td valign="top">MULTILINE<br /></td><td valign="top">(?m)启用Q??-m)用<br /></td><td valign="top">?br /></td><td valign="top">启用多行模式?br />In multiline mode the expressions <tt>^</tt> and <tt>$</tt> match just after or just before, respectively, a line terminator or the end of the input sequence. By default these expressions only match at the beginning and the end of the entire input sequence. <br /><br /></td></tr><tr><td valign="top">DOTALL<br /></td><td valign="top">(?s)启用Q??-s)用<br /></td><td valign="top">?br /></td><td valign="top">?可以匚w行结束符?br />在此模式下,元字W?tt>.</tt>可以匚w行结束符。缺省不允许如此匚w?br /><br /><br /></td></tr><tr><td valign="top">UNICODE_CASE<br /></td><td valign="top">(?u)启用Q??-u)用<br /></td><td valign="top">?br /></td><td valign="top">Enables Unicode-aware case folding.<br />When this flag is specified then case-insensitive matching, when enabled by the <code>CASE_INSENSITIVE</code> flag, is done in a manner consistent with the Unicode Standard. By default, case-insensitive matching assumes that only characters in the US-ASCII charset are being matched. 启用此模式会(x)影响性能?br /><br /></td></tr><tr><td valign="top">CANON_EQ<br /></td><td valign="top">(?c)启用Q??-c)用<br /></td><td valign="top">?br /></td><td valign="top">Enables canonical equivalence.<br />When this flag is specified then two characters will be considered to match if, and only if, their full canonical decompositions match. The expression <tt>"a\u030A"</tt>, for example, will match the string <tt>"?"</tt> when this flag is specified. By default, matching does not take canonical equivalence into account. <br />启用此模式会(x)影响性能?br /><br /></td></tr></tbody></table><br /><br /><h3><a name="man_char_class"></a>字符子集</h3>字符子集可以含有别的字符子集Qƈ且可以通过联合操作W(~省Q和交集操作W(&&Q实现组合。联合操作符表示某个子集匚w它的子子集所匚w的Q意字W。交集操作符表明某个字符子集只匹配它的子子集都匹配的字符?br />字符子集所能够有的操作W的优先U如下,从高CQ?br /><ol><li>转义W\x </li><li>成组W?[...] </li><li>区间W?a-z </li><li>联合W?[a-e][i-u] </li><li>交集W?[a-z&&[aeiou]]</li></ol>注意Q在字符子集[]内部的语法根本不同于正则表达式其它部分中的语法。例如,在字W子集内部,正则表达?. 失去了它原有的含义,而是成了一个匹?的元字符?<br /><br /><h3><a name="man_line_terminator"></a>行结束符</h3>行结束符是一个或两个字符序列Q用以表明输入字W序列中一行的l束。下面的字符被认为是行结束符Q?br /><ul><li>一个换行符('\n')? </li><li>一个回车符加上一个换行符("\r\n")? </li><li>一个单独的回RW?'\r')? </li><li>代表下一行的字符('\u0085')? </li><li>行分隔符('\u2028')QUnicode中被定义? </li><li>一个分D늬('\u2029)QUnicode中被定义?/li></ul>如果 UNIX_LINES 模式被启用,则只有换行符被认为是行结束符?br />如果 MULTILINE 模式被启用,?br /><br /><h3><a name="man_group"></a>分组和引?/h3>字符分组以它们的左括L(fng)出现序来排序。例如在表达?(A)(B(C)))Q有四个分组Q?br /><ol><li>((A)(B(C))) </li><li>(A) </li><li>(B(C)) </li><li>(C)</li></ol>W?l永q表C辑ּ本n?br />分组采用q样的命名方式,是因为,在一ơ匹配过E中Q正则表辑ּ?x)被匚w多次。以前的匚w子序列有可能在将来被使用Q或者在匚wl束ӞE序有可能需要重新获得所有匹配的子字W序列?br />对于正则表达式中的某个分l而言Q永q只保留最后匹配的字符序列。如果对某个分组匚w试p|Q则?x)保留上ơ匹配成功的字符序列。例如,对于正则表达?a(b)?)+而言Q字W序?aba"Q将?x)让分?匚w的字W序列ؓ(f)"b"?br />??开始的分组Q将不会(x)计入分组数目Q也不会(x)被后l匹配所引用?br /><br /><h3><a name="man_unicode"></a>Unicode支持</h3>本正则表辑ּ匚w引擎的实现遵循了?a >Unicode技术报告:(x)Unicode正则表达式指?/a>》,实现了该指南的第二层所需的功能,但是在细微处有一些简单语法修攏V?br />Unicode?Block)和分c?Category)通过\p和\P通配苻表C。\p{<b><i>prop</i></b>}匚w含有<b><i>prop</i></b>的输入序列,而\P{<b><i>prop</i></b>}匚w不含?b><i>prop</i></b>的输入序列。Unicode块通过前缀<tt>In</tt>表示Q如\p{InMongolian}。Unicode分类通过可选的前缀Is表示Q因此\p{L}和\p{IsL}都代表Unicode分类 letters。Unicode块和分类都可以在正则表达式子集外部和内部使用?br />目前支持的Unicode块和分类是?a >Unicode标准Q第三版</a>》中所指定的块和分cR?Unicode块名U在?a >Unicode 字符数据?/a>》的W?4章被定义Q文件名U叫<a >Blocks-3.txt</a>Q但是名UC的空DL了。例?Basic Latin"成了"BasicLatin"。无论是标准化的q是非标准化的分c,都在该标准的W?8늚W?-5表中被全部定义?br /><br /><h3><a name="man_compare_perl5"></a>与Perl 5正则表达式语法对?</h3>[TBD]<br /><br /><hr width="100%" size="2" /><h2><a name="reference"></a>正则表达式参?/h2><br /><hr width="100%" size="2" /><h3><a name="ref_chars"></a>字符</h3><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top" width="30%">正则表达式字W串<br /></td><td valign="top">匚w的字W串<br /></td></tr><tr><td valign="top" width="30%">X<br /></td><td valign="top">字符XQ包?CJK ExtB 区汉?br /></td></tr><tr><td valign="top" width="30%">\\<br /></td><td valign="top">反斜杠\<br /></td></tr><tr><td valign="top" width="30%">\0<b><i>n</i></b></td><td valign="top">八进?<b><i>n</i></b>代表的字W?0<=n<=7)<br /></td></tr><tr><td valign="top" width="30%">\0<b><i>nn</i></b><br /></td><td valign="top">八进?<b><i>nn</i></b>代表的字W?0<=n<=7)<br /></td></tr><tr><td valign="top" width="30%">\0<b><i>mnn</i></b><br /></td><td valign="top">八进?<b><i>mnn</i></b>代表的字W?0<=m<=3,0<=n<=7)<br /></td></tr><tr><td valign="top" width="30%">\x<b><i>hh</i></b><br /></td><td valign="top">十六q制 0x<b><i>hh</i></b>所代表的字W?br /></td></tr><tr><td valign="top" width="30%">\u<b><i>hhhh</i></b><br /></td><td valign="top">十六q制 0x<b><i>hhhh</i></b>所代表的字W?font color="#ff0000">注意</font>Q目前尚不支持CJK ExtB区汉字?br /></td></tr><tr><td valign="top" width="30%">\t<br /></td><td valign="top">制表W?'\u0009')<br /></td></tr><tr><td valign="top">\n<br /></td><td valign="top">换行('\u000A')<br /></td></tr><tr><td valign="top">\r<br /></td><td valign="top">回R('\u000D')<br /></td></tr><tr><td valign="top">\a<br /></td><td valign="top">响铃W?'\u0007')<br /></td></tr><tr><td valign="top">\e<br /></td><td valign="top">取消WEscape('\001B')<br /></td></tr><tr><td valign="top">\c<i><b>x</b></i><br /></td><td valign="top"><i><b>x</b></i>所代表的控制字W?br /></td></tr></tbody></table><br /><h3><a name="ref_logicopr"></a>逻辑操作W?/h3><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top" width="30%">正则表达式字W串<br /></td><td valign="top">匚w的字W串<br /></td></tr><tr><td valign="top" width="30%"><i>XY</i><br /></td><td valign="top"><i>X</i>后面跟随<i>Y</i><br /></td></tr><tr><td valign="top" width="30%"><i>X</i>|<i>Y</i><br /></td><td valign="top"><i>X</i>或?i>Y</i><br /></td></tr><tr><td valign="top" width="30%">(<i>X</i>)<br /></td><td valign="top"><i>X</i>作ؓ(f)分组表达?br /></td></tr></tbody></table><br /><h3><a name="ref_backref"></a>向后引用</h3><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top" width="30%">正则表达式字W串<br /></td><td valign="top">匚w的字W串<br /></td></tr><tr><td valign="top" width="30%">\<b>n</b><br /></td><td valign="top">W?b>n</b>个匹配的分组<br /></td></tr></tbody></table><br /><h3><a name="ref_boundmeta"></a>边界元字W?/h3><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top" width="30%">边界字符<br /></td><td valign="top">匚w的字W串<br /></td></tr><tr><td valign="top" width="30%">^<br /></td><td valign="top">行首<br /></td></tr><tr><td valign="top" width="30%">$<br /></td><td valign="top">行末<br /></td></tr><tr><td valign="top" width="30%">\b </td><td valign="top">字符边界<br /></td></tr><tr><td valign="top" width="30%">\B<br /></td><td valign="top">非字W边?br /></td></tr><tr><td valign="top" width="30%">\A<br /></td><td valign="top">输入的开?br /></td></tr><tr><td valign="top" width="30%">\G<br /></td><td valign="top">上次匚w的结束处<br /></td></tr><tr><td valign="top" width="30%">\Z<br /></td><td valign="top">输入的l束Q或者是最后一个行l束W,参见<a href="file:///D:/source/jtextpro/src/dist/jtextpro/docs/regexp.html#man_line_terminator">行结束符</a>?br /></td></tr><tr><td valign="top" width="30%">\z<br /></td><td valign="top">输入的l束<br /></td></tr></tbody></table><br /><h3><a name="ref_repeatindicator"></a>重复指示W?/h3><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top" width="30%">正则表达式字W串<br /></td><td valign="top">匚w的字W串<br /></td></tr><tr><td valign="top" width="30%"><b>X</b>?<br /></td><td valign="top"><b>X</b>重复一ơ,或者不重复<br /></td></tr><tr><td valign="top" width="30%"><b>X</b>*<br /></td><td valign="top"><b>X</b>重复0ơ或多次<br /></td></tr><tr><td valign="top" width="30%"><b>X</b>+ <br /></td><td valign="top"><b>X</b>重复1ơ或多次<br /></td></tr><tr><td valign="top" width="30%"><b>X</b>{n}<br /></td><td valign="top"><b>X</b>重复nơ,不多也不?br /></td></tr><tr><td valign="top" width="30%"><b>X</b>{n,}<br /></td><td valign="top"><b>X</b>臛_重复n?br /></td></tr><tr><td valign="top" width="30%"><b>X</b>{n,m}<br /></td><td valign="top"><b>X</b>臛_重复nơ,臛_重复mơ?br /></td></tr></tbody></table>注:(x)<b>X</b>{n,m}???方式可以联合使用?br /><br /><h3><a name="ref_char_class"></a>字符子集</h3><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top" width="30%">正则表达式字W串子集<br /></td><td valign="top" width="50%">匚w的字W串<br /></td><td valign="top" align="left" width="20%">l合方式<br /></td></tr><tr><td valign="top" width="30%">[abc]<br /></td><td valign="top" width="60%">字符a,b或cQ包?CJK ExtB 区汉?br /></td><td valign="top" align="left" width="20%">单子?br /></td></tr><tr><td valign="top" width="30%">[^abc]<br /></td><td valign="top" width="60%">L非a,b或c的字W?br /></td><td valign="top" align="left" width="20%">排除<br /></td></tr><tr><td valign="top" width="30%">[a-zA-Z] </td><td valign="top" width="60%">从a到zQ或者A到ZQ包含a,z,A,Z?br /></td><td valign="top" align="left" width="20%">区间<br /></td></tr><tr><td valign="top" width="30%">[a-d[m-p]]<br /></td><td valign="top" width="60%">从a到dQ或者m到pQ等于[a-dm-p]?br /></td><td valign="top" align="left" width="20%">联合<br /></td></tr><tr><td valign="top" width="30%">[a-z&&[def]]<br /></td><td valign="top" width="60%">d,e或者f(xi)?br /></td><td valign="top" align="left" width="20%">交集<br /></td></tr><tr><td valign="top">[a-z&&[^bc]]<br /></td><td valign="top" width="60%">从a到zQ除了b和cQ等于[ad-z]<br /></td><td valign="top" align="left" width="20%">扣除<br /></td></tr><tr><td valign="top">[a-z&&[^m-p]]<br /></td><td valign="top">从a到zQƈ且不包括从m到pQ等于[a-lq-z]<br /></td><td valign="top">扣除<br /></td></tr></tbody></table><br /><h3><a name="ref_predef_meta"></a>预定义子集(元字W)(j)</h3><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top" width="30%">边界字符<br /></td><td valign="top">匚w的字W串<br /></td></tr><tr><td valign="top" width="30%">.<br /></td><td valign="top">L字符Q可能匹配行l束W?br /></td></tr><tr><td valign="top" width="30%">\d<br /></td><td valign="top">数字[0-9]<br /></td></tr><tr><td valign="top" width="30%">\D </td><td valign="top">非数字[^0-9]<br /></td></tr><tr><td valign="top" width="30%">\s<br /></td><td valign="top">I白W[ \t\n\x0B\f\r]<br /></td></tr><tr><td valign="top" width="30%">\S<br /></td><td valign="top">非空白符[^\s]<br /></td></tr><tr><td valign="top" width="30%">\w<br /></td><td valign="top">单词W,包含有字母和数字[a-zA-Z_0-9]<br /></td></tr><tr><td valign="top" width="30%">\W<br /></td><td valign="top">非单词符Q不包含有字母和数字?br /></td></tr></tbody></table><br /><h3>扩展子集Q元字符Q?/h3><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top" width="30%">正则表达式字W串<br /></td><td valign="top">匚w的字W串<br /></td></tr><tr><td valign="top" width="30%"><br /></td><td valign="top"><br /></td></tr></tbody></table><br /><br /><h3><a name="ref_chinese_meta"></a>扩展中文子集Q元字符Q?/h3><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top">名称<br /></td><td valign="top">块名Uͼ\p{InXXX}Q?br /></td><td valign="top">化通配W?br /></td><td valign="top">标准Unicode块,或者汉字列?br /></td></tr><tr><td valign="top">L双字节字W(汉字或全角符P(j)<br /></td><td valign="top">\p{InQuqnJiao}<br /></td><td valign="top">\E<br /></td><td valign="top">L由GBK表示的汉字,不包括GB18030扩展部分Q?br />以及(qing)CJK ExtB区的汉字?br /></td></tr><tr><td valign="top">L单字节字W?br /></td><td valign="top">\p{InFQuanJiao}<br /></td><td valign="top">\~E<br /></td><td valign="top">L单字节字W?br /></td></tr><tr><td valign="top">L全角ASCII字符<br /></td><td valign="top">\p{InQJAscii}<br /></td><td valign="top">\H<br /></td><td valign="top">标准HalfwidthandFullwidthForms?br /></td></tr><tr><td valign="top">L收录在BIG5码集中的双字节字W?br /></td><td valign="top">\p{InBig5}<br /></td><td valign="top">\I<br /></td><td valign="top">Big5可编码双字节字符<br /></td></tr><tr><td valign="top">匚w未收录在BIG5码集中的双字节字W?/td><td valign="top">\p{InFBig5}<br /></td><td valign="top">\~I<br /></td><td valign="top">非Big5可编码双字节字符<br /></td></tr><tr><td valign="top">匚wL汉字(不包括符?<br /></td><td valign="top">\p{InHanziOrCJKExtB}<br /></td><td valign="top">\X<br /></td><td valign="top">L汉字Q包括GB18030扩展部分?br /></td></tr><tr><td valign="top">匚wL汉字(不包括符?<br /></td><td valign="top">\p{InHanzi}<br /></td><td valign="top">\M<br /></td><td valign="top">L汉字Q不包括GB18030扩展部分?br /></td></tr><tr><td valign="top">匚w非汉字的双字节字W?br /></td><td valign="top">\p{InFHanzi}<br /></td><td valign="top">\~M<br /></td><td valign="top">L非汉字的双字节字W,<br />包括GB18030扩展部分?br /></td></tr><tr><td valign="top">地支字符<br /></td><td valign="top">\p{InDiZhi}<br /></td><td valign="top">\U<br /></td><td valign="top">子丑寅卯辰埩午未申酉戌亥<br /></td></tr><tr><td valign="top">匚w收录在GB码集中的双字节字W?br /></td><td valign="top">\p{InGB}<br /></td><td valign="top">\g<br /></td><td valign="top">收录在GB码集中的双字节字W,<br />不包括GB18030扩展部分?br /></td></tr><tr><td valign="top">匚w非收录在GB码集中的双字节字W?br /></td><td valign="top">\p{InFGB}<br /></td><td valign="top">\~g<br /></td><td valign="top">未收录在GB码集中的双字节字W,<br />不包括GB18030扩展部分?br /></td></tr><tr><td valign="top">匚w收录在GBK码集中的双字节字W?br /></td><td valign="top">\p{InGBK}<br /></td><td valign="top">\h<br /></td><td valign="top">收录在GBK码集中的双字节字W,<br />不包括GB18030扩展部分?br /></td></tr><tr><td valign="top">匚w非收录在GBK码集中的双字节字W?br /></td><td valign="top">\p{InFGBK}<br /></td><td valign="top">\~h<br /></td><td valign="top">未收录在GBK码集中的双字节字W,<br />不包括GB18030扩展部分?br /></td></tr><tr><td valign="top">大写希腊字母<br /></td><td valign="top">\p{InDaXila}<br /></td><td valign="top">\K<br /></td><td valign="top">ΑΒΓΔΕΖΗΘΙΚΛΜΝ<br />ΞΟΠΡΣf`ΦΨΩ<br /></td></tr><tr><td valign="top">日文片假?br /></td><td valign="top">\p{InPianJia}<br /></td><td valign="top">\j<br /></td><td valign="top">标准Katakana?br /></td></tr><tr><td valign="top">日文q_?br /></td><td valign="top">\p{InPingJia}<br /></td><td valign="top">\J<br /></td><td valign="top">标准Hiragana?br /></td></tr><tr><td valign="top">写希腊字母<br /></td><td valign="top">\p{InXiaoXila}<br /></td><td valign="top">\k<br /></td><td valign="top">βδεζηθικλμ^<br />ξοπρστυφχψω<br /></td></tr><tr><td valign="top">数学W号<br /></td><td valign="top">\p{InMathe}<br /></td><td valign="top">\m<br /></td><td valign="top">u×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒?br />∫∮≡≌≈∽∝≠≮≯≤≥∞∵?br /></td></tr><tr><td valign="top">中文数字<br /></td><td valign="top">\p{InCnDigit}<br /></td><td valign="top">\i<br /></td><td valign="top">〇一二三四五六七八九(ji)十百千万亿兆吉京<br /></td></tr><tr><td valign="top">大写中文数字<br /></td><td valign="top">\p{InDaCnDigit}<br /></td><td valign="top">\N<br /></td><td valign="top">零壹贰叁肆伍陆柒捌玖拾䘪仟萬亿兆吉京<br /></td></tr><tr><td valign="top">全角标点W号<br /></td><td valign="top">\p{InQJBiaoDian}<br /></td><td valign="top">\o<br /></td><td valign="top">、。·ˉˇ¨〃々—~‖…‘’“”〔?br />〈〉《》「」『』〖〗【】!Q'Q)(j)Q?br />Q.Q;Q=Q?Q]?jng)|}`H﹊H﹌H﹎H﹐H﹒H﹕H﹗H﹚<br />H﹜H﹞|︶|ؓ(f)|﹀|DH﹂H﹄<br />|Ӈ|P|x|?br /></td></tr><tr><td valign="top">写俄文字母<br /></td><td valign="top">\p{InXiaoEWen}<br /></td><td valign="top">\l<br /></td><td valign="top">аб{Cеёжзийaxмн<br />о\рстуфхцчшщъыьэюя<br /></td></tr><tr><td valign="top">大写俄文字母<br /></td><td valign="top">\p{InDaEWen}<br /></td><td valign="top">\R<br /></td><td valign="top">АБВГДЕЁЖЗИЙКЛМНО<br />ПРСТУФ[ЦЧШЩЪЫЬf(xi)y<br /></td></tr><tr><td valign="top">中文序号<br /></td><td valign="top">\p{InCnSN}<br /></td><td valign="top">\q<br /></td><td valign="top">ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ<br />ⅰⅱ⅜y(c)ⅴⅵⅶⅷⅸⅹ<br />再加上Unicode标准EnclosedAlphanumerics?br /></td></tr><tr><td valign="top">天干字符<br /></td><td valign="top">\p{InTianGan}<br /></td><td valign="top">\T<br /></td><td valign="top">甲乙丙丁戊己庚辛壬癸<br /></td></tr><tr><td valign="top">竖排标点W号<br /></td><td valign="top">\p{InSPBiaoDian}<br /></td><td valign="top">\V<br /></td><td valign="top">|︶|ؓ(f)|﹀|DH﹂H﹄|Ӈ|P|x|?br /></td></tr><tr><td valign="top">拼音字符<br /></td><td valign="top">\p{InPinyin}<br /></td><td valign="top">\y<br /></td><td valign="top">ā֙ǎàēéě؈īTǐìōQ(mo)ǒòūúǔùǖǘǚǜü^ɑńň<br />GBK -> 0xA8A1- 0xA8C0<br />只是Unicode标准LatinExtended-A块的一部分?br /></td></tr><tr><td valign="top">注音字符<br /></td><td valign="top">\p{InZhuyin}<br /></td><td valign="top">\Y<br /></td><td valign="top">标准Bopomofo?br /></td></tr><tr><td valign="top">制表字符<br /></td><td valign="top">\p{InZhiBiao}<br /></td><td valign="top">\C<br /></td><td valign="top">标准BoxDrawing块?br />l检查发?textpro 的算法含有部分非?br />准Unicode制表W:(x)“∟∣≒≦≧⊎앐”?br /></td></tr></tbody></table><br /><h3><a name="ref_posix_subset"></a>POSIX字符子集Q只适用于ASCIIQ?/h3><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top" width="30%">正则表达式字W串<br /></td><td valign="top">匚w的字W串<br /></td></tr><tr><td valign="top" width="30%">\p{Lower}<br /></td><td valign="top">写字母[a-z]<br /></td></tr><tr><td valign="top" width="30%">\p{Upper}<br /></td><td valign="top">大写字母[A-Z]<br /></td></tr><tr><td valign="top" width="30%">\p{ASCII}<br /></td><td valign="top">所有的ASCII字符[\x00-\x7F]<br /></td></tr><tr><td valign="top" width="30%">\p{Alpha}<br /></td><td valign="top">大小写字母[\p{Lower}\p{Upper}]<br /></td></tr><tr><td valign="top" width="30%">\p{Digit}<br /></td><td valign="top">数字[0-9]<br /></td></tr><tr><td valign="top" width="30%">\p{Alnum}<br /></td><td valign="top">字母数字W,包含大小写字母和数字[\p{Alpha}\p{Digit}]<br /></td></tr><tr><td valign="top" width="30%">\p{Punct}<br /></td><td valign="top">标点W号Q?"#$%&'()*+,-./:;<=>?@[\]^_`{|}~之一?br /></td></tr><tr><td valign="top" width="30%">\p{Graph}<br /></td><td valign="top">可显C字W[\p{Alnum}\p{Punct}]<br /></td></tr><tr><td valign="top">\p{Print}<br /></td><td valign="top">可打印字W[\p{Graph}]<br /></td></tr><tr><td valign="top">\p{Blank}<br /></td><td valign="top">I格或者制表符[ \t]<br /></td></tr><tr><td valign="top">\p{Cntrl}<br /></td><td valign="top">控制字符[\x00-\x1F\x7F<br /></td></tr><tr><td valign="top">\p{XDigit}<br /></td><td valign="top">十六q制数字[0-9a-fA-F]<br /></td></tr><tr><td valign="top">\p{Space}<br /></td><td valign="top">I白W[ \t\n\x0B\f\r]<br /></td></tr></tbody></table><br /><h3><a name="ref_unicode_category"></a>Unicode块和分类</h3><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top">?br /></td><td valign="top">中文名称Q摘自Word XPQ?br /></td><td valign="top">代码区域<br /></td></tr><tr><td valign="top">BasicLatin<br /></td><td valign="top">基本拉丁?br /></td><td valign="top">\u0000-\u007F<br /></td></tr><tr><td valign="top">Latin-1Supplement<br /></td><td valign="top">拉丁?1<br /></td><td valign="top">\u0080-\u00FF<br /></td></tr><tr><td valign="top">LatinExtended-A<br /></td><td valign="top">拉丁语扩?A<br /></td><td valign="top">\u0100-\u017F<br /></td></tr><tr><td valign="top">LatinExtended-Bound<br /></td><td valign="top">拉丁语扩?B<br /></td><td valign="top">\u0180-\u024F<br /></td></tr><tr><td valign="top">IPAExtensions<br /></td><td valign="top">国际x扩充<br /></td><td valign="top">\u0250-\u02AF<br /></td></tr><tr><td valign="top">SpacingModifierLetters<br /></td><td valign="top">q格的修饰字W?br /></td><td valign="top">\u02B0-\u02FF<br /></td></tr><tr><td valign="top">CombiningDiacriticalMarks<br /></td><td valign="top">l合用发音符<br /></td><td valign="top">\u0300-\u036F<br /></td></tr><tr><td valign="top">Greek<br /></td><td valign="top">基本希腊?br /></td><td valign="top">\u0370-\u03FF<br /></td></tr><tr><td valign="top">Cyrillic<br /></td><td valign="top">襉K?dng)?br /></td><td valign="top">\u0400-\u04FF<br /></td></tr><tr><td valign="top">Armenian<br /></td><td valign="top"><br /></td><td valign="top">\u0530-\u058F<br /></td></tr><tr><td valign="top">Hebrew<br /></td><td valign="top"><br /></td><td valign="top">\u0590-\u05FF<br /></td></tr><tr><td valign="top">Arabic<br /></td><td valign="top"><br /></td><td valign="top">\u0600-\u06FF<br /></td></tr><tr><td valign="top">Syriac<br /></td><td valign="top"><br /></td><td valign="top">\u0700-\u074F<br /></td></tr><tr><td valign="top">Thaana<br /></td><td valign="top"><br /></td><td valign="top">\u0780-\u07BF<br /></td></tr><tr><td valign="top">Devanagari<br /></td><td valign="top"><br /></td><td valign="top">\u0900-\u097F<br /></td></tr><tr><td valign="top">Bengali<br /></td><td valign="top"><br /></td><td valign="top">\u0980-\u09FF<br /></td></tr><tr><td valign="top">Gurmukhi<br /></td><td valign="top"><br /></td><td valign="top">\u0A00-\u0A7F<br /></td></tr><tr><td valign="top">Gujarati<br /></td><td valign="top"><br /></td><td valign="top">\u0A80-\u0AFF<br /></td></tr><tr><td valign="top">Oriya<br /></td><td valign="top"><br /></td><td valign="top">\u0B00-\u0B7F<br /></td></tr><tr><td valign="top">Tamil<br /></td><td valign="top"><br /></td><td valign="top">\u0B80-\u0BFF<br /></td></tr><tr><td valign="top">Telugu<br /></td><td valign="top"><br /></td><td valign="top">\u0C00-\u0C7F<br /></td></tr><tr><td valign="top">Kannada<br /></td><td valign="top"><br /></td><td valign="top">\u0C80-\u0CFF<br /></td></tr><tr><td valign="top">Malayalam<br /></td><td valign="top"><br /></td><td valign="top">\u0D00-\u0D7F<br /></td></tr><tr><td valign="top">Sinhala<br /></td><td valign="top"><br /></td><td valign="top">\u0D800-\uDFF<br /></td></tr><tr><td valign="top">Thai<br /></td><td valign="top"><br /></td><td valign="top">\u0E00-\u0E7F<br /></td></tr><tr><td valign="top">Lao<br /></td><td valign="top"><br /></td><td valign="top">\u0E80-\u0EFF<br /></td></tr><tr><td valign="top">Tibetan<br /></td><td valign="top">藏语<br /></td><td valign="top">\u0F00-\u0FFF<br /></td></tr><tr><td valign="top">Myanmar<br /></td><td valign="top"><br /></td><td valign="top">\u1000-\u109F<br /></td></tr><tr><td valign="top">Georgian<br /></td><td valign="top"><br /></td><td valign="top">\u10A0-\u10FF<br /></td></tr><tr><td valign="top">HangulJamo<br /></td><td valign="top"><br /></td><td valign="top">\u1100-\u11FF<br /></td></tr><tr><td valign="top">Ethiopic<br /></td><td valign="top"><br /></td><td valign="top">\u1200-\u137F<br /></td></tr><tr><td valign="top">Cherokee<br /></td><td valign="top"><br /></td><td valign="top">\u13A0-\u13FF<br /></td></tr><tr><td valign="top">UnifiedCanadianAboriginalSyllabics<br /></td><td valign="top"><br /></td><td valign="top">\u1400-\u167F<br /></td></tr><tr><td valign="top">Ogham<br /></td><td valign="top"><br /></td><td valign="top">\u1680-\u169F<br /></td></tr><tr><td valign="top">Runic<br /></td><td valign="top"><br /></td><td valign="top">\u16A0-\u16FF<br /></td></tr><tr><td valign="top">Khmer<br /></td><td valign="top"><br /></td><td valign="top">\u1780-\u17FF<br /></td></tr><tr><td valign="top">Mongolian<br /></td><td valign="top">蒙古?br /></td><td valign="top">\u1800-\u18AF<br /></td></tr><tr><td valign="top">LatinExtendedAdditional<br /></td><td valign="top"><br /></td><td valign="top">\u1E00-\u1EFF<br /></td></tr><tr><td valign="top">GreekExtended<br /></td><td valign="top"><br /></td><td valign="top">\u1F00-\u1FFF<br /></td></tr><tr><td valign="top">GeneralPunctuation<br /></td><td valign="top">q义标点<br /></td><td valign="top">\u2000-\u206F<br /></td></tr><tr><td valign="top">SuperscriptsandSubscripts<br /></td><td valign="top"><br /></td><td valign="top">\u2070-\u209F<br /></td></tr><tr><td valign="top">CurrencySymbols<br /></td><td valign="top">货币W号<br /></td><td valign="top">\u20A0-\u20CF<br /></td></tr><tr><td valign="top">CombiningMarksforSymbols<br /></td><td valign="top"><br /></td><td valign="top">\u20D0-\u20FF<br /></td></tr><tr><td valign="top">LetterlikeSymbols<br /></td><td valign="top">cM字母的符?br /></td><td valign="top">\u2100-\u214F<br /></td></tr><tr><td valign="top">NumberForms<br /></td><td valign="top">数字形式<br /></td><td valign="top">\u2150-\u218F<br /></td></tr><tr><td valign="top">Arrows<br /></td><td valign="top">头<br /></td><td valign="top">\u2190-\u21FF<br /></td></tr><tr><td valign="top">MathematicalOperators<br /></td><td valign="top">数学q算W?br /></td><td valign="top">\u2200-\u22FF<br /></td></tr><tr><td valign="top">MiscellaneousTechnical<br /></td><td valign="top">零杂技术用W号<br /></td><td valign="top">\u2300-\u23FF<br /></td></tr><tr><td valign="top">ControlPictures<br /></td><td valign="top"><br /></td><td valign="top">\u2400-\u243F<br /></td></tr><tr><td valign="top">OpticalCharacterRecognition<br /></td><td valign="top"><br /></td><td valign="top">\u2440-\u245F<br /></td></tr><tr><td valign="top">EnclosedAlphanumerics<br /></td><td valign="top">带括L(fng)字母数字<br /></td><td valign="top">\u2460-\u24FF<br /></td></tr><tr><td valign="top">BoxDrawing<br /></td><td valign="top">制表W?br /></td><td valign="top">\u2500-\u257F<br /></td></tr><tr><td valign="top">BlockElements<br /></td><td valign="top">方块囑Ş<br /></td><td valign="top">\u2580-\u259F<br /></td></tr><tr><td valign="top">GeometricShapes<br /></td><td valign="top">几何囑Ş<br /></td><td valign="top">\u25A0-\u25FF<br /></td></tr><tr><td valign="top">MiscellaneousSymbols<br /></td><td valign="top">零杂丁贝W(C意W等Q?br /></td><td valign="top">\u2600-\u26FF<br /></td></tr><tr><td valign="top">Dingbats<br /></td><td valign="top"><br /></td><td valign="top">\u2700-\u27BF<br /></td></tr><tr><td valign="top">BraillePatterns<br /></td><td valign="top"><br /></td><td valign="top">\u2800-\u28FF<br /></td></tr><tr><td valign="top">CJKRadicalsSupplement<br /></td><td valign="top"><br /></td><td valign="top">\u2E80-\u2EFF<br /></td></tr><tr><td valign="top">KangxiRadicals<br /></td><td valign="top"><br /></td><td valign="top">\u2F00-\u2FDF<br /></td></tr><tr><td valign="top">IdeographicDescriptionCharacters<br /></td><td valign="top"><br /></td><td valign="top">\u2FF0-\u2FFF<br /></td></tr><tr><td valign="top">CJKSymbolsandPunctuation<br /></td><td valign="top">CJKW号和标?br /></td><td valign="top">\u3000-\u303F<br /></td></tr><tr><td valign="top">Hiragana<br /></td><td valign="top">q_?br /></td><td valign="top">\u3040-\u309F<br /></td></tr><tr><td valign="top">Katakana<br /></td><td valign="top">片假?br /></td><td valign="top">\u30A0-\u30FF<br /></td></tr><tr><td valign="top">Bopomofo<br /></td><td valign="top">注音<br /></td><td valign="top">\u3100-\u312F<br /></td></tr><tr><td valign="top">HangulCompatibilityJamo<br /></td><td valign="top"><br /></td><td valign="top">\u3130-\u318F<br /></td></tr><tr><td valign="top">Kanbun<br /></td><td valign="top"><br /></td><td valign="top">\u3190-\u319F<br /></td></tr><tr><td valign="top">BopomofoExtended<br /></td><td valign="top">扩展注音<br /></td><td valign="top">\u31A0-\u31BF<br /></td></tr><tr><td valign="top">EnclosedCJKLettersandMonths<br /></td><td valign="top">带括L(fng)CJK字母?qing)月?br /></td><td valign="top">\u3200-\u32FF<br /></td></tr><tr><td valign="top">CJKCompatibility<br /></td><td valign="top">CJK兼容字符<br /></td><td valign="top">\u3300-\u33FF <br /></td></tr><tr><td valign="top">CJKUnifiedIdeographsExtensionA<br /></td><td valign="top">CJKl一汉字扩展-A<br /></td><td valign="top">\u3400-\u4dBF<br /></td></tr><tr><td valign="top">CJKUnifiedIdeographs<br /></td><td valign="top">CJKl一汉字<br /></td><td valign="top">\u4E00-\u9fAF<br /></td></tr><tr><td valign="top">YiSyllables<br /></td><td valign="top"><br /></td><td valign="top">\uA000-\uA48F<br /></td></tr><tr><td valign="top">YiRadicals<br /></td><td valign="top"><br /></td><td valign="top">\uA490-\uA4CF<br /></td></tr><tr><td valign="top">HangulSyllables<br /></td><td valign="top"><br /></td><td valign="top">\uAC00-\uD7A3<br /></td></tr><tr><td valign="top">HighSurrogates<br /></td><td valign="top"><br /></td><td valign="top">\uD800-\uDB7F<br /></td></tr><tr><td valign="top">HighPrivateUseSurrogates<br /></td><td valign="top"><br /></td><td valign="top">\uDB80-\uDBFF<br /></td></tr><tr><td valign="top">LowSurrogates<br /></td><td valign="top"><br /></td><td valign="top">\uDC00-\uDFFF<br /></td></tr><tr><td valign="top">PrivateUse<br /></td><td valign="top">专用?br /></td><td valign="top">\uE000-\uF8FF<br /></td></tr><tr><td valign="top">CJKCompatibilityIdeographs<br /></td><td valign="top">CJK兼容汉字<br /></td><td valign="top">\uF900-\uFAFF<br /></td></tr><tr><td valign="top">AlphabeticPresentationForms<br /></td><td valign="top"><br /></td><td valign="top">\uFB00-\uFB4F<br /></td></tr><tr><td valign="top">ArabicPresentationForms-A<br /></td><td valign="top"><br /></td><td valign="top">\uFB50-\uFDFF<br /></td></tr><tr><td valign="top">CombiningHalfMarks<br /></td><td valign="top"><br /></td><td valign="top">\uFE20-\uFE2F<br /></td></tr><tr><td valign="top">CJKCompatibilityForms<br /></td><td valign="top">CJK兼容形式<br /></td><td valign="top">\uFE30-\uFE4F<br /></td></tr><tr><td valign="top">SmallFormVariants<br /></td><td valign="top">写变体<br /></td><td valign="top">\uFE50-\uFE6F<br /></td></tr><tr><td valign="top">ArabicPresentationForms-Bound<br /></td><td valign="top"><br /></td><td valign="top">\uFE70-\ufeFF<br /></td></tr><tr><td valign="top">Specials<br /></td><td valign="top"><br /></td><td valign="top">\uFFF0-\uFFFF<br /></td></tr><tr><td valign="top">HalfwidthandFullwidthForms<br /></td><td valign="top">半Ş?qing)全形字W?br /></td><td valign="top">\uFF00-\uFFEF<br /></td></tr></tbody></table><br /><br /><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top">分类<br /></td><td valign="top">全称<br /></td><td valign="top">说明<br /></td></tr><tr><td valign="top">Cn<br /></td><td valign="top"><br /></td><td valign="top">UNASSIGNED<br /></td></tr><tr><td valign="top">Lu<br /></td><td valign="top"><br /></td><td valign="top">UPPERCASE_LETTER<br /></td></tr><tr><td valign="top">Ll<br /></td><td valign="top"><br /></td><td valign="top">LOWERCASE_LETTER<br /></td></tr><tr><td valign="top">Lt<br /></td><td valign="top"><br /></td><td valign="top">TITLECASE_LETTER<br /></td></tr><tr><td valign="top">Lm<br /></td><td valign="top"><br /></td><td valign="top">MODIFIER_LETTER<br /></td></tr><tr><td valign="top">Lo<br /></td><td valign="top"><br /></td><td valign="top">OTHER_LETTER<br /></td></tr><tr><td valign="top">Mn<br /></td><td valign="top"><br /></td><td valign="top">NON_SPACING_MARK<br /></td></tr><tr><td valign="top">Me<br /></td><td valign="top"><br /></td><td valign="top">ENCLOSING_MARK<br /></td></tr><tr><td valign="top">Mc<br /></td><td valign="top"><br /></td><td valign="top">COMBINING_SPACING_MARK<br /></td></tr><tr><td valign="top">Nd<br /></td><td valign="top"><br /></td><td valign="top">DECIMAL_DIGIT_NUMBER<br /></td></tr><tr><td valign="top">Nl<br /></td><td valign="top"><br /></td><td valign="top">LETTER_NUMBER<br /></td></tr><tr><td valign="top">No<br /></td><td valign="top"><br /></td><td valign="top">OTHER_NUMBER<br /></td></tr><tr><td valign="top">Zs<br /></td><td valign="top"><br /></td><td valign="top">SPACE_SEPARATOR<br /></td></tr><tr><td valign="top">Zl<br /></td><td valign="top"><br /></td><td valign="top">LINE_SEPARATOR<br /></td></tr><tr><td valign="top">Zp<br /></td><td valign="top"><br /></td><td valign="top">PARAGRAPH_SEPARATOR<br /></td></tr><tr><td valign="top">Cc<br /></td><td valign="top"><br /></td><td valign="top">CNTRL<br /></td></tr><tr><td valign="top">Cf<br /></td><td valign="top"><br /></td><td valign="top">FORMAT<br /></td></tr><tr><td valign="top">Co<br /></td><td valign="top"><br /></td><td valign="top">PRIVATE_USE<br /></td></tr><tr><td valign="top">Cs<br /></td><td valign="top"><br /></td><td valign="top">SURROGATE<br /></td></tr><tr><td valign="top">Pd<br /></td><td valign="top"><br /></td><td valign="top">DASH_PUNCTUATION<br /></td></tr><tr><td valign="top">Ps<br /></td><td valign="top"><br /></td><td valign="top">START_PUNCTUATION<br /></td></tr><tr><td valign="top">Pe<br /></td><td valign="top"><br /></td><td valign="top">END_PUNCTUATION<br /></td></tr><tr><td valign="top">Pc<br /></td><td valign="top"><br /></td><td valign="top">CONNECTOR_PUNCTUATION<br /></td></tr><tr><td valign="top">Po<br /></td><td valign="top"><br /></td><td valign="top">OTHER_PUNCTUATION<br /></td></tr><tr><td valign="top">Sm<br /></td><td valign="top"><br /></td><td valign="top">MATH_SYMBOL<br /></td></tr><tr><td valign="top">Sc<br /></td><td valign="top"><br /></td><td valign="top">CURRENCY_SYMBOL<br /></td></tr><tr><td valign="top">Sk<br /></td><td valign="top"><br /></td><td valign="top">MODIFIER_SYMBOL<br /></td></tr><tr><td valign="top">So<br /></td><td valign="top"><br /></td><td valign="top">OTHER_SYMBOL<br /></td></tr><tr><td valign="top">L<br /></td><td valign="top"><br /></td><td valign="top">LETTER<br /></td></tr><tr><td valign="top">M<br /></td><td valign="top"><br /></td><td valign="top">MARK<br /></td></tr><tr><td valign="top">N<br /></td><td valign="top"><br /></td><td valign="top">NUMBER<br /></td></tr><tr><td valign="top">Z<br /></td><td valign="top"><br /></td><td valign="top">SEPARATOR<br /></td></tr><tr><td valign="top">C<br /></td><td valign="top"><br /></td><td valign="top">CONTROL<br /></td></tr><tr><td valign="top">P<br /></td><td valign="top"><br /></td><td valign="top">PUNCTUATION<br /></td></tr><tr><td valign="top">S<br /></td><td valign="top"><br /></td><td valign="top">SYMBOL</td></tr><tr><td valign="top">LD<br /></td><td valign="top"><br /></td><td valign="top">LETTER_OR_DIGIT<br /></td></tr><tr><td valign="top">L1<br /></td><td valign="top"><br /></td><td valign="top">Latin-1<br /></td></tr><tr><td valign="top">all<br /></td><td valign="top"><br /></td><td valign="top">ALL<br /></td></tr><tr><td valign="top">ASCII<br /></td><td valign="top"><br /></td><td valign="top">ASCII<br /></td></tr><tr><td valign="top">Alnum<br /></td><td valign="top"><br /></td><td valign="top">字母数字(0-9,a-z,A-Z)<br /></td></tr><tr><td valign="top">Alpha<br /></td><td valign="top"><br /></td><td valign="top">字母(a-z,A-Z)<br /></td></tr><tr><td valign="top">Blank<br /></td><td valign="top"><br /></td><td valign="top">I格和制表符(' '|\t)<br /></td></tr><tr><td valign="top">Cntrl<br /></td><td valign="top"><br /></td><td valign="top">控制字符Q不可打?br /></td></tr><tr><td valign="top">Digit<br /></td><td valign="top"><br /></td><td valign="top">数字(0-9)<br /></td></tr><tr><td valign="top">Graph<br /></td><td valign="top"><br /></td><td valign="top">可打C可视字母Q例如空? '是可打印的但不是可视字母Q?`a' 两者都是。)(j)<br /></td></tr><tr><td valign="top">Lower<br /></td><td valign="top"><br /></td><td valign="top">写字母<br /></td></tr><tr><td valign="top">Print<br /></td><td valign="top"><br /></td><td valign="top">可打印字母(非控制字W)(j)<br /></td></tr><tr><td valign="top">Punct<br /></td><td valign="top"><br /></td><td valign="top">标符P字母、数字、控制、空白符以外的字母)(j)Q如Q?@#$%}{<>,./?[]{等?br /></td></tr><tr><td valign="top">Space<br /></td><td valign="top"><br /></td><td valign="top">I白W?' ',\t,0x09,0x0A,0x0B,0x0C,0x0D,0x20)<br /></td></tr><tr><td valign="top">Upper<br /></td><td valign="top"><br /></td><td valign="top">大写字母<br /></td></tr><tr><td valign="top">XDigit<br /></td><td valign="top"><br /></td><td valign="top">十六q制数字(0-9Qa-f, A-F)<br /></td></tr></tbody></table><br /><hr width="100%" size="2" /><br /><br /><br /><h3><a name="man_subexp"></a>替换表达?/h3><a name="subexp_chars"></a>Ҏ(gu)字符<br /><table cellspacing="2" cellpadding="2" width="100%" border="1"><tbody><tr><td valign="top" width="30%">Ҏ(gu)字符介绍<br /></td><td valign="top">描述<br /></td></tr><tr><td valign="top" width="30%">\n<br /></td><td valign="top">换行<br /></td></tr><tr><td valign="top" width="30%">\b<br /></td><td valign="top">向前删除一个字W。当q个字符位于替换串之首时Q将删除匚w串之前的一个字W。若匚w串位于行首,匚w串所在行与前一行相合ƈ?br /></td></tr><tr><td valign="top" width="30%">\d<br /></td><td valign="top">向后删除一个字W。当q个字符位于替换串之末时Q将删除匚w串之后的一个字W。若匚w串位于行末,匚w串所在行与下一行相合ƈ?br /></td></tr><tr><td valign="top" width="30%">\e<br /></td><td valign="top">插入一个ESC字符<br /></td></tr><tr><td valign="top">\t<br /></td><td valign="top">插入一个TAB字符<br /></td></tr><tr><td valign="top">\<i><b>n</b></i><br /></td><td valign="top">n代表查找正则表达式中的子表达式(l)(j)。\1代表W一个子表达式,\2代表W二个子表达式,依次cL。\0代表整个匚w到的字符丌Ӏ?br /></td></tr><tr><td valign="top">\v<br /></td><td valign="top">大写下一个字?br /></td></tr><tr><td valign="top">\U<br /></td><td valign="top">全部大写以后的字母,直到到其它指示Wؓ(f)止?br /></td></tr><tr><td valign="top">\l<br /></td><td valign="top">写下一个字?br /></td></tr><tr><td valign="top">\L<br /></td><td valign="top">全部写以后的字母,直到到其它指示Wؓ(f)止?br /></td></tr><tr><td valign="top">\E<br /></td><td valign="top">取消所有的字母大小写指C符?br /></td></tr></tbody></table><br /><br /><a name="subexp_custtbl"></a>自定义替换表<br /><br />在查找/替换中用自定义替换?<br />有的时候,上述单的自定义替换功能是不够的。例如,用户可能希望只把出现在括号内的源串替换ؓ(f)目标丌Ӏ这U文本处理可以通过在查?替换中用自定义替换表来解决?<br /><br />在查?替换功能中用自定义替换表的替换函数是\TnQ其中n?-9的数字, 注意n?表示W?0张替换表。如果略去nQ其效果相当于\T1Q即使用W一张替换表。例如要把所有放在方括号中的汉字替换为拼韻I可以查找“\[(\E)\]”,替换为“\T{\1}”。即把第一个子表达式的匚w内容按自定义替换表{换。注意,如果\T函数的参C在替换表的源串中Q\T函数的结果与源串相同Q即不做M变换?<br /><br />有些情况下,用户可能希望只用替换表的一部分内容。还是以拼音ZQ前面给出的替换表中包含了拼音的韌Q如果在替换时不希望加上q些韌数字Q可以用“过滤”功能。所谓过滤,其实是用一个正则表辑ּd析替换表的目标串Qƈ把其中的某个子表辑ּ取出来?<br /><br />使用“过滤”时Q在“设|自定义替换表”对话框中,点“过滤”按钮,在弹出的对话框中填入一个正则表辑ּ。再以拼音ؓ(f)例,表达式可以写为?\p{Alpha}+)(\d)”,其中W一Ҏ(gu)号中的是不含韌的拼韻IW二Ҏ(gu)h韌。在调用\T函数ӞJTextPro?x)在目标串中查找q个正则表达式。但是如何把其中的子表达式取出来呢?\T函数q有一个可选的下标Q取Wn个子表达式的值就写作\T{...}[n]。所以,把放在方括号中的汉字替换Z带调的拼韻I可以查找“\[(\E)\]”,替换为“\T{\1}[1]?<br /><br /><br /><br /><br /><img src ="http://m.tkk7.com/zhugf000/aggbug/23414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhugf000/" target="_blank">W笨</a> 2005-12-12 09:16 <a href="http://m.tkk7.com/zhugf000/archive/2005/12/12/23414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>减少全局竞争性同步,提高应用的垂直扩展能?/title><link>http://m.tkk7.com/zhugf000/archive/2005/12/12/23411.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Mon, 12 Dec 2005 01:05:00 GMT</pubDate><guid>http://m.tkk7.com/zhugf000/archive/2005/12/12/23411.html</guid><wfw:comment>http://m.tkk7.com/zhugf000/comments/23411.html</wfw:comment><comments>http://m.tkk7.com/zhugf000/archive/2005/12/12/23411.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/zhugf000/comments/commentRss/23411.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhugf000/services/trackbacks/23411.html</trackback:ping><description><![CDATA[<P>减少全局竞争性同步,提高应用的垂直扩展能?/P> <P>垂直扩展Q简单的_(d)是当单一pȝg升扩展Ӟ如增加CPUQ内存,应用E序能够随之U性提高业务处理能力?BR>多线E是服务?Java 应用的标准处理方式,其优点不用赘q。本文要讨论的是Q如何在设计阶段降低多线E之间的竞争性同步开销?/P> <P>假设一个Web应用Q需要ؓ(f)当前用户l护在线用户信息。此用户信息列表?x)放?Application 范围的一?Map 中,那么我们增加或删除一个在U用L(fng)操作?x)是q样Q?BR>Map clientMap = ...// from Application Context<BR>synchronized(clientMap){<BR> clientMap.put(clientId,clientObject);<BR>}<BR>q是一个典型的全局同步代码Q当q发U程增加Ӟq部分代码就有可能会(x)存在潜在垂直扩展瓉?/P> <P>最单解军_法:(x)?ConcurrentHashMap?BR>ConcurrentHashMap的多U程下的表现要比HashMap好的多,可以做到随着U程数增长性能基本保持E_?BR>参见Q?A >http://www-128.ibm.com/developerworks/cn/java/j-jtp07233/index.html</A><BR>?ConcurrentHashMap 的分析,参见Q?A >http://www-128.ibm.com/developerworks/cn/java/j-jtp08223/index.html</A></P> <P><BR>?ConcurrentMap/ConcurrentLinkedQueue 不能帮助我们的情况下Q我们需要明设计以避免全局竞争?BR>基本原则是:(x)<BR>1 预分配,降低争用出现的频率?BR>2 降低锁的_度Q将全局竞争变ؓ(f)局部竞争?/P> <P>预分配策略示例:(x)<BR>对于一在线交易处理pȝQ需要ؓ(f)每个交易生成交易水P假设有多C易服务器按照集群方式配置Q同时提供服务。那么需要在交易服务器之间进行同步,以保证交易流水号的正常增ѝ?BR>一U处理方式ؓ(f)Q在数据库中保存当前交易水L(fng)最高|每台机器一ơ预分配1000水Q内部采用线E同步进行分配,用完再从数据库分配。这里数据库充当了全局存储和全局同步工具Q如果每来一条交易,p问一ơ数据库Q考虑到数据库同步和事务的负担Q这里会(x)成ؓ(f)严重的性能瓉?/P> <P>降低锁粒度策略示例:(x)<BR>1 ConcurrentHashMap 本n是个很好的模范。它采用32颗锁Q来代替普?HashMap 的单颗对象锁?BR>2 对于数据库中q发大的表,可以考虑表U锁改ؓ(f)行锁,提高q发性?BR><FONT size=1><BR>暂时想不hCZQ有I再?/FONT></P><img src ="http://m.tkk7.com/zhugf000/aggbug/23411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhugf000/" target="_blank">W笨</a> 2005-12-12 09:05 <a href="http://m.tkk7.com/zhugf000/archive/2005/12/12/23411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK 1.5 对超大字W集的支?/title><link>http://m.tkk7.com/zhugf000/archive/2005/12/09/23108.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Fri, 09 Dec 2005 03:27:00 GMT</pubDate><guid>http://m.tkk7.com/zhugf000/archive/2005/12/09/23108.html</guid><wfw:comment>http://m.tkk7.com/zhugf000/comments/23108.html</wfw:comment><comments>http://m.tkk7.com/zhugf000/archive/2005/12/09/23108.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/zhugf000/comments/commentRss/23108.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhugf000/services/trackbacks/23108.html</trackback:ping><description><![CDATA[<P><STRONG>JDK 1.5 对超大字W集的支?/STRONG></P> <P><STRONG>Unicode 与超大字W集</STRONG><BR>国标 GB18030 规定?字节扩展部分Q这部分区域目前?Unicode 规范中作为CJK Ext B区存在,卛_说的中文大字符集。这部分区域~码?\U20000 - \U2A6D6?/P> <P> </P> <P><STRONG>UTF-16与Java String/Character 对象</STRONG><BR>一个完整的 Unicode 字符?代码?CodePointQ而一?Java char ?代码单元 code unit?BR>String 对象以UTF-16保存 Unicode 字符Q需要用2个字W表CZ?大字符集的汉字Q这q种表示方式UC?SurrogateQ第一个字W叫 Surrogate HighQ第二个是 Surrogate Low?/P> <P>判断一个char是否?Surrogate 区的字符Q用 Character?isHighSurrogate()/isLowSurrogate()Ҏ(gu)?BR>从两个Surrogate High/Low 字符Q返回一个完整的 Unicode CodePoint ?Character.toCodePoint()/codePointAt()Ҏ(gu)?/P> <P>一?Code Point Q可能需要一个也可能需要两个char表示Q因此不能直接?CharSequence.length()Ҏ(gu)直接q回一个字W串到底有多个汉字Q而需要用String.codePointCount()/Character.codePointCount()?/P> <P>要定位字W串中的WN个字W,不能直接?N 作ؓ(f)偏移量,而需要从字符串头部依ơ遍历得刎ͼ需要用String/Character.offsetByCodePoints() Ҏ(gu)?/P> <P>从字W串的当前字W,扑ֈ上一个字W,也不能直接用offset -- 实现Q而需要用 String.codePointBefore()/Character.codePointBefore()Q或?String/Character.offsetByCodePoints()</P> <P>从当前字W,找下一个字W,不能直接?offset ++ 实现Q需要判断当?CodePoint 的长度后Q再计算得到Q或?String/Character.offsetByCodePoints() ?/P> <P><BR><STRONG>Swing ?大字符集的支持<BR></STRONG>JTextPane增加了对 大字符集的支持Q只要设|字体正,可以显C和~辑大字符集?BR></P><img src ="http://m.tkk7.com/zhugf000/aggbug/23108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhugf000/" target="_blank">W笨</a> 2005-12-09 11:27 <a href="http://m.tkk7.com/zhugf000/archive/2005/12/09/23108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>业务驱动用例试http://m.tkk7.com/zhugf000/archive/2005/12/08/22993.htmlW笨W笨Thu, 08 Dec 2005 09:09:00 GMThttp://m.tkk7.com/zhugf000/archive/2005/12/08/22993.htmlhttp://m.tkk7.com/zhugf000/comments/22993.htmlhttp://m.tkk7.com/zhugf000/archive/2005/12/08/22993.html#Feedback0http://m.tkk7.com/zhugf000/comments/commentRss/22993.htmlhttp://m.tkk7.com/zhugf000/services/trackbacks/22993.html业务驱动用例试


W笨所知的试大致分类

单元试/Unit test
Z代码中类或函CU的试

用例试/Use case test.
Z一个完整业务用例的试Q可以不包括用户业务pȝ环境的完整操作流E?BR>如,银行|银pȝ的{账测试可以认为是一个完整业务用例测试,但是不必要要求测试用例先执行dq程Q再q行转̎业务代码的测试?/P>


集成试/Integration test
׃务h员主|业务pȝ作ؓ(f)一个完整黑盒,试pȝ功能和性能?/P>

用户接受试/User Accept test
集成试通过后,用户Z生pȝ剥离的实际数据,再一ơ对业务pȝ执行试Q如果集成测试不充分Q可以再一ơ有Z(x)暴露pȝ的缺陗?/P>

 


目实施q程与测?/STRONG>

从项目的实施q程来说Q单元测试是E序员自,在开发阶D,集成试和用h受测试所占用旉能够辑ֈ目代码开发阶D늚一倍到两倍,大型目的测试阶D可能还要长?BR>而用例񔋹试目前很少作ؓ(f)一个正式的阶段在项目实施过E中存在Q或q序员自行自测Q或合ƈ到集成测试过E中?/P>

对于大型业务pȝQ集成测试和用户试所p的主要工作量如下Q可能不全?BR>1 数据准备Q测试h员调配准备?BR>2 试q程中,试人员要找到哪些测试数据还能用Q再手工操作pȝ界面Q执行测试过E。对于大型业务系l来_(d)可用试数据是随着试q展不断变化的,很有可能某个用户数据刚刚状态正常,现在欠费了。要x到合适的数据来测试系l,q是个费劲且混ؕ的过E?BR>3 集成回归试Q业务系l如果有升或改动,需要将所有交易重新测试一遍,以防止变更给原有代码引入~陷?/P>


用例试
用例试x业务?BR>usecase_test.gif
用例试集中在业务服务这一层,业务服务直接对应了业务用例?BR>用例试注重业务服务q行环境的模拟和重现Q从而支持业务服务层的自动测试?/P>


用例试的h(hun)?BR>1 减少集成试的时间和成本Q降低集成测试发现缺hQ从而降低项目ȝ陷修复代仗?BR> 用例试~陷修复代h(hun)q低于集成测试的~陷修复代h(hun)Q用例测试发现大部分~陷后,集成试q对轻松了?BR>2 可回归的用例试支持快速代码重构?BR>3 ...


单元试无法覆盖用例试
业务代码q行需要底层资源如数据库或其它业务pȝ配合Q单元测试工L(fng)乏提供业务服务运行所需环境的模拟,从Junitpd单元试工具来说Q它q是主要从技术角度考虑Q从业务角度的考虑如:(x)
底层资源Q数据库QJMSQ模?BR>依赖服务模拟
服务讉K模拟
自动(g)、重攑֒比对服务q行时的输入输出参数、资源、依赖服务?BR>服务接口变动波及(qing)分析


代码重构的成?BR>代码重构需要付Z仗集成测试费时费力,但用户不可能因ؓ(f)E序员说“我保证代码重构不会(x)改变pȝ功能”,׃对变动后代码q行试?BR>用例回归试支持可以以较?yu)代h持代码重构,因ؓ(f)它可在业务服务自动对功能进行验证,集成试工作能够相应的减?BR>



W笨 2005-12-08 17:09 发表评论
]]>
Java 多线E或内存泄漏~陷排查的一些经?/title><link>http://m.tkk7.com/zhugf000/archive/2005/12/07/22890.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Wed, 07 Dec 2005 09:07:00 GMT</pubDate><guid>http://m.tkk7.com/zhugf000/archive/2005/12/07/22890.html</guid><wfw:comment>http://m.tkk7.com/zhugf000/comments/22890.html</wfw:comment><comments>http://m.tkk7.com/zhugf000/archive/2005/12/07/22890.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/zhugf000/comments/commentRss/22890.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhugf000/services/trackbacks/22890.html</trackback:ping><description><![CDATA[<P><STRONG>Java 多线E或内存泄漏~陷排查的一些经?/STRONG></P> <P><BR><STRONG>JVM Thread DUMP 基本?/STRONG><BR>Windows 下用Ctrl-Break,Unix 下用 kill -3 <pid> 的命令让JVM输出 thread dump?BR>每隔几秒 thread dump 一ơ,多做几次Q分析比较?/P> <P><STRONG>Thread Dump分析的一些经?BR></STRONG>1 扑ևq几ơThread dump 文g中,有哪?Java Thread 处于长时间等待状态,很有可能是问题之所在?BR>2 如果Java U程{在某些不可能出错的地方Q如 java.lang.XXX/java.util.XXX对象的某个方法,则很有可能是因ؓ(f)出现?OutOfMemoryError 异常Q原因不外乎是JVM 堆内存过或出现内存泄漏?BR>3 对于死锁Q最直接的表现就是至两个线E长旉{待怺持有的对象(每个U程所持有的对象和它当前等待的对象都可以从 dump 中看刎ͼ(j)?BR>4 对于d@环,要辅助CPU占用率确定;如果发现CPU臛_一颗用率?00%Qƈ且有U程长时间位于用户代码处Q则很有可能是死循环引v?/P> <P><BR><STRONG>多线E缺h?BR></STRONG>对于Java死锁问题很少出现Q多U程讉K变量时冲H很常见?BR>一般出在多U程׃n同一对象实例如全局MapQServlet,InterceptorQ或如多U程同时讉K某个静态方法,而此静态方法不巧又讉K另一个静态变量?BR>q类问题自测发现不了Q在q发压力试时才能发现。如果代码的入口(g)查做得好Q多半会(x)抛出一些莫名其妙的异常Q要不然׃(x)出现正常q行但数据库记录不对的情c(din)?BR>对这U问题,q无多好的办法解冻I主要q是靠看异常堆栈和静态代码分析来解决?BR><BR><BR><STRONG>内存泄漏排查</STRONG><BR>一般用商用辅助工具排查Q但有可能出现在JVM heap dump 模式下,q行极度~慢的情c(din)?BR>W笨曄用过一个非常简单的工具Q效果不错,它可以做到在不媄(jing)响jvm 执行速度的情况下Q做heap dumpQ然后对dump出的文gq行排序Q检查即可?/P> <P>heapprofile(<A >http://www.virtualmachine.de/</A>)</P> <P> </P><img src ="http://m.tkk7.com/zhugf000/aggbug/22890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhugf000/" target="_blank">W笨</a> 2005-12-07 17:07 <a href="http://m.tkk7.com/zhugf000/archive/2005/12/07/22890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>With or Without EJB?http://m.tkk7.com/zhugf000/archive/2005/12/07/22878.htmlW笨W笨Wed, 07 Dec 2005 07:54:00 GMThttp://m.tkk7.com/zhugf000/archive/2005/12/07/22878.htmlhttp://m.tkk7.com/zhugf000/comments/22878.htmlhttp://m.tkk7.com/zhugf000/archive/2005/12/07/22878.html#Feedback2http://m.tkk7.com/zhugf000/comments/commentRss/22878.htmlhttp://m.tkk7.com/zhugf000/services/trackbacks/22878.htmlWith or Without EJB?


EJB q行时所享受?J2EE 基础服务

1 参与AppServer 提供分布式事务管?JTA,JTS)?BR>2 AppServer 提供高性能通讯框架(ZRMI ?IIOP实现)和大q发处理?BR> 1) AppServer ?WebLogic/WebSphere 替换?Sun 标准 RMI 实现Q基于著名的多线E阻塞IOQ,国内?Apusic 4 则基于纯 NIO ?IIOP通讯协议实现EJB q程通讯?
 2) AppServer 提供 EJB 实例池、请求队列、执行线E池{等服务?/P>

3 AppServer 提供透明 EJB 集群理Q负载均衡、故障恢复)(j)Q保证应用的处理能力能够水^扩展?BR>4 J2EE 安全体系
5 AppServer Ҏ(gu)的附加增值服?BR> 1) ?WebLogic WTC EJBQ可实现从TUXEDO Service(C语言) 高性能讉K EJB?/P>

 


大型目所x的重?/STRONG>

对于大型目如全国集中这一U别而言Q它所x的重炚w险反而是pȝ的性能、吞吐量、稳定性、高可用性这L(fng)一些基本属性,q里q说具体的业务功能׃重要Q而是与上q的基本属性相比,业务功能可以说是相对的不重要?BR>基本属性如果有某一Ҏ(gu)有达刎ͼ直接后果是目p|Q或者运行时存在高风险?BR>业务功能则主要是堆时间、堆人、堆代码、堆试人员的问题,如果实在来不?qing)了Q那放到第二期d好了Q不影响L律么?/P>

对于大型目而言Q采用新技术的x点主要是Q?BR>1 能否满基本质量属性,无重大运行时风险?BR>比如_(d)数据讉K层,从性能和稳定性角度而言Q还直接采?JDBC ~码合适,最多采用SQL映射型JDO。对于带~冲的JDO实现则不宜采用,?x)带来水qx展和E_性风险?/P>

2 目l相关h员是否有此技术的l验Q最好不要付出学?fn)成本,避免因不熟(zhn)所带来的风险?/P>

 


EJB ?IoC 框架?Spring 的定位比?/STRONG>

Spring IoC/Context/AOP 可以认ؓ(f)是一个代码组l?Assembler)框架Q关注代码如何组l和去耦?/P>

EJB 则是q行l构Q关注我们的应用如何q行Q如何做集群Q系l计资源如何分配等{?BR>EJB 3 的改q主要还是从代码l织角度做出的,对于 EJB q行时架构ƈ没有多少变化Q如果说错了Q还h正)(j)QBEA q有q将 EJB 3的代码翻译ؓ(f) EJB 2.1 q行时架构的考虑Q参?BEA 的关?EJB 3 的一文?A >http://www.javaworld.com/javaworld/jw-08-2004/jw-0809-ejb_p.htmlQ?BR>
从上q角度来看,EJB ?Spring 是从不同的角度看待应用,我们完全可以做到?Spring l织代码实现EJB?/P>


With or Without EJB?
从上q讨论可以看出,用Springq是用EJBq不是个问题Q最l还是看用户的实际需求而定。小Web目多半不关注性能、ƈ发、集等{属性,Z开发过E简单和学习(fn)成本的考虑Q完全可以不用EJBQ而大型项目可能还是得用EJB?BR>



W笨 2005-12-07 15:54 发表评论
]]>
ZJava的高性能TP Monitor的设?/title><link>http://m.tkk7.com/zhugf000/archive/2005/12/06/22747.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Tue, 06 Dec 2005 09:49:00 GMT</pubDate><guid>http://m.tkk7.com/zhugf000/archive/2005/12/06/22747.html</guid><wfw:comment>http://m.tkk7.com/zhugf000/comments/22747.html</wfw:comment><comments>http://m.tkk7.com/zhugf000/archive/2005/12/06/22747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zhugf000/comments/commentRss/22747.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhugf000/services/trackbacks/22747.html</trackback:ping><description><![CDATA[目前的高性能TP Monitor?TUXEDO CICS全部是基?C/多进E开发而成<BR><BR>国内?jng)场被BEA/IBM高度垄断Q可能也?nbsp;东方通TongEASY的能虎口夺食?BR><BR>从TP Monitor的在金融业的应用l验来看QTP Monitor主要作用是:(x)<BR>1 提供一个高性能、高E_的通讯框架Q(如银行d互联、应用之间互联)(j)<BR>2 支持大ƈ发的交易处理q_Q在U交易实时处理,但一般不作ؓ(f)事务理器,因ؓ(f)全局事务代h(hun)q高Q主要用数据库自w事务机Ӟ(j)?BR>3 支持软g负蝲均衡Q支持水qx展(如:(x)TUXEDO MPQ?BR><BR>开源App Server如Jboss/Jonas 全部采用UJava实现Q性能是个问题Q跟TUXEDO/CICS相比?BR><BR>假设我们要自行实C个可用的TP MonitorQ必要解决上述几点?BR><BR><BR>从Java的性能来看Q它的内部代码执行效率不低,主要弱在Q?BR>1 socket通讯效率?BR>2 ipc机制不支?BR>3 数据库访问效率低Q实际的交易实现效率低,不管用EJBq是POJOQ?BR><BR>目前有考虑<BR>1 高性能的通讯框架Q必采用C代码实现。Java做不到Zero CopyQƈ且JNI在Java和本地C代码之间复制内存代h(hun)也很高?BR>2 大ƈ发的处理q_Q这个是Java的优势所在,Java对于同步、ƈ发的实现Q写h?BR>3 IPC支持QSystemV消息队列、共享内存、信L(fng)Q,标准 Java 库缺乏,但是可以通过JNI实现Q实现策略可以参考SWT的实现策略?BR>4 用户SERVICE实现Q数据库讉KQ,采用C实现Q充分利用高效的数据库本地接口?BR><img src ="http://m.tkk7.com/zhugf000/aggbug/22747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhugf000/" target="_blank">W笨</a> 2005-12-06 17:49 <a href="http://m.tkk7.com/zhugf000/archive/2005/12/06/22747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不间断运行工作系l元数据更新{略http://m.tkk7.com/zhugf000/archive/2005/12/02/22260.htmlW笨W笨Fri, 02 Dec 2005 08:40:00 GMThttp://m.tkk7.com/zhugf000/archive/2005/12/02/22260.htmlhttp://m.tkk7.com/zhugf000/comments/22260.htmlhttp://m.tkk7.com/zhugf000/archive/2005/12/02/22260.html#Feedback0http://m.tkk7.com/zhugf000/comments/commentRss/22260.htmlhttp://m.tkk7.com/zhugf000/services/trackbacks/22260.html关键在于元数据更新的事务?/STRONG>

一般做法如下:(x)
meta_refresh.gif

d(g)?/STRONG>Q每个进E内Q有一个定时检查模块,定时(g)查数据库中元数据表的最后更新时间戳Q发现需要重新加载的元数据?BR>被动通知Q每个进E内Q有一个等待更新消息通知的消息驱动Bean模块Q接受元数据理机发出的元数据更新JMS消息/MQ消息Q更新指定元数据?BR>
元数据更新的事务?/STRONG>Qؓ(f)保证业务处理模块不受元数据更新过E的影响Q在E序设计上,采用双内存切换机制。即内存中,同时有两块内存用于存攑օ数据。Q一时刻Q元数据全局变量指向其中一块,为当前工作元数据内存块;元数据检查更新模块,则用另一块内存,在元数据加蝲、校验过E结束后Q再切换元数据全局变量指向新的元数据内存块Q切换元数据全局变量的过E自w受׃n锁保护。从而保证业务处理模块的处理q程不受后台元数据切换的影响Qƈ且业务处理模块所讉K的元数据始终是可用的Q不?x)出C务处理过E中Q元数据变化的情c(din)?/P>

对于分布式应用,有可能需要自行编写元数据更新的分布式事务理器,自行实现元数据更新的两阶D|交过E。如果想hQ也可以考虑用JCA自行实现Resource ManagerQ借用应用服务器的Transaction Manager?BR>



W笨 2005-12-02 16:40 发表评论
]]>
Java ?C 性能比较的一些经验数?/title><link>http://m.tkk7.com/zhugf000/archive/2005/12/02/22257.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Fri, 02 Dec 2005 08:17:00 GMT</pubDate><guid>http://m.tkk7.com/zhugf000/archive/2005/12/02/22257.html</guid><wfw:comment>http://m.tkk7.com/zhugf000/comments/22257.html</wfw:comment><comments>http://m.tkk7.com/zhugf000/archive/2005/12/02/22257.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://m.tkk7.com/zhugf000/comments/commentRss/22257.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhugf000/services/trackbacks/22257.html</trackback:ping><description><![CDATA[<P>Java ?C 性能比较的一些经验数?BR><BR>太细的数据也拿不刎ͼ必须要针对具体^台和JVM</P> <P><STRONG>基本代码执行</STRONG><BR>Java与C?1:3-1:5左右Q在Intelq_上用JDK1.4得?BR>JNI不快Q一ơ基本JNI调用差不多等于一ơJavaҎ(gu)调用Q未考虑大数据量传输Q?/P> <P><STRONG>数据库访?/STRONG><BR>JDBC与数据库本地接口差距较大Q差不多??个数量左右Q或更多。可以认为在1:10 - 1:50之间</P> <P><STRONG>socket|络传输</STRONG><BR>Java要分普通多U程和NIO方式<BR>多线E方式,q发受限Q一般不?x)超q?50-200个ƈ发,再多性能不会(x)增加。这U方式下Q网l传输性能与C差距可以认ؓ(f)?个数量左右Q即1:10-1:30?BR>NIO方式Qƈ发不错,能够支持到几千个q发Q性能差距些Q可以做到在1:3 -- 1:5 左右?BR>C 通过select/poll/epoll技术,q发10000没有多少问题Qƈ且通过Zero-Copy技术,可以避开Java 所无法避免~冲区复?Java->C~冲区复?的问题?/P> <P>ȝ来看QJava与C在普通多层Web应用斚wQ差距可以认为在1个数量左右Q关键应用如TP Monitor目前q无法用Java?BR></P><img src ="http://m.tkk7.com/zhugf000/aggbug/22257.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhugf000/" target="_blank">W笨</a> 2005-12-02 16:17 <a href="http://m.tkk7.com/zhugf000/archive/2005/12/02/22257.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://24aabb.com" target="_blank">ëƬڵ</a>| <a href="http://www398ph.com" target="_blank">˾þվ</a>| <a href="http://www-554949.com" target="_blank">þĻƵ</a>| <a href="http://ocn888.com" target="_blank">ѲƵһ</a>| <a href="http://www-741.com" target="_blank">ٸ17p</a>| <a href="http://717795.com" target="_blank">޳aƬ77777Ⱥɫ</a>| <a href="http://xtolm.com" target="_blank">ũѸһëƬѿƵ</a>| <a href="http://liangdy.com" target="_blank">㽶һ</a>| <a href="http://m8va.com" target="_blank">vƬ߹ۿƷ</a>| <a href="http://626632.com" target="_blank">һӰԺ</a>| <a href="http://ulihix.com" target="_blank">avۺavһ</a>| <a href="http://jte-sh.com" target="_blank">ֻۿ߹ۿ</a>| <a href="http://s8sb.com" target="_blank">ѹۿëƬaƬ2008</a>| <a href="http://ncmyw.com" target="_blank">޾Ʒ</a>| <a href="http://ajguild.com" target="_blank">޾Ʒ㶮</a>| <a href="http://taojin5.com" target="_blank">ůůձ</a>| <a href="http://xingqiu1.com" target="_blank">˰ձƵ</a>| <a href="http://wo93xyz.com" target="_blank">ɫ</a>| <a href="http://517fanfan.com" target="_blank">AVƷһ </a>| <a href="http://91se01.com" target="_blank">þþþþavѿƬ </a>| <a href="http://ahbbht.com" target="_blank">Ƶ</a>| <a href="http://dazngt.com" target="_blank">޾Ʒ߹ۿ</a>| <a href="http://5666my.com" target="_blank">ѹۿĻƷ</a>| <a href="http://znboxcdn107.com" target="_blank">69xxѹۿƵ</a>| <a href="http://kingco-glaze.com" target="_blank">һ</a>| <a href="http://sdzsx.com" target="_blank">޹ŷһ</a>| <a href="http://yulongfilm.com" target="_blank">þùƷ2020m3u8</a>| <a href="http://6609929.com" target="_blank">һػɫƬ߹ۿ</a>| <a href="http://meyume.com" target="_blank">޳77777</a>| <a href="http://9xav.com" target="_blank">99Ƶ</a>| <a href="http://992fanli.com" target="_blank">߹ۿѲ</a>| <a href="http://51caox.com" target="_blank">H߲߹ۿH</a>| <a href="http://yiuzz.com" target="_blank">һƷһAVһ</a>| <a href="http://wwby66636.com" target="_blank">?v˿߹ۿ </a>| <a href="http://zgxxx.com" target="_blank">ҹ޾Ʒ</a>| <a href="http://kencery.com" target="_blank">99߹ۿ</a>| <a href="http://www-92109.com" target="_blank">ݺۺɫ</a>| <a href="http://chinahongfeng.com" target="_blank">޾ƷۺϾþþþý</a>| <a href="http://shaolingtongluo.com" target="_blank">99ƷƵ߹ۿ</a>| <a href="http://w7768.com" target="_blank">Ƶ߲</a>| <a href="http://www-091w.com" target="_blank">ŮվɫƵ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>