<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實現)+Web Service開發時,遇到的一些問題,查了許多地方,都找不到答案,請各位朋友耐心讀一下本文,有想法的歡迎留言!謝謝! 

        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. }  

     

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

       

        在還沒有發布成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)能正常添加和查詢。

     

        當發布成Web Service后,在客戶端生成相應的服務代理類,再在Web服務的客戶端用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. (……相關的異常堆棧信息略……)   
    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. (……相關的異常堆棧信息略……)   
    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. (……相關的異常堆棧信息略……)   
    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. (……相關的異常堆棧信息略……)   
    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. (……相關的異常堆棧信息略……)  

     

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

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

     

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



    本文原創,轉載請注明出處,謝謝!http://m.tkk7.com/rongxh7(心夢帆影JavaEE技術博客)
        

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

    評論:
    # re: 是它的Bug還是我的錯誤:EJB的WebService客戶端報LazyInitializationException異常[未登錄] 2009-06-23 20:50 | freefly
    貌似和我的問題一模一樣ejb發布成webservice之前可以測試調用
    發布之后,生成代理類后可以插入,不能查詢出!不知 lz搞定這個問題沒·  回復  更多評論
      
    # re: 是它的Bug還是我的錯誤:EJB的WebService客戶端報LazyInitializationException異常 2010-09-09 16:35 | wothnet
    是延遲載加方面的問題。強制延遲加載的對象進行初始化!或者取消延遲加載  回復  更多評論
      
    # re: 是它的Bug還是我的錯誤:EJB的WebService客戶端報LazyInitializationException異常 2011-08-09 16:35 | 鵝鵝鵝
    怎么處理?  回復  更多評論
      
    # re: 是它的Bug還是我的錯誤:EJB的WebService客戶端報LazyInitializationException異常 2011-08-12 13:18 | xiaomaha
    這個問題我也遇到了,超級郁悶,無論是否延遲加載,只要用到ws都會出現session 問題,樓主是否解決此問題,請把解決方案貼出來啊,,,我現在只有通過@XmlTransient 加到實體中可以解決這樣的問題!用了這個方法只能讓webservice忽略它而已。但實際問題依然未被解決,還有一個問題,就是延遲加載關閉后,就會出現循環引用的bug,也只能通過@XmlTransient 得到解決,哎,,,,,,,,,,,  回復  更多評論
      
    主站蜘蛛池模板: 日韩中文无码有码免费视频 | 亚洲免费一区二区| 免费看片免费播放| 亚洲日韩精品无码专区加勒比☆ | 在线观看免费a∨网站| 国产精品亚洲自在线播放页码| 国产精品爱啪在线线免费观看| 亚洲另类精品xxxx人妖| 在线观看免费高清视频| 亚洲精品免费网站| 破了亲妺妺的处免费视频国产| 亚洲欧美第一成人网站7777| 蜜臀91精品国产免费观看| 男男gvh肉在线观看免费| 亚洲成?Ⅴ人在线观看无码| 九九视频高清视频免费观看 | 国产亚洲AV夜间福利香蕉149| 九九综合VA免费看| 亚洲精品无码乱码成人| 91精品国产免费入口| 国产成人精品日本亚洲直接| 国产麻豆剧传媒精品国产免费| 美女视频黄视大全视频免费的| 亚洲日本一区二区三区在线不卡| 精品一区二区三区高清免费观看| 亚洲Av熟妇高潮30p| 日韩一区二区a片免费观看| 视频一区在线免费观看| 亚洲精品无码不卡在线播HE | 色偷偷亚洲女人天堂观看欧| 日韩成人在线免费视频 | 国产91在线|亚洲| 免费国产在线观看老王影院| 在线免费视频你懂的| 亚洲卡一卡2卡三卡4卡无卡三| 在线观看免费高清视频| 日韩精品免费一线在线观看| 亚洲国产精品久久久久网站| 暖暖在线日本免费中文| 你懂得的在线观看免费视频| 亚洲午夜精品在线|