Чтобы использовать Gears WorkerPool в GWT, мне нужно написать один и тот же код на Java и Javascript? - PullRequest
0 голосов
/ 04 февраля 2009

Чтобы использовать класс и функциональность WorkerPool (Javascript Threads) в GWT / Gears, нужно ли мне писать свой код на Java и Javascript? После проверки WorkerPool - Начало работы и примера приложения WorkerPool в пакете загрузки GWT-Gears-1.1, мне кажется, что мне нужно. Кажется, что код Java используется для демонстрации синхронной природы Javascript, и тот же алгоритм в Javascript используется для асинхронных вызовов.

Я что-то упустил? Разве GWT не был создан, чтобы вам не приходилось писать код Javascript? Почему вы не можете написать свой код WorkerThread на Java и заставить компилятор скомпилировать его в Javascript?

Вот соответствующий код Java с этого URL:

 public void syncWorker(String message) {
// Busy wait for 5 seconds
long end = System.currentTimeMillis() + 5000;
while (true) {
  int busyCounter = 1000;
  String busyVar;
  while (busyCounter-- > 0) {
    busyVar = "garbage" + busyCounter;
  }
  long now = System.currentTimeMillis();
  if (now > end) {
    break;
  }
}
logMessage("Approved: " + message);
}

Вот соответствующий код Javascript в worker.js (обратите внимание, что это тот же алгоритм, написанный на Javascript):

function doWork(message) {
// Busy wait for 5 seconds
var start = new Date();
while (true) {
  var busyCounter = 10000;
  var busyVar;
  while (busyCounter-- > 0) {
    busyVar = "garbage" + busyCounter;
  }
  var now = new Date();
  if (now.getTime() - start.getTime() > 5000) {
    break;
  }
 }

 return "Approved: " + message;
 };

Вот вызов на Java:

wp = Factory.getInstance().createWorkerPool();
wp.setMessageHandler(GearsWorkerPoolTutorial.this);
workerId = wp.createWorkerFromUrl("worker.js");

Может ли кто-нибудь с опытом работы в GWT и Gears пролить свет на это?

Спасибо!

Edit:

Кажется, согласно этому http://markmail.org/message/gxipzth2jheccpha#query:+page:1+mid:sabv4llpymbavt7t+state:results мои подозрения верны. Я не уверен, что понимаю, почему существует это ограничение. Я хотел бы прочитать любую информацию по этому вопросу.

Редактировать 2:

Это также, кажется, подтверждает это: http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/658f6665e5b09bed

1 Ответ

1 голос
/ 06 февраля 2009

Я никогда не использовал Gears для GWT, но после прочтения ваших доказательств я считаю, что вы правы, утверждая, что класс WorkerPool может запускать только файлы JavaScript, а не Java-компилированные в JavaScript. Вот цитата из GWT-Gears v1.1.1 WorkerPool API.

Модуль WorkerPool позволяет веб приложения для запуска кода JavaScript в фон, не блокируя выполнение скрипта главной страницы. В настоящее время этот класс может создавать только рабочие потоки из необработанного JavaScript код. То есть код пользователя не может в настоящее время создают рабочие органы из Java-код.

Класс WorkerPool управляет потоками и связью, что является немалой задачей.

...