随笔 - 6  文章 - 0  trackbacks - 0
<2006年4月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用链接

留言簿(2)

随笔分类

文章分类

好友

搜索

  •  

最新评论

阅读排行榜

评论排行榜

    记得有一次在群里的一个朋友,问到了怎样在Spring里控制Hibernate的Session,由于之前工作一直都比较紧张,所以现在才想起。呵呵。
    Spring对Hibernate的Session管理是自动实现的,我们使用getHibernateTemplate()这个方法,对Session的打开,关闭都是由Spring来控制。结果有时候就会出现Session过早的关闭问题,对于这种情况,不知道大家是怎样解决的呢?我之前也在网上看到一些说法,:hibernate的要点19,20这里,不过我测试之后好像还是会出现这个问题,可能是由于我比较菜吧。呵呵。大家也可以照hibernate要点的方法试试,成功的话分享一下。于是我就采用了比较笨的方法,写了个ThreadLocalSession来自己控制处理,这样做虽然是可以自己来控制,但对于Spring的事务管理就不支持了。我也是并不推荐的做法。呵呵。上次的朋友好像对这个ThreadLocalSession有兴趣,今日就贴出来跟大家分享下了。大家可不要扔石头啊。呵呵。

附件:ThreadLocalSession.rar
posted @ 2006-07-29 20:27 badboy 阅读(309) | 评论 (0)编辑 收藏

    昨天终于辞职了,忙了两个月,都无乜时间上来写下野。
记得第二日上班,就被经理捉去开会了,由于项目比较紧张,公司人手又不够,唯有把我摆上台了,呵呵。当时真是有点兴奋,因为第一次接触到项目管理,也算是个很好的锻炼机会。客户公司是按CMM3标准来要求的,整个项目按他们做监控,我们来实施。
    CMM3标准要求对项目的需求分析做得比较详细,接过之前的初步需求分析,连基本的业务架构都系很粗略的(可能是因为与上级客户缺少直接的交流吧,所有需求都是由乙方传递过来的)很多需求不明确的地方,又要通过乙方请示上级客户,整个项目在需求这一块就化了比较多的工夫了。
    遇到这种情况,建议可以直接跟上级客户做交流,一来可以对需求不明确的地方得到解决,二来也可以对上级客户的实际情况有进一步的了解,提一些适当的建议。
    经过一个多星期的需求分析工作,按里程碑的规定,两天之后又需要向乙方提交系统的原型和整体的技术解决方案了。(这两天工作压力非常大,每天都在公司加班到差不多11点,哎。)项目的要求是采用B/S架构,C/S模式来实现的,我跟主工程师讨论了一下后,初步决定了采用web start + spring + EJB + hibernate的技术框架来实现,所以原型暂时只能用Visio来提供几种方案过去了。由于项目紧,人手又不足这个步骤就做得比较粗了,因些乙方对于我们的技术能力也打了一个问号(这是我认为的),因为我们并没有这个技术框架的实施经验,当时我做的DEMO还在调试当中。只有空口说白话,他们当然也对我们的技术失去信心,因些项目也就开始进入疆持的阶段了。
    这里又要总结下了。对于比较急的项目来说,还要采用比较成熟的做法好,采用新技术,对乙方的说服力就不能得到肯定了,这大概也是由于我经验不足吧。即使你技术再高,在客户面前,拿不出一个有说服力的项目实施经验出来,客户的信心还是会大打折扣的。(这是我个人观点)
    疆持了一段时间,由于各方面的因素,项目最终还是失败了。哎,第一次就失败了,心里滋味也不好受,这里简单总结一下,也希望各位大哥,能给点建议分享下成功的经验。
    项目失败后,一个同事就辞职了,我就要跟剩下的CMS新闻发布系统,网站的BUG比较多,开发这个CMS的同事不在同一地方上班,沟通比较麻烦,我调试了两天还没有搞好。网站过几天就要交乙方评估验收了,同事是比较有经验的高手,经理对他做出来的网站很有信心,乙方对我同事的技术也很有信心,但在这个网站上面BUG的确比较多,可是经理就叫我先放下这个工作了,因为经理又接到了一个Compiere ERP开发的项目,于是就叫我着手研究这个Compiere了。(也许是因为上个项目失败和过分自信的原因吧,这里没有批评的意思,我们的经理还是比较有经验和实力的,但这个做法,同时也使我觉得太莽撞了)结果乙方对网站这块,最终还是说BUG太多,评估不出来而失败告终了。接下来也没有什么下文了。
    几个开发的同事都不在,我也曾多次建议经理再找多人手回来。一个人搞开发的滋味真是不好受,虽说也可以给个机会自己锻炼开展,但是对我来说,一个人开发真的没有什么意思。。研究了一个多星期的Compiere,对Compiere的技术框架也有所了解吧,经理的要求就是要重构Compiere的Web这一块,据我了解Compiere的web界面大部分都系在servlet里直接print out 出来的,经理的意思是想用JSP模板的方式显示出来,但模板的方式能不能合适?工作量又有多大?原有的基本功能能不能完全实现?我初步评估了一下,因为Compiere本身的结构问题和我的技术有限的问题,可行性很低。于是各持已见,也讨论了一下,回来之后,我再回头想想,在各个项目上周转了一下,当初进公司时的抱负都变得没有意义了,同时辞职的念头也出现了。年轻人总是冲动的。哈哈。于是昨天回去对这两个月作了个总结就向经理提出辞职了。(没有项目压力的感觉还是挺爽的。^_^)

