Google veröffentlicht die Instantiations-Tools für lau

Der Google Web Toolkit Blog berichtet heute von neuen GWT-Tools: http://googlewebtoolkit.blogspot.com/2010/09/google-relaunches-instantiations.html.

In early August, Google acquired Instantiations, a company known for its focus on Eclipse Java developer tools, including GWT Designer. We’re happy to announce today that we’re relaunching the following former Instantiations products under the Google name and making them available to all developers at no charge:

  • GWT Designer
    Powerful Eclipse-based development tools that enable Java developers to quickly create Ajax user interfaces using Google Web Toolkit (GWT)
  • CodePro AnalytiX
    Comprehensive automated software code quality and security analysis tools to improve software quality, reliability, and maintainability
  • WindowBuilder Pro
    Java graphical user interface designer for Swing, SWT, GWT, RCP, and XWT UI frameworks
  • WindowTester Pro
    Test GUI interactions within Java client rich applications for the SWT and Swing UI frameworks

Now that these products are available again, we hope you’ll start using them within your GWT projects. Meanwhile, our next step is to more deeply unify them into the GWT family of tools by blending the fantastic Instantiations technology into the Google Plugin for Eclipse (GPE). So, there’s much more to come, including things we’re pretty sure you’ll like, such as UiBinder support in GWT Designer.

You can download any of the tools from the GWT download page. If you have questions or comments we’d love to hear from you. The best place to discuss the tools above is at http://forums.instantiations.com. As always, continue to discuss GWT and GPE at the main GWT Group.

We would love to stay in better touch with you as we have more news about how we are integrating the Instantiations products into the Google Web Toolkit suite. Sign up if you’d like to receive email updates on these products and other developer tools.

Sehr cool. Der nicht gepflegte Gui-Builder VE von Eclipse dürfte damit Vergangenheit sein.

Gibt doch mal euren Eindruck.

GWT 2.1 M3 verfügbar

Ankündigung siehe hier: http://googlewebtoolkit.blogspot.com/2010/08/gwt-21-milestone-3-is-now-available.html, download unter http://code.google.com/p/google-web-toolkit/downloads/detail?name=gwt-2.1.0.m3.zip.

Some key features included in this release are built-in history
support in Activities and Places, relationship management within
RequestFactory, and the ability to call instance methods on entities
themselves. The overarching goal was to nail down the API and deliver
on features and functionality that are vital to creating industry-
grade business apps.

Bei M2 gab es eine Reihe von Änderungen, die viele Komponenten deprecated machte – ohne wirklichen Ersatz. M3 werde ich aufspielen und schauen, wie es damit weitergeht. Die Doku für Activities/Places ist für M2 erbärmlich; hier kann Google noch nachbessern. Die Verknüpfung mit Roo ist mir auch noch schleierhaft, mal sehen, wie sich das entwickelt.

GWT 2.0.4 Release

Der GWT-Blog http://googlewebtoolkit.blogspot.com/2010/06/gwt-204-is-now-available.html kündigt ein kleines Update an, was unter anderem Probleme bei der Umsetzung des Shift-Operators behebt (Fehler in der JS-Engine von Safari):

basically the issue is that a right shift of a value that is internally stored as a double fails to correctly set the integer flag on the internal value at the end of the shift.

Noch zwei weitere Kleinigkeiten wurden angegangen:

SmartGWT 2.2 ist raus

Neues:

    • Selenium Support
    • Support for the prototype pattern to set global defaults without creating a separate hierarchy of subclasses. This is explained in more detail in the release announcement
    • DateRangeItem, MiniDateRangeItem and Relative Date support for DynamicForm
    • Dropdown multi-selects
    • Javadoc enhancements : Over 200 API’s have an overview and relevant Showcase sample in the @see link of the API docs
    • Numerous other fixes and enhancements.
    • Several new Showcase samples

