Wow. Der Titel ist fast schon länger als der Link http://borglin.net/gwt-project/?page_id=604. Der Autor interviewt
- Jeff Schnitzer, lead developer Objectify
- John Patterson, lead developer Twig
- Ignacio Coloma, lead developer SimpleDS
Wow. Der Titel ist fast schon länger als der Link http://borglin.net/gwt-project/?page_id=604. Der Autor interviewt
Dass die Low-Level-API nicht so tolle ist, habe ich unter anderem schon hier eine Alternative genannt. Eine andere ist SimpleDS, von der nun der erste Release Candidate raus ist. Siehe auch die 1.0-Ankündigung. Features:
Eclipse 3.6 kommt, Eclipse e4 kommt und auch neue Version von NetBeans ist auf dem Weg. Die Version 6.9 glänzt in vielen Bereichen und alle hier im Blog aufzulisten wäre zu viel. Seht selbst unter http://wiki.netbeans.org/NewAndNoteworthy69. Interessant finde ich die IDE-Unterstützung für OSGi und Nutzung proprietärer APIs wie Jersey REST Client API. Schon bei der letzten Versionen von NetBeans wurde so das Swing Application Framework beim Neue-Swing-Anwendung-Wizard eingeführt. Während die REST Client API stabil und populär ist, ist es aber das Swing App Framework nicht, denn es erfährt keine öffentliche Unterstützung. Wer also denkt, mit NetBeans eine langlebige Gui-Anwendung mit dem Swing App Framework zu erstellen, ist später vermutlich am Po gekniffen.
Insgesamt wäre ich glücklicher, wenn die Entwickler mehr an Java 7 arbeiten würden, als an einer IDE. Aber NetBean ist zumindest unverzichtbar als Java 7 IDE.
Ein Bild des Plugins http://editbox.sourceforge.net/ sagt alles:
Die Blöcke werden also farblich hervorgehoben.
Stelle ich mir ganz gut bei Java Anfängern vor, um sie an das Konzept von Blöcken zu gewöhnen.
Schwierig, einen Titel zu finden, aber wenn ich ein Beispiele gebe wird’s klar, was die LGPL-Bibliothek PrettyTime macht:
PrettyTime p = new PrettyTime(); System.out.println(p.format(new Date())); //prints: “right now”
PrettyTime t = new PrettyTime(new Date(0)); assertEquals("3 hours from now", t.format(new Date(1000 * 60 * 60 * 3)));
PrettyTime t = new PrettyTime(new Date(0)); assertEquals("3 days from now", t.format(new Date(1000 * 60 * 60 * 24 * 3)));
PrettyTime t = new PrettyTime(new Date(0)); assertEquals("3 weeks from now", t.format(new Date(1000 * 60 * 60 * 24 * 7 * 3)));
PrettyTime t = new PrettyTime(new Date(0)); assertEquals("3 months from now", t.format(new Date(2629743830L * 3L)));
PrettyTime t = new PrettyTime(new Date(0)); assertEquals("3 years from now", t.format(new Date(2629743830L * 12L * 3L)));
PrettyTime t = new PrettyTime(new Date(0)); assertEquals("12 minutes from now", t.format(new Date(1000 * 60 * 12)));
Die API kann man auch in JSF nutzen.
<h:outputText value="#{exampleBean.futureDate}"> <f:converter converterId="com.ocpsoft.PrettyTimeConverter"/> </h:outputText>
Das ganze gibt es lokalisiert für die Sprachen
Voraussetzung ist Java 6.0. Der Quellcode ist aufgebläht bis zum Umfallen, aber wen das nicht stört, findet in PrettyTime eine kleine nette Bibliothek zur Zeitdarstellung.
Ein Kunde einer Schulung hat mich auf ein Tool von talend aufmerksam gemacht, das ihm schnell half, Daten zu transformieren. Ich habe mir das Demo angeschaut und für eine quelloffene Software sieht das sehr gut aus:
Von der Webseite:
Talend ist der erste Anbieter einer Open Source Datenintegrationssoftware, welche durch das Open Source Modell eine Lösung für jegliche Form der Datenintegration darstellt. Dabei spielen Unternehmensgröße und Unternehmensart genauso wenig eine Rolle wie Budgetbeschränkungen oder der vorhandene technische Kenntnisstand.
Unter Datenintegration versteht man das Kombinieren und Transformieren von unterschiedlichen Daten innerhalb der gesamten IT-Infrastruktur. Typischerweise bestehen solche Prozesse aus der Extraktion von verschiedensten Datenquellen (Datenbanken, Dateien, Applikationen, Web Services, Emails, etc.), der Anwendung von diversen Transformationsregeln(Join, Lookup, Dublettenbereinigung, Berechnungen, etc.) und der endgültigen Überführung in das gewünschte Zielsystem.
Testberichte sind willkommen.
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.
1. http://code.google.com/p/restful-gwt/
Die History korrekt zu Implementieren ist das O und A einer GWT-Anwendung. Hier greift http://code.google.com/p/restful-gwt/ unter die Arme, in dem es wie bei REST Pfade einzelne GWT-Seiten mappt. Das Projekt steht am Anfang, die Idee ist aber nett für kleinere GWT-Anwendungen. Weiterlesen
Die APIs JPA oder JDO sind auf einer NoSQL-Datenbank nicht optimal. Wer mit der Low-Level API programmiert, muss aber zu viel selbst machen. Das Projekt http://code.google.com/p/objectify-appengine/ ist dabei eine willkommene Vereinfachung.
Von den Release Notes http://www.smartclient.com/smartgwt/release_notes.html#2_1:
GWT 2.0.3 compatible
New Graphite theme
ListGrid enhancements
TreeGrid enhancements
ToolStrip enhancements
Print support enhancements
Browser Plugins as widgets
Other Widget enhancements
Performance enhancements
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
… nämlich das trotz Bestätigung der Lizenzbedingungen der Next und Finish Button deaktiviert bleibt. Hier bleibt nichts anderes übrig, als es mehrfach zu versuchen bis es klappt. Der Fehler scheint erst in Eclipse 3.6 behoben zu sein.
Links:
- Datastore Query Cursors
- Transactional Tasks
- Support for Custom Admin Console pages
- Java Precompilation is now on by default
- Developers can opt-out of precompilation by setting the flag in appengine-web.xml: <precompilation-enabled>false</precompilation-enabled>
- New built-in support for unit testing (see appengine-testing.jar)
- http://code.google.com/appengine/docs/java/tools/localunittesting.html
- http://code.google.com/p/googleappengine/issues/detail?id=326
- net.sf.jsr107 package included as an alternative to the low-level Memcache API
- javax.annotation.Resource/Resources added to the package whitelist
- New „month“ and „synchronized“ syntax for Cron configuration
- URLFetch supports asynchronous requests
- appcfg.sh uses HTTPS for application deployment
- appcfg.sh adds request_logs –append
- Changes to the order queries without a specified sort order are returned
- Only queries that use IN will see different results.
- Added support for multiple != filters on the same property
- Improved support for keys-only queries when using IN and != filters
- Support for ETags, If-matches, If-not-matches HTTP Headers, as well as 304 status codes now available on static files (not yet available on the dev_appserver or Blobstore blobs)
- Fixed issue where the maximum transform count was enforced for composite operations
- Fixed issue with whitespace on the end of strings in web.xml
- Fixed web.xml <error-page> entries for 404 error codes
- Added validation prevent welcome-files with absolute paths
- Fixed issue where cancelling a deployment in progress could unintentionally corrupt the SDK
- Fixed issue with QuotaService.getCpuTimeInMegaCycles() returning 0
- Fixed issue where JSP exceptions will be incorrectly cast causing a ClassCastException
JDO/JPA Changes
- Child object with custom pk column can’t be saved
- Queries with multiple contains() where one filter is on pk don’t work
- Throw exception when filtering or sorting by pk-id or pk-name fields
- Throw exception when filtering or sorting by pk-id or pk-name fields
- Store child keys in a multi-value property on the parent
- Incorrect exception for multiple fields of same type
- Non-persistent base classes do not work
- Relationships in abstract base classes don’t work
- Explicitly disallow multiple relationships of the same type
- Occasional ArrayOutOfBoundsIndexException
- Support inheritance
- Support != queries
- Support IN queries
- Support datastore cursors
- Inheritance is working for simple fields and embedded fields. Relationships in base classes are completely untested and probably do not work.
- Cannot add child to existing one-to-many if parent has Long or unencoded String pk
- Can’t query by embedded fields at depth > 1
- Positional parameters don’t work (JPQL)
- Throw JDOCanRetryException when ConcurrentMod hit during txn commit
- Respect JDOQL/JPQL case sensitivity for keywords, in particular „count“
- Put all native datastore types in the default fetch group
- Empty Set gets loaded from datastore as null
- Cannot remove element of one to many when parent has pk of type Long or unencoded String
- Severe problem when deleting a child object from an owned relationship (JDO)
- NPE resulting from corrupt JDOQL query
- Embedded, multi-value fields don’t work
Die Unterstützung eines Cursors gehört mit den größten Neuerungen. Zudem listet der Blog-Eintrag http://googleappengine.blogspot.com/2010/02/app-engine-sdk-131-including-major.html auf:
- Datastore Query Cursors – Cursors allow applications to save and ‚bookmark‘ their progress through a query, so that it can be resumed later. This works great in combination with paging URLs, as well as processing in the Task Queue API, but there are many other uses. Watch for an upcoming blog post that explores Cursors in the near future. They’re also really handy in the context of the next change…
- No more 1000 result limit – That’s right: with addition of Cursors and the culmination of many smaller Datastore stability and performance improvements over the last few months, we’re now confident enough to remove the maximum result limit altogether. Whether you’re doing a fetch, iterating, or using a Cursor, there’s no limits on the number of results.
- Reduced error rate with Automatic Datastore Retries – We’ve heard a lot of feedback that you don’t want to deal with the Datastore’s sporadic errors. In response, App Engine now automatically retries all datastore calls (with the exception of transaction commits) when your applications encounters a datastore error caused by being unable to reach Bigtable. Datastore retries automatically builds in what many of you have been doing in your code already, and our tests have shown it drastically reduces the number of errors your application experiences (by up to 3-4x error reduction for puts, 10-30x for gets).
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
- Fixed a bug in how code generators collect method arguments from generated source, which impacted the Messages interfaces generated for UiBinder template files. In GWT 2.0, such argument names were incorrectly changed to ARGn. Most GWT applications will be unaffected, but external systems relying on these names will need to be updated.
- The development mode server will, by default, only bind to localhost which will break cross-machine debugging. You can get the old behavior by specifying
-bindAddress 0.0.0.0
. Please see issue (#4322) for more details. For webAppCreator-generated ant files, you can pass this with ant -Dgwt.args="-bindAddress 0.0.0.0" devmode.- The CurrencyList/CurrencyData APIs are now public – if you were relying upon these classes in their non-public location, you should only need to update your imports.
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.
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
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.
Ein paar Tage ist es schon her, da wurde Groovy 1.7 veröffentlicht. Die Neuerungen gibt es unter http://docs.codehaus.org/display/GROOVY/Groovy+1.7+release+notes. Im Wesentlichen sind es die Unterstützung von geschachtelten und anonymen inneren Klassen, ein paar AST-Sachen.
Ganz frisch ist nun das Update der Groovy IDE auf Eclipse Basis. Die Version 2.0 ist fertig und ist nahezu ein vollständiger rewrite. Die News listet http://docs.codehaus.org/display/GROOVY/Groovy-Eclipse+2.0.0+New+and+Noteworthy auf. Weiterhin mit bunten Bildern:
Ant 1.7 gibt’s ja schon gefühlte ewige Zeit und bei Ant, dem make des 2.0 Zeitalters, steht ein Update ein. Nichts großes, sondern eher Detailverbesserungen:
Apache Ant 1.8.0RC1 is now available for download .
- a new top level element extension-point allows build files to be extended with custom targets more easily
- if and unless attributes will be evaluated according to the values of the properties entered if these properties evaluate to true, false, on, off
- Ant now requires Java 1.4 or later
- new task include provides an alternative to <import> that should be preferred when you don’t want to override any targets
- numerous bug fixes and improvements as documented in Bugzilla and in WHATSNEW
While in open source projects a final release date strongly depends on the free time of the volunteers/committers, the final release is expected one to two months maximum after this RC. So Ant 1.8.0 is expected between mid February and mid March 2010.
Von http://www.netbeans.com/ gibt es eine neue Version, die insbesondere im Bereich des neuen Java EE 6 punktet. Die Neuigkeiten führt http://wiki.netbeans.org/NewAndNoteworthyNB68 auf.
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).
Unter http://www.theserverside.com/news/thread.tss?thread_id=58858 ist heute zu lesen:
Sun has released the Java Platform Enterprise Edition 6and the GlassFish Enterprise Server v3.
Java EE 6 includes new specifications that add new functionality to the platform, like dependency injection, Bean Valiation and RESTful services, as well as improvements to the existing specifications including very significant improvements to Java Server Faces, Enterprise Java Beans, JPA, Servlets and Java Connectors. Java EE 6 also includes a Web Profile. Additional information on Java EE 6 is available from the WebSite and this Overview Article.
The GlassFish v3 Server implements the Java EE 6 specification. GlassFish v3 is Open Source and fully modular, built on an OSGi kernel and the Grizzly NIO infrastructure. GlassFish v3 is suitable for a wide range of applications, from development to deployments. The long list of additional GFv3 features includes embeddability, very fast startup, redeploy-on-save, session state persistence, dynamic language support, management and monitoring facilities, graphical, CLI and REST command interfaces, and an update center. GlassFish v3 is supported by NetBeans, Eclipse and IntelliJ IDEA.
Additional information on GlassFish v3 Server is available from the Product Page and our main Team Announcement. GFv3 can be downloaded here; the full version is 70MB and the Web Profile 50MB.
Von der http://code.google.com/p/googleappengine/ gibt’s eine neue Version. Die Neuerungen in kürze:
- Support for JAXB. JAXB is included in JDK 1.6 (and App Engine’s production servers). If you’re using JDK 1.5 with your local dev_appserver, you will need to include the JAXB libraries with your application to use it.
- New support for application pre-compilation to reduce the length of loading requests. To enable pre-compilation on your application, add this flag to your appengine-web.xml:
- <precompilation-enabled>true</precompilation-enabled>
- If you have trouble deploying your application, you should remove this flag or set it to false.
- Added Quota API (com.google.appengine.api.quota) to match Python
- Low-level Memcache API now supports incrementAll()
- HTTPResponse object now has getFinalUrl() method for 302 redirects.
- Java Dev Appserver now automatically executes tasks. If you prefer the old behavior where tasks do not automatically execute you can use the –jvm_flag=-Dtask_queue.disable_auto_task_execution flag when starting the server.
- Additional file extensions permitted when sending mail.
- Fixed issue with Java mail handler not processing multipart messages correctly
- Fixed agent code included in appengine-local-runtime.jar results in RuntimeException
- Fixed issue with sort orders defined on properties that allow multiple values
- Fixed problem with dropped query strings after requiring log-in
- Removed limitation preventing multiple parameters with the same name
- Fixed issue with local datastore incorrectly sorting results of ancestor queries