Posts tagged: Java

Swing RETRO application

Post to Twitter

During christmas break, I checked my (very) old personal Java applications. One of the first comments was from 2001. A long time ago. I had no UI framework, no testing framework and no automatic build process. All was hand-made :) I was amazed that I could read and edit the source code without problems.

One of my biggest and first applications, that I wrote for my personal use, was “MP3Tool”. It is a tool to manage (very) large MP3 inventories, it has cool automations, supports offline edit/merge via XML, supports database loading and has command line support. It has support for ID3v1 and ID3v2. I have implemented my own library to read and write ID3 TAG infos (not complete, but works still great).

The tool is a “developer” tool that is not very user-friendly, but it is 11 years old and has tons of features. It was developed from a developer for a developer :) If someone needs a Java tool for mass editing of MP3 Files – here it is. It is not Open Source because it was not relevant in 2001. It is Free for everyone and if someone needs the source code it should not be a problem to upload it somewhere. :)

The tool has a German and English language file. I don’t know if the auto detection works but you can change the language file in the settings, via Toolbar. I have not tried it on MacOS, but used it very often with Linux. If you search documentation – I have never used one!

I use the tool from time to time and still love it because it just works. After 11 years, I think it is ok to share it with you.

To be sure – The tool is not a SIB Visions Tool – It is a retro style swing application developed long time ago ;-)

mp3uebersicht_eingelesen

File overview

mp3optimierung_ergebnis_mehrfach

File optimization

mp3konvertierung_konvert

TAG conversion

JVx Kommunikation im Vergleich

Post to Twitter

Die in JVx integrierte Kommunikation hätte durchaus potential für ein eigenständiges Open Source Projekt. Wir sind jedoch bemüht die Entwicklung immer so einfach als möglich zu halten. Das bedeutet nicht, daß in JVx alle möglichen Frameworks zusammengeführt werden und somit ein nicht überschaubares “etwas” entsteht, sondern JVx enthält alles was nötig ist um Business Anwendungen in einer 3 Schichten Architektur zu erstellen. Und dazu gehört nun mal eine effiziente Client/Server Kommunikation.

Es gibt natürlich Frameworks für die Kommunikation zwischen Client und Server, wie z.B. Netty. Doch unabhängig von den vielen Möglichkeiten des Frameworks ist die Bibliothek mit knapp 700KB ein großer Brocken (nur für die Kommunikation!). Weiters ist ein Kommunikationsframework alleine noch nicht ausreichend, denn die Objekte müssen zwischen Client und Server auch noch serialisiert bzw. deserialisiert werden.

Für die Serialisierung könnten wiederum vorhandene Frameworks wie z.B.: Google Protocol Buffers oder Hessian eingesetzt werden. Doch die Google Protocol Buffers erfordern die Definition der zu übertragenden Objekte und ist daher für ein generisches Framework wie JVx nicht geeignet. Und Hessian unterstützt leider nicht alle Objekttypen und ist nicht out-of-the-box mit z.B. Android einsatzfähig.

Der in JVx integrierte Kommunikationsmechanismus erlaubt ohne weiteres die Integration von den bisher genannten Frameworks, da weder das Transportprotokoll noch die Serialisierung ausschlaggebend sind für eine Business Anwendung. Außerdem definiert JVx mit Interfaces, was die Kommunikation bieten muss. Üblicherweise ist eine eigene Implementierung durch die Ableitung von AbstractSerializedConnection bzw. die Implementierung von ISerializer rasch durchgeführt.

Mit dem UniversalSerializer wird außerdem eine Lösung bereitgestellt mit der Objekte, zwischen unterschiedlichsten Technologien, ausgetauscht werden können. Und das ohne sich Gedanken über die Konfiguration zu machen bzw. Mappings zu erstellen. Der Einsatz des UniversalSerializer in Verbindung mit Netty ist ebenfalls ohne Probleme möglich, nur um hier auf den flexiblen Einsatz der JVx Kommunikation hinzuweisen!

