2012年12月31日星期一

被逼搬家

升级后,最常用的搜索功能没有了,昨天终于忍无可忍搬了

2012年9月4日星期二

weblogic org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.internal.ast.HqlToken

在WEB-INF目录下建一个weblogic.xml文件,文件中写入如下代码: 


<?xml version="1.0" encoding="UTF-8"?>    
  
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">    
  
<weblogic-web-app>    
  
  <container-descriptor>    
  
    <prefer-web-inf-classes>true</prefer-web-inf-classes>    
  
  </container-descriptor>    
  
</weblogic-web-app>   

说明:prefer-web-inf-classes=true是WebLogic's classloader在有重名类时,优先加载Web应用中WEB-INF内的类
也可以
set PRE_CLASSPATH=D:\oracle\weblogic\wlserver_10.3\server\lib\antlr-2.7.7.jar
http://azurelover.blog.51cto.com/2990964/548988

cvc-complex-type.3.1: Value '2.0' of attribute 'version' of element 'entity-mappings' is not valid with respect to the corresponding attribute use. Attribute 'version' has a fixed value of '1.0'

Caused by: org.xml.sax.SAXException: zip:D:/oracle/weblogic/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_user/examsystem-showcase/eymnvq/war/WEB-INF/lib/_wl_cls_gen.jar!/META-INF/orm.xml [Location: Line: 3, C: 138]: org.xml.sax.SAXParseException: cvc-complex-type.3.1: Value '2.0' of attribute 'version' of element 'entity-mappings' is not valid with respect to the corresponding attribute use. Attribute 'version' has a fixed value of '1.0'.
        at org.apache.openjpa.lib.meta.XMLMetaDataParser.getException(XMLMetaDataParser.java:656)

 

将orm.xml
改成
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="1.0" xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/ormhttp://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
</entity-mappings>

java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getSharedCacheMode()Ljavax/persistence/SharedCacheMode

Caused By: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getSharedCacheMode()Ljavax/persistence/SharedCacheMode;
at org.hibernate.ejb.util.LogHelper.logPersistenceUnitInfo(LogHelper.java:39)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:516)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
at weblogic.deployment.PersistenceUnitInfoImpl.createEntityManagerFactory(PersistenceUnitInfoImpl.java:352)
at weblogic.deployment.PersistenceUnitInfoImpl.createEntityManagerFactory(PersistenceUnitInfoImpl.java:332)

 

 

设置setDomainEnv
windows
@rem Enable JPA 2.0 functionality on WebLogic Server 
set PRE_CLASSPATH=D:\oracle\weblogic\modules\javax.persistence_1.1.0.0_2-0.jar;D:\oracle\weblogic\modules\com.oracle.jpa2support_1.0.0.0_2-1.jar

linux
PRE_CLASSPATH=/oracle/weblogic/modules/javax.persistence_1.0.0.0_2-0-0.jar;/oracle/weblogic/modules/com.oracle.jpa2support_1.0.0.0_2-0.jar
export PRE_CLASSPATH

2012年6月1日星期五

Hello JSF



基于一个已有的网络工程

拷贝JSF 和支持的jars包到WEB-INF/lib目录

jsf-impl.jar  

jsf-api.jar

jstl.jar  

standard.jar

配置web.xml以使用Faces Servlet

  <servlet>  

        <servlet-name>Faces Servlet</servlet-name>  

        <servlet-class>  

            javax.faces.webapp.FacesServlet  

        </servlet-class>  

        <load-on-startup>1</load-on-startup>  

    </servlet>  

  

    <servlet-mapping>  

        <servlet-name>Faces Servlet</servlet-name>  

        <url-pattern>*.faces</url-pattern>  

    </servlet-mapping>  

创建faces-config.xml


<?xml version="1.0"?>  

 <!DOCTYPE faces-config PUBLIC  

 "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"  

 "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">  

  

 <faces-config>  

    <navigation-rule>  

        <from-view-id>/index.jsp</from-view-id>  

        <navigation-case>  

            <from-outcome>login</from-outcome>  

            <to-view-id>/welcome.jsp</to-view-id>  

        </navigation-case>  

    </navigation-rule>  

  

   

 </faces-config>

在JSP页面中增加 JSF taglib的引用


<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>  

 <%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>  

 

创建后台bean


package com.capinfo.bean;


public class UserBean {


private String name;  

 

