??? 記得有一次在群里的一個朋友,問到了怎樣在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 閱讀(313) |
評論 (0) |
編輯 收藏
??? 昨天終于辭職了,忙了兩個月,都無乜時間上來寫下野。
記得第二日上班,就被經理捉去開會了,由于項目比較緊張,公司人手又不夠,唯有把我擺上臺了,呵呵。當時真是有點興奮,因為第一次接觸到項目管理,也算是個很好的鍛煉機會??蛻艄臼前碈MM3標準來要求的,整個項目按他們做監控,我們來實施。
??? 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 閱讀(348) |
評論 (0) |
編輯 收藏
??? 昨晚,我跟我們的PM討論到選課系統的問題,由于選課緊張,同時在線的同學一千多,所以引起服務器的高峰,以致系統有時會崩潰。針對這個問題我也深刻感受過(我們之前都是這樣選過來的)。
于是我建議:用集群提高性能來解決。
PM向我介紹了服務器的整體性能,(具體。。。這個不說了,可以算是較高級的服務器吧)同時也指出了整個問題的根本不在于服務器的性能而在于系統的本身,雖然集群可以可提高30%左的性能,他當時就說了句:“整個資源就這么多,誰先到,就先得。所以我們就采取了限制人數的方法。”這汲及到一個系統設計的問題,下面就將自己體會的說說吧,
??? 當我們對數據進行操作的時候,總是會先把這部份的數據鎖起來,以保證數據的正確性,那么當同時有很多人對這個數據進行操作的時候,就會因為先到的人鎖住了數據沒有釋放出來而導致,操作失敗。怎么才能防止這種情況呢?我們在設計的時候就要盡量減少對數據庫的操作,而將操場作放在一個事務里處理。我們用的是Weblogic服務器,所以設計的時候就盡量的依賴于weblogic的EJB容器進行管理,將事務放到內存里處理,這樣就減少了對數據庫的操作,提高整體的性能。由于我的文采不好,可能表達得有點模糊,大家就原諒我一次啦。。哈哈。。
??? 總結一句:就是盡量將事務在程序上處理,不要放在數據庫里處理。
posted @
2006-06-01 22:43 badboy 閱讀(242) |
評論 (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 閱讀(1193) |
評論 (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 閱讀(249) |
評論 (0) |
編輯 收藏
大學就來畢業了。大三的這個學期過得非常充實,在學校研究所實習學到了很多東東,申請了這個家都沒有在這里貢獻過什么,在這里以后都會記錄我的工作經驗給大家分享,希望大家以后多多交流學習。