Die Kommunikation wird im Moment mit Java und .NET erfolgreich eingesetzt. Weiters funktioniert die Kommunikation auch ohne jegliche Anpassung mit Android.

JVx Web User Interface

Post to Twitter

Wie bereits erwähnt können mit JVx, Technologie unabhängige User Interfaces erstellt werden. Der Desktop Bereich ist mit Swing und QT im Moment gut abgedeckt. Doch wie sieht es mit einer Implementierung für HTML/Ajax aus?

Wäre doch großartig, wenn eine Applikation nicht nur als RIA (Desktop, Applet) verwendet werden kann sondern auch als klassische Web Anwendung. Die Installation von Plugins wäre dadurch nicht mehr notwendig.

Unsere Entwicklungsabteilung arbeitet gerade mit Hochdruck an der WebUI Implementierung für JVx. Dabei setzen wir vor allem auf GWT und die Komponenten Bibliothek extGWT.

Die Implementierung wird ebenfalls unter der Apache License, Version 2.0, veröffentlicht. Die ersten Screenshots werden wir in einem unserer nächsten Postings veröffentlichen.

Technologie unabhängige User Interfaces mit JVx

Post to Twitter

Mit JVx können Technologie unabhängige User Interfaces erstellt werden. Die Implementierung für Swing ist bereits umgesetzt und in der Bibliothek enthalten. Die Implementierung für QT Jambi ist nahezu fertig und steht bereits in den Startlöchern.

Die folgenden Screenshots zeigen die Kontakte Maske aus der Showcase Anwendung. Die Anwendung wurde einmalig mit JVx in Java implementiert und wird ohne Code Änderung als Swing Applikation und als QT Applikation gestartet:

Swing UI Implementation

Swing UI Implementierung

QT UI Implementierung

QT UI Implementierung

 

Der Unterschied der beiden Technologien könnte größer nicht sein, ist in unserem Beispiel aber nur an Details zu erkennen:

  • Mit Swing ist maximal eine ToolBar pro Bereich (NORD, SÜD, WEST, OST) möglich.
    QT ermöglicht beliebig viele ToolBars.
  • Ein Swing Button hat breitere Margins als ein QT Button
  • Die Window Buttons von Internal Frames werden von QT detaillierter dargestellt
  • Die Tabellen reagieren beim Scrollen unterschiedlich

Durch die Swing Implementierung kann auf die Vielzahl an vorhandenen Swing Controls zurückgegriffen werden um die Applikation an spezielle Kundenwünsche anzupassen. Mit der QT Jambi Implementierung können QT Jambi Controls von anderen Anbietern eingebunden werden.

Fundtruhe – APIs

Post to Twitter

Zum Wochenausklang einige interessante Links für mobile Anwendungen:

  • JSON Serializer

    Ein noch recht junges Projekt für die Objektserialisierung mit JSON.

  • JFXtras

    Im Rahmen des Projektes werden Erweiterungen für Java FX entwickelt. Unter anderem neue Komponenten und Effekte.

  • AiCharts (Kommerziell)

    Eine mächtige Bibliothek für die Erstellung von Charts unter Android.

Fundtruhe – Application Frameworks

Post to Twitter