    public void setName(String name) {  

        this.name = name;  

    }  

  

    public String getName() {  

        return name;  

    }  

}



后台bean 在JSF controls中注册(faces-config.xml)

 <managed-bean>  

        <managed-bean-name>user</managed-bean-name>  

         <managed-bean-class>  

             com.capinfo.bean.UserBean  

         </managed-bean-class>  

        <managed-bean-scope>session</managed-bean-scope>  

    </managed-bean>  

增加JSF tags使之与后台bean交互

<f:view>  

        <h:form>  

            <h3>请输入您的名称</h3>  

            名称: <h:inputText value="#{user.name}"/><p>  

            <h:commandButton value="送出" action="login"/>  

        </h:form>  

    </f:view>  



基于一个已有的网络工程
拷贝JSF 和支持的jars包到WEB-INF/lib目录
jsf-impl.jar  
jsf-api.jar
jstl.jar  
standard.jar
配置web.xml以使用Faces Servlet
  <servlet>  
        <servlet-name>Faces Servlet</servlet-name>  
        <servlet-class>  
            javax.faces.webapp.FacesServlet  
        </servlet-class>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
  
    <servlet-mapping>  
        <servlet-name>Faces Servlet</servlet-name>  
        <url-pattern>*.faces</url-pattern>  
    </servlet-mapping>  
创建faces-config.xml

<?xml version="1.0"?>  
 <!DOCTYPE faces-config PUBLIC  
 "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"  
 "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">  
  
 <faces-config>  
    <navigation-rule>  
        <from-view-id>/index.jsp</from-view-id>  
        <navigation-case>  
            <from-outcome>login</from-outcome>  
            <to-view-id>/welcome.jsp</to-view-id>  
        </navigation-case>  
    </navigation-rule>  
  
   
 </faces-config>
在JSP页面中增加 JSF taglib的引用

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>  
 <%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>  
 
创建后台bean

package com.capinfo.bean;

public class UserBean {

private String name;  
 
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return name;  
    }  
}


后台bean 在JSF controls中注册(faces-config.xml)
 <managed-bean>  
        <managed-bean-name>user</managed-bean-name>  
         <managed-bean-class>  
             com.capinfo.bean.UserBean  
         </managed-bean-class>  
        <managed-bean-scope>session</managed-bean-scope>  
    </managed-bean>  
增加JSF tags使之与后台bean交互
<f:view>  
        <h:form>  
            <h3>请输入您的名称</h3>  
            名称: <h:inputText value="#{user.name}"/><p>  
            <h:commandButton value="送出" action="login"/>  
        </h:form>  

CGLIB 代理类 效率

昨天看《Spring 3.x企业应用开发实战》

作者建议将<aop:config>中的proxy-target-class设置为true,默认是false.

也就是<aop:config proxy-target-class="true">

 

理由是:当为false时,spring使用java jdk的java.lang.reflect包中提供的方式来生成代理类

当为true时,spring使用CGLIB包中提供的方式来生成代理类

而代理类执行效率,CGLIB生成的代理类要比jdk生成的代理类高10倍

而生成代理类效率,jdk是CGLIB的8倍

 

所以在使用单例模式的bean ,建议使用CGLIB生成代理类

 

如果使用CGLIB生成代理类,必须引入CGLIB的jar包

 

至于作者怎么得到10倍 8倍的结论,想google一下,结果:


 

2012年5月22日星期二

让Map根据put的顺序排序

org.apache.commons.collections.map 
Class ListOrderedMap

java.lang.Object org.apache.commons.collections.map.AbstractMapDecoratororg.apache.commons.collections.map.ListOrderedMap

All Implemented Interfaces:
java.io.Serializable, java.util.Map, IterableMapOrderedMap

就这个类可以让我们的Map也能像List一样有序了

 

 

参考:http://blog.csdn.net/zxr85/article/details/6274051

IntelliJ IDEA粘贴多行代码时,总是自动缩进

IntelliJ IDEA粘贴多行代码时,总是自动缩进

 

settings->eidtor->smart keys -> reformat on paste  选择 NONE

2012年4月25日星期三

JVM类加载器

java 虚拟机 类加载器有三种

1 根加载器 

   这个加载器不是用java写的,而是C++,所以用java代码访问不到

   它负责加载jre核心类库 

 

2 扩展加载器 ExtClassLoader

    继承自ClassLoader

   它负责加载ext目录下的类

 

