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
    }
}