Ungewisse Zukunft für Groovy und Grails

Als Groovy und Grails Befürworter musste man gerade die überraschende Nachricht von Pivotal verkraften, dass sich das Unternehmen nach dem Release der nächsten Versionen Ende März 2015 aus der direkten Finanzierung beider Open Source-Projekte zurückziehen wird.

Continue reading

Posted in Groovy and Grails | Tagged , , , | Leave a comment

How to get autocomplete suggestions from the database for Vaadin’s ComboBox

With class com.vaadin.ui.ComboBox the Vaadin Toolkit provides a drop-down selection component that allows you to select an item from a set of values by offering a list of suggestions based on your current input. This works out of the box without having to implement the suggestion logic yourself. You only need to provide a list of selection items that you’ll put into the ComboBox as its data model and then specify the desired filtering mode.

This has one caveat, though. If the list of selectable items contained in the ComboBox is very large, you cannot use this component in a memory-friendly way. That’s because all of the available items in the ComboBox need to be kept in the user session for the suggestion logic to work. You cannot dynamically load suggestions from some external storage and feed them to the drop-down list on demand.

In this article, I’m going to describe a way how you can tweak Vaadin’s ComboBox in such a way that loading suggestions from an external service is possible after all.

Continue reading

Posted in Java Web Frameworks, Web as a Platform | Tagged , , | 4 Comments

Spring Session 1.0 released

A few days ago, Spring Session 1.0 has been released. According to the project page, it provides the following functionality:

  • API and implementations (i.e. Redis) for managing a user’s session
  • HttpSession – allows replacing the HttpSession in an application container (i.e. Tomcat) neutral way. Additional features include:
    • Clustered Sessions – Spring Session makes it trivial to support clustered sessions without being tied to an application container specific solution.
    • Multiple Browser Sessions – Spring Session supports managing multiple users’ sessions in a single browser instance (i.e. multiple authenticated accounts similar to Google).
    • RESTful APIs – Spring Session allows providing session ids in headers to work with RESTful APIs
  • WebSocket – provides the ability to keep the HttpSession alive when receiving WebSocket messages

Continue reading

Posted in Spring Universe | Tagged , , , , , | Leave a comment

AutoValue 1.0 released by Google

Google has released the first stable version of its AutoValue library. AutoValue is an open source library for easily creating value types with Java. AutoValue is part of a Google project that goes by the name of auto on GitHub. This project is described as “a collection of source code generators for Java.”

Continue reading

Posted in Did you know?, Java and Quality | Tagged , , | Leave a comment

Upsource: New Repository Browsing and Code Review Tool by JetBrains

JetBrains, the company behind the popular IntelliJ IDEA, recently has released a new productivity tool into the wild. JetBrains Upsource is a browser-based repository browsing and code review tool. Freshly released in version 1.0, it boasts a number of very interesting and useful features already now. In this article, I’d like to give you a short overview of the goodness you’ll find in this tool.

Continue reading

Posted in Agile Methods and development, Did you know? | Tagged , , , | 2 Comments

Ist ATScript die Zukunft von JavaScript?

Seit geraumer Zeit versucht Google die Script Sprache JavaScript voran zu bringen. Dabei ist die neuste Errungenschaft von Google nach Dart, die Programmiersprache ATScript. Um ATScript als ECMAScript Standard zu forcieren, wird Angular JS 2.0 in ATScript geschrieben. ATScript stellt nicht nur ein typisierte Superset von ECMAScript 5 und der bald erscheinenden ECMAScript Version 6 dar, sondern ist auch ein Superset von TypeScript (Microsoft’s JavaScript basierte Programmiersprache).

Nach der Meinung der ATScript Entwickler, soll ATScript nicht als eine eigene Sprache angesehen werden, sondern als eine Erweiterung von JavaScript betrachtet werden. Dabei stellt uns ATScript TypisierungField AnnotationsMetadata Annotations und Type Introspection mit Annotations Unterstützung als Erweiterung bereit. Um diese Eigenschaften reibungslos in JavaScript zu verwenden, wird der ATScript Code in JavaScript Code kompiliert. Der kompilierte Code ist syntaktisch nach dem ECMAScript 5/6 Standard aufgebaut.

Typisierung für Variablen, Parameter und für Methoden gibt es schon in TypeScript, folglich erfindet ATScript in diesem Bereich nichts neues. Aus diesem Grund ist die Type Annotations Syntax von ATScript vergleichbar mit der Type Annotation Syntax von TypeScript. Der ATScript Code kann durch den traceur compiler auf JavaScript und auf der Dart Plattform zum Laufen gebracht werden.

Typisierungs Beispiel in ATScript:

 class MyClass {
        methodA(name : string) : int {
            var length : int = name.length;
            return length;
        }
    }

Der kompilierte Code in JavaScript (ECMAScript 6)

 import * as rtts from 'rtts';
    class MyClass {
        methodA(name) {
            rtts.types(name, rtts.string);
            var length = tts.type(name.length, rtts.int);
            return rtts.returnType(length, rtts.int);
        }
    }

Durch diese Eigenschaft, kann man den Code schon zur Laufzeit auf Typsicherheit überprüfen.
Eine zusätzliche Erweiterung in ATScript sind Meta-data annotations. Diese Eigenschaft wird in anderen Programmiersprachen schon Jahre lang erfolgreich praktiziert. Wie zum Beispiel in Java (durch “annotations”) oder in Python (durch “decorators”) nur in JavaScript sucht man diese Eigenschaft vergeblich. Diese Lücke will nun ATScript in JavaScript schließen.

Meta-data annotations Beispiel in ATScript:

 
class Inject {}

class Component {
  selector:string;
  constructor({selector:string}) {
    this.selector = selector;
  }
}

class Server {}

@Component({selector: 'foo'})
class MyComponent {
  @Inject()
  constructor(server:Server) {}
}

Der kompilierte Code in JavaScript (ECMAScript 6)

import * as rtts from 'rtts';

class Inject {}

class Component {
  selector;
  constructor({selector}) {
    this.selector = selector;
  }
}

class Server {}

class MyComponent {
  constructor(server) {}
}

MyComponent.parameters = [{is:Server}];
MyComponent.annotate = [
  new Component({selector: 'foo'}),
  new Inject()
];

Bei genauer Betrachtung von ATScript kommt man zum Ergebnis, dass ATScript gute durchdachte Lösungsansätze bietet, wie sich JavaScript in der Zukunft weiter entwickeln kann. Ob JavaScript diesen Weg ein schlägt, hängt von zwei Faktoren ab: Ein Faktor ist der Erfolg von Angular.js 2.0 (Release 2015) und der andere Faktor ist, wie sich allgemein die Softwareentwicklung ausrichtet. Aber durch das Aufbauen auf den Vorarbeiten von TypScript, hat ATScript aktuell den richtigen Weg eingeschlagen.

Posted in Web as a Platform | Tagged , , , , , | 1 Comment

Customizing GWT’s browser detection

In a recent project, we experienced the phenomenon that the GWT application was broken when started in Internet Explorer 11 embedded in a specific rich client application. It turned out that the user agent string sent by the browser was set to that of IE 7 while the rendering engine ran in IE 11 mode. As GWT detects browsers based on their user agent string, the IE6/IE7 permutation was chosen which resulted in a completely broken and unusable rendering of the application, and multiple JavaScript exceptions were thrown.

As the mentioned rich client could not be changed by us, we had to make GWT choose the right permutation. The solution for this was to overwrite the browser detection code bundled with GWT. The post shows how …

Continue reading

Posted in Java Web Frameworks | Tagged , , | Leave a comment