I created OQL, and later JEC, to support bidirectional data binding in the WAM presentation framework.
Imagine this expression:
book.pages[selectedPage].text
The rendering context contains a book object and a selectedPage index. During the server-side rendering phase, the expression is evaluated as a getter and the selected page text is printed.
During the control phase, the same expression can be used as a setter when the model receives updates.
That was the whole point: a compact expression language to traverse object graphs and update values in business objects from the presentation layer.
The second version, JEC, was released as open source on SourceForge: jec.sourceforge.net.
