Commons-IO: DirectoryWalker

Commons-IO bzw. allg. Apache Commons ist eine schöne Ansammlung von nützlichen Bibliotheken und Funktionen. Darunter ist auch Commons-IO zu finden. Daraus will ich heute eine spezielle Lösung vorstellen. Hat man folgendes Problem: Möchte man einen Ordner, inklusive dessen Unterordner, nach bestimmten Dateien suchen und dann diese vielleicht nach Last-Modified sortiert, bietet Commons-IO eine Lösung an.

Um den/die Ordner durchzulaufen existiert ein DirectoryWalker. Um den abstrakten DirectoryWalker nutzen zu können könnte man z.B. eine folgende Implementierung nutzen:

[Read More]
apache  java  util 

Java JMS MQ Beispiel

Vor einiger Zeit wurde MQ installiert. Nun folgt endlich ein Beispiel wie man in Java MQ ansprechen kann. Dabei wird JMS (Java Message Servic) ohne JNDI (Java Naming and Directory Interface) verwendet. Ein JNDI-Beispiel folgt in einem späteren Blog.

Das Beispiel zeigt wie man mittels JMS eine MQ Nachricht verschicken und empfangen kann. Die Architektur steht hier nicht im Vordergrund, das nur die MQ Kommunikation.

Für das Versenden von MQ Nachrichten ist ein MQQueueSender verantwortlich, entsprechendes gilt für das Empfangen (MQQueueReceiver). Da bei MQ mehrere Clients Nachrichten verschicken können und jedem Client nur seine Antworten interessieren, gibt es die Möglichkeit dem Receiver einen Filter (Selector) anzugeben. Mit diesem Selector werden dann nur die MQ Nachrichten geliefert (empfangen), welche die Kriterien erfüllen. Hier lohnt es sich (nur) Correlation und Message ID zu nutzen, da andere Eigenschaften zu langsam in der Filterung sind. Bei der Correlation ID muss noch das Präfix ‘ID:’ angehangen werden, welches bei der Message ID schon automatisch vorhanden ist.

[Read More]
java  jms  mq 

SQL: Constraints hinzufügen

Beim Leeren von Datenbank-Tabellen müssen immer die vorhandenen Constraints beachtet werden. Das Löschen von Tabellen-Zeilen, obwohl andere darauf verweisen, ist nicht erlaubt (referenzielle Integrität). Versucht man es doch (mittels TRUNCATE [1]) kriegt man eine Fehlermeldung. Hier kann man nun entweder DELETE Statements [2] nutzen, was länger dauern kann, oder man verwendet doch TRUNCATE und muss die vorhandenen Constraints löschen.

ALTER TABLE TableName DROP CONSTRAINT FK_ConstraintName

Durch das Löschen aller Constraints der betroffenen Tabelle kann diese dann mit TRUNCATE geleert werden. Zum Hinzufügen der Constraints:

[Read More]
dev  sql 

Cache method results with Ehcache and Spring

Caching ist eins der Aspekte welches man nicht unbedingt direkt in der Businesslogik verankern möchte. Hierzu empfehlt es sich eine AOP-Lösung. Mit AOP kann die Funktionalität einer Cache-Realisierung genutzt werden. Eins der populärsten Cache-Provider ist Ehcache.

In dem Umfeld von Spring kann man Ehcache folgendermaßen integrieren:

Man nutzt das aus dem nicht mehr gewarteten spring-modules-Projekt das cache-Modul. Ja, spring-modules wird durch Spring-Extensions abgelöst, jedoch werden nicht alle Projekte übernommen. D.h. manche Unterprojekte (wohl auch Cache) werden nicht nach Spring-Extensions übernommen. Wo da der Sinn liegt, ist wohl nur den Betreibern klar.

[Read More]

JSF: Method not called

Java Server Faces (JSF) ist eine schöne Technologie für den Web-JEE-Bereich.

Es bietet eine gute Möglichkeit die Entkopplung der einzelnen Schichten einzuhalten und mit der Kombination von Facelets, kann sogar ein Grafiker einfacher damit arbeiten.

Bei JSF sind bestimmte “Aktionen” einer Methode zugeordnet. (Methode aus dem ManagedBean, normale Klasse welche in faces-config.xml festgeleg wird, bzw. bei Spring-Einsatz kann man das auch weglassen). D.h. eine Aktion “Kunde anlegen”, welches als Button dargestellt wird, wird mit der Methode CustomerController.add() gebunden.

[Read More]

WebSphere + JSF 1.2 + Facelets

Möchte man ein JSF Projekt unter IBM WebSphere Application Server 6.x nutzen, muss man ein paar Sachen bedenken:

