<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>MoDoFo.println("</title>
	
	<link>http://zhangv.com</link>
	<description>Life for Idea - forever young</description>
	<lastBuildDate>Mon, 09 Nov 2009 07:09:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/zhangv" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>spring事务配置总结</title>
		<link>http://feedproxy.google.com/~r/zhangv/~3/UQPIFtpxgCw/1304</link>
		<comments>http://zhangv.com/archives/1304#comments</comments>
		<pubDate>Mon, 09 Nov 2009 03:31:40 +0000</pubDate>
		<dc:creator>zhangv</dc:creator>
				<category><![CDATA[技术(Tech)]]></category>
		<category><![CDATA[spring 事务配置]]></category>

		<guid isPermaLink="false">http://zhangv.com/archives/1304</guid>
		<description>这里总结一下吧，否则像我这种记性差的人，下次遇到类似的问题还要重新做一遍。
背景：使用toplink jpa，存在外部webservice调用 - 内外事务"混搭"的情况
目标：将事务定义为方法级别（每个service方法都是独立一个事务，并提交），外部调用不置入事务
方法：
1.spring 事务aop配置
--要点：配置propagation为require_new,同时隔离级别设置为READ_COMMITTED - 只可读提交，不可脏读；ABCService中的所有方法配置为非事务 - propagation为NEVER（这样在执行时会报IllegalStateTransaction异常，并不会影响），或者这里外部调用也是用requirenew。；
&amp;#60;tx:advice id="txAdvice" transaction-manager="entityTransactionManager"&amp;#62;
&amp;#60;tx:attributes&amp;#62;
&amp;#60;tx:method name="get*" read-only="true" /&amp;#62;
&amp;#60;tx:method name="find*" read-only="true" /&amp;#62;
&amp;#60;tx:method name="save*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/&amp;#62;
&amp;#60;tx:method name="create*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/&amp;#62;
&amp;#60;tx:method name="confirm*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/&amp;#62;
&amp;#60;tx:method name="redirect*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/&amp;#62;
&amp;#60;tx:method name="receive*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/&amp;#62;
&amp;#60;tx:method name="delete*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/&amp;#62;
&amp;#60;tx:method name="update*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/&amp;#62;
&amp;#60;tx:method name="*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/&amp;#62;
&amp;#60;/tx:attributes&amp;#62;
&amp;#60;/tx:advice&amp;#62;
&amp;#60;tx:advice [...]&lt;img src="http://feeds.feedburner.com/~r/zhangv/~4/UQPIFtpxgCw" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://zhangv.com/archives/1304/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zhangv.com/archives/1304</feedburner:origLink></item>
		<item>
		<title>Twitalk</title>
		<link>http://feedproxy.google.com/~r/zhangv/~3/CYi3fB572UA/1301</link>
		<comments>http://zhangv.com/archives/1301#comments</comments>
		<pubDate>Thu, 05 Nov 2009 11:18:54 +0000</pubDate>
		<dc:creator>zhangv</dc:creator>
				<category><![CDATA[非技术(non-tech)]]></category>

		<guid isPermaLink="false">http://zhangv.com/archives/1301</guid>
		<description>使用手机作为Twitter客户端，通过语音识别读入信息，然后发布到Twitter
在javame有一家叫conversay的公司正主持着Java Speech API 2 (JSAPI2)，专门用来做语音识别和转换的一套组件和API。还没有试用，试用后再把使用情况写出来。做语音识别的freetts更有名一些但是看了一下要jse1.4以上。
在google的时候倒是发现不少android上的相关讨论。看来通过移动设备做更多的事将是未来互联网发展的主流之一。
Powered by MoFire
No tags for this post.&lt;img src="http://feeds.feedburner.com/~r/zhangv/~4/CYi3fB572UA" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://zhangv.com/archives/1301/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zhangv.com/archives/1301</feedburner:origLink></item>
		<item>
		<title>常用正则表达式</title>
		<link>http://feedproxy.google.com/~r/zhangv/~3/95MsW_E5W_U/1299</link>
		<comments>http://zhangv.com/archives/1299#comments</comments>
		<pubDate>Thu, 05 Nov 2009 07:47:56 +0000</pubDate>
		<dc:creator>zhangv</dc:creator>
				<category><![CDATA[技术(Tech)]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[正则]]></category>

		<guid isPermaLink="false">http://zhangv.com/archives/1299</guid>
		<description>正则表达式用于字符串处理、表单验证等场合，实用高效。现将一些常用的表达式收集于此，以备不时之需。 
匹配中文字符的正则表达式： [\u4e00-\u9fa5]评注：匹配中文还真是个头疼的事，有了这个表达式就好办了
匹配双字节字符(包括汉字在内)：[^\x00-\xff]评注：可以用来计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）
匹配空白行的正则表达式：\n\s*\r评注：可以用来删除空白行
匹配HTML标记的正则表达式：&amp;#60;(\S*?)[^&amp;#62;]*&amp;#62;.*?&amp;#60;/\1&amp;#62;&amp;#124;&amp;#60;.*? /&amp;#62;评注：网上流传的版本太糟糕，上面这个也仅仅能匹配部分，对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式：^\s*&amp;#124;\s*$评注：可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式
匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*评注：表单验证时很实用
匹配网址URL的正则表达式：[a-zA-z]+://[^\s]*评注：网上流传的版本功能很有限，上面这个基本可以满足需求
匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$评注：表单验证时很实用
匹配国内电话号码：\d{3}-\d{8}&amp;#124;\d{4}-\d{7}评注：匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号：[1-9][0-9]{4,}评注：腾讯QQ号从10000开始
匹配中国邮政编码：[1-9]\d{5}(?!\d)评注：中国邮政编码为6位数字
匹配身份证：\d{15}&amp;#124;\d{18}评注：中国的身份证为15位或18位
匹配ip地址：\d+\.\d+\.\d+\.\d+评注：提取ip地址时有用
匹配特定数字：^[1-9]\d*$　 　 //匹配正整数^-[1-9]\d*$ 　 //匹配负整数^-?[1-9]\d*$　　 //匹配整数^[1-9]\d*&amp;#124;0$　 //匹配非负整数（正整数 + 0）^-[1-9]\d*&amp;#124;0$　　 //匹配非正整数（负整数 + 0）^[1-9]\d*\.\d*&amp;#124;0\.\d*[1-9]\d*$　　 //匹配正浮点数^-([1-9]\d*\.\d*&amp;#124;0\.\d*[1-9]\d*)$　 //匹配负浮点数^-?([1-9]\d*\.\d*&amp;#124;0\.\d*[1-9]\d*&amp;#124;0?\.0+&amp;#124;0)$　 //匹配浮点数^[1-9]\d*\.\d*&amp;#124;0\.\d*[1-9]\d*&amp;#124;0?\.0+&amp;#124;0$　　 //匹配非负浮点数（正浮点数 + 0）^(-([1-9]\d*\.\d*&amp;#124;0\.\d*[1-9]\d*))&amp;#124;0?\.0+&amp;#124;0$　　//匹配非正浮点数（负浮点数 + 0）评注：处理大量数据时有用，具体应用时注意修正
匹配特定字符串：^[A-Za-z]+$　　//匹配由26个英文字母组成的字符串^[A-Z]+$　　//匹配由26个英文字母的大写组成的字符串^[a-z]+$　　//匹配由26个英文字母的小写组成的字符串^[A-Za-z0-9]+$　　//匹配由数字和26个英文字母组成的字符串^\w+$　　//匹配由数字、26个英文字母或者下划线组成的字符串评注：最基本也是最常用的一些表达式
原载地址：http://lifesinger.3322.org/myblog/?p=185


	Tags: regexp, 正则&lt;img src="http://feeds.feedburner.com/~r/zhangv/~4/95MsW_E5W_U" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://zhangv.com/archives/1299/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zhangv.com/archives/1299</feedburner:origLink></item>
		<item>
		<title>Persistence Unit Scope</title>
		<link>http://feedproxy.google.com/~r/zhangv/~3/M8RecW9Zo_Y/1297</link>
		<comments>http://zhangv.com/archives/1297#comments</comments>
		<pubDate>Tue, 03 Nov 2009 08:16:00 +0000</pubDate>
		<dc:creator>zhangv</dc:creator>
				<category><![CDATA[技术(Tech)]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[note]]></category>

		<guid isPermaLink="false">http://zhangv.com/archives/1297</guid>
		<description>Persistence Unit ScopeAn EJB-JAR, WAR, application client jar, or EAR can define a persistence unit.When referencing a persistence unit using the unitName annotation element or persistence-unit-name deployment descriptor element, the visibility scope of the persistence unit isdetermined by its point of definition. A persistence unit that is defined at the level of an EJB-JAR,WAR,or application [...]&lt;img src="http://feeds.feedburner.com/~r/zhangv/~4/M8RecW9Zo_Y" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://zhangv.com/archives/1297/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zhangv.com/archives/1297</feedburner:origLink></item>
		<item>
		<title>Mofire issues</title>
		<link>http://feedproxy.google.com/~r/zhangv/~3/-9yGlBjvL9w/1296</link>
		<comments>http://zhangv.com/archives/1296#comments</comments>
		<pubDate>Thu, 29 Oct 2009 00:39:21 +0000</pubDate>
		<dc:creator>zhangv</dc:creator>
				<category><![CDATA[非技术(non-tech)]]></category>
		<category><![CDATA[mofire]]></category>

		<guid isPermaLink="false">http://zhangv.com/archives/1296</guid>
		<description>1  cannot switch camera when the phone has two camera
2 i18n
3 configrable tail
 Powered by MoFire

	Tags: mofire&lt;img src="http://feeds.feedburner.com/~r/zhangv/~4/-9yGlBjvL9w" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://zhangv.com/archives/1296/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zhangv.com/archives/1296</feedburner:origLink></item>
		<item>
		<title>读书笔记 – 容量规划的艺术</title>
		<link>http://feedproxy.google.com/~r/zhangv/~3/q3hKHw3WMMw/1294</link>
		<comments>http://zhangv.com/archives/1294#comments</comments>
		<pubDate>Wed, 28 Oct 2009 02:43:50 +0000</pubDate>
		<dc:creator>zhangv</dc:creator>
				<category><![CDATA[技术(Tech)]]></category>
		<category><![CDATA[capacity-planning]]></category>
		<category><![CDATA[读书]]></category>
		<category><![CDATA[mindmap]]></category>
		<category><![CDATA[容量规划]]></category>

		<guid isPermaLink="false">http://zhangv.com/archives/1294</guid>
		<description>Tags: capacity-planning, 读书, mindmap, 容量规划&lt;img src="http://feeds.feedburner.com/~r/zhangv/~4/q3hKHw3WMMw" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://zhangv.com/archives/1294/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zhangv.com/archives/1294</feedburner:origLink></item>
		<item>
		<title>persistence.xml和类装载</title>
		<link>http://feedproxy.google.com/~r/zhangv/~3/6iSLLfKZ9mI/1292</link>
		<comments>http://zhangv.com/archives/1292#comments</comments>
		<pubDate>Tue, 27 Oct 2009 05:51:53 +0000</pubDate>
		<dc:creator>zhangv</dc:creator>
				<category><![CDATA[技术(Tech)]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[jpa]]></category>

		<guid isPermaLink="false">http://zhangv.com/archives/1292</guid>
		<description>部署时报这个错误:
java.lang.IllegalStateException: PersistenceProvider [oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider@1927691] did not return an EntityManagerFactory for name 'mypu'
通常这样的问题是由于没有找到META-INF/persistence.xml或者是名字写错了。但是这里的配置并没有错，而且使用本地eclipse环境同样适用oc4j也是可以部署成功的。尝试把persistence.xml放到war把下的meta-inf目录，不成功。（原本这个文件是放到web-inf/lib下的一个jar里）后来发现将war打包到ear再去发布就成功了。由此发现了oc4j对于war和ear不同的类装载策略。关于jee的类装载层次可以看这篇文章。



	Tags: 编程, jpa&lt;img src="http://feeds.feedburner.com/~r/zhangv/~4/6iSLLfKZ9mI" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://zhangv.com/archives/1292/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zhangv.com/archives/1292</feedburner:origLink></item>
		<item>
		<title>mini进销存软件</title>
		<link>http://feedproxy.google.com/~r/zhangv/~3/apHOpX1Gz6Q/1290</link>
		<comments>http://zhangv.com/archives/1290#comments</comments>
		<pubDate>Sun, 25 Oct 2009 08:48:42 +0000</pubDate>
		<dc:creator>zhangv</dc:creator>
				<category><![CDATA[技术(Tech)]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[进销存]]></category>
		<category><![CDATA[Idea]]></category>

		<guid isPermaLink="false">http://zhangv.com/archives/1290</guid>
		<description>家里有人要开店，帮忙去看了几个进销存软件，各有特色。管家婆是做的比较久貌似也比较有名，不过安装了一下觉得太复杂，不适合维护。三易通服装进销存界面比较简单，也不复杂，唯一的缺点是只有单机版，不过用在店铺小，对分布没有要求是可以考虑，也不贵600多，还打了个客服电话 - 那边一听就是一程序员，而且号称是终身维护的哦，免费升级。据他说以后会出网络版的 - 不过不会通过免费升级，而是另一个产品。呵呵。最后还看了一个是生财宝，从专业的角度来说，这个产品是最先进的了，但也是操作最复杂的，对非专业的店主来说还是挺有挑战的。可以在任何地方登录，还可以通过短信来定义各种通知 - 比如员工交接班这样的东西，甚至可以远程获取监控视频。目前比较倾向于这个。还看了一个什么赛管家，第一眼就感觉回到了VB时代（10年前），都没怎么用。
其实根据我和这位亲戚沟通，她的需求其实非常非常简单。1.进货 - 直接输入名称，对应各种尺码和数量，进货价，销售价，最低折扣，图片附件2.销售 - 直接根据编号调出物品信息，记录销售信息（销售价），更新库存3.库存 - 可以查询货品及库存数量，销售记录
最多最多，还有一个会员管理，和销售数据有对应。哪里有这样的软件应用呢？



	Tags: 软件, 进销存, Idea&lt;img src="http://feeds.feedburner.com/~r/zhangv/~4/apHOpX1Gz6Q" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://zhangv.com/archives/1290/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zhangv.com/archives/1290</feedburner:origLink></item>
		<item>
		<title>junit单元测试基类</title>
		<link>http://feedproxy.google.com/~r/zhangv/~3/lO4qhi-k7n4/1289</link>
		<comments>http://zhangv.com/archives/1289#comments</comments>
		<pubDate>Thu, 22 Oct 2009 09:43:27 +0000</pubDate>
		<dc:creator>zhangv</dc:creator>
				<category><![CDATA[技术(Tech)]]></category>
		<category><![CDATA[bestpractice]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[开发]]></category>

		<guid isPermaLink="false">http://zhangv.com/archives/1289</guid>
		<description>自己写了一个用来简化代码的单元测试基类，省的每次都要初始化spring和获取相应的bean对象。
&amp;#60;pre language="java"&amp;#62;public class BaseTest&amp;#60;C&amp;#62; {&amp;#160;&amp;#160;&amp;#160; static ApplicationContext ac = null;&amp;#160;&amp;#160;&amp;#160; static {&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; ac = new ClassPathXmlApplicationContext(&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; new String[] {"/test-*.xml"});&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160; protected C target;&amp;#160;&amp;#160;&amp;#160; public BaseTest() {&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160; @Before&amp;#160;&amp;#160;&amp;#160; public void setUp(){&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; Class&amp;#60;C&amp;#62; targetClz = (Class&amp;#60;C&amp;#62;) ((ParameterizedType) getClass()&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; .getGenericSuperclass()).getActualTypeArguments()[0];&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; String targetClzName = targetClz.getSimpleName();&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; String arg0 = [...]&lt;img src="http://feeds.feedburner.com/~r/zhangv/~4/lO4qhi-k7n4" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://zhangv.com/archives/1289/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zhangv.com/archives/1289</feedburner:origLink></item>
		<item>
		<title>java获取昨天的日期</title>
		<link>http://feedproxy.google.com/~r/zhangv/~3/TDWVqN6TAYU/1288</link>
		<comments>http://zhangv.com/archives/1288#comments</comments>
		<pubDate>Tue, 20 Oct 2009 07:46:49 +0000</pubDate>
		<dc:creator>zhangv</dc:creator>
				<category><![CDATA[技术(Tech)]]></category>
		<category><![CDATA[canlendar]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://zhangv.com/archives/1288</guid>
		<description>如果不小心还是会栽跟头，看到网上有的人只是roll(Calendar.Date,-1)就了事了。要么就是判断日，月写一大堆。其实最简单的应该是：
GregorianCalendar cal = new GregorianCalendar();if(cal.get(Calendar.MONTH)==0 &amp;#38;&amp;#38; cal.get(Calendar.DAY_OF_YEAR)==1){&amp;#160;&amp;#160;&amp;#160;&amp;#160; cal.roll(Calendar.YEAR, -1);}cal.roll(Calendar.DAY_OF_YEAR, -1);
不知道是不是最简单的


	Tags: canlendar, Java&lt;img src="http://feeds.feedburner.com/~r/zhangv/~4/TDWVqN6TAYU" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://zhangv.com/archives/1288/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zhangv.com/archives/1288</feedburner:origLink></item>
	</channel>
</rss>
