log4jdbc mit MySQL und Wildfly

log4jdbc mit MySQL und Wildfly

Kurzanleitung zur Aktivierung von log4jdbc mit slf4j auf einen Wildfly (10) und MySQL Datenbank

 

Download log4jdbc

https://code.google.com/archive/p/log4jdbc-log4j2/downloads

Empfehlung von Google:

  • If you are using Java 5, you should use the JDBC 3 version of log4jdbc-log4j2.
  • For Java 6, the JDBC 4 version of log4jdbc-log4j2.
  • For Java 7, the JDBC 4.1 version of log4jdbc-log4j2

Zum jetzigen Zeitpunkt für Wildfly 10 mit Java 8: log4jdbc-log4j2-jdbc4.1-1.16.jar

 

Wildfly Modul erstellen

1. Modul Verzeichnis für log4jdbc im Wildfly anlegen und Jar kopieren

Verzeichnisstruktur erzeugen: %wildfly-base%\modules\system\layers\base\net\sf\log4jdbc\main\

log4jdbc-log4j2-jdbc4.1-1.16.jar unter main ablegen

2. module.xml erzeugen

<module xmlns="urn:jboss:module:1.1" name="net.sf.log4jdbc">
 <resources>
   <resource-root path="log4jdbc-log4j2-jdbc4.1-1.16.jar"/>
 </resources>
  <dependencies>
   <module name="javax.api"/>
   <module name="javax.transaction.api"/>
   <module name="org.slf4j"/>
   <module name="com.mysql"/> 
  </dependencies>
</module>

Achtung: Das Module „com.mysql“ muss ebenfalls konfiguriert sein. Siehe Beispiel MySQL-Module.xml

 

Standalone.xml anpassen

Backup nicht vergessen!

System-Properties hinzufügen

 <system-properties>
   <property name="log4jdbc.spylogdelegator.name" value="net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator"/>
   <property name="log4jdbc.sqltiming.warn.threshold" value="1000" />
   <property name="log4jdbc.sqltiming.error.threshold" value="5000" />
 </system-properties>

Abfragen die länger als 1000ms dauern, werden auf dem warn level geloggt und Abfragen die länger 5000ms dauern auf dem error level.

 

Logger categories hinzufügen

<logger category="jdbc">
 <level name="WARN"/>
</logger>
<logger category="jdbc.sqltiming ">
 <level name="INFO"/>
</logger>

 

Datasources anpassen

Die <connection-url> wird ergänzt um ein :log4jdbc und der Treiber wird ausgetauscht mit log4jdbc.

z.B.

... 
<connection-url>jdbc:log4jdbc:mysql://localhost:3306/MyDatabase</connection-url>
<driver>log4jdbc</driver>
....

 

Treiber hinzufügen

 <driver name="log4jdbc" module="net.sf.log4jdbc">
   <driver-class>net.sf.log4jdbc.sql.jdbcapi.DriverSpy</driver-class>
 </driver>

 

Umleiten der Logmelden nach sql-timing.log

Zum Umleiten der Logmeldungen muss die Logger Kategorie angepasst werden und ein Log-Handler hinzugefügt werden.

Handler

<periodic-rotating-file-handler name="SQL_TIMING">
  <level name="ALL"/>
  <formatter>
    <pattern-formatter pattern="%d %-5p [%c{1}] %s%E%n"/>
  </formatter>
  <file relative-to="jboss.server.log.dir" path="sql-timing.log"/>
  <suffix value=".yyyy-MM-dd"/>
  <append value="true"/>
</periodic-rotating-file-handler>

 

Angepasster Logger

<logger category="jdbc.sqltiming" use-parent-handlers="false">
  <level name="INFO"/>
  <handlers>
    <handler name="SQL_TIMING"/>
  </handlers>
</logger>

 

Sonstiges

Beispiel MySQL-Module.xml

<module xmlns="urn:jboss:module:1.1" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-5.1.35-bin.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>

Quellen

  • http://sfleiter.github.io/blog/2013/12/08/jboss-datasource-proxy-with-log4jdbc-log4j2/
  • https://code.google.com/archive/p/log4jdbc-log4j2/

PHP Remote Debugging mit XDebug

PHP Remote Debugging mit XDebug

Serverseitige Konfiguration

Schritt 1: XDebug installieren

apt-get install php5-xdebug

Schritt 2: php.ini / xdebug.ini editieren
zend_extension      = /usr/lib/php5/20090626/xdebug.so
xdebug.remote_enable = On
xdebug.remote_port   = 9000
xdebug.remote_log    = <Pfad zur log-Datei auf dem Server>
xdebug.remote_host   = <IP auf dem die IDE laufen soll>

Den richtigen Pfad zur zend_extension kann der erzeugten xdebug.ini aus /etc/php5/conf.d/ entnommen werden. Diese Datei lässt sich nun auch mit den oben beschriebenen Einträgen erweitern.