posted @ 2006-07-29 13:24 badboy 阅读(345) | 评论 (0)编辑 收藏
    昨晚,我跟我们的PM讨论到选课系统的问题,由于选课紧张,同时在线的同学一千多,所以引起服务器的高峰,以致系统有时会崩溃。针对这个问题我也深刻感受过(我们之前都是这样选过来的)。
于是我建议:用集群提高性能来解决。
PM向我介绍了服务器的整体性能,(具体。。。这个不说了,可以算是较高级的服务器吧)同时也指出了整个问题的根本不在于服务器的性能而在于系统的本身,虽然集群可以可提高30%左的性能,他当时就说了句:“整个资源就这么多,谁先到,就先得。所以我们就采取了限制人数的方法。”这汲及到一个系统设计的问题,下面就将自己体会的说说吧,
    当我们对数据进行操作的时候,总是会先把这部份的数据锁起来,以保证数据的正确性,那么当同时有很多人对这个数据进行操作的时候,就会因为先到的人锁住了数据没有释放出来而导致,操作失败。怎么才能防止这种情况呢?我们在设计的时候就要尽量减少对数据库的操作,而将操场作放在一个事务里处理。我们用的是Weblogic服务器,所以设计的时候就尽量的依赖于weblogic的EJB容器进行管理,将事务放到内存里处理,这样就减少了对数据库的操作,提高整体的性能。由于我的文采不好,可能表达得有点模糊,大家就原谅我一次啦。。哈哈。。

    总结一句:就是尽量将事务在程序上处理,不要放在数据库里处理。
posted @ 2006-06-01 22:43 badboy 阅读(237) | 评论 (0)编辑 收藏

每个程序员在开发项目的过程中都会碰到或多或少的错误异常,我在这里会记录一些常碰到的异常和处理方法,每碰到一个都会到这里来更新一下,希望大家也能帮我解决一下问题,小弟在此先谢过了。

java常见的错误异常:

1、java.lang.NullPointerException
错误原因:很明显是由于空值造成的。问题出现于很多方面,唯有具体情况具体分析了。
解决方法:细心分析,多判断传的参数据是否为空;

2、java.lang.NumberFormatException
错误原因:由于为空或不能转化为数值类型时引起的异常。
解决方法:转换前判断是否为空,能否转成数值类型。

2、java.lang.NoClassDefFoundError
错误原因:通常这个异常是由于没有找到相应的jar包而引起的,因为有时候IDE并没有把你的jar包引入,虽然你明明在项目里配置了这个包,但你的lib里却是没有的。
解决方法:将相应的包复制到lib里去。

Struts,Hibernate,Spring中常见的异常:

1、java.io.FileNotFoundException: Could not open class path resource [user.hbm.xml]

错误原因:没有找到hibernate mapping resource的映射文件,该xml文件没有在classpath中,这里的hbm.xml文件名和路径一定要注意大小写,不然就会出现这个错误。还有在用JB开发时,resource里的xml文件要勾copy,这样编译的时候才会把xml文件copy到classpath里去。
解决方法:把对应的xml文件copy到classpath相应的目录。

