月挂夜中央

懒惰程序员

常用链接

统计

最新评论

2010年2月24日 #

网易微博的OAUTH认证开发(java版)

     摘要:     网易微博最近也开放了它的开发平台http://open.t.163.com,其中java版的oauth认证和新浪微博的很类似(貌似都是从twitter那边copy过来的)。但说句实话,网易java版的sdk和新浪微博的比起来,的确上手比较麻烦,里面提供的example都是把access token写死,作为参数,具体的代码如下: public&nb...  阅读全文

posted @ 2011-02-16 21:31 月挂夜中央 阅读(6291) | 评论 (6)编辑 收藏

springside3.*中log4j和java.util.concurrent的结合使用

     摘要:         在springside3.*中的showcase案例中,有一个把log4j的日志存入数据库的演示,下面是我对这个案例的学习笔记。 1、我们首先来看下log4j相关日志的配置: #Async Database Appender (Store business&n...  阅读全文

posted @ 2011-02-13 21:20 月挂夜中央 阅读(2204) | 评论 (0)编辑 收藏

使用XmemcachedClient设置缓存对象过期时间的问题

前几天在做一个涉及到memcache的项目,使用XmemcachedClient来操作memcache,由于是一个季度的数据,保存数据时这样的
 memcachedClient.set(key, expiredTime, value)
其中设置了过期时间为90天
int cacheExpireTime = 60*60*24*90;
结果就杯具了,保存后用get方法取时都是null;后来无意中把过期时间改成小于30天,就完全没有问题,经过谷歌大神的帮忙,终于发现了原因。
服务端的处理
时间处理源代码【memcached.c】如下:
#define REALTIME_MAXDELTA 
60*60*24*30                     // 定义30天的秒数
static rel_time_t realtime(const time_t exptime) {
       
if (exptime == 0return 0;
       
if (exptime > REALTIME_MAXDELTA) {                       // 超过30天,是绝对时间
              if (exptime <= process_started)                         // 小于进程启动日期
                      return (rel_time_t)1;                                  //
              return (rel_time_t)(exptime - process_started);   // 返回进程启动之后的时间差
       }
 else {                                                                   // 不超过30天,是相对时间
              return (rel_time_t)(exptime + current_time);       // exptime + (tvsec - process_started)
       }

}
原来超过30天就自动转换成绝对时间,和进程启动时间比较,显然60*60*24*90小于启动日期的绝对数,所以对象一存入就过期了,肯定取不到数据。
具体的问题请围观这篇文章:http://blog.sina.com.cn/s/blog_539d361e0100nc9h.html

posted @ 2011-01-21 16:18 月挂夜中央 阅读(4903) | 评论 (0)编辑 收藏

xfire的webservice方法中date类型参数为null出现空指针错误的问题

最近在使用xfire开发webservice,发现一个这样的问题,如果注册的webservice 方法中的参数有Date类型时,调用该方法时把Date型参数填入null,就会报空指针错误,这是xfire的一个bug,很可惜在xfire官方网站上最新版的xfire版本是1.2.6,在这个版本中问题仍然没有解决,而解决的方法在codeHaus的jira中其实发现了这个问题,这个问题主要出在org.codehaus.xfire.aegis.type.basic.DateTimeType的writeObject方法,在1.2.6中这个方法的代码是这样的:

public void writeObject(Object object, MessageWriter writer, MessageContext context)
    
{
        Calendar c 
= Calendar.getInstance();
        c.setTime((Date) object);
        writer.writeValue(format.format(c));
    }
修改过后的代码如下:
public void writeObject(Object object, MessageWriter writer,
            MessageContext context) 
{
        
if (object != null{
            Calendar c 
= Calendar.getInstance();
            c.setTime((Date) object);
            writer.writeValue(format.format(c));
        }
 else {
            writer.writeXsiNil();
        }

    }
加了个对null的判断就好了。很不幸的是xfire现在变成了cxf,指望官方在新的xfire版本中改正这个bug是没戏了,大家还是自己改改用吧。

posted @ 2010-02-24 09:12 月挂夜中央 阅读(3736) | 评论 (2)编辑 收藏