EJB 3 & Swing: как улучшить отзывчивость GUI? - PullRequest
1 голос
/ 06 марта 2012

Я создаю приложение базы данных Swing на основе технологии EJB 3.Я использую Netbeans 7.0.1.Когда программа запускается, она извлекает все данные из базы данных:

    private javax.persistence.Query spareQuery;
    private java.util.List<Spares> spareList;
    ...
    spareQuery = entityManager.createQuery("SELECT s FROM Spares s ORDER BY s.id");
    spareList = org.jdesktop.observablecollections.ObservableCollections.
                observableList(spareQuery.getResultList());

Извлечение всех данных из базы данных приводит к значительной паузе в процессе запуска.Сейчас мне нужна оболочка для интерфейса javax.persistence.Query, которая будет выполнять следующие действия:

  1. Инициализация:

    spareQuery = entityManager.createQuery("SELECT s FROM Spares s ORDER BY s.id");
    spareQuery = new MyQueryWrapper ( spareQuery );
    
  2. Основная часть!После этого при вызове:

    spareList = org.jdesktop.observablecollections.ObservableCollections.
                observableList(spareQuery.getResultList());
    

Вместо ожидания всех данных, полученных от сервера, экземпляр Query должен разделить запрос на куски, а после получения каждого фрагмента добавить данные всписок (поскольку список можно наблюдать, каждая часть данных будет отображаться в JTable).В результате у нас будет мягкий и быстрый запуск.

Таким образом, логика работы должна быть такой:

  1. SELECT s FROM Spares s ORDER BY s.id WHERE s.id BETWEEN 1 and 20
  2. Добавить данные в список.
  3. ...
  4. SELECT s FROM Spares s ORDER BY s.id WHERE s.id BETWEEN 80 and 100
  5. Добавить данные в список.

ВОПРОС : Есть ли библиотека, которая может заменить (обернуть) EntityManager, Query или что-то еще для достижения плавного асинхронного извлечения данных из базы данных с использованием технологии EJB3?

1 Ответ

1 голос
/ 06 марта 2012

Зачем вам библиотека для этого. Просто запустите свой экземпляр EntityManager и выполнение Query в другом потоке, а затем верните возвращаемые значения в поток Swing, когда они станут доступны. Вы можете использовать Swing Worker или ExecutorService для реализации этого, но для такой простой задачи вам может быть лучше просто запустить поток с обратным вызовом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...