On Fri, 27 Feb 2009, Bill Janssen wrote:
Actually, the wrapping of neo4j doesn't work with the latest JCC -- it
just doesn't fail obviously. However, some vital methods are not
produced for several classes. For instance, the org.neo4j.api.core.Node
class doesn't have the vital method "hasRelationship(RelationshipType...)".
In fact, it doesn't seem to have a number of methods, like
"Iterable<Relationship> getRelationships()".
So, this is (I suppose) a variant of the Java 5 stuff not being
supported by PyLucene.
Might be nice to have JCC fail more obviously in this case...
No, this is different. It's not related to these Java 1.5 features.
It's because java.lang.Iterable is not 'known' to that JCC invocation by
default.
As documented [1], to avoid runaway transitive closures, JCC will only wrap
methods where all parameters and return type are part of the requested set
of classes, jars or packages specified on the command line (see [1]).
A few core classes are 'known' by default, but java.lang.Iterable is not.
If you add --package java.lang to the invocation, these methods appear in
the wrappers as expected.
You'd probably ask for --package java.lang to be part of the defaults and
it's a reasonable request at first glance. In JCC's cpp.py, there is
currently a list of classes considered always 'known' to JCC.
java.lang.Iterable is not one of them. Maybe, again, it's because Iterable
appeared in Java 1.5 (unsure).
Andi..
[1] http://lucene.apache.org/pylucene/jcc/documentation/readme.html#use