« September 2007 | Main | November 2007 »

Oktober 2007 Archives

02.10.07

Problemstellung

Bei einem Vergleich von so unterschiedlichen Entwicklungsumgebungen ergeben sich eine Reihe von Problemen. Die Bewertung des Entstehungsprozesses von Web-Anwendungen ist durch die verlangte Flexibilität eine besondere Herausforderung. Die Anforderungen an eine Web-Anwendung ändern sich während der Entwicklung und je nach Projekt kann dies leichte oder auch gravierende Veränderungen bedeuten. Um diesem Problem aus dem Weg zu gehen, wird in dieser Arbeit die gleiche Web-Anwendung in beiden Entwicklungsumgebungen geschrieben. Nach der gemeinsamen Planungsphase soll der Schwerpunkt des Vergleichs auf der unterschiedlichen Implementierung liegen.
Die Implementierung vergleicht man mit der Anzahl Codezeilen und Klassen, sowie der benötigten Arbeitszeit, allerdings hängt beides von den Fertigkeiten des Programmierers ab. Beispielsweise würde ein Programmierer, der sich zwar mit JavaEE aber nicht mit Rails - oder andersherum - auskennt, das Ergebnis des Vergleichs verfälschen. Ist die Erfahrung mit beiden Entwicklungsumgebungen in etwa gleich, so ist der Effekt vernachlässigbar, solange das Ergebnis deutlich genug ausfällt. Um bei beiden Entwicklungsumgebungen auf den gleichen Stand zu kommen, werde ich mich einarbeiten und bei der Gelegenheit die Einarbeitungszeit und Lernkurve dokumentieren.
Eine weitere wichtige Eigenschaft der Entwicklungsumgebungen ist die Änderungssichtbarkeit (engl. "turn-around-time") oder auch Agilität und spielt bei Web-Anwendungen eine wichtige Rolle. Desweiteren soll nach Fertigstellung jeweils der Quellcode auf Lesbarkeit und Wartbarkeit sowie die fertige Anwendung auf Skalierbarkeit und Performance hin analysiert werden. Dies verlangt nach vorher festgelegten Kriterien, wie diese Punkte im Einzelnen zu bewerten sind.

Ich denke die Bewertung ist das Hauptproblem der Arbeit, da es hier keine allgemeingültige Lösung gibt. Ein solcher Vergleich wird wohl immer ein wenig subjektiv bleiben, aber ich hoffe das so wissenschaftlich wie möglich hinzubekommen. ;)

03.10.07

Geplante Metriken(update)

Hier nochmal die geplanten Metriken bzw Bewertungskriterien:

  • Einarbeitungszeit
    Hier wird sowieso JavaEE den kürzeren ziehen und es wird auch nicht in die Abschlussbewertung einfließen. Jedoch erwähnen werde ich es in der Arbeit schon. Besonders wie so die Lernkurve aussieht.
  • Anzahl Codezeilen
    Hier sind physikalische und logische Codezeilen sowie Kommentare zu unterscheiden. Der Vergleich von Codezeilen bei unterschiedlichen Programmiersprachen ist mit Vorsicht zu genießen.... Aber Aussagen zur Fehleranfälligkeit und Wartbarkeit lassen sich vielleicht trotzdem machen.
  • Anzahl Codezeilen pro Zeit
    Dies zielt auf die Produktivität ab. Brauche ich weniger Codezeilen aber dafür länger ist es plötzlich garnicht mehr so gut...
  • Anzahl Methoden und Klassen
    Wird Code oft wiederverwendet? Ist die Anzahl der Klassen unterschiedlich und warum?
  • Anzahl Libraries / Code von Drittanbietern
    In welchem Umfang kann man bereits vorhandene Sachen einbinden oder übernehmen. In wiefern bedeutet das Abhängigkeit und Einstellung auf den Programmcode von Dritten.
  • Redundanz
    Ist die Anwendung weitestgehend DRY oder wiederholen sich Codepassagen immer wieder?
  • turn-around-time / Agilität
    Wie lange dauert es, bis Änderungen im Code sichtbar werden?
  • Arbeitszeit für Implementierung
    Ein entscheidener Kostenfaktor. Welche Eigenschaften förderten ein schnelleres, produktiveres Arbeiten und welche behinderten die Arbeit sogar?
  • Deployment
    Der Übergang von Entwicklung zur Bereitstellung. Wie kompliziert ist dieser Schritt, wie lange braucht man dafür?
  • Wartbarkeit
    Lässt sich der Code gut lesen, wie findet man Fehler. Gibt es Tests?
  • Skalierbarkeit
    Wie robust ist die Anwendung und kann man Sie ggf auf mehrere Server verteilen?
  • Performance
    Der Benutzer sollte möglichst wenig warten müssen. Wie verhält sich die Anwendung bei vorgesehener Benutzeranzahl? Wie bei Überlast?
  • Footprint
    Wie groß ist der Speicherbedarf bei Laufzeit?

