博文

目前显示的是 四月, 2008的博文

这个五一,很短,并且没有迷笛

你还要问我为什么讨厌奥运吗?还要继续问?——————————以下为转载——————————迷笛音乐学校重要通告: “重返乌托邦”紧急停办……4月25日,我们欣喜地告知所有支持迷笛的朋友们:我们要继续在五一做自己的校园音乐会。昨天,4月27日,新华社向全国发布了消息:安徽阜阳 789名儿童感染肠道病毒,19个孩子已经死亡。今天,4月28日,山东发生火车相撞的特重大事故,目前死亡人数增至70人伤者升至416人。现在,我们向所有亲爱的朋友们道歉,因为这些伤痛,我们决定停止“重返乌托邦”的音乐会,并将通知所有计划参演的中外乐队,让我们为那么多无辜的孩子祈祷;让我们为挣扎在病榻上的伤痛的同胞们祈祷,除了祈祷,我们还能够做些什么呢?!今天傍晚,一个6岁的小男孩对他爸爸说:“爸爸,妈妈说有好多小朋友生病死了。。。”也许我们国人已经慢慢习惯这么多的伤害了,也许我们国人的情感已经渐渐麻木了,也许我们国家不会为这么多的人祸降半旗,但是,就在今天,我们大家应该团结起来表明我们的态度,应该毫不犹豫地宣扬我们的立场:停止娱乐吧,为了深切的纪念!已经来到北京的或者买了车票将要来到北京的朋友们,如果你们还愿意来学校看看,我们就一起坐在草坪上聊聊天吧,那时候也许语言很少,但我们的心会深深地交融。再次向所有支持我们的朋友们深表歉意,但我们知道,你们爱迷笛,所以你们肯定更爱这个国家,你们永远是好样的!北京迷笛音乐学校2008年4月29日凌晨

dojox.layout.ContentPane中的dojox.Grid必须设置height,否则无法显示

我在页面中通过dojox.layout.ContentPane载入一个子页面。子页面中放置了一个dojox.Grid。<styletype="text/css">@import"js/dojox/grid/_grid/tundraGrid.css"; </style><scripttype="text/javascript"> dojo.require("dojox.grid.Grid"); dojo.require("dojox.grid._data.model"); dojo.require("dojo.data.ItemFileReadStore"); // a grid view is a group of columns. var logview = { cells: [[ {name:'level', field:"level"}, {name:'className', field:"className"}, {name:'fileName', field:"fileName"}, {name:'lineNumber', field:"lineNumber"}, {name:'methodName', field:"methodName"}, {name:'loggerName', field:"loggerName"}, {name:'startDate', field:"startDate"}, {name:'logDate', field:"logDate"}, {name:'threadName', field:"threadName"} ], [ {name:'message', colSpan:"9&qu…

类名少写个public,找了一下午

(好累,终于可以回家了。) 一个同事写了一堆类,然后将某个类交给我让我用axis2发布成web service。但是在调用的过程中出现这样的错误: AxisServlet:152 - org.apache.axis2.AxisFault: java.lang.RuntimeException: java.lang.IllegalAccessException: Class org.apache.axis2.databinding.utils.BeanUtil can not access a member of class com.mypage.xxxx with modifiers "public" 如果 是java老手,一眼看这错误就知道是jre报告的,就知道原因了。而我却晕了一下午。 我一点点的跟踪调试,出错的位置不是在axis2中,而是在axiom2中。我自己写段代码查看那个出错的类是不是符合java bean规范,结果一切都正常啊。axis2从我的类中获取bean信息,然后交给axiom2生成xml.axiom在往xml中添加element的时候出错了。于是我就拼命的往axiom2里面跟,代码好多,好茫然啊。直到实在没有勇气再跟下去,就搜了下这个错误。发现,无非就是axiom/axis在org.apache.xxx包内,而我同事的那个类声明的时候没有加public。oh。。。。于是是可以通过java bean接口获取类的各种信息,但是,没有权限通过read/write accessor去操作该类的对象。于是就出错了嘛。而由于这个对象是我创建好返回给它的,所以出错时不是说无法创建对象,而是说无法访问该对象的某个函数。我开始一直以为是某个成员变量忘了加getter或者setter。 最近精神状态真是不好,本来以为没啥不会影响到工作。结果,嗯…………饿死了!

Indiana快要发布了?

sun说它将在5月5日发布opensolaris的第一个发行版。我推测是Indiana。因为它在2月的时候刚发布了Indiana preview 2,并说预计在今年夏天发布正式版。
但是相比而言,我还是喜欢玩Nevada

tomcat中hibernate的数据库连接问题解决了

