Bandnudeln mit Pfifferlingen in Tomaten-Sherry

Oh nein… Gestern nicht eingekauft. Und jetzt: Hunger. Gott sei Dank horte ich ja (haltbare) Lebensmittel in unseren Küchenschränken. Und so kann man dann doch noch schnell einen rauskochen. Zugegebenermaßen hatte ich keine frischen Pfifferlinge und musste daher zwei Dosen aufmachen. In der Verwendung macht das ganze aber keinen Unterschied.

Zutaten

1 Handvoll gehackte Walnüsse
1 große gewürfelte Zwiebel
400g dünne Bandnudeln
5 getrocknete Tomaten (auch eingelegt möglich)
4 mittelgroße Cocktailtomaten
400g Pfifferlinge
3cl Sherry
einige Thymianzweige
Lorbeerblatt, Rosmarinzweiglein, Salz, Pfeffer
etwas Schnittlauch zum Garnieren
2 EL gehackte Petersilie
1/2 - 1 Becher Sahne
optional noch etwas Waldpilzbrühe zum Würzen

Zubereitung

Zuerst die Walnüsse kurz in der heißen Pfanne ohne Öl ein wenig anrösten. Dann Öl in die Pfanne geben und die Zwiebeln dazuwerfen. Benutzt man eingelegte Tomaten kann man gut das Öl davon verwenden. Auch wenn es sich meist nicht um Olivenöl handelt, ist dieses Öl sehr aromatisch. Die Zwiebeln glasig werden lassen, und die Pfifferlinge und die zu feinen Stücken geschnittenen getrockneten Tomaten zugeben. Kurz und heiß braten, bis die Flüssigkeit der Pfifferlinge austritt. Mit Sherry ablöschen. Die Gewürze zugeben und warten, bis der Alkohol verflogen ist. Dann mit Sahne auffüllen und auf kleiner Flamme köcheln lassen. In der Zwischenzeit sollte das Nudelwasser kochen und die Nudeln am Besten schon darin. Sobald diese fertig ist, Nudeln auf einen Teller geben, Sauce darübergeben und mit geachtelten Tomaten und Schnittlauch garnieren.

Boykottiert Olympia (Version 2)!

Ich habe in den letzten Tagen meine Boykott-Idee weiter ausgebaut. Es bringt ja nichts, wenn ich einfach nicht bei den Spielen reinschaue. Da ich nicht zu den auserwählten Einschaltquoten-Bestimmungs-Haushalten gehöre, kriegt das ja niemand mit. Viel besser als nicht reinzuschauen und daher die Werbung nicht sehen, ist doch folgendes: Ich schaue möglichst viel und zwar vor allem Werbung und dann kaufe ich genau alle die Produkte nicht, die zu Olympia beworben werden. Diese Protestvariante sagt mir insgesamt deutlich besser zu, da ich einerseits die sportlichen Ereignisse anschauen kann, andererseits dem ganzen System die Grundlage entziehe. Für alle, die nicht genügend Zeit haben um Version 2 des Boykottes durchzuziehen, empfehle ich immer noch Version 1. Ich werde aber zusätzlich hier die Namen der Firmen veröffentlichen, die beim Olympia-Witz mitmachen.

Boykottiert Olympia (Version 1)!

Nachdem weder die Sportorganisatoren, noch die Sportler, Fernsehsender und Sponsoren die Stärke besitzen, die Spiele in der Parteien-Diktatur China zu boykottieren, habe ich heute beschlossen, dass ich das einfach selber machen muss. Olympia scheint ja ohnehin nur noch ein weiterer großer Spielball wirtschaftlicher Interessen zu sein. Also kuck ich mir den ganzen Witz einfach nicht an. Ich werde keine Bandenwerbung in den Stadien lesen, ich werde keine Fernsehwerbung in den Pausen sehen und keine Produkte von “offiziellen Sponsoren” kaufen. Sprich, die Kohle mit der das ganze Hamsterrad am Laufen gehalten wird, wird wenigstens bei mir keinerlei Wirkung zeigen.

Macht jemand mit?

Http-Get and encoding – the technical stone age

Every day another fuckup. Today it was encoding. Somehow our excel exports did not work for cities with umlauts. MUST be an encoding thing. Interesting: It did work pretty well on Jetty, but good ol’ Tomcat throwed me broken characters in my servletrequest.

I tried javascript escape and the result was that it didn’t even work in Jetty anymore. So after proper reading (http://jira.codehaus.org/browse/JETTY-113, http://jetty.mortbay.org/jetty5/faq/faq_s_900-Content_t_International.html), I accepted that you just CANNOT put umlauts in a get-request. You are able to escape it, but there is apparently no standard how the server retranslates it. But how to do it? First idea was to post it. Post uses the given encoding and all is fine. And why not doin’ it ajaxian? Well, because it just doesn’t work. The server is building the document and returns the binary data, but what do I do then? Tried putting it in a new document, but it just doesn’t work. After a few hours and some thousand curses, I ended up writing a hidden html-form, which looks really ugly, being the ONLY handwritten form in the whole javascript-driven application.

In short:

Never try to use special characters in Http-Get!

Forget using ajax to retrieve a file!

How to live with hibernate proxies

Stumbled over the fucking hibernate-CGlib-Proxies again. So here is what I found out and what helped me a lot:

If you load an object via the load()-method hibernate returns a proxy by default. As long as you don’t access any primitive property this thing won’t materialize. No prob, you might think and in most circumstances it isn’t. But consider this example:

class Plan {

// Cascade-type all, fetch lazy
private Plan lastVersion;
private boolean active

public Plan(Plan lastVersion){
if (lastVersion != null){
lastVersion.active = false;
}
this.active = true;
}
}

I don’t want to expose a public setter here to ensure the integrity of my versioning. Now the fuck-up:

Let’s say I get the current Plan from my Client and want to save it, the following code seems pretty straight forward:

// transactionmanaged service-method

Plan lastVersion = getHibernateTemplate().load(Plan.class, 4)

Plan currentPlan = new Plan(lastVersion);

getHibernateTemplate().saveOrUpdate(currentPlan);

BUT (as you might have guessed) this doesn’t work. At the end I do have two entries in my db both marked as active. Why that? lastVersion is a cglib-Proxy and hibernate does not recognize any changes that are not done by the setter. A possible workaround would be a private setter in the plan class, but somehow not even this is recognized by hibernate. So what are our options? One is to change the fetchmode of the lastversion. But doing so means sucking all previous versions from db when loading. Same happens when you mark the class @Proxy(lazy=false) as its a recursive structure. Played around with access types a while but that doesn’t have any influence. Finally I found out, that if you work with the “real” object instead of the proxy, it all works fine. To do so, you have to use the method get() instead of load(). Get() makes the db call instantly and returns a materialized object. In difference to the eager-fetchmode, all containing subtypes remain proxies.

That all leads to the questions, how we can make a clean separation between the ORM-Layer and our business-objects with hibernate. It’s just not transparent, when we got hibernate-specific-behaving objects flyin’ around in our domain-layer. And well, I don’t really have an answer on that…