3 程序加载器 AppClassLoader 

    继承自ClassLoader

    它负责加载ClassPath下的类

2012年4月12日星期四

宝宝

转自:http://www.25kz.com/thread-21300-1-1.html

我在美国生了两个孩子,生育前后都有培训班,家庭医生每次洗脑让我受益匪浅,我的两个宝宝在婴儿时期乖巧得好像家里没有小婴儿,我甚至疑心她们会不会哭?如今外婆常拿这句傻话笑我。回国后看到朋友或邻居们被小祖宗折磨得精疲力竭,我遇到一个就会分享妈妈经,很没效率,想着将妈妈经写下来或许会帮到手忙脚乱、身心疲惫的年轻爸爸妈妈。再次感谢南加州著名的儿科医生JANE GU,这几年在她的指导下学到很多一辈子都受益的育儿宝典。



绝招一

如何让小宝宝不哭

爱哭的BABY都是爸妈教出来的。才出生的小BABY听不懂话,他们靠条件反射来做判断。中国的家长一听到孩子哭就抱起来。GU医生反复告诫我:孩子一哭就放下来,不哭才抱起来,正好反过来。这样一来,再小的孩子都能明白,不哭的时候才有得抱,这招极灵。放下爱哭的孩子开始训练,看着时钟,不要抱让她哭,准备等10分钟再抱。第一次可以设定5分钟,以后一次比一次时间拉长,我的妞妞第一次就没有熬到5分钟,大约3分半的时候就停了,我已经心疼得肝肠寸断自己都快哭了,一定要忍住了。让孩子知道哭声是叫不来妈妈的。训练“不哭的孩子”要排除4个哭的其他原因:尿了、病了、饿了,困了。上帝保佑,我家两个孩子都不会无理由哭,偶尔哭一下当作运动也是极少数,妞妞和妙妙100%是快乐的宝宝,躺在床上都咯咯笑出声的孩子。



绝招二

如何让刚出生的小宝宝一觉睡到天亮

美国医生再三批评我:你不是好妈妈,隔壁的孩子一睡到天亮,隔壁的妈妈是好妈妈,你不是!每次去看家庭医生我都挨批评,原因是我晚上要喂奶1-2次,抱怨养孩子很累很辛苦。医生告诉我一个观念:人类晚上不需要进食!我傻乎乎问,为什么呢?医生没办法,只好大声说:因为我们是人类!我印象极深,妞爸早就笑弯腰了。很显然,我担心BABY晚上会饿根本是多余的,10-12小时的连续睡眠,对孩子来说比吃奶重要100倍!我们被老大妞妞折磨很惨,晚上吃一顿奶的坏习惯一直延续到快2岁。养老二的时候按照医生说的,彻底让我和老公解脱出来,从刚出生到一个礼拜我家妙妙被训练距离5个小时才吃奶,2个礼拜之后,孩子就能睡天亮了。晚上不需要吃奶!!!(三个感叹号是请妈妈们切记的意思)



绝招三

如何让宝宝自己静静入睡,不要摇晃

医生说,一个快乐的BABY会睡在床上唱歌的(不是真唱,是婴儿咿咿呀呀)!婴儿的大部分时光都需要在床上度过,这里请爸爸妈妈们记住,床是不会动的!所以,抱起婴儿的时候不要摇晃,不要来回走动,更不要这样哄孩子睡觉,轻轻放在床上让他自己睡就好。再说一次,床是不会动的。爸爸妈妈你们没有权利剥夺孩子躺在床上享受快乐的权利。还有更重要的就是,兴奋的家长不要用力和孩子“疯闹”,孩子的大脑在婴儿时期还是胶状的果冻状态,很容易受伤。



绝招四

趴着睡养美女

非GU医生推荐,纯属个人选择:我们选择孩子趴着睡觉比仰着睡得安稳,头型是完美的圆形,脸型被彻底改造成小脸,无论男女都必要。还有就是才出生的孩子心脏朝下,几乎不会一惊一惊的状态,模仿子宫被包裹的状态。另一个最大的好处是改变亚洲人的大饼脸,5天之内的婴儿需要1个小时帮忙翻脸,5天之后,我家妞就会自己左右转向自如了。妞是标准的小脸,和生出来的时候大方脸好像变了一个孩子,呵呵,得意。老二妙妙的脸没有刻意这样做,那时候妞妞需要人照顾,没有精力1个小时翻头的精力了,很可惜。这个机会只有在出生到3个月之内有效,大了就没用了。很重要的是,这么做的时候,婴儿床上除了孩子和小被子,什么都清理干净,不要以为小婴儿不会动,不会危险。我生老二的时候,老大在一边闹,没有精力这么“做脸”了,老二就没有这么做了,哈哈,如今应验了一个典型的东方大脸姑娘。



