All entries for November 2005
November 30, 2005
Some more hibernate fun :)
So I was debugging a problem with some code and I discovered this little gem:
Assume you have the following hierarchy:
– ClassInterface (use as proxy in mapping files)
– AbstractClass implements ClassInterface (used as the persistent class)
– ClassImpl extends AbstractClass (mapped as subclass of AbstractClass)
Load an instance of ClassImpl ala "ClassImpl ci = (ClassImpl)session.load(AbstractClass.class, someId)"
Now if you are going to compare two instances (using hashCode/equals) then guess what; if you implement that logic in ClassImpl it won't work. You must implement that logic in the abstract class that you have specified in the mapping file.
This is all to do with the joy that is cglib; even though the instance you are loading will eventually be a ClassImpl (based on the discriminator) CGLIB claims not to know that until it is fully initialised :(
OK, what happens if you try and load an instance of ClassImpl? Same thing. The equals method AbstractClass is used.
I have also run into situations with hibernate where code works if you step through, but not if you run it without debugging. I can only think that stepping through is maybe causing toString to initialise the object properly, hence subclass logic is utilised, but I cannot reproduce it.
Lame. Understandable, but lame.
To be fair; hibernate is great. It rocks, but it is not transparent* :)
November 29, 2005
Refigerator code. Nice.
Writing about web page http://www.butunclebob.com/ArticleS.BobKoss.RefrigeratorCode
Learned a new phrase today :)
Yeah; another buzz-word that I can use to confuse co-workers and pretend I am more intelligent than they are!
November 22, 2005
spring container + inner beans
Writing about web page http://www.springframework.org/docs/api/org/springframework/beans/factory/config/FieldRetrievingFactoryBean.html
So I recently had to wire up some spring managed beans with some constants. ….and I hadn't the foggiest on how to do it :)
Perusing the forums and the spring documentation, I found this little beauty
The problem is that you are not creating a new instance of the constant, you are merely referencing that constant, so the usual<bean id="uk.yourcompany.class.CONSTANT"/>
wouldn't work because you are asking spring to instantiate a new instance. You must do
<bean id="uk.yourcompany.class.CONSTANT" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"/>
To reference it, simply do
<bean id="yourBean" class="uk.yourcompany.class.SomeBean">
On a related note, if you do want to instantiate an inner class (so long as it is public), you cannot do
<bean id="yourBean" class="uk.yourcompany.class.OuterClass.InnerClass"/>
you must do
>bean id="yourBean" class="uk.yourcompany.class.OuterClass$InnerClass"/>
HTH.
November 11, 2005
Quick speed up for JBOSS
Writing about web page http://fishbowl.pastiche.org/2005/04/19/fun_with_jboss_performance
Very useful, although loosing all that debugging info makes me a little nervous ;)November 10, 2005
How much can a wooden shelf hold?
Hi all you clever structural engineering types :)
I have a 3.5ft recess into which I plan to put a shelf that will have to hold 200kg.
The shelf will be supported on three sides by a brick fireplace, a weight-bearing wall between me and the neighbours (long), and an external, weight-bearing wall.
It has to be attached to the wall, but how? Will 3×3" battons with 6" screws be sufficient, or should I look at some metal braces?
Please help :) I cannot seem to find anywhere that can tell me how to do this :(
P.S. It will be holding a fish tank, beneath it is another fish tank+sump on their own cabinet so it really cannot break :)
November 09, 2005
Crappy serialization :(
So I want to serialize an object which has a collaborator, i.e.:
class MyClass {
private final Collaborator collaborator;
public MyClass(final Collaborator theCollaborator) {
this.collaborator = theCollaborator;
}
}
Unfortunately MyClass needs to be serialized, but the Collaborator cannot be, so what do you think would happen if MyClass was changed:
class MyClass {
private final transient Collaborator collaborator;
public MyClass(final Collaborator theCollaborator) {
this.collaborator = theCollaborator;
}
}
OK, everything works, but as expected (despite the "final" keyword :)) the collaborator was null.
So what about:
class MyClass {
private final transient Collaborator collaborator = new SomeImplementationOfCollaborator();
}
Well I initially expected it to instantiate a new collaborator when deserializing, but no. It doesn't. It leaves it null.
Why doesn't it do it? Maybe because it might be serialized in an environment where SomeImplementationOfCollaborator cannot be found. Well surely throwing a ClassNotFoundException would be the right thing to do?
The really stupid thing is that this works:
class MyClass {
private static final transient Collaborator COLLABORATOR = new SomeImplementationOfCollaborator();
}
Go figure :)
Bah humbug.
P.S. Yes, I am sure if I read the appropriate bot in the java spec it would be absolutely clear and there is surely some really obvious reason. But why should I? (yeah, OK, maybe I should :))
Very funny :)
FAMOUS PUTDOWNS
A graceful taunt is worth a thousand insults.
– Louis Nizer
I feel so miserable without you, it's almost like having you here.
-Stephen Bishop
He is a self-made man & worships his creator.
– John Bright
He has all the virtues I dislike and none of the vices I admire.
– Winston Churchill
A modest little person, with much to be modest about.
– Winston Churchill
He has sat on the fence so long that the iron has entered his soul.
– David Lloyd George
Thank you for sending me a copy of your book; I'll waste no time reading it.
– Moses Hadas
He is not only dull himself, he is the cause of dullness in others.
– Samuel Johnson
He had delusions of adequacy.
– Walter Kerr
He can compress the most words into the smallest idea of any man I know.
– Abraham Lincoln
You've got the brain of a four-year-old boy, and I bet he was glad to get rid of it.
– Groucho Marx
I've had a perfectly wonderful evening. But this wasn't it.
– Groucho Marx
Some cause happiness wherever they go; others whenever they go.
– Oscar Wilde
He uses statistics as a drunken man uses lamp-posts…for support rather than illumination.
– Andrew Lang
Your manuscript is both good and original; but the part that is good is not original, and the part that is original is not good.
– Samuel Johnson
Better a witty fool than a foolish wit.
– Shakespeare
November 08, 2005
Looks promising
Writing about web page http://www-128.ibm.com/developerworks/java/library/j-aopwork11/
This looks like a very interesting article. Haven't read it yet, so this is just a reminder for me to read it, but it looks like it deals with a very interesting subject matter; unit testing aspects.