好的,我正在製作一個使用主題中的技術的「簡單」網絡應用程序,最近我發現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沒有顯示它,並且意外地發現它正在被過濾)。