Hello,
I have been playing around with JCC to see if it would provide in the
needs we have here at work to interface Java with Python. I have
encountered one issue in which I hope someone on this mailinglist might
be able to help me with. If this is not the right place to ask then I
apologize in advance.
This issue I am having is that I would like to create two packages
compiled with JCC in which classes from one package are used by classes
in the other pacakge. I would like to use those classes in Python but am
having problems doing so that I don't understand yet.
In package 1 is the class shown below:
package nl.seecr.freestyle;
public class Sum {
private int _sum;
public Sum() {
_sum = 0;
}
public void add(int value) {
_sum += value;
}
public int value() {
return _sum;
}
}
The second package holds a class what uses the Sum Class:
package org.cq2.freestyle;
import nl.seecr.freestyle.Sum;
public class SumWrapper {
private Sum total;
public SumWrapper() {
this(new Sum());
System.out.println("Empty constructor");
}
public SumWrapper(Sum sum) {
total = sum;
}
public void add(int value) {
total.add(value);
}
public int value() {
return total.value();
}
public Sum asSum() {
Sum sum = new Sum();
sum.add(value());
return sum;
}
public void printValue() {
System.out.println(value());
}
}
I can compile these classes into .class files and put them in jars and
have those compiled with JCC:
python -m jcc \
--root ${ROOT} \
--use_full_names \
--shared \
--arch x86_64 \
--jar cq2.jar \
--classpath ./seecr.jar \
--python cq2 \
--build \
--install
export PYTHON_PATH=${ROOT}/usr/local/lib/python2.7/dist-packages
python -m jcc \
--root ${ROOT} \
--use_full_names \
--import cq2 \
--shared \
--arch x86_64 \
--jar seecr.jar \
--python seecr \
--build \
--install
In my understanding the "--import cq2" argument should prevent jcc from
creating a wrapper for the Sum class in the seecr package itself but use
the one in the cq2 package.
This all compiles without errors but when I run the following python
program:
import seecr
seecr.initVM()
import cq2
cq2.initVM()
from nl.seecr.freestyle import Sum
from org.cq2.freestyle import SumWrapper
sum = Sum()
sum.add(5)
print "Sum value", sum.value()
wrapper = SumWrapper(sum)
print wrapper.value()
The 1st print shows the value 5 as expected. The 2nd print however shows
0 and I had not expected that. If I run the same program in Java and use
the jars I created earlier, the 2nd print shows 5 (as expected). The
"Empty constructor" message is also shown when running this python
program and I had not expected that to happen.
The "asSum" method in the SumWrapper class is not available in the
Python version of the class. I do not understand yet why that is.
I haven't been able to find many examples or documentation on the
options for compiling with JCC. I am hoping that someone here on the
mailinglist can point me in the right direction. Any help would be
really appreciated.
Johan