Der Showcase zeigts: http://www.smartclient.com/smartgwt/showcase/. 270 Beispiele sind schon eine stolze Zahl.

 

 

com.google.appengine.api.datastore.* Typen für GWT serialisieren

Wer Datentypen wie com.google.appengine.api.datastore.Text in seiner Bean nutzt kann die Datentypen serialisieren. Wenn man nun eine Bean mit zum Beispiel dem Typ Text nach GWT serialisiert, der wird bemerken, dass GWT diese Datastore-Datentypen nicht unterstützt. Nun reicht es nicht, eine Kopie von etwa der Klasse Text anzufertigen und in den Quellordner zu setzen, da die Klasse nicht im client-Paket ist. Stattdessen ist ein etwas anderes Vorgehen nötig. Denn um Java-Klassen auch außerhalb vom client-Paket platzieren zu können, ist in der XML-Datei in Eintrag wie der folgende nötig;

<super-source path=""/>

Um das für die Datastore Klassen nicht selbst schreiben zu müssen, können wir auf die Implementierung unter http://www.resmarksystems.com/code/ zurückgreifen. Wir

  1. setzen <inherits name="com.resmarksystems.AppEngineDataTypes"/> in unsere GWT-XML-Datei und
  2. laden http://www.resmarksystems.com/code/appengine-utils-client-1.0.jar und setzten das Jar in unsern lib-Ordner

Das war’s schon. Serverseitig muss nichts gemacht werden.

Erster Milestone von GWT 2.1

Und es gibt tolle Neuigkeiten. Zum einen Data Presentation Widgets (Widgets zur effizienten Darstellung großer Datenmelgen) zusammen mit einem MVP-Framework.

Aus dem GWT-Blog:

With GWT 2.1 Milestone 1, you are one step closer to being able to build business apps for the cloud as easily as ever. Using GWT’s new data presentation widgets and MVP framework, you can create great looking web apps that run fast, whether you’re interacting with 25 records or 25 million records. This is accomplished by designing the widgets to be extremely lightweight, using DIVs and HTML instead of composites and widgets, and an app framework that makes it easy to fetch only the data you need, when you need it.

To make building web apps even faster, you can now use VMware’s Spring Roo to create a functional app with a few commands. All of these tools are available, including the Google Plugin for Eclipse and App Engine SDK, within SpringSource Tool Suite (STS) — providing you an integrated development environment.

And since it’s written using GWT, your resulting app is an HTML5 app that is cloud ready from the beginning.

Hier zu den Release-Notes.

Quake II auf GWT