Fehlt sonst noch was?

05.10.07

Useful Stuff

DHH Keynote RailsConf Europe
Endlich was zum anschauen

Scalability
Bis ich die Scalability bewerten kann dauerts ja noch, aber hier ist schonmal erklärt, was es denn eigentlich wirklich bedeutet.

Software Is Hard (via Stefans Blog)

YARJC: Yet another Rails vs. Java Comparison
Kurzer Artikel, Lange Diskussion....

Video, was man zumindest mal gesehn haben sollte:
Douglas Crockford: "Quality"

17.10.07

Buch: "Beyond Java" von Bruce Tate

"Beyond Java"
Bruce Tate
O'Reilly 2005

Unterhaltsam!

Im ersten Teil versucht Bruce Tate zu erklären, warum Java solch einen Erfolg hat und die "most successful programming language ever" ist. Die Entstehung und Geschichte von Java wird vor dem Leser ausgebreitet und mit Kommentaren von "top Java consultants" gerätselt wie es dazu kam und was die Stärken und Schwächen von Java im Vergleich zu damals existierenden Lösungen waren bzw. sind.
Objekt-Orientiertes Programmieren, das Internet, die Befreiung von C++ und die Abgrenzung von Microsoft führten zum "perfect storm": Java!
Warum Java so durchstarten konnte, wird unter die Lupe genommen und vor allem die JVM hervorgehoben. WORA machte Java stark.
In Kapitel 4 legt Bruce Tate dann richtig los und erzählt wie wenig geeignet Java für heutige Aufgaben ist.
Danach geht es um die Suche nach einem Nachfolger. Was für Kriterien muss eine Programmiersprache erfüllen, um Java in Zukunft gefährlich werden zu können. Er stellt ein paar Kandidaten vor und Ruby spielt für ihn als Top-Favorit eine große Rolle.
Die zentrale Aussage ist wohl:
Java ist toll, aber es gibt viele noch tollere Dinge. Augen offenhalten und ausprobieren!

Das Buch gibt einen ganz guten Einblick, welche interessanten Programmiersprachen es so gibt und obwohl es kein Programmiersprachenvergleich sein soll, ist es das zumindest zum Teil. Die Kommentare von den Profis sind interessant und die Vergleiche von Programmierfähigkeiten etc. mit Kajak-Fahrten und Mountainbike-Touren sind sehr unterhaltsam, wenn IMO auch sehr weit hergeholt... ;)
Wer Ruby noch nicht kennt, erhält nebenbei einen kleinen Einstieg, was die Sprache so interessant macht und wie die Syntax aussieht. (Kapitel 6/7)

Viel Spaß beim Lesen.

23.10.07

Testing

Wie testet man? Und was?

Bei Rails dürfte es nicht so das Problem sein, aber bei JavaEE...?
Ist JUnit die richtige Wahl? Es gibt noch TestNG und JUnitEE und über Canoo WebTest bin ich auch gestolpert.

Sollte ich JUnit und HttpUnit verwenden oder doch etwas anderes? Anscheinend sind Tests aufwendig und kompliziert, oder alles halb so wild? Was sollte man mit Tests abdecken und was besser nicht?

Ich stehe auf dem Gebiet der Tests ganz am Anfang und bin für jede Hilfe und jeden hilfreichen Link dankbar.

26.10.07

Beispielapplikation

Nun weiß ich endlich, was ich eigentlich programmieren soll - Ein Ratingsystem.

Die Entwicklung wird in kleinen Schritten erfolgen. Zuerst einmal soll eine minimalistische lauffähige Version in JavaEE und Rails geschrieben werden, die es ermöglicht Kunden anzulegen und zu suchen, Ratings für diese Kunden anzulegen mit entsprechenden Hard- und Softfacts.

Dies beinhaltet also Eingabeformulare jeweils für die Kundendaten, Rating, Hardfacts und Softfacts; eine Suche, Ergebnisliste und Detailansicht für Kunden; eine Detailansicht für Ratings.

Später sollen dann immer neue Anforderungen dazu kommen.

Als allererstes gibt es einiges zu modellieren...
Ich hab mal mit Enterprise Architect (EA) rumgespielt und will euch das (Zwischen-)Ergebnis nicht vorenthalten.

Hier seht ihr die Screens, die es geben wird. Natürlich kann man noch tausend Pfeile mehr machen, aber ich wollte das Diagramm nicht überladen.
Außerdem hängt es jetzt auch noch vom Datenbankdesign ab, ob jeder Kunde aktuelle Hard- und Softfacts hat oder diese jeweils nur zu einem Rating definiert werden.

