2010-06-12 56 views
3

好的,我正在製作一個使用主題中的技術的「簡單」網絡應用程序,最近我發現http://www.adobe.com/devnet/flex/articles/flex_hibernate.html,所以我正在關注它,並嘗試將它應用到我的應用程序,唯一的區別是我正在處理一臺Mac和我正在使用MAMP的數據庫(所以沒有我的命令行)。Flex + JPA/Hibernate + BlazeDS + MySQL如何調試這個怪物?

事情是我在檢索/連接到數據庫時遇到了一些麻煩。

我有remoting-config.xml,persistance.xml,一個News.java類(我的實體),一個NewsService.java類,一個News.as類 - 就像在教程中一樣。我當然有這條線我.mxmls之一:

<mx:RemoteObject id="loaderService" destination="newsService" result="handleLoadResult(event)" fault="handleFault(event)" showBusyCursor="true" /> 

而我的remoting-config.xml文件看起來是這樣的(以及它的一部分):

<destination id="newsService"> 

    <properties><source>com.gamelist.news.NewsService</source></properties> 

</destination> 

NewsService有一個方法:

public List<News> getLatestNews() { 
    EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT); 
    EntityManager em = emf.createEntityManager(); 
    Query findLatestQuery = em.createNamedQuery("news.findLatest"); 
    List<News> news = findLatestQuery.getResultList(); 
    return news; 
} 

而命名查詢是在新聞類:

@Entity 
@Table(name="GLT_NEWS") 
@NamedQueries({ 
@NamedQuery(name="news.findLatest", query="from GLT_NEWS order by new_date_added limit 5 ") 
}) 

的handledLoadResult看起來是這樣的:

private function handleLoadResult(ev:ResultEvent):void { 
     newsList = ev.result as ArrayCollection; 
     newsRecords = newsList.length; 
    } 

其中:

[Bindable] 
private var newsList:ArrayCollection = new ArrayCollection(); 

但是當我嘗試觸發:

loaderService.getLatestNews();

什麼也沒有發生,新聞列表是空的。我需要指出的幾件事: 1)正如我所說我沒有手動安裝mysql,但我使用MAMP(是的,服務器正在運行),這可能會導致一些麻煩嗎? 2)我已經有一個「高興」的數據庫,我有一個「GLT_NEWS」表的所有領域,這是不好的?

基本上問題是我想如何調試這個東西,所以我可以找到我犯的錯誤?我知道loadData()被執行(做了一個trace()),但我不知道loaderService.getLatestNews()會發生什麼......

@EDIT:好吧,所以我看到我得到一個錯誤「故障處理程序」,它說

"Error: Client.Error.MessageSend - Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 404: url: 'http://localhost:8080/WebContent/messagebroker/amf' - " 

@ EDIT2:好吧,我解決了這個問題,事實證明我的上下文根是不正確的,可笑的是我無法通過Project屬性 - >柔性編輯服務器,因爲它是不可編輯的!我必須找到.flexProject文件並對其進行編輯(顯然,我的Flex Navigator沒有顯示它,並且意外地發現它正在被過濾)。

回答

3

要回答你的問題,一般來說,調試這個怪物......這就是我所做的。

  1. 我在Java代碼中設置斷點

  2. 啓動設置相應的調試JVM屬性的Java應用服務器(如-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

  3. 在Eclipse中,我附上一個遠程調試器應用程序服務器位於默認端口8000上。當調試中斷點時,Java調試器將打開。

  4. 在我的Flex應用程序(或其模塊之一)中設置斷點。

  5. 從Eclipse(使用Flash Builder)啓動我的Flex應用程序的調試配置。當一個斷點被擊中時,Flex調試器將打開。

在這一點上,我有兩個調試器打開,一切都很好。其他兩件事情我做的:

一)延長交易系統超時,所以它不會觸發,而我坐在那裏想了幾分鐘

B)使用查爾斯代理(反向代理模式)在客戶端和服務器之間觀看AMF流量並查看有效載荷等。

希望這會有所幫助。

0

你的錯誤意味着你沒有以正確的方式調用服務器。有什麼不對,url web.config文件或其他BlazeDS配置文件。