首先,把Hibernate的session管理模式设置为thread。那么每个thread将会有一个单独的SessionFactory<!-- Enable Hibernate's automatic session context management --><propertyname="current_session_context_class">thread</property>那么在线程结束的时候SessionFactory就会析构,然后所有资源都会被释放,数据库连接也会被释放。
然后写一个这样的Helper提供 SessionFactorypublicclassHibernateUtil{ privatestaticfinal SessionFactory sessionFactory; static { 。。。 初始化SessionFactory } publicstatic SessionFactory getSessionFactory(){ return sessionFactory; } } 然后呢,给tomcat做一个 Listenerimport javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; publicclassHibernateListenerimplementsServletContextListener{ publicvoidcontextInitialized(ServletContextEvent event){ HibernateUtil.getSessionFactory(); // Just call the static initializer of that class } publicvoidcontextDestroyed(ServletContextEvent event){ HibernateUtil.getSessionFactory().close(); // Free all resources } } 于是每次请求结束的…

hibernate数据库连接该怎么关闭

我在hibernate.cfg.xml中采用的是最普通的方式,将连接池的大小设置成1。<propertyname="connection.pool_size">1</property>然后执行这样的代码org.hibernate.Session s = DBConn.getSessionFactory().getCurrentSession(); s.beginTransaction(); 。。。。 s.getTransaction().commit(); 然后发现,如果是在eclipse中通过junit执行,那么一切正常。
如果是tomcat/servlet,那么每执行一次就会新打开一个数据库连接,而且它不关。
于是我就想显式的关闭它,我在commit后加上s.close(),结果hibernate在close语句抛出一个异常说session已经关闭了。
谁能告诉我咋回事嘛?
数据库连接立刻就又满了~~~~

获得了一个google app Engine邀请

“ Hello,
Thanks for signing up to try Google App Engine! Your account has been activated, so you can begin building applications!”
人生之不如意事,十之八九。喜欢C++的时候,偏偏买的空间是php。刚刚喜欢上了jsp,偏偏得到的又是python/Django。唉……
总之,现在这个主机用不了多长时间了。早做打算

变态,总是找不到hibernate.cfg.xml

hibernate总是找不到hibernate.cfg.xml,于是我就想把hibernate.cfg.xml的写死写绝对路径,/etc/hibernate.cfg.xml这样的。但是在windows下的大哥大姐们成功了,而我没有。后来看了下源代码,哦,开头的/被过滤掉了。String stripped = resource.startsWith("/") ? resource.substring(1) : resource; InputStream stream = null; if (classLoader!=null) { stream = classLoader.getResourceAsStream( stripped ); } if ( stream == null ) { stream = Environment.class.getResourceAsStream( resource ); } if ( stream == null ) { stream = Environment.class.getClassLoader().getResourceAsStream( stripped ); } if ( stream == null ) { thrownew HibernateException( resource + " not found" ); } so,我无耻的又多写了一个'/'.但是还是不行。
最后发现,其实只要把hibernate.cfg.xml放在src目录下。其它的一切copy动作,eclipse都会帮着自动完成。

"你还在用数据库吗"?

“你还在用数据库吗?” 大2的时候在《程序员》上看到hibernate的这句广告的时候,我深深的为震惊。
我发现jdbc和java beans实在是太棒了。于是就在找方便的工具在它们之间利用java的反射自动实现object-relation的map。先看了下JDO,EJB,后来找到了hibernate。
嗯,今天开始学hibernate,遇到不少问题。
1、找不到某某class
hibernate不一定要j2ee,在j2se中也能跑起来。hibernate用到了很多第三方的库,我本来很笨,挨个去网上搜然后下载。后来发现,啊,hibernate core的那个20多兆的包里面都有。在lib目录下。
2、drop table的语句有问题。
mysql的语法为:droptableifexists`tablename`;hibernate生的为:droptable tablename ifexists ;3、整数类型的主键如何生成?
@Id @GeneratedValue(strategy=GenerationType.AUTO)
不行。
语句为:
id integer generated by default as identity (start with 1)
不支持。
后来发现这两个问题都是因为 hibernate.cfg.xml中dialect 没有设置对。<!-- SQL dialect --><propertyname="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

今天被java bean折腾了一下午

上大学的时候, Joyer Huang曾非常激动的给我介绍java bean是一个多么多么令人兴奋的组件技术,呃,但是那时候,我压根儿不想去学java。
这周在用axis2架一些简单的web service,无奈文档奇缺。本来一切都写完了,今天调试的时候发现,axis在将xml反序列化成object的时候出了问题。当我使用复杂类型的时候,它并没有把对象的每个字段赋予正确的值,它们都是默认值。哦,去axis2的网站来回溜达,它反复的在讲Plain Old Java Object,当时我还没有意识到bean。
然后反复的调试,读axis2的源代码,然后跟踪到BeanUtil类。然后发现:BeanInfo beanInfo = Introspector.getBeanInfo(beanObject.getClass()); PropertyDescriptor [] propDescs = beanInfo.getPropertyDescriptors(); 它要求参数的类型是一个bean。然后根据bean工具去获取bean的所有属性。然后解析xml,每解析到一个字段,就去bean info里面找找有没有这个属性,如果有,就赋值,否则就跳过。
然后我发现我唯一的问题就是:没有把类写成bean。所幸,eclipse的编辑功能非常强大,能自动生成getters/setters。然后写段代码测试下:@Testpublicvoid 列出所有属性(){ BeanInfo bi=null; PropAttr attr=new PropAttr(); try{ bi=Introspector.getBeanInfo(attr.getClass()); }catch(IntrospectionException ex){ logger.error(ex); } for(PropertyDescriptor d: bi.getPropertyDescriptors()){ logger.info(d.getName()); } } bingo!

google app太好玩了!

托moses的福,试用了google app engine,觉得它太棒了
1、它给开发者提供了免费的网络服务
2、它提供了一套cgi的开发部署框架
wonderful!
但是现在问题还是比较多的。
比如我在py文件中输入了一句中文,google就会给我一个难看的500(在我本地上测试
是正常的),而且还不给任何错误日志。
呃,我不会python。试着玩玩吧。
期待它能推出其它语言,例如perl、java、C++
http://mosestsetapplication.appspot.com/
—————————————————————————————————————————————
Google 今天发布了一个非常有趣的服务, Google App Engine.
Google App Engine 是一个专为开发者而设的平台, 目前只支持 Python. 开发者可以完完整整地将自己编写的在线应用运行于 Google 的服务器里. Google 的官方声明说, Google 希望 App Engine 能令网络开发者更容易创建及升级在线应用, 而不用花费精力在系统的管理及维护上. 通过 App Engine, 开发者可以实现:
*编写代码并执行
开发者完全不必担心应用运行所需要的资源, 因为 Google App Engine 会提供所有东西.
*全面关注流量变化
得益于 Google 自身强大的 Bigtable 数据库系统及相关的可升级的基础组件, Google App Engine 能提供全自动化的复制及负载平衡, 使应用能更容易升级以满足不同用户群的需要, 从一至一百万.
*轻松与Google其它服务整合
开发者可以直接通过 Google App Engine 使用内置的组件及 Google 的 API 资源库所提供的即插即用式的功能.
Google App Engine 目前是免费提供的.
Google 称以后会支持更多其它语言. (Python 的发明者 Guido Van Rossum 实际也是 Google 的雇员. 呵呵..)
如果你是 Python 的开发者, 可以到这个地址申请 :)
http://code.google.com/appengine/

飞信协议中的扩展方法

晚上没事做就用wireshark抓包玩。filter为:tcp port 8080 and host 221.130.45.203
零零碎碎记录了些结果在此
————————————————————————
飞信协议中的扩展方法
Service方法(S),是IETF定义的一个SIP扩展方法,用来向SIP服务器请求额外的服务。
协议中,现发现的所有部分,凡是要用到字符串的,统一都是用UTF-8。
1、心情短语
(1)获取
S fetion.com.cn SIP-C/2.0
F: 123456789
I: 2
Q: 1 S
N: GetPersonalInfo
L: 172
<args><personal version="11" attributes="all" /><services version="11" attributes="all" /><config version="109" attributes="all" /><mobile-device attributes="all" /></args>
(2)设置
S fetion.com.cn SIP-C/2.0
F: 123456789
I: 47
Q: 1 S
N: SetPersonalInfo
L: 48
<args><personal impresa="" /></args>
服务器返回:
SIP-C/2.0 200 OK
I: 47
Q: 1 S
L: 67
<results><personal version="14" impresa="" /></results>
每设置一次,version号就会增加一个。
2、获取好友列表中的好友信息
S fetion.com.cn SIP-C/2.0
F: 123456789
I: 16
Q: 1 S
N: GetContactsInfo
L: 137
<args><contacts attributes="all" extended-attribu…

64位的linux下pidgin的qq为什么不能登录呢?

经我初步查明,是这个函数qq_send_packet_login 这里出现问题,发出login包后,因为包的格式有问题,被服务器直接丢弃了。读了一遍,发现qq_encrypt附近比较可疑。因为这些函数写的比较难懂。还没搞明白。

pidgin 2.4.1 + fetion v0.97

pidgin 2.4.1已经于2008年的愚人节发布。
我把国人开发的飞信插件集成进去,然后重新打了个包在这里:下载
感谢pidgincn的magicgod 提供一个新的下载地址:http://www.pidgincn.com/deploy/pidgin-2.4.1.tar.bz2Update: 2014-03-05本文中下载链接已经失效。已删除。