簡體   English   中英

Flex + JPA / Hibernate + BlazeDS + MySQL如何調試這個怪物?

[英]Flex+JPA/Hibernate+BlazeDS+MySQL how to debug this monster?

好的,所以我正在使用該主題的技術制作一個“簡單”的網絡應用程序,最近我找到了http://www.adobe.com/devnet/flex/articles/flex_hibernate.html所以我正在關注它並嘗試將它應用到我的應用程序,唯一的區別是我正在使用Mac並且我正在使用MAMP作為數據庫(所以我沒有命令行)。

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

我有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;
}

命名查詢在News類中:

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

processedLoadResult看起來像這樣:

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

哪里:

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

但是當我試圖觸發時:

loaderService.getLatestNews();

沒有任何反應,newsList是空的。

我需要指出的一些事情: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:好的,我解決了這個問題,因為事實證明我的ContextRoot不正確,有趣的是我無法通過轉到Project properties-> Flex Server來編輯它,因為它是不可編輯的! 我必須找到.flexProject文件並對其進行編輯(顯然我的Flex Navigator沒有顯示它,並且偶然我注意到它正在被過濾)。

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

  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調試器將打開。

此時我打開了兩個調試器,一切都運行良好。 我做的另外兩件事:

a)延長事務系統超時,所以當我坐在那里思考幾分鍾時它不會觸發

b)在客戶端和服務器之間使用Charles Proxy(在反向代理模式下)來監視AMF流量並查看有效載荷等。

希望這可以幫助。

您的錯誤意味着您沒有以正確的方式調用服務器。 那里有些問題,web.config文件或其他BlazeDS配置文件的URL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM