Archiv für den Monat: Januar 2011

Ubuntu und HP-MF1522-Fax

Man mag es nicht glauben, besonders wenn man die frühen Drucker-Tage von Linux mit allen Irrungen und Wirrungen kennt.
Aber es war fast einfacher unter Ubuntu das HP-Multifunktionsgerät zum Laufen zu bekommen als unter XP.
Vielmehr kann ich problemlos Faxe verschicken, welches mir unter XP verwärt geblieben war.

Einfach die HPLIB-Toolbox installiert, um damit den Fax-Support nebst „Treiber“ zu erhalten.
Bei Druckversuch wird ein Wizard gestartet, um den Fax-Drucker einzurichten. Gleich im Netz gefunden, ausgelesen, konfiguriert und schon gedruckt. Keine 10 Minuten.
Also ich bin mittlerweile begeistert.

Fazit: Linux/Ubuntu ist vollständig erwachsen geworden. Da nimmt man manche Hakeligkeit in Kauf, die jedem Betriebssystem eigen ist.

Calendar.isLenient()

Es gibt leider bei Date und Calendar in Java eine Menge Ungemach. Hierzu gehört auch das Aufweichen der Validität von Datumsangaben Leniency genannt.
In all cases, arguments given to methods for these purposes need not fall within the indicated ranges; for example, a date may be specified as January 32 and is interpreted as meaning February 1. java.util.Calendar

Aber hier haben die Designer in Java zwei Stolpersteine eingebaut.

1. isLenient() ist standardmäßig auf true(!) gesetzt. Das gibt bei fehlerhafter oder fehlender Validierung durch die höheren Layer lustige Effekte.

Gut, denkt man sich, dann mache ich einen Wrapper und kann hierbei noch diverse andere Klippen gleich mit umschiffen. Dann kommt aber manchmal ein Stolperstein 2 zum Tragen.

2. Und dieses ist, dass java.util.Calendar.isLenient() auch wirklich manchmal eingeschaltet werden muss. Weil es sonst (zumindest unter einer Java 1.5-Version, die wir just auch produktiv eingesetzt haben) eine interne Exception gibt, wenn nach mehreren SetXXX-Aufrufen der interne Calendar-Status bei periodEnd.getTime(); nicht mehr konsistent ist. Unter Java 1.6 tritt dies nicht mehr auf.

Lift auf neues Hibernate 3.6.0.Final

Für ein Lift reichte im Wesentlichen folgender POM-Eintrag im Parent-POM

<!-- Core and annotations -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.0.Final</version>
</dependency>
<!-- Cache provider second level cache, we use NoCache -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.2.0</version>
</dependency>
<!-- need to run with hibernate -->
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.8.0.GA</version>
</dependency>

Die Basis-Annotations sind schon im Core-Paket enthalten. Dies macht es einfacher.
Allerdings muss man die entsprechenden Abhängigkeiten aus dem JBOSS-Repository holen: https://repository.jboss.org/nexus/content/groups/public/

Für ein Logging musste ebenfalls angepasst werden auf eine neue API


<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jcl</artifactId>
<version>1.6.1</version>
</dependency>

Um für z. B. Tests das Caching abzuschalten, wird Folgendes eingetragen:


<prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
<prop key="hibernate.cache.use_query_cache]">false</prop>

Siehe hierzu auch z. B.: stackoverflow