绝招五

宝宝的抵抗力比你强十倍

爸爸妈妈穿2件,宝宝绝不能穿2件半,只能比你穿的少,不能比你穿的多。我家两个孩子都十分强壮,冷热其实很好控制,偶尔看到儿童医院发烧的孩子被花被子棉袄裹着一层一层的,可怜啊,孩子不会说话,都是家长害的。



绝招六

拒绝抗生素!是虐待不是爱

感冒发烧是孩子成长的过程,是增强抵抗力的过程。我家宝宝发烧了最常用的就是用冰敷,用有拉链的保鲜袋装冰块,用干净毛巾裹了冰敷在全身,30分钟一定退烧。烧厉害了配点美林或泰诺。如果是着凉了感冒没有发烧,就让孩子吊着鼻涕没有事,几天就好。不要相信任何药能治疗感冒。到目前为止,除了去年的手足口被医院骗进去那一次之外,我家2个孩子从来没有挂过盐水和注射过抗生素。在美国,是那种要死的病才注射抗生素的,在中国注射室的景观,吓坏了妞妞的爸爸,那个景象让人发毛他说。一排一排的吊针,打手打头打脚的小孩子们在妈妈爸爸爷爷奶奶的陪护下挂盐水。集中营莫过如此,很恐怖。花钱不说,更可怕的是体内的细菌大战存留的各种毒越来越多,周期性的需要挂盐水来压下去,常常听到妈妈们说,有一点症状马上挂水压下去,十分得意。我为她们的无知十分惋惜。我的孩子越来越健壮,从不生病,病了也几天自己好,基本不治疗。邻居的孩子半夜跑医院,累的人仰马翻乐此不疲,从这点看我是好妈妈。



绝招七

天天洗澡,用清水,少用沐浴露

我的2个宝宝健康的另外一个原因是天天洗澡,天天洗澡是必要的。记得我生完孩子出来,准备听我妈妈的教诲躺着不动,打算熬到第二天才洗澡,护士惊讶地拉我起来洗澡“不管你什么传统,把汗水和细菌都洗掉才会健康”。我被误会成个脏妈妈被拖去洗澡,当然要说明的是我生两个都是顺产。产妇如此何况小孩子?孩子每天运动量大,臭汗奶腥味便便尿尿什么味道都有,一定要洗澡,不能隔天才洗。这也是健康不生病的重要原因,他们不会着凉的,抵抗力比成人强十倍。GU医生交代:宝宝洗澡尽量用清水,再名牌的婴儿产品都不如清水好,不要用任何沐浴露、洗发水,清水最最好!医生说尽量不用,一定要用的话一个星期用一次沐浴露就好,我家是三天用一次(我觉得一周太长了,心理作用)。



绝招八

没有奶不够吃的妈妈,只有不想喂奶的妈妈

能吃到2岁半是天下最幸福的宝宝。GU医生说,没有奶不够吃的妈妈,只有不想喂奶的妈妈,孩子的食量多大,妈妈的奶就有多少,生双胞胎的妈妈的奶同样够两个孩子吃。这一点我很失败,尽管GU医生用笔画了一个圆圈,她告诉我,你的孩子吃多少,你就能生产多少,你觉得奶不够,加奶粉进去,奶就会真的不够,最后就没了,事实证明我后来真的越来越少直到没了。孩子不会说话,她吃饱没有很难知道,妈妈觉得奶少了就放弃母奶,就补奶粉,其实是告诉自己的身体,我只能生产这么多了。要相信自己能当头称职的奶牛。如果再生一个,一定要证明一下。生完小孩第三天就去医院参加“喂奶班”,几个妈妈带婴儿围成一圈,有黑妈妈白妈妈和亚洲妈妈,喂奶课用的是那种很舒服的沙发,脚下有垫脚的专用凳子。医生们将孩子脱光,包括尿布,然后称BABY的重量精确到小数点后面2位数。然后让我们抱孩子喂奶,不准穿衣服只穿尿布。医生一对一教妈妈们如何让孩子一口就咬准奶头,如何保护奶头,一次一次训练,期间有别的妈妈来用免费提供的吸奶机下奶,用塑料袋装回家。我刚开始的害羞和尴尬慢慢没有了,呵呵,我在家完全不知道妞妞吃了多少,这下好了,一堂课下来,马上称孩子份量,我妞妞吃了不少,好像是那天的第二名,前后数据证明,我有奶。