Man glaubt es kaum und könnte es für einen 1-April-Scherz halten, aber eine Gruppe von Codern hat Quake II auf GWT portiert (http://code.google.com/p/quake2-gwt-port/). Um das möglich zu machen, mussten jedoch einige Anpassungen vorgenommen werden:

  • Created a new WebGL based renderer
  • Ported the network layer for multiplayer games from UDP to the WebSocket API
  • Made all resource loading calls asynchronous
  • Created a GWT implementation of Java nio buffers based on WebGL arrays (to be ported to ECMAScript Typed Arrays)
  • Implemented a simple file system emulation for saving games and preferences using the Web Storage API

Bisher läuft das ganze nur auf Chrome.

Smart GWT 2.1 ist raus

Von den Release Notes http://www.smartclient.com/smartgwt/release_notes.html#2_1:

    • GWT 2.0.3 compatible

    • New Graphite theme

    • ListGrid enhancements

      • Record RollOver controls
      • RollUnder Canvas support
      • Background components
      • Support for arbitrary widgets in cells
      • Ability to display row numbers
      • setMaxExpandedRecords(..) to control max. number of simultaneous expanded records
      • ListGridField.setCanDragResize(), setCanReorder(), setAutoFreeze(), setShouldPrint() API’s
      • Checkbox selection with grouping
      • MultiColumn sort enhancements
    • TreeGrid enhancements

      • Support for Checkbox tree with Cascade selection
      • Support for tri-state checkboxes (selected, unselected, partial)
      • Performance enhancements
    • ToolStrip enhancements

      • Significant improvement in appearance
      • Added ToolStripButton and ToolStripMenuButton classes
      • Vertical ToolStrips
    • Print support enhancements

      • ability to control which components display in print view
      • print styling on a per-component basis
      • support print window customizations
      • API for the number of records displayed in print view (can be different from UI view)
    • Browser Plugins as widgets

      • Flashlet widget
      • Applet widget
      • ActiveXControl widget
      • SVG widget
    • Other Widget enhancements

      • Window : support for footer controls
      • Calendar : control dragability of events
      • New IMenuButton & IPickTreeItem classes with improved appearance
      • AdvancedCriteria enhancements and support for programmatic construction
      • SectionStack drag reordering support
      • FilterBuilder support for working with very large number of fields
      • Convenience FormItem.setRequiredMessage(..) API
      • TileGrids now automatically relayout if a tile resizes
      • Added support for grouping for formula and summary fields
    • Performance enhancements

      • Snappier TreeGrid expand / collapse
      • Faster Canvas resize
      • Faster Tab close (deferred destroy)
    • Logging of warnings and error to the GWT Developer Console in addition to the Smart GWT Dev. Console.

    • Improved exception handling and reporting.

    • i18n enhancements

    • Showcase enhancements and several new samples under the „New Samples“ side nav

    • 27 additional enhancements and bug fixes that were logged in tracker

GWT 2.0.1 und GWT 2.0.2

In kurzer Folge hat Google ein erstes Update für die GWT 2-Reihe veröffentlicht. Von http://code.google.com/intl/de/webtoolkit/release-notes.html#Release_Notes_2_0_1:

Release Notes for 2.0.2

This 2.0.2 release contains a couple of fixes that were not included in the 2.0.1 release.

Noteworthy Fixed Issues

  • Standard.css missing new layout styles (#4429)
  • Using a PopupPanel in Internet Explorer without a history IFrame throws a NullPointerException (#4584)

Release Notes for 2.0.1

This 2.0.1 release contains fixes for bugs found in the 2.0.0 release.

Potentially breaking changes and fixes

Noteworthy Fixed Issues

  • UiBinder Image class with resource attribute, removes styles on that image (#4415)
  • Widgets lose focus if its placed on FocusPanel (Opera, Safari) (#1471)
  • Remove method in SplitLayoutPanel is broken (#4217)
  • Splitter constructor hard codes the background color of the splitter to white (#4335)
  • Image should provide method to set alternative text (#4335)
  • CssResource cannot parse unescaped ‚-‚, ‚_‘ in class selectors and unknown at-rules (#3946)
  • Focusable implementation breaks ScrollPanels in Safari (#1313)
  • RequestBuilder restricted to GET and POST (#3388)
  • HTMLTable.Cell.getElement() calls getCellFormatter().getElement() with row and column swapped RequestBuilder restricted to GET and POST (#3757)
  • MenuBar steals focus when hovered (#3884)
  • TabLayoutPanel tabs don’t line up properly on IE (#4447)
  • webAppCreator produces ant build files which support the gwt.args property for passing additional flags to the gwtc and devmode rules, such as ant -Dgwt.args="-style PRETTY" gwtc.

See the GWT issue tracker for the complete list of bug fixes and enhancements in this release.

Genau wie andere auch, hatte ich den Bug #3946 gemeldet und freue mich, dass der CSS-Parser nun auch das „-“ für proprietäre CSS-Stile parst.

GWT Drag and Drop

Das Projekt unter http://code.google.com/p/gwt-dnd/ gehört mit den zu den bekanntesten Drag & Drop Bibliotheken für GWT. Die von Fred Allen-Sauer geschriebene Bibliothek ist ordentlich mit Beispielen hinterlegt, sodass der Einstieg einfach ist. Ein kleines Beispiel soll die Bibliothek demonstrieren.

a) Nach dem Einbinden der Jar-Datei ist in der XML-Datei für GWT folgendes einzutragen:

<inherits name='com.allen_sauer.gwt.dnd.gwt-dnd'/>

b) Von http://code.google.com/p/gwt-dnd/source/browse/trunk/DragDrop/#DragDrop/war/images nimmt man die Grafik row-dragger-8.gif passend etwa in das WEB-INF/images mit auf und schaut auf den URL-Eintrag in der CSS, dass der Pfad passt.

c) Von http://code.google.com/p/gwt-dnd/source/browse/trunk/DragDrop/#DragDrop/demo/com/allen_sauer/gwt/dnd/demo/client/example/flextable kopiert man die Dateien

  • FlexTableRowDragController
  • FlexTableRowDropController
  • FlexTableUtil

in das eigene GWT-Projekt.

In onModuleLoad() kann es dann so aussehen:

AbsolutePanel panel = new AbsolutePanel();
panel.setPixelSize(450, 300);
panel.addStyleName(„demo-FlexTableRowExample“);

FlexTableRowDragController dragController = new FlexTableRowDragController( panel );
FlexTable table = new FlexTable();

table.addStyleName( „demo-flextable“ );

HTML handle1 = new HTML( „<b>Heinzelmann</b> (100 €)“ );
handle1.addStyleName( „demo-drag-handle“ );
table.setWidget( 0, 0, handle1 );
dragController.makeDraggable( handle1 );

HTML handle2 = new HTML( „<b>Wumme</b> (200 €)“ );
handle2.addStyleName( „demo-drag-handle“ );
table.setWidget( 1, 0, handle2 );
dragController.makeDraggable( handle2 );

HTML handle3 = new HTML( „<b>Fred</b> (90 €)“ );
handle3.addStyleName( „demo-drag-handle“ );
table.setWidget( 2, 0, handle3 );
dragController.makeDraggable( handle3 );

panel.add(table, 10, 20);
FlexTableRowDropController dropController = new FlexTableRowDropController(table);
dragController.registerDropController(dropController); 

RootPanel.get().add( panel );

Anschließend haben wir eine Webseite mit

Heinzelmann (100 €)

Wumme (200 €)

Fred (90 €)

wobei wir die 3 Einträge in der Reihenfolge verschieben können.

Denormalisierung für schnelle Key/Value Speichersysteme

RDBMS kommen im distributed Cloud-Computing selten vor. Daher muss man auch die Datenhaltung überdenken. Ein Blog-Eintrag diskutiert die Änderungen sehr gut: http://highscalability.com/how-i-learned-stop-worrying-and-love-using-lot-disk-space-scale. Im Prinzip geht es darum, aus Joins zu verzichten, und Daten in den verschiedenen Entities zu duplizieren. Die Erfahrung habe ich bei meinen GWT und GAE/J Projekt ebenfalls gemacht. Es führt zu weniger Lesezugriffen insgesamt, wenn man die Daten lokal in der Entity hält und nicht erst aus verschiedenen Entities zusammensucht, wie man bei normalisierten relationalen Modellen tut. (Außerdem ist es bei vielen lese-Zugriffen auch billiger, die Daten an einer Stelle zu haben, anstatt sie von verschiedenen Stellen über Lesezugriffe, die jeweils Kosten nach sich ziehen, einzusammeln.)

In meinen GWT-GAE/J-Projekt habe ich noch einen anderen Ansatz, die Zugriffe auf die Big-Table zu minimieren. Grundsätzlich: Alle GWT-RPC Implementierungen sind Fassaden, die auf Services zurückgreifen (Googe Guice injiziert diese in die RPC-Fassaden). Für diese Endpoints gibt es dann noch einmal einen Caching-Dekorator als eine Art Caching-Aspekt, der sich wie ein Proxy um die eigentlichen RPC-Implementierungen legt. Diese speichert relevante Daten im MemCache zwischen und minimiert so (langsame) Zugriffe auf die Big-Table. Bei Schreibzugriffen löscht der Caching-Proxy die relevanten Daten aus dem Cache, sodass sie neu geladen werden müssen. Das ist einfach und fix.

Mit dem MVP-Modell GWT-Anwendungen entwickeln

Unter http://code.google.com/webtoolkit/doc/latest/tutorial/mvp-architecture.html widmet sich Google nun etwas mehr der Architektur von GWT-Anwendungen. Der Artikel „Large scale application development and MVP“ beschreibt, wie die drei Teile Model, View und Presenter zusammenarbeiten und getestet werden können. Komplexer wird das Bsp. da noch History-Management und der Event-Bus mit ins Boot kommen.

Im Quellcode auf der Seite gibt es einige Fehler durch ein falsch verarbeitet <. So steht etwa

  public interface Display extends HasValue> {
    HasClickHandlers getAddButton();
    HasClickHandlers getDeleteButton();
    HasClickHandlers getList();
    void setData(List data);
    int getClickedRow(ClickEvent event);
    List getSelectedRows();
    Widget asWidget();
  }

statt

  public interface Display {
    HasClickHandlers getAddButton();
    HasClickHandlers getDeleteButton();
    HasClickHandlers getList();
    void setData(List<String> data);
    int getClickedRow(ClickEvent event);
    List<Integer> getSelectedRows();
    Widget asWidget();
  }

Google App Engine 1.3

Kurz nach 1.2.8 veröffentlich Google nun die Google App Engine 1.3. Von http://googleappengine.blogspot.com/2009/12/app-engine-sdk-130-released-including.html:

Store and Serve – Files can be uploaded and stored as blobs, to be served later in response to user requests. Developers can build their own organizational structures and access controls on top of blobs.
Pricing and Quotas – We include blob storage and transfer under the same datastore pricing and quotas you’re already familiar with. For more information, see the App Engine quotas page.
The new Blobstore API is now available in both App Engine SDKs for local development. At this time it can only be used by applications that have enabled billing. There’s a lot more information about the API and how it works in the Blobstore documentation (Python, Java) so please check that out and post any questions to the groups.
This release also includes some performance tweaks to the Java runtime. For example, we’ve sped up many reflective operations by up to 10x resulting in improvements on the order of 10% for applications based on dynamic languages. As always, there are a few other minor changes and bug fixes in this release, so make sure to read our release notes (Python, Java).

GWT 2.0 RC1 ist raus, Updates beim Google Eclipse Plugin

Infos dazu hier: http://code.google.com/p/google-web-toolkit/wiki/GWT_2_0_RC.

Major New Features in the GWT SDK

In-Browser Development Mode

Prior to 2.0, GWT hosted mode provided a special-purpose „hosted browser“ to debug your GWT code. In 2.0, the web page being debugged is viewed within a regular-old browser. Development mode is supported through the use of a native-code plugin called the „Google Web Toolkit Developer Plugin“ for many popular browsers. In other words, you can use development mode directly from Safari, Firefox, IE, and Chrome.

Developer-guided Code Splitting

Code splitting using GWT.runAsync(), along with compile reports (also known as The Story of Your Compile) allows you to chunk your GWT code into multiple fragments for faster startup. Imagine having to download a whole movie before being able to watch it. Well, that’s what you have to do with most Ajax apps these days — download the whole thing before using it. With code splitting, you can arrange to load just the minimum script needed to get the application running and the user interacting, while the rest of the app is downloaded as needed.

Declarative User Interfaces with UiBinder

GWT’s UiBinder now allows you to create user interfaces mostly declaratively. Previously, widgets had to be created and assembled programmatically, requiring lots of code. Now, you can use XML to declare your UI, making the code more readable, easier to maintain, and faster to develop. The Mail sample has been updated to show a practical example of using UiBinder.

Bundling of Resources via ClientBundle

GWT introduced ImageBundle in 1.4 to provide automatic spriting of images. ClientBundle generalizes this technique, bringing the power of combining and optimizing resources into one download to things like text files, CSS, and XML. This means fewer network round trips, which in turn can decrease application latency — especially on mobile applications.

Simplified Unit Testing with HtmlUnit

Using HtmlUnit for running test cases based on GWTTestCase: Prior to 2.0, GWTTestCase relied on SWT and native code versions of actual browsers to run unit tests. As a result, running unit tests required starting an actual browser. As of 2.0, GWTTestCase no longer uses SWT or native code. Instead, it uses HtmlUnit as the built-in browser. Because HtmlUnit is written entirely in the Java language, there is no longer any native code involved in typical test-driven development. Debugging GWT Tests in development mode can be done entirely in a Java debugger.
Major New Features in the Google Plugin for Eclipse

Development Mode Launch View

Integrates your Development Mode logs right into Eclipse, which means one less window to shuffle around

UiBinder Support

The UiBinder template editor provides auto-completion and formatting for editing ui.xml files (and embedded CSS blocks)
Validation of
UiBinder templates and backing Java classes
New UiBinder wizard to quickly get started

ClientBundle Support

„New ClientBundle“ wizard to bundle CSS and other resources together to minimize HTTP round-trips
As-you-type validation ensures that your app’s static resources are always in the right place

RPC Refactoring

Automatically updates sync/async pairs of RPC interfaces and their methods

JNSI Reference Auto-completion

Auto-completion takes the pain out of referencing Java members from JSNI methods

GWT-Bibliotheken

http://code.google.com/p/kiyaa/. Leistungsfähiges XHTML-Template Framework. Bis zum Google UI-Binder ist a) noch Zeit und b) nutzt Kiyaa einfaches XHTML, was man mit jedem HTML-Editor editieren auf aufbauen kann.

http://code.google.com/p/gwt-mosaic/. “GWT Mosaic is a highly usable, feature rich toolkit for creating Rich Internet Applications and an easy to use API.” http://69.20.122.77/gwt-mosaic/Showcase.html

http://code.google.com/p/cobogw/. In erster Linie Buttons, Button-Gruppen, runde Panels, Rating-Widget. Demo. Weiterhin “GWT emulation of java.sql”, also von Date, Time, Timestamp

http://www.asquare.net/gwttk/. Demo. Seit 2007 kein neues Release

http://code.google.com/p/gwtlib/. MenuBar, PagingBar, Table, PagingTable und StyleListBox. Table hat Renderer. Aktuell

http://code.google.com/p/gwt-masterview/. “GWT-Masterview library is an extension to Google Web Toolkit that provides widgets to filter, sort and paginate your data”

http://code.google.com/p/gwtchismes/. Demo. Rendert nicht ganz sauber die Buttons

http://code.google.com/p/gwt-beans-binding/

http://code.google.com/p/gwt-table/

http://code.google.com/p/gwt-datepicker/

http://code.google.com/p/guwit/

http://gwt-widget.sourceforge.net/. Besteht aus GWT Server Library (GWT-SL) und GWT Widget Library (GWT-WL). http://gwt-widget.sourceforge.net/demo/calc/index.html zeigt einen kleinen Taschenrechner, kann mal praktisch sein… (bin ich zynisch?) Der letzte Blog-Eintrag endete vor exakt 3 Jahren.

http://gwt-vl.sourceforge.net/. GWT Validation Library

http://raibledesigns.com/rd/entry/creating_a_facebook_style_autocomplete 

Noch mehr: http://google.wikia.com/wiki/Google_Web_Toolkit#Widgets

Fehlt was?