Da wir bei SIB Visions nicht die einzigen sind, die ein Application Framework entwickeln, ist ein Blick auf die vorhandenen Lösungen ganz interessant. Hierbei handelt es sich nicht um eine Bewertung sondern vielmehr um eine Auflistung und persönlicher Eindrücke.

  • Eclipse Riena (Java, Open Source)

    Ein Framework aufbauend auf OSGi/Equinox um Multi Tier Applikationen zu erstellen. Aufgrund der starken Abhängigkeit zu Eclipse Projekten setzt der Einsatz dieses Frameworks sehr viel Know How voraus. Zwar gibt es einiges an Dokumentation, doch diese zeigt bei weitem nicht alle Details. Die Einarbeitung geht recht schnell doch bei den ersten Problemen kann man nur auf die Dokumentation oder die Community vertrauen. Um Anwendungen zu erstellen muss einerseits viel konfiguriert (XML) und andererseits muss an den richtigen Stellen der passende Code eingesetzt werden. Weiters müssen noch allerlei Bibliotheken eingesetzt werden um mit Datenbanken zu arbeiten. Bei umfangreichen Projekten sind Wartungs- und Einarbeitungsaufwand sehr hoch anzusetzen. Außerdem werden Projekte schnell sehr umfangreich, ohne bereits die notwendigen Funktionen umgesetzt zu haben.

  • EclipseScout (Java, Open Source)

    Ist unabhängig von Riena, und wird auch zum Erstellen von Multi Tier Applikationen verwendet. Entwickelt wird mit einem Eclipse Plugin. Ohne dieses Plugin ist es nur mit sehr viel Know How möglich eine Applikation zu erstellen. Ist allerdings ähnlich komplex als Riena zu sehen.

  • XDev (Java, Kommerziell und Open Source)

    Ein RAD Tool zum entwickeln von 2 Tier Java Applikationen mit JDBC Zugriff auf Datenbanken. Inkludiert eine eigene Skript Sprache für Actions. Bringt die Standard Swing Komponenten und einige spezielle Controls mit. Die “IDE” ist etwas gewöhnungsbedürftig. Der generierte Source Code ist nur schwer wartbar.

  • Habanero (.NET, Open Source)

    Ist zwar Open Source, doch an Informationen gelangt man nur nach einer Registrierung. Einsetzbar für die Erstellung von klassischen 2 Tier Applikationen. Die Datenbank wird mit XML Mapping “nachgebildet”. Die Controls sind eher schlicht und Tabellen editiert man mit Formular Popups.

  • eXpressApp Framework (.NET, Kommerziell)

    Bei DevExpress handelt es sich sowohl um einen Komponenten als auch um einen App Framework Entwickler. Das Framework wirkt sehr umfangreich und bietet sehr viel Funktionalität. Ein klassisches .NET Produkt.

  • MX-Frame (.NET, Kommerziell)

    Das Komplettpaket trumpft mit vielen GUI Komponenten auf und bietet auch einiges an Funktionen. Leider benötigt man ein Client, Developer und Server Produkt. Anhand der Dokumentation und den Informationen des Herstellers scheint der Komplexitätsgrad sehr hoch und die Einarbeitungszeit dementsprechend.

  • QAFE (Java/GWT/XML, Kommerziell)

    Dieses Framework tanzt etwas aus der Reihe, ist aber interessant weil damit lt. Hersteller die Konvertierung von Oracle Forms Applikationen zu Multi Tier Anwendungen möglich sein soll. Leider finden sich nur wenige Informationen und auch die Demos zeigen nur einen groben Überblick. Die Möglichkeit große Forms Applikationen zu konvertieren wäre interessant, da dies ein absolut mögliches Einsatzgebiet für JVx ist.

Im Gegensatz zu den anderen Open Source Lösungen ist JVx ein sehr schlankes Framework und kann auch ohne IDE Plugins entwickelt werden. In JVx ist bereits alles integriert um Datenbank Anwendungen zu erstellen, ohne auf weitere Bibliotheken angewiesen zu sein. Weiters können Unit Tests ohne Umwege erstellt und angewandt werden. Und es wird auch kein eigener Development Modus benötigt um zu entwickeln. Aufgrund der engen Bindung zur Datenbank fallen auch Konfigurationen wesentlich einfacher bzw. überhaupt weg. Das macht sich auch bei der Wartung bemerkbar.

JVx und das Tippspiel Packung

Post to Twitter

Im Java Magazin 05.2010 ist nun unser Bericht über das Fußball Tippspiel “Packung!” enthalten.

Nach einer ausführlichen Erklärung der Architektur und einigen Anwendungsfällen von JVx, wird anhand einer konkreten Tippspiel Maske erklärt, wie mit JVx gearbeitet wird um effizient und schnell zum Ergebnis zu kommen.

Abschließend ist auch noch unsere Android Anwendung zu sehen, die ebenfalls mit JVx umgesetzt wurde.

Der Artikel zum Nachlesen: JVx Java Magazin 05.2010