Werden die php.ini’s durch Froxlor pro Seite verwaltet, können die Einstellungen natürlich auch dort vorgenommen werden. Aber denk dran: Froxlor übernimmt die Einstellungen per Cronjob. Ein Server Neustart bringt an der Stelle also nichts, um mal eben schnell die Einstellungen zu testen.

Soll das Remote Debugging nicht nur für einen einzelnen Benutzer zugänglich sein (remote_host), sondern auch für mehrere, benötigt ihr noch folgenden Eintrag in der .ini:

xdebug.remote_connect_back = On

Der remote_host wird dann ignoriert und es werden alle Hosts zugelassen (Achtung: Sicherheit!)

Schritt 3: Port-Freigabe am Router

Etwas das ich sehr gerne vergesse und erst viel zu spät dran denke: Den verdammten Port (hier: 9000/tcp) beim Router freigeben und auf den Rechner mit der IDE weiterzuleiten.

Debugging

Im Browser

Um das Debugging im Browser zu aktivieren, empfiehlt sich ein Plugin/Addon für den jeweilig benutzten Browser zu installieren. Für Firefox z.B. das  Addon „The easiest Xdebug„. Um nun eine Debug-Session zu ermöglichen, muss der kleine grüne Käfer des Addons in der Toolbar angeklickt werden.

In der IDE

In der Toolbar von beispielsweise PhpStorm, befindet sich ein kleiner Telefonhörer, wenn dieser aktiviert wird, oder der längere Weg über Run -> Start Listening for PHP Debug Connections gewählt wird, horcht die IDE auf den eingestellen Port (Standard wieder 9000) und hält an den Breakpoints an, wenn diese über den Browser getriggert werden.

Hilfreiche Quellen

* http://xdebug.org/docs/remote
* http://mimi.kaktusteam.de/blog-posts/2012/01/remote-debugging-mit-phpstorm-und-xdebug/

https://www.youtube.com/watch?v=LUTolQw8K9A

Probleme mit Java Programmen im Vollbildmodus unter Gnome3

Java Programme unter Gnome 3 scheinen Probleme zu haben, wenn sie im Vollbildmodus laufen. Das Problem macht sich so bemerkbar, dass Menüs aller Art nicht mehr richtig bedienbar sind mit der Maus.

Die meisten Programme nerven mich, wenn sie nicht im Vollbildmodus sind. Deswegen ist maximieren auch das Erste, was ich nach dem Starten von einem Programm mache. Aus diesem Grund hat es recht lange gedauert, bis ich rausgefunden hatte, dass das Problem scheinbar nicht an Java liegt. Denn die Probleme treten sowohl mit dem openJDK, als auch mit Oracle Java auf.

Zum Glück laufen die Programme nicht maximiert alle super. Also, wer ebenfalls Probleme hat und bereits stundenlang versucht die Programme mit anderen Javaversionen und anderen Einstellungen zum laufen zu bringen -> einfach mal den Vollbildmodus verlassen.

(Konfiguration: Gnome 3.6.2 / Ubuntu 12.10)

E-Mail-Verschlüsselung mit Thunderbird und S/MIME

E-Mail-Verschlüsselung mit Thunderbird und S/MIME

[break]

Vorwort

Anlässlich eines neuen c’t Artikels über Mailverschlüsselung mit S/MIME (c’t Ausgabe 18 [13.08.2012]) habe ich hier ein kleines Bildertutorial zusammengestellt. Dabei wird zuerst ein Zertifikat von Trustcenter.de beantragt und dieses dann anschließend im Thunderbird eingebunden. Danach können E-Mails unterschrieben und entschlüsselt werden.

Vor einiger Zeit hatte ich mich schon mal mit diesem Thema beschäftigt. Damals hatte ich meine Mails aber per PGP verschlüsselt. Das war auch „pretty good“ aber im Vergleich mit S/MIME doch mit mehr Aufwand verbunden (zusätzliche Programme und Plugins). Nach einer Neuinstallation meines PCs waren dann erst mal andere Dinge wichtiger, so dass ich die Verschlüsselung leider wieder aus den Augen verloren habe. Der c’t Artikel hat mich wieder auf den Boden der Tatsachen zurück geholt:

  • E-Mail -> Meistgenutztes Kommunikationsmedium -> von Grund auf unsicher
  • Google Mail -> maschinelle Durchforstung der Mailbox -> trotzdem erfolgreichster Mail-Service
  • Privatleute müssen mehr Initiative zeigen -> Nutzung von s/mime bedeutet keinen großen Aufwand

Da ich auch hauptsächlich Google Mail nutze und damit auch sehr zufrieden bin, möchte ich nun auch wieder mit gutem Beispiel vorangehen und Google das Mitlesen verbieten. Sorry Google, die Betreffzeile muss dir von nun an genügen Shame

Für Hintergrundinformationen zu S/MIME möchte ich direkt auf den guten Artikel im Thunderbird-Wiki verweisen, der evtl. auch bei auftretenden Problemen weiterhelfen kann. Für den Unterschied zwischen PGP und S/MIME empfehle ich diesen Artikel.

