scireum research labs

information management made easy

JMX remote unter Linux (Ubuntu) aktivieren

Dienstag 3. Februar 2009 von mha

Unter Windows ist JMX remote eigentlich kein Problem man muß lediglich die nötigen Parameter übergeben und schon läuft es:

-Dcom.sun.management.jmxremote (schaltet JMX überhaupt erst mal ein)
-Dcom.sun.management.jmxremote.port=2307 (Der Port der verwendet werden soll...kann natürlich geändert werden)
-Dcom.sun.management.jmxremote.ssl=false (schaltet SSL ab)
-Dcom.sun.management.jmxremote.authenticate=false (schaltet die Benutzerprüfung ab)

Ich gehe hier nicht auf die Verwendung von SSL und Authentifikation ein. Das findet man recht übersichlich auch auf der Sun Seite und für Testzwecke kann man es der Einfachkeit halber auch mal deaktivieren.

Unter Ubuntu reicht diese Konfig NICHT aus.
Man muß IPTABLES zähmen das es den Port durchläßt mit:
iptables -I INPUT -s {Hostname oder IP des eigenen Rechners} -p tcp --destination-port {jmxremote-port} -j ACCEPT
Alternativ kan man für den Hostnamen auch 0/0 angeben dann darf jeder.

Entscheidend ist dann noch die Hostsdatei. Der Hostname darf nicht nach 127.0.0.1 auflösen weil damit RMI irgendwie nicht klarkommt.
Als einfach die /etc/hosts abändern auf:
{Server-IP} {Hostname}
127.0.0.1 localhost

alles andere kann man mit ‘#’ auskommentieren.

Dann sollte es eigentlich funktionieren.

Kategorie: Linux, Ubuntu, java | Keine Kommentare »

jOFC2 - Java API for Open Flash Chart 2

Freitag 2. Januar 2009 von mha

Noch in den letzten Zügen des alten Jahres haben wir ein OpenSource Projekt gegründet. Bei JOFC2 handelt es sich um eine Java API für OpenFlashChart 2 (kurz OFC). OFC bietet einem die Möglichkeit relativ unkompliziert Daten in Diagrammen auf Basis von Flash darzustellen. OFC steht seit der Version 2 unter der LGPL Lizenz und ist somit auch für kommerzielle Entwickler interessant. Die Daten übergibt man per JSON an OFC. Genau hier setzt unsere Bibliothekt an. Mit der API von JOFC2 kann man ein Chartobjekt erstellen, dieses mit Daten füttern (Linien, Balken, X- und YAchsen, Titel usw.) und dann über die toString() Methode alles als JSON String ausgeben.

Links:

OpenflashChart: http://teethgrinder.co.uk/open-flash-chart-2/
jOFC2 (Java API): http://code.google.com/p/jofc2/
weitere Infos über JSON: http://de.wikipedia.org/wiki/JSON

Kategorie: Java EE, Reporting, java | Keine Kommentare »

Erhöhen der Softwarequalität mit Apache ANT und einem Builder für Eclipse

Samstag 19. Januar 2008 von aha

