Shop

Donnerstag, 30. Oktober 2014

Der eigenen Rolle bewusst werden

In einem Unternehmen kann leider nicht immer alles ganz rund laufen, das hat verschiedenste Gründe. Aber darauf möchte ich hier gar nicht weiter eingehen. Als Mitarbeiter ist man dann oft versucht die Probleme zu identifizieren und am liebsten fängt man da mal nicht bei den eigenen Problemen an.

He should mind his own business. (Er soll vor der eigenen Haustüre kehren) - Idiom

Ich möchte das hier mal mit einem Schneeballsystem vergleichen. Wenn sich jeder darum kümmert, dass er optimal seine Leistung bringen kann. Jeder aber auch die Dinge die Ihn daran hindern nach oben tragen würde zu seinem Vorgesetzten. Dann würde sich eine kleine Produktivitätslawine in Gang setzten, die sich schwer stoppen liese.

“Wenn sich jeder um sich selbst kümmert, ist für alle gesorgt.” - Aus der Schweiz

Ich bin zwar immer noch der Meinung, dass man durch geschickte Führung aus eine 5-8 Personen Team ein High-Perfomance-Team formen kann. Aber was machen, wenn sich das leider nicht ergibt. Wie kann man sich trotzdem professionell verhalten.

Mind your own business!

Man muss sich zu jeder Zeit seiner Rolle bewusst sein, oder eben die Rolle neu ausstecken. Dazu können die folgenden Fragen helfen:
* Was spiele ich für eine Rolle in diesem Projekt, Meeting, Gruppe, Unternehmen?
* Was sind meine Aufgaben, was habe ich für Pflichten?
* Wann ist meine Aufgabe erledigt?
* Wann muss ich meine Aufgaben erledigt haben?
* Wen und wie muss ich informieren?
Ein Kollege von mir hat mal gesagt: “Verhalte dich so, als wärst du eine eigene Firma innerhalb des Unternehmens.”

Mit diesem Satz im Kopf möchte ich gerade noch einen Gedanken an diesen Text anknüpfen.
In einem letzten Gespräch wo auch ein Projektverantwortlicher teil nahm, wurde das Thema Tests angesprochen. Darauf hin antwortete der Projektverantwortliche mit den Worten, wenn es zeitlich eng wird, verzichten wir auf die Tests. Dazu meine Fragen die ich nur so in den Raum stellen möchte:
1. Haben sie schon mal an einem Projekt mitgearbeitet wo es am Ende nicht zeitlich eng geworden ist?
2. Wie würden sie sich verhalten, wenn sie als Firma den Auftrag bekommen würden, würden sie trotzdem Tests schreiben?

Public Id Generator

Ein PublicIdGenerator macht in JSF an mehreren Stellen Sinn. Hier möchte ich kurz wo es Sinn machen kann, und warum. Zum andern zeige ich euch dann den Code für den PublicIdGenerator. Die Verwendung ist glaube ich selbsterklärend.

Wo kann man den Generator verweden

  • Wenn man die interne (Datenbank) Id einer Klasse (Entität) nicht nach außen geben will.
  • Wenn man noch gar keine interne Id einer Klasse hat, weil eben diese z.B. noch nicht persistiert wurde.

Im Wesentlichen lassen sich alle Anwendungsszenarien darauf zurück führen. Wie in einem vorhergehenden Artikel beschrieben, kann man diese Id für die Generierung eine Style-Class verwenden, und dann nochmal in einem CientBehavior um JavaScript-Code zu generieren. Oder man benötigt sie für die Identifiezierung eines Objectes in Comboboxen, da bietet sich ein einfacher Object Konverter an.

Generator Code

Der Generator ist eigentlich straightforward implementiert.

@ViewAccessScoped
@Named
public class PublicIdGenerator implements Serializable {
    private Map<String, Key> publicIds;
    private Map<Key, String> objects;
    protected PublicIdGenerator() {
        publicIds = new HashMap<String, Key>();
        objects = new HashMap<Key, String>();
    }
    public String generatePublicId(final Object object) {
        return generatePublicId(object.getClass(), object);
    }
    public String generatePublicId(final Class<?> clazz, final Object object) {
        final String publicId;
        final Key key = new Key(clazz, object);
        if (objects.containsKey(key)) {
            publicId = objects.get(key);
        } else {
            publicId = generateId();
            publicIds.put(publicId, key);
            objects.put(key, publicId);
        }
        return publicId;
    }
    private String generateId() {
        return UUID.randomUUID().toString();
    }
    public Object lookup(final Class<?> clazz, final String publicId) {
        Key key = publicIds.get(publicId);
        if (key == null) {
            throw new IllegalStateException("No entry for public id " + publicId + ". Possible manipulation detected.");
        }
        if (!clazz.equals(key.getClazz())) {
            throw new IllegalStateException("Invalid clazz " + clazz.getName() + " for public id " + publicId);
        }
        return key.getObject();
    }
    private static class Key implements Serializable {
        private final Class<?> clazz;
        private final Object object;
        Key(final Class<?> clazz, final Object object) {
            super();
            this.clazz = notNull(clazz, "Parameter 'clazz' must not be 'NULL'");
            this.object = notNull(object, "Parameter 'object' must not be 'NULL'");
        }
        Class<?> getClazz() {
            return clazz;
        }
        Object getObject() {
            return object;
        }
        //TODO Generate Equals and HashCode
    }
}

Dienstag, 8. Juli 2014

JSF Komponenten in JavaScript identifizieren, oder wie kommt man an die clientID einer Komponente

Generelle Patentrezepte gibt es auch hier nicht, aber ich möchte verschiedene Anwendungsszenarien aufzeigen, die Ihnen vielleicht helfen können einige knifflige JSF JavaScript Problemchen zu lösen.

Die einfachste Art an eine Komponenten Id zu kommen ist sicherlich folgende:

<h:inputtext binding="#{fullName}" value="#{fullName}">
</h:inputtext>
#{fullName.clientId}

Somit kann man einfach auf die Id zugreifen und diese z.B. in JavaScripts verwenden.

Für JavaScript bietet sich JQuery an, mit JQuery kann man leicht ein Dom Objekt identifizieren:

$('#{fullName.clientId}'.replace(/:/g,"\\:"))
    oder
    $('[@id=#{fullName.clientId}]')

Das Problem im ersten fall ist, dass alle ‘:’ escaped werden müssen, darum die replace Funktion, im zweiten Fall ist das nicht notwendig, da über das id Attribut gesucht wird.

Allerdings kommt man so nicht immer zum Ziel und ich gehe oft darauf über, über Klassen zu referenzieren, vorallem dann wenn man über eine Komponente innerhalb einer ui:repeat referenzieren will, ist das oftmals kein Fehler:

<h:inputText id="value"styleClass="#{field.name} #{page.id}"
value="#{field.value}"></h:inputText>

Zugreifen kann man dann über:

$('.#{field.name}.#{page.id}')

Das Ganze ist hier natürlich nur Theorie. In der Praxis wir man den JavaScript-Code z.B. über ein ClientBehavior rendern.

Freitag, 7. Februar 2014

Java Art - Puzzle 1

Java also can be art.
But what is the result of the execution.

Singleton the Highlander way

Singleton Implementierungen gibt es verschiedenste, aber möchte man wirklich nur eine Instanz eines Objektes sollte man es nach der Highlander Methode machen.
Egal ob man noch auf dem Memory Modell von java < 1.5 oder eben nach dem Fix von 1.5 arbeitet, diese Methode sollte immer funktionieren. Und wer hats erfunden? Bill Pugh in seiner arbeit an dem Java Memory Model.