绝招九

宝宝吃奶睡着怎么办?

BABY被妈妈抱着舒服又安全,没吃饱就睡着了,醒了又吃两口,折磨妈妈,宝宝也吃不饱睡不好,害人害己。训练班里学到最有用的一招,如何弄醒孩子让他们专心吃奶,就是脱衣服!脱得就剩尿布,医生告诉我,放心吧,你抱着她有妈妈的体温,这体温能保证婴儿不会着凉,温度刚刚好,BABY有一点凉意,他们会用心进餐(她说的真是进餐,呵呵)。放心吧,这些看起来弱不禁风的小东西,从妈妈母体带出来的抵抗力比成人强10倍,喂奶的产妇也不容易病,这就是繁殖的力量。(当然室内的温度是有一定温暖的,国内无空调寒冷地区的人不要对照模仿误会)



绝招十

母奶是最好的“抗生素”

妞妞大概10来天的时候,一只眼睛发炎化脓了,我和妞爸吓得抱到医院,还是急诊,儿科的男医生问,你喂奶还是奶粉,我说母奶。他说挤点出来放进孩子眼睛,BABY就会好。What? 我排队等急诊老半天就这么打发我回家了。于是如法炮制,母奶当药,几天后妞妞果然见好,是否母奶的原因还是不清不楚,美国医生忽悠得或许有点道理吧。总之母奶是好东西。



绝招十一

你会换尿布吗?

废话,养孩子的谁不会换尿布呢?不一定哦。你是否有被孩子喷到尿或臭便便的时候呢?一天洗5次床单是我的最高记录。换尿布的时候,每次来的新阿姨都要重新教一遍,窍门就是把干净尿布放在臭尿布下面,再打开尿布,擦干净抽出来,这样即使孩子正好那时候又便又尿,你的床单保住了。习惯这么做以后,永远没有意外发生。换尿布之前将湿纸巾和垃圾篓和尿布还有护臀膏都准备好,不要让自己有转身的机会,别以为那么小的孩子不会掉下来,会掉的,很危险。



绝招十二

你会拍嗝吗?

姿势一,趴在肩膀上轻拍孩子后背,这种是传统姿势,很多时候不太容易拍出来嗝。

姿势二:让孩子侧坐在腿上,左手托着孩子的脖子,撑起下巴,右手拍后背,这样效率极高,通常十几下就拍出嗝了。临睡的最后一顿奶,一定要喂饱足了,拍完嗝继续喂,我家妙妙2礼拜就睡整晚就是用这招,拍完嗝还可以再喂2-3次,直到她真的不吃了,小嘴巴往外推奶瓶的状态,妙妙就能睡到天亮。



绝招十三

早点吃五谷杂粮

4个月吃米粉再大点跟大人一起吃东西,孩子长大不太会偏食,早点吃和成人一样的食物对孩子有好处。6颗牙的时候,GU医生说,她已经可以用这几颗牙齿吃很多东西了,什么都可以喂,没有不能吃的。



绝招十四

别破坏宝宝的专注力

再小的宝宝玩玩具或看电视或看图画书的时候,请家里的阿姨或者任何人都别打断她们。即使是吃饭的时间到了,晚一点也没有关系。培养孩子的专注力就等于培养她们长大了能注意力集中做任何事情。我家妞妞专注力很好,她喜欢的事,比如拼图,一个下午几个钟头不抬头,没有人叫她,除了尿尿之外。最怕那种大呼小叫逗孩子的长辈们,自以为聪明,边看电视边问问题。闭嘴,请安静。给孩子一个专注的环境吧。



绝招十五

慢慢走路,小声说话

身体力行很重要,大人怎样的孩子都会学。难得遇到上海一位陆老师,教孩子慢慢走路,轻声说话,人家听得到就好了,别那么大声。回了家乡,小区的幼儿园老师教孩子们扯起嗓门唱歌,我在一旁看,心想完了,培养了半天的小淑女被汉派文化同化了,哈哈,如今的妞妞很“武汉”,热干面一样的个性十足,整个儿一辣妹。大环境很厉害,几乎没有不被同化的可能。



