忙得七荤八素的,都想不起来昨天干了些啥。
今天又苦逼得忙了一天,查库 开库 找原因 安排新功能,尿尿的没时间,码农的一天
想着整理整理13年积攒下来的一些东西
在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
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>
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
基于一个已有的网络工程
拷贝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>
昨天看《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一下,结果:
就这个类可以让我们的Map也能像List一样有序了
参考:http://blog.csdn.net/zxr85/article/details/6274051
IntelliJ IDEA粘贴多行代码时,总是自动缩进
settings->eidtor->smart keys -> reformat on paste 选择 NONE
java 虚拟机 类加载器有三种
1 根加载器
这个加载器不是用java写的,而是C++,所以用java代码访问不到
它负责加载jre核心类库
2 扩展加载器 ExtClassLoader
继承自ClassLoader
它负责加载ext目录下的类
3 程序加载器 AppClassLoader
继承自ClassLoader
它负责加载ClassPath下的类
转自: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个孩子还是觉得她们长得飞快,还是没过到瘾,妞爸说,好像我家有个小妞妞不见了。孩子进入了学龄前敏感时期,新的探索已经来了。
<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捕获异常的处理方式统一是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
kill -9 进程ID
cd /oracle/weblogic/user_projects/domains/base_domain/
nohup ./startWebLogic.sh &
tail -f nohup.out
加上排序后,发现第一页中的记录 会在第二页再次出现
解决办法
在order by 最后加上主键
参考:http://topic.csdn.net/u/20110726/14/b8fbdde2-3822-4e24-9e57-5566bfebcc92.html
表中添加了一个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 来说作用不是非常明显。
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();
}