Development using different platforms, languages, etc: links, thoughts, experience, articles.
Tuesday, April 27, 2010
GWT UiBinder - Separation of Concepts
Отличный материал для идеи, которая недавно пробегала - вместо скучных обычных докладов, провести что-то вроде группового мастер-класа. И как раз пошаговая разработка UI с UiBinder'ом думаю будет довольно интересной.
Friday, August 29, 2008
GWT 1.5 Released
Наконец-то произошел давно ожидаемый релиз GWT версии 1.5. Хотя релиз-кандидаты и так показывали довольно стабильную работу и обладали довольно большим списком нововведений, но официальный релиз позволяет использовать его в реальных проектах.
Итак, позволю себе сделать вольный перевод списка того, что изменилось с небольшими комментариями (оригинал):
Поддержка Java 1.5 и расширенная эмуляция JRE
- Теперь можно спокойно использовать “генерики”. И не только для более комфортной работы на клиентской стороне, но и для реализации более “тесного” RPC между клиентом и сервером (теперь можно возвращать клиенту List<MyClass> не беспокоясь о
@gwt.typeArgs) - Синтаксический сахарок: for-each loops, autoboxing, static import, enum
- Переработана архитектура подсистем (RPC, image bundles, benchmarking, интернационализация). Так же стало допустимо использование “левых” аннотаций, что позволяет повторное использование кода для других систем.
- Добавлена реализация разных вспомогательных классов, к которым так привыкли ява-девелоперы (
StringBuilder,TreeMap,LinkedHashMap) - Теперь Assertion-ы можно отключить (фактически появилась возможность делать более “релиз” версию).
Производительность и связь с JavaScript
- Компилятор более тщательно проводит “инлайнинг” функций – т.е. вместо вызова функции, код функции вставляется прямо в то место, откуда был бы вызов.
- Дерево переработано полностью. В результате на ИЕ прирост скорости работы от 5 до 10 раз.
- Добавлены типы JavaScript overlay. Это позволяет интегрировать уже написанные JavaScript библиотеки без дополнительных издержек. А так же более “прямую” конвертацию JSON данные в GWT объекты.
- Система “линкеров” позволяет генерировать различные варианты окончательных сборок для разных контейнеров, которые могут выполнять JavaScript (привет Google Gadgets, Filefox расширения, Greasemonkey скрипты, Gears но и … Flex и Android)
Красивые виджеты, лучшая поддержка DOM, доступность, и bi-di.
- Переделали демку
- Добавили дефолтные “темы” (раньше были только в примерах)
- Добавили функционал для обеспечения “доступности” (WAI-ARIA) и вывод “наоборот” (для арабских локалей например)
- Новый DOM package покрывает полностью спецификацию W3C – т.е. можно использовать “нативные” элементы вместо виджетов для простоты реализации.
…и многое другое :)
В общем, GWT продолжает довольно активно развивается, и этот релиз – ещё один сильный и уверенный шаг вперёд.
Friday, March 28, 2008
GWT @ UA Web 2008:
Так, как я выступал в зале "ABCD", то и все доклады я решил послушать там. Среди тех, что действительно запомнились - это про семантическую вёрстку Вадима Макеева, про веб верстание в целом Вадима Макишвили. Ну и в целом ребята из Яндекса довольно интересные доклады рассказывали.
Конечно без косяков на моём докладе не обошлось: это и пресловутая Виста, которая после того как проснулась не смогла определить проектор (хотя перед тем, как заснуть его видела), так что пришлось не на своем ноуте показывать (следственно, лишился возможность показать реальные демки), и слегка "налезщий" по времени предыдущий докладчик (следственно, пришлось немного сократить время доклада и рассказывать немного спеша).
В целом, как мне кажется, конференция вышла на довольно высоком уровне, можно было пообщаться с очень многими людьми. Что удивило, что были веб-разработчики не только из Украины и Росии, но так же из Беларуссии. Надеюсь завтра будет не менее интересно.
Ах да, вот ссыдка на
мой доклад по GWT
PDF-версия (по идее должно работать, если у кого не работает - пишите)
Sunday, March 16, 2008
GWT 1.5 milestone 1
Среди самого "вкусного": The Java 1.5 syntax is fully supported, including generics, enums, nice "for" loops, autoboxing, static imports, annotations, and so on.
И ещё много чего.
Имхо для GWT это будет огромнейший шаг вперёд. Будем ждать релиза :)
Monday, December 10, 2007
Microsoft Volta - Microsoft's answer to GWT?
Сегодня наткнулся на довольно таки интересный проект от Microsoft - Volta. В описании много слов, но основное "The compiler creates cross-browser JavaScript for the client tier, web services for the server tier, and communication, serialization, synchronization, security, and other boilerplate code to tie the tiers together". Ничего не напоминает? Ах да, это же концепция старого доброго GWT.
После более детального ознакомления с документацией я всё больше и больше находил схожие концепции GWT и Volta.
Итак, Microsoft таки решилась дать ответ Google. Я пока не сильно вникал в подробности реализации и кодинга, но не смотря на схожесть концепции, различия таки есть. И довольно существенные - Volta имеет более сильную привязку к серверной составляющей, в то время, как код, генерируемый GWT может быть запущен с любым бэк-ендом (Java/PHP/ASP.NET/...) или вообще без сервера.
Что-ж. Ответ есть. Значит будем смотреть-пробовать. Время, как всегда, рассудит.
UPDATE: Посмтрел на самое типа простое демо-приложение Quickstart (ВНИМАНИЕ: Читайте UPDATE2 до открытия ссылки). С помощью HTTP Explorer'а отследил то, какие запросы идут на сервер и какие ответы и ужаснулся. Нет, это совсем не смешно. Вот что получислоь: трейс запроса. Если для загрузки такого маленького приложения пришлось сделать 133 запроса и получить около 2.2мб данных, то такой фреймворк требует ещё очень большой доработки. Бета-версия моего посиковика на GWT (lab.look.org.ua) занимает около 140кб в сумме (с картинками и стилями) и к серверу отсылается аж 6 запросов (или 16 с картинками и стилями). И это на GWT 1.3 (в GWT 1.4, как говорят, уменьшился генерируемый код на 15-20%). Итак, если Volta не будет оптимизирована, то чтоб использовать её надо будет очень хорошие сервера, хорошие каналы и хорошие клиентские машины. В то время, как GWT проводит довольно активную работу над оптимизацией размера кода, уменьшению количества запросов и т.д. Посмотрим, сможет ли Microsoft догнать GWT по этим параметрам, или будет как всегда выигрывать рекламой и маркетингом, а не эффективностью и производительностью?
UPDATE2: Многие знакомые жалуются, что у примеры прилоежний Volta вешают и крашат броузера (FF2, IE6, IE7). У меня FireFox хоть и на пару минут задумался, но потом отвис, хотя IE крашанулся полностью (проц АМД Х2 4600, 2гиг памяти). Так что предупреждение всем: если много открытых закладок и боитесь потерять, лучше или не открывайте их или открывайте в другом инстансе броузера или другим броузером.
UPDATE3: Вот ещё некоторые ссылки по теме:
- Комментаций Рея, создателя Chronoscope и автора довольно интересных статей
- Заметка Эрика Мейера(насколько я понял, один из разработчиков Volta (видео)
Wednesday, August 29, 2007
GWT: Out of beta!
Поздравляю всех, кто работает или заинтересован в GWT. Ибо сегодня "великий день" - с выходом релиза 1.4 GWT уже перестал иметь статус "Beta"!
Кому интересны подробности, советую почитать эту новость в оригинале.
Тут же напишу небольшую выдержку о том, что именно новенького в 1.4 кроме выхода из "бэты":
- Код после компиляции стал меньше до 30% и скорость компиляции возросла на 20%-50%
- Ускорен стартап приложения на клиенте (уменьшенно кол-во запросов)
- Новые стандартные виджеты: RichTextArea, HorizontalSplitPanel, VerticalSplitPanel, SuggestBox, DisclosurePanel, PushButton, ToggleButton
- Знаменитый "ImageBundle" - одним запросом можно получить много картинок (снова таки оптимизация)
- Оптимизированы старые виджеты, добавлен новый ф-ционал (напр. Image)
- Поддержка NumberFormat и DateTimeFormat для более простой локализации
- Добавлена система бенчмаркинга юнит тестов GWT
- Поддержка cross-stite трансферов модулей
... и многие другие фичи и очень много багфиксов.
Это действительно огромный шаг в развитии GWT.
Cледующий шаг - поддержка Java 1.5 синтаксиса. И, судя по отзывам разработчиков, это будет уже скоро.
Thursday, August 9, 2007
Google Mashup Editor: New Google project
Проглядывая море ньюсфидов я обнаружил ссылочку на довольно интересный проект: Google Marshup Editor.
Так, как доступ пока закрыт, не совсем ясно что это за зверь такой. Но уже есть галерея готовых "машапов", по которой можно примерно узнать как оно работает.
Довольно простой и интересный пример - TaskList (там же есть и исходники).
Насколько я понял, эта система позволит клепать небольшие странички, которые будут иметь возможность хранить индивидуальные данные для каждого пользователя, имеющего account в гугл, получать доступ к другим источникам данных и т.д.
Интересно, что сам редактор использует GWT, при этом есть отличное обоснование, почему именно.
Wednesday, July 18, 2007
GWT: Tutorials
Не смог удержатся от того, чтоб не сделать кросс-пост отличной подборки туториалов. Оригинал можно посмотреть тут.
- Getting Started Guide - От самого GWT.
- Kickstarting Google Web Toolkit on the Client Side - Early "Hello, World!" tutorial with a second, animation example. This quick-start tutorial aims to translate some of the knowledge gained from my monkeying about with GWT into a useful text which will get other developers up and running quickly. To keep things nice and simple, we'll focus on only client-side matters.
- Google Web Toolkit Tutorial: The Break Down - Very short tutorial from early on. Demonstrates a simple rollover with GWT.
- Working with the Google Web Toolkit - Extensive tutorial with lots of screenshots that demonstrates everything from the basic getting started to some of the more interesting features, such as history support (i.e. the back button.). Article includes a Maven module for GWT.
- Introduction to the Google Web Toolkit - another extensive tutorial, this one from Oracle, so if you want to see how to GWT with JDeveloper, this one is for you.
- GWT Tutorial with Googlipse - yes, Googlipse is no more, but Cypal Studio has taken it's place. This demonstrates one way of doing GWT with Eclipse.
- Exporting WAR in GWT - Tutorial to create a WAR file in command line (works only with WTP 2.0).
- GWT Small Guide - I wrote this guide thinking in the user's who want's develope dynamic application's with the GWT (Google Web Toolkit) in an AMP(Apache,MySQL,PHP) environment's. The basic idea is write a small and very simple application using MySQL and PHP at the server side, and GWT for the client interfaze, using JSON for the communication between the client and the server.
- Ajax for Java developers: Exploring the Google Web Toolkit - One of several GWT tutorials from IBM's developerworks. In this article, I'll run through creating a simple GWT application to fetch a weather report from a remote Web API and display it in the browser. On the way, I'll briefly cover as many of GWT's capabilities as possible, and I'll mention some of the potential problems you'll come across.
- Trivial GWT Example - from Robert Hanson, who went on to write an excellent book on GWT, a simple GWT-RPC example.
- Build an Ajax-enabled application using the Google Web Toolkit and Apache Geronimo - recent (May 2007) two part series (part two is here) with source code, flash demos, etc.. Requires registration.
- Google Web Toolkit - This article describes the development of a simple Ajax application on Mac OS X using GWT and familiar Java tools, such as Apache Ant, the Tomcat 5.0 servlet container, and the IntelliJ IDEA integrated development environment (the latter is a commercial IDE). The article assumes some knowledge of Java and Ant.
- GWT Tutorial - focuses on producing a web site, rather than a webapp.
- Getting Started - the first of Paval JBanov's planned five GWT tutorials. The others are First Application, Core widgets and panels, Custom widgets and RPC (not yet written).
- GWT Plugin Tutorial - oddly enough, this tutorial demonstrates how to integrate GWT with Struts 2 WITHOUT the GWT plugin. Hmmmm.
- Getting Started with Google Web Toolkit (GWT) - Very basic, getting started instructions.
- Tutorial: Creating a Login application - demonstrates the use of Instantiations' GWT Designer tool (WYSIWYG UI design for GWT).
- Basic GWT / PHP Communication - Part 1: Java and Part 2: PHP. All the GWT documentation is about hooking up Java on the front and back ends. What about PHP? This shows how.
- String-based RPC between GWT and PHP - forget about serializing Java objects via XML and JSON; this is the dead simple approach.
- Using cURL to Interface GWT with an Existing Site - this one is kind of hard to explain. If you know about curl and PHP, this article is worth reading.
- Creating GWT RPC Services Tutorial - short guide to using gwt4nb, the Netbeans plugin for GWT, to create GWT-RPC services.
- Creating a simple app with GWT4NB - flash based tutorial on creating an anagram application with GWT and Netbeans.
- Googled by GWT - Part 1 and Part 2. Extensive getting started tutorial with lots of screenshots.
- Google Web Toolkit Tutorial - short example demonstrates use of the keyboard listener.
- Step by Step: A Mortgage Calculator using GWT - as it says, a mortgage calculator demo using GWT.
- IntelliJ IDEA: Google Web Toolkit as 1-2-3 - Animated demo walks through the configuration of IntelliJ Idea for the
Google Web Toolkit and shows how to write a GWT image viewer
application. - IntelliJ IDEA: Creating GWT Application from a Web Module - Animated demo of using GWT in a web module (IDEA's project/module type for Java webapps).
- Ajax for Java developers: Exploring the Google Web Toolkit - extensive tutorial from IBM developerworks that builds all the way to a weather reporter widget.
- Integrating the Google Web Toolkit with JSF using G4jsf - I can't say that I really love JSF, but if you bend that way, this will teach you how to marry the two. Extensive with lots of code snippets and screenshots.
- Asynchronous Google (Web Toolkit) and Django - Integrating GWT and Django using JSON.
- Using VistaFei IDE 1.0 for GWT: A Tutorial - VistFei is an IDE. The last time I looked at it, this tutorial had somehow lost it's screenshots and the CSS had been jacked up.
- Using Google Web Toolkit - video HOWTO by Bruce Johnson, the tech lead of GWT.
- GWT-Spring Integration Demystified - any time a new technology comes along, it just has to be integrated into Spring. Here you go.
- Build an Ajax application using Google Web Toolkit, Apache Derby, and Eclipse - Part 1 and Part 2. Extensive tutorial in two parts, the first of which deals with the front end, the second of which deals with the back end.
- Ease AJAX development with the Google Web Toolkit - develops a book search application as part of a getting started tutorial.
- Roughian Examples - combination demo/tutorial of GWT. Version 2 is under development.
Если ещё найду, буду добавлять.
Мне когда-то больше всего помогли 1 и 26.
Monday, July 2, 2007
GWT: XML-driven user interface
Вчера довёл свой проект gwt-ui до стадии, когда можно его выкладывать. Получился довольно интересный инструмент, который позволяет сильно упростить построение пользовательских интерфейсов для GWT.
Идея появилась после того, как я заметил, что приходится писать много похожего кода при построении интерфейса: панели, внутри ещё панели, внутри которых виджеты и т.д. В то же время, сейчас всё более и более популярны "описательные" способы построения интерфейсов (напр. XAML).
Такой подход более гибкий, наглядный и удобный, чем "последовательное" создание.
В GWT же сейчас используется именно "последовательное" создание интерфейса: созаются панели, внутрь который добавляются виджеты.
Вспомнив о генераторах в GWT, о которых я недавно писал, подумалось - почему бы не использовать их, для генерации хотя бы базового кода генерации интерфейса? Вот и взялся за реализацию этой идеи.
Как результат и появился проект gwt-ui. Что же он из себя представляет? Фактически, это jar-файл, который можно подключить к проекту, и после этого появится возможность воспользоваться генератором, который находится в этом проекте.
Приведу список возможностей, которые сейчас доступны:
- Построение интерфейса используя XML-описание
- Простой доступ к сгенерированным объектам (сейчас - к контейнерам)
- Простое переключение "состояний" (вызов одного метода)
- "Ленивое" создание виджетов: виджеты создаются только тогда, когда они становятся видимыми
- Наследование состояний: любое состояние может наследоваться от другого. Можно написать некое "основное" состояние, которое описывает базовое расположение виджетов, а остальные просто описывают изменения.
- Возможность задания визуальных свойств контейнеров (напр. "align='right' width='100%' style='bar'")
- Нотификация виджетов о новом состоянии: Если виджет имплементирует интерфейс UIStateListener и он добавлен в интерфейс, то ему будет сообщатся о том, что состояние поменялось.
Вот небольшое how-to создания простейшего интерфейса с помощью gwt-ui:
1. Файл описания интерфейса.
Для начала создадим файлик, рядом с файлом описания модуля (который <ModuleName>.gwt.xml), в котором опишем структуру простейшего интерфейса (более сложный пример можно посмотреть в коде примера, доступного в svn):
<gwtui>
<layout>
<container id='main' type='FlowPanel'/>
</layout>
<states widgetpackage='client'>
<state id='fiststate' default='true' >
<content container='main'><widget type='MyWidget1' /></content>
</state>
<state id='anotherstate'>
<content container='main'><widget type='MyWidget2' /></content>
</state>
</states>
</gwtui>
В этом файле определены:
- Контейнер, имеющий тип FlowPanel под именем 'main'
- Два состояния:
- Состояние 'firststate', которое будет использоватся по умолчанию (т.е. при первоначальной загрузке и/или если произведенна попытка изменить состояние, которое не описанно в документе. При установке этого состояния, в контейнер под именем 'main' помещается виджет с типом 'MyWidget1' (находищийся в пакете 'client')
- Состояние 'anotherstate'. При установке этого состояния, в контейнер под именем 'main' помещается виджет с типом 'MyWidget2' (находищийся в пакете 'client'). При этом, виджеты, которые были помещенны в этот контейнер другими состояниями пропадают.
Думаю, синтаксис достаточно прост. Более сложное описание примера можно посмотреть на страничке демо-примера, где используется и наследие состояний и визуальные свойства контейнеров.
2. Подключение GWTUI
Для работы gwt-ui, требуется подключение модуля в файле определения модуля GWT. Это можно сделать просто добавив такую строчку в файл определения (<ModuleName>.gwt.xml):
<inherits name='org.olostan.gwtui.GWTUI'/>
3. Создание интерфеса-маркера
Для получения объектов, созданных gwt-ui и изменения состояний интерфейса, необходимо определить в своём проекте интерфейс, который будет наследоватся от интерфейса "UIManager", например:
public interface MyUI extends UIManager {
public Panel getMainContainer();
}
Данный интерфейс позволяет получить екземпляр контейнера 'main', описанного в файле описания интерфейса. Для того, например, чтоб добавить его на страничку.
4. Создание и добавление пользовательского интерфейса
Для того, чтобы создать сгенерированный пользовательский интерфейс, достаточно воспользоватся статическим методом GWT.create(). После этого с помощью полученного интерфейса можно будет получить доступ к созданным объектам и поменять текушее состояние. Например, при инициализации модуля:
public class MyModule implements EntryPoint {
MyUI ui;
public void onModuleLoad() {
ui = (MyUI) GWT.create(MyUI.class);
RootPanel.get().add(ui.getMainContainer());
ui.setState("fiststate");
}
}
В последствии, когда надо поменять текущее состояние, можно вызвать метод setState, например:
ui.setState('anotherstate');.
Вот таким способом можно создавать интерфейсы на основе XML-описания интерфейса и потом переключать состояния интерфейса.
Tuesday, June 26, 2007
GWT: Changing locale using cookies
Продолжая работу над своим проектом портирования функционала поисковой системы Look'а на GWT (lab.look.org.ua), я дошел до и18нации. В GWT, как известно, есть довольно хорошо продуманные средства для хорошей локализации. Но мне захотелось, чтоб текущий выбор языка хранился в куках, а не в переменной. В общем, решение получилось довольно простое.
1. Выбор языка и сохранение в cookie.
Этим занимается вот такой виджет:
package client.widgets;
import com.google.gwt.user.client.ui.*;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.Cookies;
import java.util.Date;
/**
* Created by Olostan
* Date: 24.06.2007 23:37:00
*/
public class LangSelection extends Composite {
private static native void RefreshWindow() /*-{
$wnd.location.reload();
}-*/;
private class LangImage extends Image implements ClickListener {
final String code;
public LangImage(String code) {
super();
this.code = code;
this.setUrl("images/flags/"+code+".gif");
this.addClickListener(this);
this.setStyleName("lang-image");
}
public void onClick(Widget sender) {
Date date = new Date();
if (!code.equals("en")) {
Cookies.setCookie("locale",code, new Date(date.getTime()+60*60*60*60));
} else {
Cookies.setCookie("locale","",new Date(date.getTime()-1000));
}
RefreshWindow();
}
}
String[] lang = new String[] { "en","uk","ru" };
public LangSelection() {
HorizontalPanel panel = new HorizontalPanel();
for(int c=0;c<lang.length;c++) {
LangImage img = new LangImage(lang[c]);
panel.add(img);
}
initWidget(panel);
setStyleName("lang-widget");
}
}
Тут самый важный код - это тело метода onClick. Он именно записывает выбранный язык в Cookies и делает рефреш странички.
2. Установка языка при загрузке модуля
Тут пришлось применить вот такой интересный трюк: в исходном html файле в блоке head добавляется вот такой код:
<head>
<title>MyModule title</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function getCookie(name) {
var dc = document.cookie;
var prefix = name + "=";
var begin = dc.indexOf("; " + prefix);
if (begin == -1) {
begin = dc.indexOf(prefix);
if (begin != 0) return null;
} else {
begin += 2;
}
var end = document.cookie.indexOf(";", begin);
if (end == -1) {
end = dc.length;
}
return unescape(dc.substring(begin + prefix.length, end));
}
var locale=getCookie("locale");
if (locale!="") {
document.writeln("<meta name=\"gwt:property\" content=\"locale="+locale+"\"> ");
}
</script>
<meta name='gwt:module' content='MyModule'>
<link rel=stylesheet href="MyModule.css">
</head>
(тут попрошу прощение за потерянный origin кода на яваскрипте чтения значения cookie).
Таким образом при загрузке модуля будет установленна нужный язык.
Пример того, как оно работает можно посмотреть вот тут: lab.look.org.ua
Tuesday, June 19, 2007
REST - Just rest!
Всё чаще и чаще слышу последнее время про REST и всё, что с ним связанно. Интересно тем, что все давно пользуются так или иначе, но стандартизировать все ленятся.
А реализовывать чей-то API ещё хуже - то одно намудрят, то другое.
И по этому меня заинтересовала работа Thomas Steiner'а об автоматизации этого процесса. И ещё больше - реализация идея в виде работающего генератора кода (Кстати, ещё тем, что он написан на GWT, и доступен исходный код со странички проекта).
Довольно полезная тулзовина для реализации кода, использующего REST-запросы.
GWT + iPhone?
Сразу после того, как начали говорить о том, что в iPhone нельзя будет ставить свои проги, возникла мысль - а как же "виджеты" и прочее, для чего нужно только одно - качественный броузер.
И, как оказалось, эта мысль была не "из воздуха". Как написал Robert Hanson на своём блоге, Apple недавно провели World Wide Developers Conference, на котором был анонс SDK для iPhone. И как написал Роберт "That's right, the new SDK is the same SDK that Web 2.0 developers have been working with for the past few years, including GWT."
Сразу же пошла волна плейсхолдеров для проектов с GWT-виджитами, которые бы использовали фичи iPhone по типу gwt-iphone.
Так же, стоит отметить интересные мысли Joel Webber'а о взаимодействии GWT не только с Safari на iPhone, а так же с броузером Opera на Wii.
Действительно - зачем придумывать новый SDK, если можно воспользоваться уже как бы можно сказать многолетним опытом разработки Web 2.0 приложений? А в особенности используя такие тулкиты, как GWT, Yahoo UI и подобные, которые позволяют создавать довольно сложные пользовательские интерфейсы?
В общем, подобные факты только подтверждают мои предположения о том, что будущее девелопмента очень и очень зависит от направлений в стиле GWT. И если сейчас упустить "волну", потом будет довольно тяжело карабкаться, навёрстывая то, чего подобные фреймворки уже достигли.
К примеру, я так и не нашёл никакого достойного ответа Microsoft'а. Интересно, они имеют какую-то скрытую технологию или просто отстают в развитии?
Monday, June 18, 2007
GWT Generators (GWT-Exporter as example)
Ray Cromwell на своём блоге закончил цикл статей о том, как использовать генераторы в GWT.
Идея отличная: зачем делать что-то в run-time, если можно сделать то же самое в compile-time? Если можно просто при компиляции сгенерить нужный код?
Мало того, идея совсем не новая - насколько я знаю. есть много "мета-языков", которые делают то же самое.
Но в GWT это интегрировано в сам компилятор: к примеру, для классов, помеченных, как имплементирующие IsSerializable создаются автоматом "стабы", в которых и происходит сериализация/десиализация. В .NET происходит практически то же самое, но в рантайме - создаётся временная сборка, которая сериализует необходимый класс.
Вроде бы то же самое, но есть одно "но" - повторить подобную процедуру достаточно сложно. В GWT с помощью генераторов можно это сделать намного легче.
Как? Вот статьи Рея и открывают "мистику" генераторов:
GWT Demystified: Generators, Part 1
GWT Demystified: Generators Part Deux
и финальная GWT Demystified: Generators Part 3, Meet the Oracle
Так же доступны через svn исходники его проекта GWT-Exporter, позволяющего помечая интерфейсом Exportable генерировать "стабы" для вызова GWT-объектов из JavaScript (без него надо было бы создавать специальные методы для "бриджинга" вызовов к GWT-объектам, так как методы последнего могут быть изменены при компиляции)
В любом случае, очень интересная статейка.