绝招十六

只要没有生命危险,鼓励宝宝试试看,摸摸看

中国父母礼节有余,胆子太小。“别动,危险,站起来地上脏,别摸,会刺到。。。。不许这样,不许那样”美国父母最常说的却是“Try it! ”试试看,摸摸看。鼓励宝宝,只要没有生命危险,不要阻止孩子用他们的小手尝试和认识世界。大不了衣服弄脏,地上滚来滚去的宝宝时光很短,饭粒菜汤翻了一地,大不了扫一下他们会早学会吃饭甚至用筷子,玩水大不了感冒,玩沙子大不了进鞋子难受难清洁。总之有很多阻碍孩子快乐的条条框框,促使我们的小天使们越来越快地变成成人,变成听话和懂事的孩子。快乐第一重要,衣服脏了不重要,只要没有生命危险,不要阻止我的孩子。



绝招十七

也是最重要的一招,一天只能批评两次!

父母也不可以随便批评宝宝,一天只能批评两次,两次用完了就等明天的配额吧。美国老师这么慎重交代的。于是,宝宝外婆说:“你的孩子一天10次都不够,2次的话我10分钟就用完了,这太难了。我大笑。在婴儿的时期,批评有用吗?拉个便便也被阿姨批评“宝宝又干坏事了”我会反问阿姨,你不拉屎吗?反过来,说妈妈喜欢宝宝一天至少说两次,建立安全感很重要,这对初进幼儿园的宝宝很有用,即使妈妈暂时见不到,宝宝也不会紧张,她知道妈妈很爱她,我自己从小带的妞妞,她进幼儿园的时候一天都没哭过,异常顺利。老二妙妙大部分是阿姨带的,倒是哭了好几天才缓过来。



绝招十八

宝宝2岁之前尽量多抱抱!

在宝宝愿意让你抱的时候,尽量多抱抱吧,很多家长生怕抱多了宝宝不独立太依赖父母,其实这和2岁之前的多抱抱没有关系。相反,对婴儿的乐观性格培养很有好处,绝不会有皮肤饥渴症。婴儿时期常常被抱着的宝宝,他们舒服了、安全了、满足了,宝宝心情自然好,不会老哭,会乐个不停,我的两个孩子都很开朗不认生非常爱笑,笑的肆无忌惮好像全世界不存在笑得摇头晃脑的,很有感染力那种。建议妈妈们同一个浴缸抱着抚摸着宝宝洗澡和玩水,时常躲在被子里不穿衣服用皮肤贴着宝宝的皮肤和她们玩,让宝宝任意抚摸你拍打你,他们会异常开心和满足,比上昂贵的亲子班有效。妞妞现在4岁半了不太主动要抱了,我有时候会很想抱抱她,她居然说妈妈你坐着抱我,这样你不会累,听起来好像完全是满足我想抱的愿望十分体贴。有时候妞妞比较像妈妈,哈哈。生了2个孩子还是觉得她们长得飞快,还是没过到瘾,妞爸说,好像我家有个小妞妞不见了。孩子进入了学龄前敏感时期,新的探索已经来了。

2012年3月9日星期五

仨月没更新了,又是新的一年

瞎忙,或者是邋遢了

到这个月底,在这个单位5年,成了开发人员最老的员工

俺家姑娘下个月两岁了

老喽,白头发多了

2011年12月27日星期二

Could not deserialize session data java.io.NotSerializableException

<2011-12-20 下午08时51分00秒 GMT+08:00> <Error> <HTTP Session> <BEA-100028> <Could not deserialize session data.
java.io.NotSerializableException: com.capinfo.service.impl.tcs.UnitUsersServiceImpl$1
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
        at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:422)
        at java.util.TreeMap.writeObject(TreeMap.java:2243)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        Truncated. see log file for complete stacktrace
UnitUsersServiceImpl$1是
TreeMap<Long,TcsFunc> topTcsFuncList = new TreeMap<Long,TcsFunc>(new Comparator()  {
 public int compare(Object o1, Object o2) {
     long l2 = Long.valueOf(String.valueOf(o2));
     long l1 = Long.valueOf(String.valueOf(o1));
     if(l2>l1)
  return -1;
     else if(l2<l1)
  return 1;
     else
  return 0;
      //return String.valueOf(o2).compareTo(String.valueOf(o1));
 }
 });

