|
笔名:寅鸣 |
| 地区: 山东-青岛 | |
| 作者相册 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
生活的方向
一直都以为自己喜欢忙碌的生活,经历了一些事情后才发现自己向往的是一种悠闲的生活,自己给自己打工,有一份过得去的收入,有大量的自由时间可以支配,做自己喜欢的事情。
只是不知道我向往的生活不知道需要奋斗多久才会到来。
姗姗来迟的《领域驱动设计》
实在记不清《领域驱动设计》一书最早的出版广告是什么时候了,当时无数的人奔走相告,企盼本书的早日出版,没想到随后却是漫长的等待,似乎好事都是需要多磨的。
2006年的3月份该书终于出版了,手里捧着这本书真的很高兴,接下来可能又要开始思考和感悟了。
架构师一天的感悟(二)
最近正在努力研究工作流技术,越玩越感觉到这东西在开发和定制复杂流程方面所表现出来的灵活性。不由得想起以前参与的项目里面用户近乎变态的业务流程,当时全部都是硬编码完成的,如果用工作流描述既清晰又灵活。
有些技术并不像你想象的那样没有用处,如果你看不到它的实用价值可能是因为你的眼光看不到它的价值,不妨将它放置一段时间再回头审视它,相信会发现些什么。
架构师一天的感悟(一)
最近设计一个模块,里面使用JMS、脚本语言等技术,从扩展性和功能方面感觉是自己比较满意的东西,但是体会最深的就是架构师不在于你掌握了多少新技术,而是把技术在正确的地方以正确的方式使用。
早就知道脚本语言的优点,也一直想使用它,但是以往的设计中最终都没有使用的原因就是有一种为了使用技术而使用技术的感觉,不是开发真的需要这种技术。
BeanSell字符串处理技巧
最近项目上有操作Word文档需求,虽然Apache提供了POI组件,但是使用比较麻烦。不过Office2003提供了XML的文档存储格式,所以复杂的文档操作就变成了对XML的操作,甚至是对字符串的简单查找替换。
我们的思路是先生成模板文件(XML格式),并在需要填入内容的地方做上替换标记,将XML文件读入内存以后当作普通字符串进行查找替换,最后生成正式的文档。
查找替换的规则我们使用Java脚本保存在文本文件里,执行变换的时候从文件里读入,然后使用BeanShell解析就好。
但是我们在进行单元测试的时候发现当字符串直接进出BeanShell解析器的时候中文就会乱码,即使使用UTF-8字符集也没用,最后我们在字符串进出BeanShell的时候先将其变换成byte数组,乱码的问题才算解决。但是当字符串对象包含在别的对象里面则不会出现这个问题,例如放在一个List里。
ActiveMQ初体验
项目上因为一个操作比较耗时所以决定使用JMS的异步消息方式实现,最终选择了开源的ActiveMQ,于是地狱般的体验之旅开始了。
第一天开始了。首先这东西文档和资料少的可怜。下载的zip包里居然没有api文档,网站上的api文档也不全,另外开发和运行所需要的jar也不全,比如activemq-container-3.2-SNAPSHOT.jar这个包就是我在它的网站上单独下载的。然后看它官方网站上的例子,几乎只有些片断,而且3.0和4.0版本的还不一样。
去google上狂找了一通资料,终于在Spring里配置好了这个烂东东,一启动发现报一个DTD的验证错误,可是使用它提供的bat文件启动却没有报这个错误,不过好在不影响正常运行。
先试着传了些字符串进行试验,很成功,但是为了方便,项目里打算直接传递序列化的对象,等程序写完了一测试,问题又出来了。发现报以下错误:
org.springframework.jms.MessageFormatException: Only objectified primitive objects and String types are allowed; nested exception is javax.jms.MessageFormatException: Only objectified primitive objects and String types are allowed; nested exception is javax.jms.MessageFormatException: Only objectified primitive objects and String types are allowed
javax.jms.MessageFormatException: Only objectified primitive objects and String types are allowed
at org.apache.activemq.command.ActiveMQMessage.checkValidObject (ActiveMQMessage.java:330)
at org.apache.activemq.command.ActiveMQMessage.setObjectProperty(ActiveMQMessage.java:312)
at com.creation.fax.FaxTransmitter$1.createMessage(FaxTransmitter.java:45)
at org.springframework.jms.core.JmsTemplate.doSend (JmsTemplate.java:500)
at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:489)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:432)
at org.springframework.jms.core.JmsTemplate.send (JmsTemplate.java:486)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:472)
at com.creation.fax.FaxTransmitter.transmit(FaxTransmitter.java:37)
at com.creation.fax.TestActiveMQ.main(TestActiveMQ.java :33)
好在是开源的东东,马上又去下载了它的源代码,发现报错的地方是这样实现的:
public void setObjectProperty(String name, Object value) throws JMSException {
checkReadOnlyProperties();
if (name == null || name.equals("")) {
throw new IllegalArgumentException(
}
checkValidObject(value);
PropertySetter setter = (PropertySetter) JMS_PROPERTY_SETERS.get(name);
if( setter != null ) {
setter.set(this,value);
} else {
try {
this.setProperty(name, value);
} catch (IOException e) {
throw JMSExceptionSupport.create(e);
}
}
}
private void checkValidObject(Object value) throws MessageFormatException {
if(!(value instanceof Boolean || value instanceof Byte || value instanceof Short || value instanceof Integer ||
value instanceof Long || value instanceof Float || value instanceof Double || value instanceof String ||
value == null)) {
throw new MessageFormatException("Only objectified primitive objects and String types are allowed");
}
}
注意我红字标出的部分,这是肯定没法支持java对象的,然后又开始了疯狂的查找资料之旅。
第二天来临了,一时找不到解决这个问题的办法,最后决定将对象变换成XML字符串进行传递,在接收端再进行一次解析来解决这个问题,好在我们实际传递的东西都是字符串,所以不存在问题。
鸡狗不合,好事多磨
今年开了好头,找到了自己喜欢的mm,打算结束自己一年的北飘生活,回到青岛一切从头再来。没想到真的应了好事多磨这句话,mm的妈妈说鸡狗不合。
中国五千年文明,积淀了深厚的文化底蕴,但也留下了太多的封建迷信,世间本没有属相(包括星座),我们发明了他们的同时却也给他们赋予了太多的东西。我们看到的听到的因为这些迷信的东西导致的悲剧难到还不够多吗?有些东西是该在我们年轻一代的身上结束它的使命了。
对mm妈妈的观点,我只能尽人事,听天命了,希望好事多磨最后别磨出一个坏的结果。
新年新计划
本小公鸡把鸡年送走了迎来了狗年,新年新计划,看看本年度我的计划。
其余的还没想到,以后再补充吧。
淡淡的牵挂
春节一天比一天近了,第一次从外地赶回家和家里人团圆,不由得思乡心切。那天我的一个姐姐(我原来的同事,比我大,就要当我姐姐,我也是被逼的
)在QQ上发信息说让我回去相亲,这两天和MM初步接触中,慢慢的对青岛的思念又多了一份淡淡的牵挂。
一种说不清的感觉,难道这就是触电的感觉?也许没人能告诉我答案,除了我自己。
Oracle10g新版JDBC驱动终于修正了lob的蹩脚用法
今天项目上也遇到了使用Hibernate在Oracle数据库操作lob的问题,上网找了一大堆方案都不算理想,在java视线论坛上偶然发现有人说10g的数据库配合新版本的JDBC已经解决了这个问题,抱着试试看的心情试验了一下,果然让人惊喜不已。
要点如下:
1、首先数据表中的clob类型对应java持久化类的String类型;而blob类型对应byte[]类型。
2、定义hibernate标签时,持久化类中对应clob类型的属性的hibernate type应为text;而对应blob类型的属性的hibernate type应为binary。
3、以后访问这些对应clob和blob类型的属性时,按普通属性处理,不需要特别编码。