.NET und MONO kommunizieren mit JVx

Post to Twitter

Schon seit wir mit der Definition des ISerializer Interface begonnen haben, war der Wunsch nach Technologie unabhängiger Kommunikation vorhanden. Das Thema hat uns immer wieder gestreift, doch die Notwendigkeit einer Java unabhängigen Implementierung war nicht gegeben.

Vor einigen Wochen war es dann so weit. Wir entschieden uns für die Portierung der JVx Objekt Serialisierung nach C#. Natürlich gab es einige Herausforderungen und Probleme, die jedoch keinen Einfluß auf die Funktionswiese hatten. Und im Unterschied zu CORBA, Hessian & Co unterstützen wir ein sehr breites Spektrum an Objekten.

Nun ist endlich so weit und wir können eine funktionierende Kommunikation zwischen JVx und C# vermelden. Sämtliche Objekte werden mit dem UniversalSerializer ausgetauscht. Der C# Serializer arbeitet wie sein Java pendant und ist ebenso mächtig. Die Serialisierung von Objekten unterliegt allerdings den gleichen Einschränkungen wie es auch in Java der Fall ist, allerdings verzichten wir bei unserer Lösung auf das im Normalfall verpflichtende ISerializable Interface.

Um dem ganzen den notwendigen Schliff zu verpassen haben wir auch gleich die Kommunikationsklassen AbstractSerializedConnection, Master- und SubConnection sowie alle abhänigen Klassen portiert. Dadurch ist der Zugriff auf die JVx Business Logik zu 100% gegeben. Wir können nun die komplette Business Logik und alle Server seitigen Actions, auch mit C#, einsetzen und zwar ohne Mehraufwand.

Ein kleines C# Beispiel an dieser Stelle muss natürlich sein:

public void testMetaData()
{
    HttpConnection conDemo = new HttpConnection(new UniversalSerializer(),
                                                "http://localhost/jvx/services/Server")

    MasterConnection appconDemo = new MasterConnection(conDemo);

    appconDemo.ApplicationName = "demo";
    appconDemo.UserName = "demo";
    appconDemo.Password = "demo";
    appconDemo.open();
       
    SubConnection sub = appconDemo.createSubConnection("demo.Company");
    sub.open();
       
    MetaData md = (MetaData)sub.call("company", "getMetaData");
}

Im nächsten Schritt erstellen wir einen Showcase basierend auf Silverlight 4. Demnächst hier mehr dazu.

Fundtruhe – EntityFS

Post to Twitter

Wenn man mit java.io.File nicht arbeiten möchte und einen komfortablen Weg für den Umgang mit Dateien sucht, dann ist ev. das EntityFS API ganz nützlich.

Zusammengefasst stellt es Klassen und Utility Methoden bereit um Dateien zu lesen/ändern/kopieren. Das API besteht aus relativ vielen teilweise untereinander abhänigen jars. Die core lib ist mit etwas über 360Kb auch nicht gerade schlank. Die komplette lib veranschlagt sogar etwas über 700Kb.

Dennoch spart das API sehr viel Zeit im direkten Vergleich mit java.io.File & Co.

Der erste Auftritt von JVx in den Medien

Post to Twitter

In der Ausgabe 04.2010 des Java Magazin ist ein äußerst interessanter Artikel, von Florian Müller, über JVx erschienen. Dieser Artikel gibt einen kurzen Einblick in JVx, erläutert kurzerhand die Idee hinter JVx und zeigt ein kurzes Code Beispiel. Alles in allem, ein gelungener Einstieg von JVx in die Medienwelt.

Der Artikel zum Nachlesen: JVx Java Magazin 04.2010

Die kommende Ausgabe 05.2010 enthält einen Beitrag von mir, über die Umsetzung unseres Beitrages zur W-JAX Challenge 09. In dem Artikel erkläre ich was es mit JVx auf sich hat und anhand eines Beispiels versuche ich die Einfachheit und Effizienz zu verdeutlichen.

Der Artikel ist schon seit einigen Wochen bei IT-Republik zu finden: Hier