参考
http://www.tek-tips.com/viewthread.cfm?qid=1042413
Make sure the object you are putting into the session is serializable and also
the non-transient object it aggregates are also serializable.
If any of the non-transient objects in the entire object
graph are not serializable, you will receive this error message.


http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4330877

In order for classes such java.util.Treemap and java.util.TreeSet to be
serialized the Comparators(java.util.Comparator) also need to be serializable.

改成
TreeMap<Long,TcsFunc> topTcsFuncList = new TreeMap<Long,TcsFunc>(new MyComparator());

----
/**
* 因为用到这个比较器的TreeMap需要放到Session中
* 所以这个比较器也需要实现Serializable
*/
class MyComparator implements Comparator,Serializable{
 public int compare(Object o1, Object o2) {
     long l2 = Long.valueOf(String.valueOf(o2));
     long l1 = Long.valueOf(String.valueOf(o1));
     if(l2>l1)
  return -1;
     else if(l2<l1)
  return 1;
     else
  return 0;
     //return String.valueOf(o2).compareTo(String.valueOf(o1));
 }
}

Controller捕获异常的处理方式

之前我们在Controller捕获异常的处理方式统一是throw new ServiceException(e.getMessage());
为了解决有异常时不能准确看到具体哪一行报错的问题
将ServiceException添加了一个两个参数的构造函数
将new ServiceException(e.getMessage()) 改成new ServiceException(e.getMessage(),e)
也就是将捕获到的Exception 也传进去
请大家以后使用new ServiceException(e.getMessage(),e)

ps -ef |grep java

ps -ef |grep java
kill -9 进程ID 
cd /oracle/weblogic/user_projects/domains/base_domain/
nohup ./startWebLogic.sh &

tail -f nohup.out

hibernate oracle 分页排序问题

加上排序后,发现第一页中的记录 会在第二页再次出现
解决办法
在order by 最后加上主键
参考:http://topic.csdn.net/u/20110726/14/b8fbdde2-3822-4e24-9e57-5566bfebcc92.html

使Hibernate插入数据到数据库中时让字段默认值生效

表中添加了一个annotation
@org.hibernate.annotations.Entity(dynamicUpdate=true,dynamicInsert=true)
使Hibernate插入数据到数据库中时让字段默认值生效

关于dynamicUpdate、dynamicInsert属性的说明请参考:
http://blog.csdn.net/zhaoyh82/article/details/2514517
http://blog.csdn.net/foamflower/article/details/4370054

dynamic-insert 和 dynamic-update 是Hibernate mapping 配置文件中的一个可选特性。
dynamic-update 默认值为 false,可以在运行的时候构建 UPDATE SQL 语句,这个语句中只包含列中数据修改的的列,而不是所有的列。
dynamic-insert 默认值为 false,可以在运行的时候构建 INSERT SQL 语句,这个语句中只包含有数据的内容,换句话说如果某些列中不包含有数据,Hibernate 将不会将这些列构建到 SQL 脚本中。
hibernate有一个动态增加和动态更新功能。就是说hibernate生成的sql语句只set,有变化的字段。这样确实会从一定程度上提高性能。
可是动态更新的问题是查询和更新必须同时在一个相同的session中,否则hibernate无法判断这是不是一个相同的对象。可是实际上我们用更新 基本上都是查询出来之后,在前台做一些从新的赋值,在放到一个专有的update方法里更新。这样动态update的功能意义不大了。
怎么办呢?大家还记 得吗HibernateSessionFactory中的session都是单例的这样,我们要DAO层的查询和更新不关闭session.close, 将关闭session的任务交给业务逻辑层来完成不就解决了这个问题吗。
《Hiberante In Action》上介绍说 除非表里含有大字段或者字段数超过50个以上 否则不建议开启“动态更新”和“动态插入” 因为update xxxxx及insert xxxxx语句默认都是SessionFactory建立时就生成好的开启“动态”后就需要运行时现组装了 也需要挨个验证各属性是否改变。
这些操作也会浪费一定的效率会抵消“动态”的好处。
所以,这个特性对 Hibernate 来说作用不是非常明显。

防止页面重复提交的 token使用方法

