<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實(shí)現(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 心夢帆影 閱讀(1791) 評論(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 加到實(shí)體中可以解決這樣的問題!用了這個方法只能讓webservice忽略它而已。但實(shí)際問題依然未被解決,還有一個問題,就是延遲加載關(guān)閉后,就會出現(xiàn)循環(huán)引用的bug,也只能通過@XmlTransient 得到解決,哎,,,,,,,,,,,  回復(fù)  更多評論
      
    主站蜘蛛池模板: 全部免费毛片在线| 成年性午夜免费视频网站不卡| 国产大片91精品免费观看男同| 亚洲免费在线观看视频| 午夜免费1000部| 亚洲资源在线视频| 国产精品视频免费| 亚洲一区精彩视频| 在线观看成人免费视频| 亚洲hairy多毛pics大全| 免费涩涩在线视频网| 久久久久免费视频| 亚洲精品视频在线看| 久久www免费人成精品香蕉 | 精品久久洲久久久久护士免费| 亚洲免费福利在线视频| 在线a毛片免费视频观看| 日韩国产精品亚洲а∨天堂免| 免费看的成人yellow视频| 国产午夜亚洲精品不卡免下载| 国产免费一区二区三区VR| 九九视频高清视频免费观看 | 国产成人免费网站在线观看 | 亚洲熟妇av一区| 午夜毛片不卡高清免费| 色妞www精品视频免费看| 一本久久a久久精品亚洲| 久久大香香蕉国产免费网站 | 天天摸天天碰成人免费视频| 男女猛烈无遮掩视频免费软件| 曰韩亚洲av人人夜夜澡人人爽 | 99久久免费精品视频| 中文无码亚洲精品字幕| 免费成人在线观看| 久久中文字幕免费视频| 亚洲砖码砖专无区2023| 亚洲午夜国产片在线观看| 边摸边脱吃奶边高潮视频免费| 亚洲国产婷婷六月丁香| 无码日韩人妻av一区免费| 四虎精品免费永久免费视频|