» Weiterlesen..

Microtek ScanMaker 5950: Hardware Error

Der ScanMaker 5950 Microtek ist ein günstiger Dokumentenscanner, der bei mir schon sehr lange seinen Dienst tut. Seit ein paar Tagen verweigerte er diesen aber mit der Meldung: Hardware Error.

Genauer Tathergang war so, dass bei der Benutzung des Dokumenteneinzugs nur die erste Seite gescannt wurde. Bei der zweiten Seite wurde dann nach geraumer Zeit der Scanvorgang abgebrochen und die Fehlermeldung „code: -3, scanner hardware error“ angezeigt.

Da ich keine Lösung per Google finden konnte, möchte ich nun hier kurz erläutern, wie ich das Problem wieder in den Griff bekommen habe.

Das Bild zeigt den ScanMaker mit geöffneter Haube. Der Pfeil markiert das Problem. Eine der Rollen hatte sich gelöst. Das Papier konnte dadurch wahrscheinlich nicht mehr einheitlich eingezogen werden, was den Scanner seinen Dienst verweigern ließ. Dabei wurde das Papier gar nicht so schräg eingezogen, als dass mir das sofort aufgefallen wäre.

Um die Rolle wieder zu befestigen, muss der Plastikkasten in dem die Rolle per Feder gehalten wird, unten abgeschraubt werden. Dabei kann man dann auch feststellen, dass es sich hier um extrem billiges und brüchiges Plastik handelt. Mehrere Plastikteile sind angeknackst oder auch schon abgebrochen, obwohl es das Gerät keinen Erschütterungen ausgesetzt war. Die Feder die die Rolle hält, habe ich nun einfach so wieder eingesetzt (längliche Metallbeine an der Feder einfach durch die Löcher fädeln und unterharken) ohne die speziellen Haltevorrichtungen, da diese abgebrochen waren. Die Rolle sitzt dadurch strammer als die Anderen, was aber nicht zu stören scheint. Der Scanner arbeitet jetzt jedenfalls wieder normal.

javax.servlet.ServletException: Verwalteter Bean … kann nicht erstellt werden.

Wieder eine Exception bei der die Lösung recht einfach sein kann. In meinem Fall lag es einfach daran, dass bei der betroffenen Bean nicht alle Setter und Getter vorhanden waren.

DefinitionException

Tritt folgende Exception schon während des deployens auf,  liegt es wahrscheinlich am fehlenden implements Serializable bei einer Bean.

Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-000072 Managed bean declaring a passivating scope must be passivation capable. 

JSF mit Primefaces und Eclipse

Damit JSF Seiten hübscher aussehen, gibt es viele Frameworks. Ich bin nun erstmal bei den Primefaces hängen geblieben.

Leider hatte ich das Problem, obwohl ich die primefaces-3.3.1.jar in den Buildpath von Eclipse aufgenommen hatte, dass die Primefaces Komponenten (z.B. der Button) nicht angezeigt wurden.

Die Lösung ist sehr einfach. Die primefaces-3.3.1.jar muss ebenfalls in den Ordner  WebContent/WEB-INF/lib kopiert werden.

Exception beim Deployen mit Eclipse und JBoss

Treten folgende Exceptions beim Deployen eine Projektes auf, dann hat bei mir die Lösung weiter unten geholfen. Ausgangssituation ist ein Eclipse Indigo mit JBoss AS 7.1.

Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
.....
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: shop1] Unable to build EntityManagerFactory

 

Lösung: 

Die persistence.xml im Verzeichnis META-INF muss im selben Package zu finden sein, in dem auch die Entities liegen.

Genaueres unter: http://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/ch01s02s01.html

Innenleben eines Nano USB-Sticks

Ich hatte heute vor aus einem defekten Nano USB Stick einem Adapter zum Aufladen eines Headsets zu basteln. Der original Adapter ist leider nicht mehr auffindbar und es gibt ihn auch nicht als Ersatzteil.

Gespannt wo der Nano Stick seinen erwartungsgemäß kleinen Speicherchip sitzen hat, habe ich also das Gehäuse geöffnet. Als ich das dünne schwarze Ende einer  Micro SD sah, habe ich nicht schlecht gestaunt. Im Prinzip besteht der Stick also aus einer kleinen Kartenleser Platine und einer Micro SD Karte.

Das Tolle ist, die Speicherkarte funktioniert noch. Das nächste Mal also defekte Nano Sticks nicht direkt wegwerfen, sondern demontieren!

Tipp: Ich habe um das Gehäuse zu öffnen, das Plastikende in einen kleinen Schraubstock eingeklemmt und gedreht bis es (ziemlich) sauber gebrochen ist.

[break]

Nachtrag:
Der Adapter sieht in übrigen jetzt so aus:

Wie immer wenn ich etwas bastle: eine Augenweide. Leider hatte ich keine anständigen Kontakte, so dass ein Gummiband den nötigen Kontakt sicherstellen  muss.