1、让你的Controller继承AbstractController
2、在加载新增/修改页面的方法中调用saveToken(request,response);
3、在jsp页面中的<form>中加入一个hidden:(这是死的 不用任何修改)
<input type="hidden" name="TRANSACTION_TOKEN_KEY" id="TRANSACTION_TOKEN_KEY" value="${sessionScope.TRANSACTION_TOKEN_KEY}"/>
4、在保存方法中加入下面类似代码:
if(!super.isTokenValid(request)){
model.addAttribute(DataKey.MESSAGE, "对不起,你不能重复提交同一表单内容");
return "error";
}

 

==================

AbstractController:

public synchronized void saveToken(HttpServletRequest request,HttpServletResponse response) {
//        setResponseNoCache(response); //
        HttpSession session = request.getSession();
        String token = generateToken(request);
        if (token != null) {
            session.setAttribute("TRANSACTION_TOKEN_KEY", token);
        }

    }

    public synchronized void saveToken(HttpServletRequest request) {
        HttpSession session = request.getSession();
        String token = generateToken(request);
        if (token != null) {
            session.setAttribute("TRANSACTION_TOKEN_KEY", token);
        }

    }


    /**
     * 验证TOKEN
     * @param request
     * @return
     */
    public synchronized  boolean isTokenValid(HttpServletRequest request) {
        // Retrieve the current session for this request
        HttpSession session = request.getSession(false);

        if (session == null) {
            return false;
        }

        // Retrieve the transaction token from this session, and
        // reset it if requested
        String saved =
            (String) session.getAttribute("TRANSACTION_TOKEN_KEY");

        if (saved == null) {
            return false;
        }


        // Retrieve the transaction token included in this request
        String token = request.getParameter("TRANSACTION_TOKEN_KEY");

        if (token == null) {
            return false;
        }
        session.removeAttribute("TRANSACTION_TOKEN_KEY");
        return saved.equals(token);
    }

    private synchronized String generateToken(HttpServletRequest request) {
           HttpSession session = request.getSession();
           try {
               byte id[] = session.getId().getBytes();
               byte now[] =
                   new Long(System.currentTimeMillis()).toString().getBytes();
               MessageDigest md = MessageDigest.getInstance("MD5");
               md.update(id);
               md.update(now);
               return (toHex(md.digest()));
           } catch (IllegalStateException e) {
               return (null);
           } catch (NoSuchAlgorithmException e) {
               return (null);
           }
       }

    private static String toHex(byte[] buffer) {
        StringBuffer sb = new StringBuffer(buffer.length * 2);

        for (int i = 0; i < buffer.length; i++) {
           sb.append(Character.forDigit((buffer[i] & 0xf0) >> 4, 16));
            sb.append(Character.forDigit(buffer[i] & 0x0f, 16));
        }

        return sb.toString();
   }

又年底了

转眼从十一到现在没来过了,一直加班 加班 加班

2011年9月23日星期五

How-to-bind-String-to-java.sql.Timestamp

http://forum.springsource.org/showthread.php?48979-How-to-bind-String-to-java.sql.Timestamp

 

java.sql.TimeStamp is derived from java.util.Date. It shouldn't be hard to figure out how to handle that in the persistence layer- in fact I'm willing to bet that some persistence tools can handle that conversion automatically.

In regard to your command object, however, you have a tougher problem using TimeStamp. I'll explain why.

As I noted, TimeStamp is derived from java.util.Date. Spring has an out-of-the-box CustomDateEditor property editor that does conversions from Strings (like on a form filled out by a user) to java.util.Date. It also converts from java.util.Date back to String when a BindingResult is being used to re-populate form fields because the submission failed validation.

Now, for the CustomDateEditor to take the Date it has converted your String to and "jam" it into a TimeStamp field is not possible because it requires an explicit downcast. Spring does no such thing on your behalf. In fact- off the top of my head, I don't think such a downcast is even legal in Java- meaning you'd get an exception.

Do you see why I'm recommending going back to java.util.Date? It's the standard class used for transporting date (and time) information.

If you're really gung-ho about sticking with java.sql.TimeStamp, however, your next best bet is to create your own CustomTimeStampEditor. Basically crack open and copy the code for Spring's CustomeDateEditor and then modify it to suit TimeStamp.

2011年9月20日星期二

jquery定义除输入框之外的背景色

$j("table.infoTable tr td").each(function(){var child = $j(this).children().eq(0);if(!child.is("input") && !child.is("select") && !child.is("textarea")&& !child.is("span")) $j(this).css('backgroundColor', '#e6eff3'); });