On Jul 5, 2013, at 0:11, Johan Jonkers <jo...@seecr.nl> wrote: > Hi Andi, > > I was able to compile it all into one module and that worked perfectly. > > I then tried to compile it again into two seperate modules and compared the > generated wrappers. What I saw was that all methods in the SumWrapper class > that had a reference to the Sum class were not wrapped (didn't see them in > SumWrapper.h). I also checked the output to see if there was some sort of > notification/warning saying there was a problem with these methods but didn't > see anything. > I am thinking that they aren't being wrapped because they somehow can't be > resolved. I tried looking in the JCC code where that happens but haven't been > very successful at that so far.
Please, list the commands you used. It's easier to debug this way. Did you list the Sum class on the second jcc command line ? Andi.. > > Regards, > > Johan > > > On 7/4/13 10:18 PM, Andi Vajda wrote: >> >> On Thu, 4 Jul 2013, Johan Jonkers wrote: >> >>> I've tried added the Sum class to the 2nd JCC call but it didn't solve the >>> problem. The 'asSum' method isn't getting wrapped. Also, instantiating a >>> SumWrapper with a Sum as argument results in the constructor without >>> parameters being called; which I wasn't expecting. >>> >>>>>> c=SumWrapper(Sum(10)) >>> Empty constructor >>> >>> I tried compiling everything into one file and then I do get the asSum >>> method wrapped but the constructor with a Sum as argument doesn't seem to >>> work still. It doesn't call the empty constructor anymore but neither does >>> it seem to set Sum object passed to it. I am a bit at a loss here on whats >>> going wrong (or what I am doing wrong). >> >> Yeah, let's take one thing at a time and the simpler one first. >> Compiling all into one module, I was not able to reproduce the problem as >> reported. I'm able to make a SumWrapper(Sum(10)) just fine. >> >> Here are the commands I used to try to reproduce this: >> >> - created two class files Sum.java and SumWrapper.java in their respective >> packages as specified in your example >> - mkdir classes >> - javac -d classes *.java >> - jar -cvf sum.jar -C classes . >> - python -m jcc.__main__ --shared --arch x86_64 --use_full_names --jar >> sum.jar --classpath . --python sum --build --install >> - python >> - import sum >> - sum.initVM() >> <jcc.JCCEnv object at 0x10029c0f0> >> - from nl.seecr.freestyle import Sum >> - from org.cq2.freestyle import SumWrapper >> - Sum(10) >> <Sum: nl.seecr.freestyle.Sum@64fef26a> >> - SumWrapper(Sum(10)) >> <SumWrapper: org.cq2.freestyle.SumWrapper@70e69696> >> >> Please try to reproduce these steps and report back. >> Once that works, let's move on to the problem of compiling these into >> separate extension modules. >> >> Andi.. >> >>> >>> Any thoughts on this problem would be appreciated :-) >>> >>> Regards, >>> >>> Johan >>> >>> On 7/1/13 8:00 PM, Andi Vajda wrote: >>>> >>>> On Mon, 1 Jul 2013, Johan Jonkers wrote: >>>> >>>>> 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. >>>> >>>> I haven't had time yet to reproduce the problem but you may want to try to >>>> add an explicit request to wrap the Sum class - by just listing it on the >>>> second jcc call command line. No wrapper will be generated for it, because >>>> of the --import statement, but methods in the second jar with Sum in their >>>> signature should then get wrapped. >>>> >>>> python -m jcc \ >>>> --root ${ROOT} \ >>>> --use_full_names \ >>>> --import cq2 \ >>>> --shared \ >>>> --arch x86_64 \ >>>> --jar seecr.jar \ >>>> --python seecr \ >>>> --build \ >>>> --install \ >>>> nl.seecr.freestyle.Sum >>>> >>>> Andi.. >>> >>> >>> -- >>> Johan Jonkers ? seecr.nl ? +31 (0) 655 734 175 > > > -- > Johan Jonkers ♦ seecr.nl ♦ +31 (0) 655 734 175