Extreme Lightweight Architectures mit Java EE 6

Ich hätte doch wieder früher mit dem Bloggen anfangen sollen…
Am 10. September 2009 war ich auf der Jug-Saxony (Java User Group Sachsen | Google Group | Software Saxony). Es hatten sich eine ganze Menge Leute. Ich war überrascht, aber wenn schon mal Adam Bien in der Stadt ist.. Er hatte einen Vortag über „Extreme Lightweight Architectures (XLAs :-)) mit Java EE 6 und insbesondere EJB 3.1“ gehalten. War sehr interessant muss ich sagen! Jedoch hatte er ein arg flotten Informationsschub.

Hier noch mal einmal die Vor-Informationen…

Informationen zum Thema:
EJB 3.1 ermöglicht eine direkte Umsetzung der Architekturprinzipien auf den Source-code. Man kann hier allerdings auch zu ungewöhnlichen Mitteln wie z.B. gänzlicher Verzicht auf Schnittstellen oder das Deployment innerhalb eines WARs greifen. In dieser Session werden leichtgewichtige und minimalistische Architekturen am Beispiel der EJB 3.1, JSR-330 (Java Contexts und Dependency Injection) und REST diskutiert. Dabei werden pragmatische Ansätze wie z.B. das Entity Control Boundary Pattern diskutiert und mit Code aus der Praxis veranschaulicht. Fragen wie: Was bringt Convention Over Configuration? Werden Schnittstellen noch benötigt? Sind DAOs überflüssig? Brauchen wir DTOs? Wie teste ich EJBs außerhalb des Containers? Lohnt sich noch der Einsatz von reinen “POJOs”?, sowie alle Fragen der Teilnehmer werden während der Session beantwortet. Die Veranstaltung ist open-ended – d.h. wir hören erst auf, wenn alle Fragen beantwortet und im best-case auscodiert wurden..

In dem Vortrag ging es darum, dass viele Vorurteile gegenüber EJBs (3.0) haben bzw. die noch aus den 2.x Zeiten stammen. Hier nur Auszüge wie Schwergewichtigkeit und schwere Integration/Migration. Dies ist aber nicht nicht so, wie er uns anhand von Theorie und Code snippets aufzeigte.
Der Grund für die Vorurteile gegenüber EJB 3.0 und 3.1 sind, aus seiner Sicht, die Konstrukte des Overengineerings der Architekten zu suchen. Das bedeutet das Ziel klar im Auge zu haben und nur soviel Flexibilität wie möglich hineinzubringen. Denn über 90% dieser Flexibilität und damit auch Komplexität, werden bzw. wurden nie genutzt.
Ziel seiner Theorie und Code Pattern war verständlichen und leichtgewichtigen Code zu schreiben, der sich ohne großen Aufwand erweitern lässt und somit die alltägliche Arbeiten nicht beeinträchtigt.
Das Motto und immer wieder zu hören…

Keep it simple

Folien: Extreme Lightweight Architectures (Adam Bien)
Projekt: JavaEE Patterns

Links

Seam DateTime converter

In der Seam Dokumentation ist der Teil der über den DateTime converter recht klein. Nur folgendes kleine Beispiel wurde gegeben:


   

Dies sagt nicht viel. Wie du sicherlich, hab ich auch eine Suchmaschine meines Vertrauen benutzt um mehr herauszufinden. Hier ein paar nützliche Informationen zusammengefasst.
Wenn du das Datum und die Zeit (dd-MM-yyyy hh:mm:ss) anzeigen lassen willst genügt type=“both“ und dateStyle=“full“. Wenn nur das Datum benötigst, nutze type=“date“.

Hier ein paar dateStyles:

default May 14, 2007 2:35:45 PM (default)
short 5/14/07 12:55:42 PM
medium May 14, 2007 2:42:36 PM
long May 14, 2007 2:41:08 PM
full Monday, May 14, 2007 2:39:56 PM

Natürlich ist zu beachten, dass das Format es dem default bzw. local Zeit-Format entspricht und Seam seine eigene timezone benutzt.
Meistens wird jedoch das pattern mit dem type Attribut benutzt.
Wenn du nun z.B. den style 14.07.2009 benötigst, schreibe:


   

Cheat sheet’s

