Flex + JPA / Hibernate + BlazeDS + MySQL как отладить этого монстра? - PullRequest
3 голосов
/ 12 июня 2010

Хорошо, поэтому я делаю "простое" веб-приложение, используя технологии из этой темы, недавно я нашел http://www.adobe.com/devnet/flex/articles/flex_hibernate.html, поэтому я следую за ним и пытаюсь применить его к своему приложению, единственное отличие Я работаю на Mac и использую MAMP для базы данных (поэтому для меня нет командной строки).

Дело в том, что у меня проблемы с получением / подключением к базе данных.

У меня есть remoting-config.xml, persistance.xml, класс News.java (мой Entity), класс 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>

Служба новостей имеет метод:

    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 ") 
})

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) У меня уже есть база данных "gladm", и у меня есть таблица "GLT_NEWS" со всеми полями, это плохо?

По сути, вопрос в том, как мне отладить эту штуку, чтобы я мог найти ошибку, которую делаю? Я знаю, что loadData () выполняется (сделал trace ()), но я понятия не имею, что происходит с loaderService.getLatestNews () ...

@ РЕДАКТИРОВАТЬ: хорошо, я вижу, что я получаю ошибку в «обработчике ошибок», который говорит

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

@ EDIT2: Хорошо, я решил проблему, так как оказалось, что мой ContextRoot был неверным, забавно то, что я не смог отредактировать его, перейдя в Свойства проекта-> Сервер Flex, так как он был недоступен для редактирования! Мне нужно было найти файл .flexProject и отредактировать его (очевидно, мой Flex Navigator не показывал его, и случайно заметил, что он фильтруется).

Ответы [ 2 ]

3 голосов
/ 06 декабря 2010

Чтобы ответить на ваш вопрос относительно отладки этого монстра ... вот что я делаю.

  1. Установите точки останова в моем Java-коде

  2. Запустите сервер приложений Java с соответствующим набором свойств JVM отладки (например, -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n)

  3. Из Eclipse я подключаю удаленный отладчик к серверу приложений напорт по умолчанию 8000. Отладчик Java открывается при достижении точки останова.

  4. Установка точек останова в моем приложении Flex (или одном из его модулей).

  5. Из Eclipse (с Flash Builder) я запускаю конфигурацию отладки для своего приложения Flex.Flex Debugger откроется при достижении точки останова.

На данный момент у меня открыто два отладчика, и все работает отлично.Две другие вещи, которые я делаю:

a) увеличивают тайм-аут системы транзакций, чтобы он не получал триггер, пока я сижу там, подумайте несколько минут

b) используйте Charles Proxy (врежим обратного прокси) между клиентом и сервером для просмотра трафика AMF и просмотра полезных нагрузок и т. д.

Надеюсь, это поможет.

0 голосов
/ 13 июня 2010

ваша ошибка означает, что вы не правильно звоните на сервер.Что-то не так, URL-адрес файла web.config или другие файлы конфигурации BlazeDS.

...