<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-42  評論-578  文章-1  trackbacks-0

        本文是我用EJB+JPA(Hibernate實現(xiàn))+Web Service開發(fā)時,遇到的一些問題,查了許多地方,都找不到答案,請各位朋友耐心讀一下本文,有想法的歡迎留言!謝謝! 

        Category.java的部分代碼:

    1. @OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY,mappedBy="category")   
    2. public List<News> getNewsList() {   
    3.     return newsList;   
    4. }   
    5. public void setNewsList(List<News> newsList) {   
    6.     this.newsList = newsList;   
    7. }  

     

        News.java的部分代碼:

    1. @ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE},fetch=FetchType.EAGER)   
    2. @JoinColumn(name="cid")   
    3. public Category getCategory() {   
    4.     return category;   
    5. }   
    6. public void setCategory(Category category) {   
    7.     this.category = category;   
    8. }  

     

       NewsDaoBean.java的部分代碼:

    1. @PersistenceContext(unitName="newspstn")   
    2. private EntityManager em;   
    3.   
    4. /**  
    5.  * 添加新聞  
    6.  * @param cid 項目編號  
    7.  * @param news  
    8.  */  
    9. public void saveNews(int cid,News news) {   
    10.     news.setCategory(em.find(Category.class, cid));   
    11.     em.persist(news);   
    12. }   
    13.   
    14. /**  
    15.  * 查詢所有新聞列表  
    16.  * @return  
    17.  */  
    18. @SuppressWarnings("unchecked")   
    19. public List<News> listNews() {   
    20.     return (List<News>)em.createQuery("from News n").getResultList();   
    21. }  

     

        業(yè)務(wù)邏輯層的類(NewsManager.java)比較簡單,由于篇幅問題,這里就不貼出來了。

       

        在還沒有發(fā)布成Web Service前,用Juint測試:

    1.  //測試保存新聞   
    2. public void testSaveNews() {   
    3.     InitialContext ctx;   
    4.     try {   
    5.         ctx = new InitialContext();   
    6.         NewsManager manager = (NewsManager)ctx.lookup("NewsManagerBean/remote");   
    7.         News news = new News();   
    8.         news.setTitle("title2");   
    9.         news.setAuthor("author2");   
    10.         news.setContent("content1");   
    11.         manager.saveNews(1, news);   
    12.     } catch (NamingException e) {   
    13.         System.out.println("NamingException");   
    14.         e.printStackTrace();   
    15.     }   
    16. }   
    17.   
    18. //測試查詢新聞列表   
    19. public void testListNews() {   
    20.     InitialContext ctx;   
    21.     try {   
    22.         ctx = new InitialContext();   
    23.         NewsManager manager = (NewsManager)ctx.lookup("NewsManagerBean/remote");   
    24.         List<News> newsList = manager.listNews();   
    25.         for(News news : newsList){   
    26.             System.out.println("news.title = " + news.getTitle());   
    27.         }   
    28.     } catch (NamingException e) {   
    29.         System.out.println("NamingException");   
    30.         e.printStackTrace();   
    31.     }   
    32. }  

       這個測試是沒有問題的,(testSaveNews和testListNews)能正常添加和查詢。

     

        當(dāng)發(fā)布成Web Service后,在客戶端生成相應(yīng)的服務(wù)代理類,再在Web服務(wù)的客戶端用Junit測試:

    1. //測試保存新聞   
    2. @Test  
    3. public void testSaveNews(){   
    4.     NewsManagerService service = new NewsManagerService();   
    5.     NewsManager manager = service.getNewsManagerPort();   
    6.     News news = new News();   
    7.     news.setTitle("title1");   
    8.     news.setAuthor("author1");   
    9.     news.setContent("content1");   
    10.     manager.saveNews(1, news);   
    11. }   
    12.   
    13. //測試查詢新聞列表   
    14. @Test  
    15. public void testListNews(){   
    16.     NewsManagerService service = new NewsManagerService();   
    17.     NewsManager manager = service.getNewsManagerPort();   
    18.     List<News> newsList = manager.listNews();     //------a1   
    19.     for(News news : newsList) {                             //--------a2   
    20.         System.out.println("news.title = " + news.getTitle());   //----a3   
    21.     }                         //------a4   
    22. }  

        這次測試,保存新聞的的操作(testSaveNews)能正常,但查詢新聞列表(testListNews)的操作卻拋以下異常

    1. 12:19:37,781 INFO  [STDOUT] Hibernate:    
    2.     select   
    3.         news0_.id as id1_,   
    4.         news0_.content as content1_,   
    5.         news0_.cid as cid1_,   
    6.         news0_.title as title1_,   
    7.         news0_.author as author1_,   
    8.         news0_.pubtime as pubtime1_    
    9.     from   
    10.         rong_news news0_   
    11. 12:19:37,781 INFO  [STDOUT] Hibernate:    
    12.     select   
    13.         category0_.id as id0_0_,   
    14.         category0_.cname as cname0_0_    
    15.     from   
    16.         rong_category category0_    
    17.     where   
    18.         category0_.id=?   
    19.   
    20. 12:19:37,796 ERROR [LazyInitializationException] failed to lazily initialize a collection of role: rong.entity.Category.newsList, no session or session was closed   
    21. org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: rong.entity.Category.newsList, no session or session was closed   
    22. (……相關(guān)的異常堆棧信息略……)   
    23.   
    24. 12:19:37,796 ERROR [RequestHandlerImpl] Error processing web service request   
    25. org.jboss.ws.WSException: javax.xml.ws.WebServiceException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: rong.entity.Category.newsList, no session or session was closed   
    26. (……相關(guān)的異常堆棧信息略……)   
    27.   
    28. Caused by: javax.xml.ws.WebServiceException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: rong.entity.Category.newsList, no session or session was closed   
    29. (……相關(guān)的異常堆棧信息略……)   
    30.   
    31. Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: rong.entity.Category.newsList, no session or session was closed   
    32. (……相關(guān)的異常堆棧信息略……)   
    33.   
    34. 12:19:37,890 ERROR [[NewsManagerBean]] Servlet.service() for servlet NewsManagerBean threw exception   
    35. org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: rong.entity.Category.newsList, no session or session was closed   
    36. (……相關(guān)的異常堆棧信息略……)  

     

    補(bǔ)充說明1:如果我把上面testListNews方法中的a1,a2,a3,a4行注釋掉,Junit測試是正常的。

    補(bǔ)充說明2:在Category類中,對List<News> newsList的設(shè)置,我確定是設(shè)置了延遲加載(Lazy)的,而且,我在查詢 新聞列表時,沒有用到news.getCategory.getNewsList()之類的操作。有個疑問:是不是設(shè)置的lazy加載,即使沒有用到,也會加載的?即使會加載的,為什么我在服務(wù)器端測試時能正常,而在Web Service的客戶端測試時,卻報錯?

     

    是EJB Web Service的Bug還是我的程序有錯誤?請大家討論!



    本文原創(chuàng),轉(zhuǎn)載請注明出處,謝謝!http://www.tkk7.com/rongxh7(心夢帆影JavaEE技術(shù)博客)
        

    posted on 2009-04-26 13:27 心夢帆影 閱讀(1790) 評論(4)  編輯  收藏 所屬分類: EJB3WebService

    評論:
    # re: 是它的Bug還是我的錯誤:EJB的WebService客戶端報LazyInitializationException異常[未登錄] 2009-06-23 20:50 | freefly
    貌似和我的問題一模一樣ejb發(fā)布成webservice之前可以測試調(diào)用
    發(fā)布之后,生成代理類后可以插入,不能查詢出!不知 lz搞定這個問題沒·  回復(fù)  更多評論
      
    # re: 是它的Bug還是我的錯誤:EJB的WebService客戶端報LazyInitializationException異常 2010-09-09 16:35 | wothnet
    是延遲載加方面的問題。強(qiáng)制延遲加載的對象進(jìn)行初始化!或者取消延遲加載  回復(fù)  更多評論
      
    # re: 是它的Bug還是我的錯誤:EJB的WebService客戶端報LazyInitializationException異常 2011-08-09 16:35 | 鵝鵝鵝
    怎么處理?  回復(fù)  更多評論
      
    # re: 是它的Bug還是我的錯誤:EJB的WebService客戶端報LazyInitializationException異常 2011-08-12 13:18 | xiaomaha
    這個問題我也遇到了,超級郁悶,無論是否延遲加載,只要用到ws都會出現(xiàn)session 問題,樓主是否解決此問題,請把解決方案貼出來啊,,,我現(xiàn)在只有通過@XmlTransient 加到實體中可以解決這樣的問題!用了這個方法只能讓webservice忽略它而已。但實際問題依然未被解決,還有一個問題,就是延遲加載關(guān)閉后,就會出現(xiàn)循環(huán)引用的bug,也只能通過@XmlTransient 得到解決,哎,,,,,,,,,,,  回復(fù)  更多評論
      
    主站蜘蛛池模板: 午夜成人无码福利免费视频| 久99久精品免费视频热77| 国产亚洲大尺度无码无码专线| 国产成人免费ā片在线观看老同学| 久久久亚洲欧洲日产国码二区| 在线免费一区二区| 中文字幕在线成人免费看| 亚洲国产成人精品无码区在线网站 | 亚洲第一极品精品无码久久| 免费三级毛片电影片| 成人午夜影视全部免费看| 18亚洲男同志videos网站| 免费A级毛片无码A∨男男| 8x成人永久免费视频| 成人a毛片视频免费看| 亚洲国产日产无码精品| 亚洲人色婷婷成人网站在线观看| 妻子5免费完整高清电视| aaa毛片免费观看| 亚洲精品456人成在线| 欧洲亚洲国产清在高| 手机看片久久国产免费| 久久久久av无码免费网| 精品无码一级毛片免费视频观看| 亚洲人成电影青青在线播放| 国产亚洲人成A在线V网站| 青草草在线视频永久免费| 午夜影院免费观看| 亚洲黄片手机免费观看| 中文字幕乱码亚洲精品一区| 亚洲av无码一区二区三区网站| xvideos亚洲永久网址| 一二三四影视在线看片免费| 日本免费中文视频| 又硬又粗又长又爽免费看| 亚洲日韩精品国产3区| 亚洲男人电影天堂| 国产AV无码专区亚洲精品| 亚洲国产中文字幕在线观看 | 男男AV纯肉无码免费播放无码| 少妇太爽了在线观看免费视频|