http://refcardz.dzone.com/refcardz/core-seam
http://refcardz.dzone.com/refcardz/seam-ui

Dann noch… Happy Coding!

Git – verteilte Versionskontrolle (DistributedRevisionControlSystems)

Dies ist auf jedenfall ein Blogeintrag wert! Auch wenn Git Mitte 2005 von Linus Torvalds entwickelt wurde und eigentlich schon durch den Mainstream gezogen ist, möchte ich es hier noch einmal aufgreifen.
Was Versionskontrolle ist, werden die Programmier sicherlich wissen. Für die, die es nicht sind bzw. es nicht wissen, können hier mehr zur Versionskontrolle nachlesen.
RVS, CVS und SVN sind nicht mehr auf dem Zahn der Zeit. Die neuen verteilten Versionskontrollsysteme ziehen mit den Vorteilen auf… das sie schnell sind, Neuerungen bzw. Patches müssen/können/sollten vorher durch einen Maintainer kontrolliert werden, das System arbeitet dezentral um Performance & Bandbreite zu sparen und andererseits bei einem Ausfall die ganze Entwicklung am Leben zu erhalten und zu guter letzt man mit dem Notebook auch Offline commiten/branchen/taggen kann.
Dies lässt sich ganz einfach dadurch erklären, dass jeder Benutzer sein eigenes Repository auf der Festplatte. Natürlich gibt es sogenannte ‚zentrale‘ Repositories wie zum Beispiel GitHub. GitHub ist ein “Social Code Hosting” (Nachfolger von SourceForge), was quasi ein Sozial Network für Coder ist. Hier kann jeder Quellcode hochladen, den von anderen einsehen (sofern Rechte gesetzt), forken, … und wieder Änderungen von anderen in den eigenen Code zu integrieren. Man kann natürlich auch Problemlos seinen Code umziehen bzw. woanders veröffentlichen.
Bei GitHub sind momentan recht viele Projekte gehostet wie zum Beispiel der Linux Kernel, Perl, Gnome, Qt, Ruby on Rails, Android, Wine, Fedora, Debian, X.org, VLC, Git und viele mehr.

Happy git’n

Installation
Mac OS X, Linux (falls nicht schon installiert ;)), Windows

Repository Einrichten

    Liste der Einstellungen
    git config –list
    Namen und Benutzer einrichten
    git config –global user.name „Mein Name“
    git config –global user.email email@addy.net
    git config –global color.ui „auto“
    git config –global pack.threads „0“

Projekt im Repository erstellen
cd /Path/To/Git/Project

Git Projekt initialisieren (in dem Verzeichnis)
git init

Überprüfen ob es geklappt hat
ls -a
> .git

Commit
git add .
git commit -m „erster commit“

Hinzufügen
git add NeueDateien…

Entfernen
git rm AlteDateien…

Umbenennen
git mv AlteDateil NeueDatei

Log
git log

Reset Liste
git reset –hard SHA1_HASH

Repository clonen
git clone git://server/path/to/files

Änderungen vom zentralen Repository ziehen
git pull

Änderungen auf das zentrale Repo schieben
git push

Änderungen des letzten commit’s
git diff

SVN checkout
git svn clone https://fishbox.svn.sourceforge.net/svnroot/fishbox fishbox
git svn fetch –all https://fishbox.svn.sourceforge.net/svnroot/fishbox fishbox

Links

http://de.wikipedia.org/wiki/Git / http://git-scm.com/
Kurs für SVN’er
http://de.wikipedia.org/wiki/Mercurial / http://mercurial.selenic.com
Podcast CRE130 [Empfehlung]

Cheat sheet’s

SVG: http://ktown.kde.org/~zrusin/git/git-cheat-sheet.svg
PNG’s:
http://ktown.kde.org/~zrusin/git/git-cheat-sheet-medium.png
http://ktown.kde.org/~zrusin/git/git-cheat-sheet-large.png

cheat.errtheblog.com

http://jan-krueger.net/development/git-cheat-sheet-extended-edition

http://www.ivy.fr/mercurial/ref/v1.0/

Dann noch… Happy Coding!