Grob hab ich das ganze auch schon in HTML verpackt. Die css-Datei ist im Moment nur dazu da, die verschiedenen Bereiche auseinanderzuhalten. Das sieht nicht schön aus, aber soll es auch nciht :p

PS: Wenn ich Dinge im EA falsch verwende, bitte ich um comments! :)

Datenbankdesign

Ein paar Gedanken zur Datenbank....
Anmerkung: Bei den Diagrammen stehen noch deutsche Bezeichnungen für die Hard-und Softfacts-Felder und Datentypen, die mehr geraten sind als alles andere...
Das sollte man am Besten bei einem Treffen besprechen, was wo in welcher Form rein soll und wie der englische Fachbegriff dann ist. BWLer anwesend? :D

Eigentlich könnte man es sich ganz einfach machen und zwei Tabellen anlegen:
"customers" und "ratings"
Fertig!

Allerdings wird so die Rating-Tabelle riesig (da kommen sicherlich noch Facts hinzu...) und man kann einem Kunden keine Facts zuordnen, ohne ein Rating zu erstellen. Aber vielleicht ist das sogar gewollt!?
Wenn nicht, müsste man die Facts auslagern in eine eigene Tabelle und dann würde ich vorschlagen auch die Hardfacts von den Softfacts zu trennen. Einerseits siehts dann schöner aus, weil logischer, andererseits kann man dann vielleicht später aufkommende Zugriffrechte, die für Hard und Softfacts unterschiedlich sind, leichter einfügen. Schwammige Argumentation, ich weiß... ;)
Jedenfalls habe ich das Schema auch mal für 4 Tabellen zusammengeklickt.
"customers", "ratings", "hardfacts" und "softfacts"

Nochmal: Für Anmerkungen bin ich dankbar und für Hinweise wo ich EA falsch benutzt habe besonders. Ich sehe da schon, dass im 2-Tabellen-Bild der Foreign Key fehlt... hm

29.10.07

HOWTO: JSAS(Glassfish) with MySQL (update)

If you get this errormessage on pinging your database from within the admin console....

"Operation 'pingConnectionPool' failed in 'resources' Config Mbean. Target exception message: Class name is wrong or classpath is not set for : com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"

....then your jdbc-driver for mysql is missing!

get the jdbc-driver for MySQL here:
http://dev.mysql.com/downloads/connector/j/5.1.html

Move the file "mysql-connector-java-5.1.5-bin.jar" to the directory "%J2EE_HOME%\domains\domain1\lib\ext\"

(Re)Start the Application Server and create a new connection pool:
Common Tasks > Create New JDBC Connection Pool
I used following settings:
- Name: mysqlpool
- Resource Type: javax.sql.DataSource
- Database Vendor: mysql
[NEXT]

- Data Source Class Name: com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource

- serverName: 127.0.0.1 (just the localhost)
- port: 3306 (default port)
- user: (an existing user allowed to connect to your mysql db)
- password: (the users password)
- databaseName: (the name of the database you want to connect to)
[FINISH]

[PING]
Ping succeeded! Yay!


To use your new connection pool, just add a JDBC Resource and use its name in the persistence.xml for the DataSource like this:

<jta-data-source>%JNDI_NAME%</jta-data-source>

UPDATE:
Set only necessary options. If you get "No Database selected", try to delete the "url"-property or follow this advise:


When creating the connection pool DataSource properties, delete the “Url” property, and set the “URL” property. The URL may contain ?user=user&password=password, or you may leave them out and set “user” and “password” properties instead. These correspond to setURL(), setUser() and setPassword() on com.mysql.jdbc.jdbc2.optional.MysqlDataSource.

If you omit the URL property, you will get:

java.sql.SQLException: No database selected


Infos about properties: http://docs.sun.com/app/docs/doc/819-3658/6n5s5nklk?a=view#gbsok

30.10.07

Umzugspause

Ich komme zur Zeit zu garnichts, weil ich nun endlich meine neue Wohnung beziehen kann. Diese Woche werde ich wohl nichts weiter berichten... sorry.

Allerdings kann ich noch kurz berichten, dass ich erfolgreich eine eigene kleine Testanwendung in JavaEE mit JSF,EJB,JPA aufm Glassfish mit MySQL geschrieben und laufen gelassen habe. Darauf werde ich dann aufbauen.
Rails schieb ich vor mich her, weil ich glaube, dass es dort recht fix geht und vll kommt ja doch noch Rails2 vor Weihnachten ;)

btw: Nächste Woche hole ich mein Masterarbeitsthema ab und ab da läuft die Zeit. Der Zeitdruck wird mir dann Beine machen. Versprochen! ;)

About Oktober 2007

This page contains all entries posted to Gerald's Blog in Oktober 2007. They are listed from oldest to newest.

September 2007 is the previous archive.

November 2007 is the next archive.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.31