這個解決方案還是有問題的,我測試過通過這種方式插入20萬的數據量,還勉強能夠接受,完成此操作我的PC耗時1分多鐘,服務層的處理很快,慢還是慢在Spring的事務提交。
如果插入25萬及以上的數據量時,就會出現內存溢出了!
re: 在Xmarks與中國互聯網折騰的日子 瀟湘振宇 2010-08-20 09:28
現在不需要這樣設置就可以正常使用了。。。
@黃晨
這里需要注意的一點是,你在Hibernate Bundle中通過addAnnotatedClass添加這兩個POJO,而這個是通過在SessionFactory Bean中配置,如果確定POJO的Bundle是Hibernate Bundle的Fragment的話,那應該是沒問題的,但如果不是的話,那就需要確保在Hibernate Bundle的MANIFEST.MF文件中有Import-package這兩個POJO所在的包。
關于mvn-pax-plugin插件,這里給出兩個開發過程中常用的參數,如下:
<param>--vmOptions=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000</param>
<param>--repositories=+
http://scm.ops4j.org/repos/ops4j/projects/pax/runner-repository/</param>其中--vmOptions參數是指設置JVM的一些屬性,如上所示開啟遠程Java調試。
而--repositories是pax自己的一個參數來著。有時候在用pax:provision命令時,其老是去訪問網絡下載或檢測相關pax的包,浪費掉了我們開發人員寶貴的時間,加上這個參數后會好很多。
@zhangls
源碼就在本篇的末尾,只是因為最近公司事忙,沒有繼續這系列文章的編寫,將上面源碼包導入到Eclipse中,再用Maven命令來編譯打包安裝后,再用mvn pax:provision的命令就可以啟動這個OSGi web應用,只是系列文章中說到的用戶登錄的功能尚未實現。但那只是業務方面,整體的開發腳手架已經搭建起來了,運行也是沒問題的。
如果對這里說到的運行的命令不懂,可以仔細閱讀本系列前幾篇文章。
確實挺不錯,以前也弄過Jasperreport,而且一直在用,但總覺得其applet的打印方式實在笨重!
有時間也嘗試一下下樓主說方式
多謝關注!昨天上午差不多完基于OSGi的Web應用開發系列三(構建項目框架),只是因為剛搬了家,而新租的房子那里還沒有開通網絡,需要過一兩天才能發布!
re: 基于OSGi的Web應用開發系列一 瀟湘振宇 2010-06-15 09:31
@臨遠
改造cglib的目的是為了正常使用Hibernate的延遲加載,Hibernate在創建代理的時候,因為OSGi的特殊性,每個Bundle擁有獨立的一個ClassLoader(Fragment除外),cglib通過其AbstractClassGenerator.create方法創建對象時,先獲取到相應的ClassLoader對象緩存起來,在延遲加載的時候再通過緩存起來的ClassLoader來加載指定的對象。但是cglib獲取的默認ClassLoader對象是POJO所在的Bundle的ClassLoader對象,而通過此ClassLoader來加載HibernateProxy類,自然會出現NoClassDefFoundError之類的異常。這個問題在BlueDavy的OSGi進階中有詳細的說明。
在Hibernate這一層使用暴力反射讓hibernate實現動態注冊實體類這樣的方法我覺得過于復雜,我覺得沒必要這樣做。我是通過Fragment來實現的。這樣理解想來也容易。
很好,講解的很詳細。理念終歸是理念,實際應用確實是需要視各各應用場景來定。始終相信“沒有最好的設計,只有最合適的設計”。
加油:) 繼續期待您的下篇博文。