Error 500 -HTTP Web Server: Command Not Handled Exception; or how to choke a server JVM with a single line of code
Devin Olson October 10 2012 03:28:16 PM
When creating your own Java objects to feed repeat controls, it is useful to implement the Java Collection Interface with a values() method.HOWEVER - you should be very careful when doing this that you don't do something incredibly stupid. Do as I say, not as I do, I say.
For example, let us assume you want to create a Java object that will do all kinds of way cool stuff. You could perhaps create something like this:
package com.azlighthouse.sandbox;
import java.io.Serializable;
public class MyWayCoolJavaClass implements Serializable {
private static final long serialVersionUID = 12345L;
/*
* Default Constructor
*/
public MyWayCoolJavaClass() {
}
/*
* Lots of way cool code goes here
*/
} // MyWayCoolJavaClass
Let us further assume you have an XPage, and on this XPage is a repeat control, and you want to allow the repeat control to use a set of your way cool objects. You could then perhaps create some sort of map to carry the objects and allow you to do all kinds of interesting things to them. You might want to use this map to "feed" your repeat control by giving it a values property that returns a collection. You could perhaps then create (as I did) something like this:
package com.azlighthouse.sandbox;
import java.io.Serializable;
import java.util.Collection;
import java.util.LinkedHashMap;
public class DemoMap implements Serializable {
private static final long serialVersionUID = 67890L;
private LinkedHashMap<String, MyWayCoolJavaClass> _entries;
/*
* Default Constructor
*/
public DemoMap() {
this.initialize();
}
private void initialize() {
this._entries = new LinkedHashMap<String, MyWayCoolJavaClass>();
}
public Collection<MyWayCoolJavaClass> values() {
return this.values();
}
/*
* Lots of other code goes here
*/
} // DemoMap
Did you spot my mistake? I missed it at first, and spent quite a bit of time hunting it down. Once I discovered it, the fix was incredibly simple:
return this._entries.values();
Without the fix my code went into an ugly recursion loop and just spun there consuming resources until the JVM threw up. I have to admit I am surprised (in a good way) about the resilience of the Domino server itself. No restart was required. In fact, NOTHING was required -the server simply puked out the 500 error and kept working just fine.
"Bad developer -No Jolt for you!"
-Devin.
- Comments [0]