2、org.springframework.beans.NotWritablePropertyException: Invalid property 'userDao' of bean class
错误原因:是在spring-config.xml中property name的错误。
<property name="...."> 中name的名字是与bean的set方法相关的,而且要注意大小写。
例:
在spring-config.xml里配置了一个bean
  <bean id="mySystemManagerFacadeTarget" class="com.site.system.domain.impl.SystemManagerImpl">
  <property name="userDao">
   <ref bean="myUserDao"/>
  </property>
  <property name="roleDao">
   <ref bean="myRoleDao"/>
  </property>
  </bean>
则SystemManagerImpl里就必须要有对应的set方法
  private UserDao userDao;

  private RoleDao roleDao;

  /**
   * set the value of dao
   */
  public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
  }
  public void setRoleDao(RoleDao roleDao){
    this.roleDao = roleDao;
  }

解决方法:细心分析整个流程,

3、CharScanner; panic: ClassNotFoundException: org.hibernate.hql.ast.HqlToken
错误原因:把有hibernate3的项目部署到WebLogic里,WebLogic里已经有一个antlr.jar的版本了,导致Hibernate里的antlj.jar不能找到。(网上获知)
解决方法:
( 1 ) 在hibernate.properties上,或是在spring的conext xml中,加上一个
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>(不推荐,原因请看我这里的Hibernate2.1升级到Hibernate3.0 )
( 2 ) 将antlr-2.7.5H3.jar这个包加入到weblogic里,注意要加在开头。(推荐) 

4、java.lang.NoClassDefFoundError: javax/servlet/jsp/el/ELException

错误原因:weblogic8.X版本里用到JSTL1.1的项目,weblogic8.X不支持JSP2.0,因为jsp2.0中已经把ELException类包括进去了,而weblogic8.X里的是JSP1.2,JSTL1.1里也并没有这个包。
解决方法:
( 1 ) 下载jstl1.0,然后修改web.xml
  这样一来换引起了一个附带问题:jstl1.0中没有fn:这个taglib,所有用到fn:的地方必须用jsp来重写。
( 2 ) 改用支持JSP2.0的服务器,tomcat5或weblogic9
posted @ 2006-04-30 14:47 badboy 阅读(1190) | 评论 (0)编辑 收藏

趁着五一假期有空,今天先把学到的一些开发规则跟大家分享下吧。良好的开发规则对整个团队是很有帮助的。下面这些都是我们在项目中的一些开发规则:
一、jsp命名规则:

   1.格式:对象名_功能名.jsp
   2.名字全部小写
   3.功能名定义:
       主界面:main;
       新增界面:add;
       修改界面:update;
       查看界面:view;等

   例如,系统参数主界面的命名为:sysparam_main.jsp


二、action方法命名规则:
   1.格式:do +〔对象名+〕功能名;        注:对象名可无
   2.功能名定义:
       打开主界面:Main
       新增:Add;
       新增提交:AddSubmit;
       修改:Update;
       修改提交:UpdateSubmit;
       删除提交:DeleteSubmit;
       查看:View
       查询:Query
       选择:Select
       选择提交:SelectSubmit
       等;

    例如:打开系统参数新增界面的方法名为:doSysParamAdd 或doAdd        


三、Service方法命名规则:
    1.格式:功能名 + 对象名
    2.功能名定义:
        获得对象:get
        新增对象:add
        修改对象:update
        删除对象:delete
        等;
     3.如果操作的是对象的集合,则对象名用复数

     例如:获得系统参数列表的方法名为:getSysParams


四、class命名规则:
   参考《Java编程规范》


五、数据类型
    1、由系统生成的ID用Long
    2、金额用Double,小数位为2位
    3、10位以下的整数用Integer,10位以上的用Long
    4、日期用java.util.Date   
   

六、所有的页面流转都经过action操作,即使只是简单的打开一个页面,也不在jsp中直接写链接。


七、修改、删除操作都是先选择checkbox再选功能按钮,查看则直接通过链接。


八、所有对持久数据的搜索查询方法都封装在query中

posted @ 2006-04-30 13:51 badboy 阅读(241) | 评论 (0)编辑 收藏