I had a bit of a performance problem with some pages that I have tracked back to my use of '.containsKey()' on the Seam messages Abstract Map.
eg:
@In
Map<String, String> messages; //This is the Seam messages bundle
public void aMethod() {
if(messages.containsKey("key.mykey")) {
//do something
}
}
As containsKey isn't a method of the AbstractMap in org.jboss.seam.international.Messages, it goes into a mad run through all sorts of methods (ELResolver, Pages.java etc). The result of this is that a containsKey() on messages takes over 800 times longer than a get(). For 1800 properties in my messages.properties file it takes about 800ms compared to under 1ms for a get().
Nice to have found this as I had no idea that it would have such an impact. The easy solution would be to add a containsKey() to the AbstractMap in org.jboss.seam.international.Messages. This works well for me (and is under 1ms):
public boolean containsKey(String key) {
if(messages.get(key).equals(key)) {
return false;
} else {
return true;
}
}
Cheers,
Damian.