Der folgende Beitrag beschäftigt sich mit dem Problem des “Logging” in Java-Programmen und wie dieses elegant mit Apache ANT (http://ant.apache.org) und Eclipse (http://www.eclipse.org) gelöst werden kann.

Gerade im JEE-Umfeld möchte man vorallem während der Entwicklungs- und Test-Phase viele Programmausgaben um Fehler schneller finden zu können. Da diese Ausgaben auch beim Fehlersuchen in Produktiv-Systemen nützlich sind, lässt man diesen Code gerne in der ausgelieferten Version und bemüht sogn. Logging-Bibliotheken (z.B. http://logging.apache.org/log4j) welche die Ausgaben genau steuern. Trotzdem ist der Produktiv-Code vermischt mit Statements der Art:
if (logger.isDebug()) {
logger.debug(i + “ Requests processed);
}

Da dies den eigentlichen Code unleserlich macht, verwenden viele Unternehmen AspectJ (http://www.eclipse.org/aspectj) welches den Code beim Kompilieren oder Programmstart modifiziert und solche Debug-Ausgaben “hineinwebt”. Leider muss man hierfür eine teils komplexe Sprache lernen um die Stellen (Pointcuts) zu beschreiben und man verliert die Lokalität (den Code den man im Editor sieht ist nicht der Code der ausgeführt wird). Oft ist es aber so, dass man zum einen einen Kommentar schreibt, warum was passiert und gleichzeitig eine Log-Ausgabe, damit man die Ausführung verfolgen kann:

if ((doSomething() && isUserAuthorized()) || specialCondition()) {
//This code is executed because of ….
if (logger.isDebug()) {
logger.debug(Comment…
+
(User was authorized:
+isUserAuthrized()
+”, SpeicalCondition:
+specialCondition()
+”)
);
}
}

Die Idee ist nun, spezielle Kommentare einzuführen, die vor dem eigentlichen Kompilieren in Log-Statements umgewandelt werden:
if ((doSomething() && isUserAuthorized()) || specialCondition()) {
///Comment….
///user was authorized: {isUserAuthorized()}
///special condition: {specialCondition()}

}

Diese Kommentare beginnen mit /// und alles was zwischen { und } steht, wird als Java-Code interpretiert. Vor dem Kompilieren kann dieses Statement dann zu if (logger.isDebug()) { logger.debug(”“); } umgebaut werden. Nun wird der Code zwar immernoch “heimlich” verändert, aber man sieht die exakte Stelle und selbst die Zeilenangaben des Debuggers sind korrekt, man kann also auch den erzeugten Kommentar “debuggen”.

Mit Hilfe von ANT ist dies sehr einfach zu realisieren indem man einen eigenen Task definiert (s. Beispielquelltext) der die Umwandlung durchführt. Die angehängte build.xml definiert einen eigenen Builder für Eclipse-Projekte, der alle Dateien im Unterverzeichnis “src” umwandelt und nach “bin” kompiliert.

Die Umwandlung wird mit dem “commentlog”-Task durchgeführt wobei “toDir” das Zielverzeichnis angibt und “loggerMethod” beschreibt, wie die Ausgabe stattfinden soll. Der $ wird später durch den erzeugten String asugegeben. In dem Beispiel wird immer alles nach System.err geschrieben:

<commentlog toDir=”${PROJECT}\bin\tmp” loggerMethod=”System.err.println($);“>
<fileset dir=”src” includes=”${FILES_CLEANED}” />
</commentlog>

Um den Builder für ein Eclipse-Projekt zu aktivieren, muss man das angehängte build.xml und commentslog.jar in das Projekt kopieren. Danach öffnet man den Eigenschaften-Dialog für das Projekt (Alt+Enter), Wählt “New” und dann “Ant-Builder” aus. In dem Kartenreiter “Main” muss man nun das Buildscript und das Basisverzeichnis auswählen. Als Buildscript die angehängt build.xml auswählen und als Basisverzeichnis das Projekt selbst auswählen:

Builder hinzufügen


Builder hinzufügen

Dann im Kartenreiter “Targets” die Build-Targets auswählen. Für “After a Clean”: rebuild, für “Manual-” und “Auto Build”: build und für “During a Clean”: clean.


Builder hinzufügen

Im Kartenreiter Properties sollte man noch die folgenden Werte hinzufügen:

build.compiler=org.eclipse.jdt.core.JDTCompilerAdapter
FILES=$build_files:a,c,f}
PROJECT=${build_project}


Builder hinzufügen

Abschließend sollte man bei “Build Options” noch die “Relevanten Dateien” auswählen, da der Builder sonst immer zweimal angestoßen wird (einmal bei der Änderung und einmal für die in bin/tmp generierte Datei). Man muss also “Specify working set of relevant resources aus” und selektiert dann nur das “src”-Verzeichnis.


Builder hinzufügen

Nun kann man beliebigen Java-Code mit “///” Komentaren versehen die zu Log-Statements umgebaut werden. Der Code sollte jedoch innerhalb einer Methode sein, sonst wird unkompilierbarer Code erzeugt. Außerdem werden nur Zeilen-Kommentare umgesetzt, d.h. vor /// darf nichts stehen. Die beiden Angehängten Java-Dateien welche die ANT-Tasks implementieren, verwenden solche Kommentare zur Demonstration:


Builder hinzufügen

Alle Quellen und eine vorkompilierte jar finden Sie hier: Beispielquelltext

Kategorie: Java EE | Keine Kommentare »