<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://m.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ù)  更多評論
      
    主站蜘蛛池模板: 四虎永久免费观看| 女人张开腿给人桶免费视频| 全黄性性激高免费视频| 亚洲国产AV无码一区二区三区 | 无人在线观看免费高清视频| 亚洲白色白色在线播放| 免费人成无码大片在线观看| 亚洲成av人无码亚洲成av人| 真实乱视频国产免费观看 | 中文字幕无码亚洲欧洲日韩| 在线观看视频免费完整版| 456亚洲人成影院在线观| 毛片免费在线视频| 狠狠亚洲狠狠欧洲2019| 久久er国产精品免费观看8| 亚洲午夜国产精品无码老牛影视| 你是我的城池营垒免费看| 亚洲欧洲一区二区| 免费精品人在线二线三线区别| 亚洲人成电影网站免费| 亚洲精品无码久久久| 中文字幕无码一区二区免费| 亚洲欧洲日产韩国在线| 日本一道本高清免费| 亚洲国产成人精品久久| 毛片无码免费无码播放| 国产精品亚洲综合五月天| 国产一区二区视频免费| 182tv免费视频在线观看| 亚洲精品综合在线影院| 亚洲中久无码不卡永久在线观看| 久久午夜无码免费| 亚洲欧美国产国产一区二区三区| 亚洲裸男gv网站| 亚洲最大免费视频网| 精品一区二区三区无码免费直播| 亚洲乱亚洲乱妇无码麻豆| 在线观看AV片永久免费| 一级全免费视频播放| 亚洲人成人网毛片在线播放| 久久久久无码专区亚洲av|