Wie man bei [1] sehen kann, unterstüzt WebSphere 6.1 Servlet 2.4 und JSP 2.0 - das entspricht etwa einem Tomcat 5.5.x [2]. Möchte man nun JSF 1.2 (mittels MyFaces 1.2.x) nutzen hat man da ein kleines Problem. JSF 1.2 benötigt nämlich Servlet 2.5, JSP 2.1 und Java 5 oder später. Genau das kann WebSphere 6.1 mit seiner integrierten JSF 1.1 Implementierung nicht bieten.

[Read More]

IE: Change Event und Autocompletion

Im IE (7) gibt es Probleme mit dem Change-Event bei einem Input-Feld, wenn dies auch Autocompletion von script.aculo.us[1] beinhaltet.

Wird ein Input-Feld bezüglich den Veränderungen beobachtet ($('field').observe('change', ...')) wird beim IE dieser Event dann gefeuert, wenn der Focus das Feld verlässt.

Hat das Input-Feld nun auch Autocompletion, wird dieser Event nicht mehr gefeuert, wenn, der Nutzer mit Tab oder Enter ein Eintrag aus der Autocompletion-Liste auswählt.

Hier muss man den Event selbst feuern, wenn der Eintrag aus der Autocompletion-Liste ausgewählt wurde. Da man bei Prototype keine native Events abfeuern kann, nutzt man die eigenen Events [2] nutzen.

[Read More]

JavaFX 1.0

Seit dem 04.12.2008 gibt es nun endlich die Version 1.0 von JavaFX. JavaFX ist eine Plattform um Rich Internet Applications für verschiedene End-Geräte zu erstellen. Im Idealfall realisiert man eine Anwendung, die dann später im Browser, auf dem Desktop und auf dem mobilen Gerät läuft. Für weitere Details sei auf die JavaFX-Seiten verwiesen [1] und [2].

Überblick

Um JavaFX-Anwendung zu nutzen, braucht man standardmäßig nur die aktuelle Java Version. Hier ist Java 1.6.0_11 [3] passend, da diese Version die Fähigkeit anbietet, Applets auf den Desktop zu ziehen. Beim ersten Aufruf einer JavaFX-Anwendung werden die Runtime-Bibliotheken beim ersten Mal runtergeladen, wenn sie nicht vorhanden sind. Bei entsprechender Implimentierung der JavaFX-Anwendung (was ja ein Applet ist), kann man sich das Applet auf den Desktop ziehen. Schließt man dann den Browser, bekommt man die Möglichkeit ein Verweis auf den Desktop zu erstellen, um später das Applet - und nur das Applet, nicht auch den Browser - wieder zu nutzen.

[Read More]

JavaFX 1.0 Example

Im letzten Beitrag habe ich kurz JavaFX vorgestellt. Zu den theoretischen Daten folgt nun ein kleines praktisches Beispiel.

Das Beispiel basiert auf das Tutorial von SUN [1] und wurde um die Eigenschaft erweitert, dass das Applet auch auf dem Desktop verwendet werden kann.

Das Beispiel erstellt eine analoge Uhr, welche man sich auf den Desktop ziehen kann. Der Fokus liegt auf die Implementierung und nicht auf jegliche graphische Feinheiten.

[Read More]

Prototype each(), IE und null

Bei der Arbeit mit JavaScript kommt man irgendwann in die Situation durch ein Array zu iterieren. Dabei nutzt man nicht immer einfach indizierte Arrays, sondern oft auch Arrays mit Lücken in den Indizes oder sogar assoziative Arrays. Diese letzten Varianten kann man eigentlich genauso durchlaufen, wie die erste, wenn da nicht der IE wäre. Der IE hat Probleme mit Lücken in Arrays. Wie man im folgenden Listing sehen kann, gibt es beim Firefox fast die erwartbaren Ergebnisse. Nur fast. Denn beim ersten Output stimmen die Indizes nicht. Das gleiche Problem hat man jedoch auch beim IE. [lang=js] var ar1 = new Array(); ar1[2] = ‘A’; ar1[13] = ‘B’; ar1[23] = ‘C’; var out = ‘’; ar1 = ar1.compact(); ar1.each(function(item, index) { out += index + ‘: ’ + item + ‘, ‘; }); // => out = 0: A, 1: B, 2: C, out = ‘’; for(i in ar1) { if( (typeof ar1[i]) != ‘function’ ) out += i + ‘: ’ + ar1[i] + ‘, ‘; } // => out = 2: A, 13: B, 23: C, var ar2 = { a: ‘Part_1’, b: ‘Part_2’, sum: ‘Part_1_2’ }; out = ‘’; for(a in ar2) { out += a + ‘: ’ + ar2[a] + ‘, ‘; } // => out = a: Part_1, b: Part_2, sum: Part_1_2, [/lang]

[Read More]