Passwordless SSH Login

  1. Erstelle dir ein private/public key pair, which will create a private key in ~/.ssh/id_rsa den public in ~/.ssh/id_rsa.pub:
    ssh-keygen -t rsa
  2. Kopiere nun deinen public key zum remote host:
    scp ~/.ssh/id_rsa.pub username@remote-host.com:~
    ssh username@remote-host.com
    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
  3. Fertig! Du kannst dich nun mit dem remote host über das selbe ssh commando wie zuvor verbinden. Jeodch benötigst du nun kein Passwort mehr!

Hinweis: Dies funktioniert nur mit UNIX hosts.

JavaScript Events

Dieser Post dient als Nachschlage-‚Werk‘.

Gesamte Liste des JS Event Handlers:

  • onAbort – wenn der Benutzer den Ladevorgang eines Bildes abbricht.
  • onBlur – wenn ein Element, Frame oder Window den Focus verliert.
  • onChange – wenn selektierte Textfeld seinen Focus verlieren, oder der Wert modifiziert wurde.
  • onClick – Objekt welches angeklickt wurde.
  • onDblClick – beim Doppelklick auf ein Element.
  • onDragDrop – Benutzer ein Objekt (z.B. Datei) in das Window drop’t.
  • onError – beim Ladevorgang eines Dokumentes oder Bildes ein Fehler auftritt.
  • onFocus – Window, Frame, Frameset oder anderes Element den Fokus erhält.
  • onKeyDown – Benutzer eine Taste runterdrückt.
  • onKeyPress – Benutzer eine Taste drückt oder sie gedrückt hält.
  • onKeyUp – Benutzer eine gedrückte Taste los lässt.
  • onLoad – der Browser alle Elemente der aktuellen Seite geladen hat (inkl. Frames/Framesets und deren Inhalt).
  • onMouseDown – Benutzer eine Maustaste runter drückt.
  • onMouseMove – Benutzer den Cursor bewegt.
  • onMouseOut – Cursor einen Bereich verlässt.
  • onMouseOver – Cursor sich über ein Element oder Bereich bewegt.
  • onMouseUp – Benutzer eine Maustaste los lässt.
  • onMove – Benutzer oder Script das Element, Window oder Frame bewegt.
  • onReset – Benutzer das Formular zurücksetzt.
  • onResize – Benutzer oder Script die Window oder Frame Größe ändert.
  • onSelect – Benutzer einen Text selektiert (in einem Textbox oder Textarea).
  • onSubmit – Benutzer das Formular übermittelt.
  • onUnload – Benutzer die HTML Datei verlässt.

Object mit den entsprechenden Event Handlers in JavaScript 1.2:

  • Object area – onDblClick(), onMouseOut(), onMouseOver()
  • Object button – onBlur(), onClick(), onFocus(), onMousedown(), onMouseup()
  • Object checkbox – onBlur(), onClick(), onFocus()
  • Object document – onClick(), onDblClick(), onKeyDown(), onKeyPress(), onKeyUp(), onMouseDown(), onMouseUp()
  • Object fileupload – onBlur(), onChange(), onFocus()
  • Object form – onReset(), onSubmit()
  • Object frame – onBlur(), onDragDrop(), onError(), onFocus(), onLoad(), onMove(), onResize(), onUnload()
  • Object image – onAbort(), onError(), onKeyDown(), onKeyPress(), onKeyUp(), onLoad()
  • Object layer – onMouseOver(), onMouseOut(), onLoad(), onFocus(), onBlur()
  • Object link – onClick(), onDblClick(), onKeyDown(), onKeyPress(), onKeyUp(), onMouseDown(), onMouseOut(), onMouseUp(), onMouseOver()
  • Object password – onBlur(), onFocus()
  • Object radio – onBlur(), onClick(), onFocus()
  • Object reset – onBlur(), onClick(), onFocus()
  • Object select – onBlur(), onChange(), onFocus()
  • Object submit – onBlur(), onClick(), onFocus()
  • Object text – onBlur(), onChange(), onFocus(), onSelect()
  • Object textarea – onBlur(), onChange(), onFocus(), onKeyDown(), onKeyPress(), onKeyUp(), onSelect()
  • Object window – onBlur(), onDragDrop(), onError(), onFocus(), onLoad(), onMove(), onResize() onUnload()

Code Beispiele @ SelfHTML

Happy hacking!