﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-展翅飞翔-随笔分类-工具类</title><link>http://www.blogjava.net/loyalgl/category/47369.html</link><description>实现解读客户思想与架构现有最成熟技术的完美融合</description><language>zh-cn</language><lastBuildDate>Wed, 15 Dec 2010 02:46:28 GMT</lastBuildDate><pubDate>Wed, 15 Dec 2010 02:46:28 GMT</pubDate><ttl>60</ttl><item><title>【原】汉字/英文字符长度判断--JS版与Java方法版</title><link>http://www.blogjava.net/loyalgl/archive/2010/12/15/340739.html</link><dc:creator>龙樱</dc:creator><author>龙樱</author><pubDate>Wed, 15 Dec 2010 02:10:00 GMT</pubDate><guid>http://www.blogjava.net/loyalgl/archive/2010/12/15/340739.html</guid><wfw:comment>http://www.blogjava.net/loyalgl/comments/340739.html</wfw:comment><comments>http://www.blogjava.net/loyalgl/archive/2010/12/15/340739.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/loyalgl/comments/commentRss/340739.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loyalgl/services/trackbacks/340739.html</trackback:ping><description><![CDATA[<span style="color: #0817ff;">我想我们大家都知道，好多数据库中存储中文汉字与英文的字节数是不同的。如果某个字段长度有固定大小，我们就需要对插入数据的大小进行校验。之前做安邦电销项目时就曾经遇到该类问题，现在将其前台与后台的校验核心方法罗列出来，希望能对大家有所帮助</span>。<br />
<br />
<strong>JS方法：</strong><br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;&nbsp;&nbsp;language</span><span style="color: #000000;">=</span><span style="color: #000000;">javascript</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
String.prototype.lenB&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.replace(</span><span style="color: #000000;">/</span><span style="color: #000000;">[</span><span style="color: #000000;">^</span><span style="color: #000000;">\x00</span><span style="color: #000000;">-</span><span style="color: #000000;">\xff]</span><span style="color: #000000;">/</span><span style="color: #000000;">g,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">**</span><span style="color: #000000;">"</span><span style="color: #000000;">).length;}<br />
</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">这是一个可以将汉字计算成两个字节的函数&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
alert(&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">老的算法&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;str.length);<br />
alert(&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">新的算法&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;str.lenB());<br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> <br />
</span></div>
<span style="color: #ff0000;">说明：上面JS里方法里的"**"表示把一个中文替换成英文的位数。"**"代表一个中文=两个英文</span><br />
<br />
<strong>java方法：</strong><br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">/**</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;获取字符串的长度，如果有中文，则每个中文字符计为2位<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;value<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定的字符串<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@return</span><span style="color: #008000;">&nbsp;字符串的长度<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;chineseLength(String&nbsp;value)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;valueLength&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;chinese&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">[\u0391-\uFFE5]</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;获取字段值的长度，如果含中文字符，则每个中文字符长度为2，否则为1&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;value.length();&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;获取一个字符&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;temp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;value.substring(i,&nbsp;i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;判断是否为中文字符&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(temp.matches(chinese))&nbsp;{<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;中文字符长度为2&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valueLength&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;其他字符长度为1&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valueLength&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;valueLength;<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<span style="color: #ff0000;">说明：我想大家一看就懂了吧，关键语句是第18行。</span><br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/loyalgl/aggbug/340739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loyalgl/" target="_blank">龙樱</a> 2010-12-15 10:10 <a href="http://www.blogjava.net/loyalgl/archive/2010/12/15/340739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】PowerDesigner中的反向工程--oracle</title><link>http://www.blogjava.net/loyalgl/archive/2010/08/02/327721.html</link><dc:creator>龙樱</dc:creator><author>龙樱</author><pubDate>Mon, 02 Aug 2010 02:15:00 GMT</pubDate><guid>http://www.blogjava.net/loyalgl/archive/2010/08/02/327721.html</guid><wfw:comment>http://www.blogjava.net/loyalgl/comments/327721.html</wfw:comment><comments>http://www.blogjava.net/loyalgl/archive/2010/08/02/327721.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/loyalgl/comments/commentRss/327721.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loyalgl/services/trackbacks/327721.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 利用PowerDesigner工具反向工程生成bpm图&nbsp;&nbsp;<a href='http://www.blogjava.net/loyalgl/archive/2010/08/02/327721.html'>阅读全文</a><img src ="http://www.blogjava.net/loyalgl/aggbug/327721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loyalgl/" target="_blank">龙樱</a> 2010-08-02 10:15 <a href="http://www.blogjava.net/loyalgl/archive/2010/08/02/327721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】三大主流工作流引擎技术分析与市场预测</title><link>http://www.blogjava.net/loyalgl/archive/2009/03/03/257465.html</link><dc:creator>龙樱</dc:creator><author>龙樱</author><pubDate>Tue, 03 Mar 2009 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/loyalgl/archive/2009/03/03/257465.html</guid><wfw:comment>http://www.blogjava.net/loyalgl/comments/257465.html</wfw:comment><comments>http://www.blogjava.net/loyalgl/archive/2009/03/03/257465.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/loyalgl/comments/commentRss/257465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loyalgl/services/trackbacks/257465.html</trackback:ping><description><![CDATA[本贴来源 http://dev.csdn.net/develop/article/64/64170.shtm<br />
<br />
<strong>1．从《功夫》说起</strong><br />
<br />
时下的新新人类看到我，一定会认为在下是个十足的老古董，这不，《功夫》这样的片子我到今年2月底才看。不过看过《功夫》，我想的一定比一般的人多：周星星浪迹江湖，和他胖子大哥出去敲竹杆时，为什么要他大哥胸前画两把斧头？找个假靠山呗！装是斧头帮的人才不会被人欺负啊。<br />
<br />
这让我想到年前的一则新闻：jbpm joins jboss and becomes jboss-jbpm。也就是说了，jbpm找了个靠山jboss，以后不用自己在外流浪了。<br />
<br />
好，我们转入正题，谈这里说的三大主流开源工作流引擎：Shark,osworkflow,jbpm。<br />
<br />
Shark的靠山是Enhydra。Enhydra做过什么呢？多了！从j2ee应用服务器，到o/r mapping工具，到这个工作流引擎等等。为什么Shark的持久层采用DODS来实现？就是因为他们是一家人。<br />
<br />
Jbpm的靠山是jboss。Jbpm3的持久层采用hibernate3来实现，也是因为这个原因吧。Jbpm3的图形化流程定义已经决定嵌入到jboss eclipse IDE中，大家看看jboss eclipse IDE preview 1.5版，我们已经可以用插件方式编辑一个jbpm3流程定义文件了。<br />
<br />
Osworkflow的靠山是opensymphony。我是非常喜欢这个组织的，它做出了很多的好东西。在开发工作流管理系统时，我就推荐用它的另外一个东西：webwork2。笔者主持的开源工作流引擎AgileFlow就是基于ww2+spring+hibernate架构实现的。<br />
<br />
完成本段时说句题外话：现在基本上所有的J2EE应用程序服务器都有自己的工作流引擎，如上面提到的Enhydra,jboss和没有提到的websphere和weblogic等，可见，学习工作流引擎技术的确是非常重要的。<br />
<br />
<strong>2．如来神掌</strong><br />
<br />
光有靠山是不行的，周星星加入了斧头帮还不是被邪神打扁了头？要救自己，还是要靠如来神掌。<br />
<br />
Shark的流程定义语言是XPDL，我们知道，XPDL的两个最重要的概念是Process和Activity。XPDL中的Activity是基于UML1.x中的活动图的概念。活动图天生的适于工作流程建模，它相对于状态图的一个最大的优点是容易做并发线程的分叉控制，这些并发线程可以同时执行也可以顺序执行；它还有一个优点是有泳道的概念，可以控制工作流引擎中的任务的产生。Shark的如来神掌是活动图。<br />
<br />
Osworkflow的如来神掌又是什么呢？我们知道，它有个重要概念是State&#8230;&#8230;呵呵，我们知道了，它的如来神掌是FSM。不知道FSM是什么东西？？那你读大学时肯定不是好学生；当然了，不知道也不打紧，你把他类似理解为状态图就可以了。Osworkflow中的State是由step和status联合表达的，一个State就是一个step中的某个status；而state的转换由action来驱动，类似状态图中的event,因为一个event对应一个action嘛。<br />
<br />
Jbpm的如来神掌就没有上面的简单了，它结合应用了状态图+活动图+PetriNet的知识，而且，这里的活动图还是UML2.0版的。UML2.0的活动图中，节点不叫活动（Activity）而叫动作(action)，活动成了一个高层次的概念，它包含一个动作序列。一个活动图展现一系列的动作，这些动作组成了活动。Jbpm把action也改名了，称为state。Jbpm使用的状态图的概念有transition/event等，这个自己去看吧。Jbpm来内部实现中还采用了PetriNet的概念，如token,signal等。什么？又不知道PetriNet什么东东？那你大学是学计算机的吗？不是？那你可能是学文科的，学机械/电气/土木工程/交通运输等专业都有接触PetriNet的课程，如果没有学过，还是看看jbpm吧，反正我们也不搞理论，知道大致概念就行。<br />
<br />
<strong>3．市场预测</strong><br />
<br />
做预测是件吃力不讨好的事情，好多国外的大师做的预测也是被人骂得&#8230;&#8230;幸亏我去年年中在《工作流之大局势》中做的预测还是基本正确。那时我的预测是：Shark&#8230;&#8230;将登上头号宝座。应该说，在那篇文章发表前，国内的工作流引擎使用率最高的是osworkflow;到去年年底，Shark就占有了明显的优势地位，我分析有如下原因：<br />
<br />
1）&nbsp; 国内的企业都看中XPDL，因为这意味着在产品说明书中又可以吹牛说&#8220;我们遵循WFMC&#8230;&#8230;&#8221;<br />
<br />
2）&nbsp; 因为我自诩&#8220;Shark工作流引擎在国内的主要推广者&#8221;，大部分给我反馈工作流管理系统开发选用技术的朋友都是用的Shark<br />
<br />
3）&nbsp; Shark的确是一套不错的工作流引擎，就算你只是想学习XPDL，你也可以从学习Shark开始<br />
<br />
现在已经到了《工作流之大局势》中说的从封建社会向资本主义转型的时代，而驱动这一转型的，不是别人，正是上面说的jbpm。Jbpm3将在3月发布阿尔发版，jbpm3的最终版将支持bpel4ws的核心部分。所以，我估计，Shark将在引领风骚数百天后，被jbpm3赶下第一宝座。笔者的开源敏捷工作流开发框架AgileFlow将整合jbpm3，同时对agile引擎和jbpm3引擎提供支持。<br />
<br />
但bpel4ws真的就和我们这么快的亲密接触了吗？没有。我估计在今年它是不会真正走进我们的生活的，那会是什么时候呢？这将是我下篇文章要预测的内容，我现在可不敢乱说，我现在考虑的是，是不是要自诩&#8220;jbpm3工作流引擎在国内的主要推广者&#8221;，呵呵。<br />
<br />
作者Blog：http://blog.csdn.net/hongbo781202/<br />
<br />
<img src ="http://www.blogjava.net/loyalgl/aggbug/257465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loyalgl/" target="_blank">龙樱</a> 2009-03-03 09:22 <a href="http://www.blogjava.net/loyalgl/archive/2009/03/03/257465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>