Hi Andy-
Sorry for the delay in response. Thanks for testing the revised
implementation. I am looking into these issues and I will be in touch.
Best
Josh Juneau
juneau001@...
http://jj-blogger.blogspot.com
http://www.jythonpodcast.com
Twitter ID: javajuneau
On Sat, Mar 13, 2010 at 3:06 AM, Andy Rose <barbalute@...> wrote:
> Sorry for the late reply! It's been a busy week.
>
> I'm still getting an error. I have a (serializable) Java class and a Python
> class that extends it, and I've loaded the Python class (successfully) into
> Java. After instantiating the Python class in Java, I'd like to make a copy
> of it from Java.
>
> So I've tried - with the new files you've sent me - creating a new function
> in the superclass (that returned null) but I overrode it in the Python
> class, having it return a copy.deepcopy(pythonClassName). That didn't work,
> so what I then tried was using the copy method from DeepJavaCopier, and it's
> giving me a ClassNotFound error when it tries to read the object back in
> (obj = in.readObject();)
>
> This is the first line of the error I'm getting:
> java.lang.ClassNotFoundException:
> org.python.proxies.MyTestClass$MyTestClass$0
>
> So I'm not sure if I'm using it properly - my class is only serializable
> (not cloneable), because I only want to make a deep copy of it.
>
> Thanks again for all your help,
> Andy
>
>
> On Tue, Mar 9, 2010 at 2:54 AM, Josh Juneau <juneau001@...> wrote:
>
>> Andy-
>>
>> You are correct in that there were still issues with the version of
>> copy.py which I previously sent to you. I think that the issues you were
>> seeing are twofold. There are a couple of rules one must follow in order to
>> create copies of Java objects. First, in order to be deep copyable, a Java
>> object must implement java.io.Serializable. Ensure that your testClass is
>> serializable. Second, if you are trying to create a shallow copy of the
>> object then it must implement the java.lang.Cloneable interface and override
>> the clone() method. I've attached one such Java object (Person.java) that
>> should be both shallow and deep copyable via the new copy.py (which is also
>> included).
>>
>> I found that in the previous version I sent to you , Java classes were not
>> being deep copied correctly as the Python code was unable to actually create
>> the copy. In order to make it work, I've re-written the deep copy
>> implementation in Java code and now the copy.py uses the new Java
>> implementation each time a deep copy is necessary. This seems to do the
>> trick as I believe the Python deep copy implementation was encountering
>> issues in translation and creating a proxy object rather than a straight
>> copy.
>>
>> To use this new version, please place DeepJavaCopier.class, and copy.py in
>> your Lib directory. Then, ensure that your Java object adheres to the rules
>> mentioned above. The solution definitely could use some further testing, so
>> any help would be appreciated!
>>
>> Thanks
>>
>>
>> Josh Juneau
>> juneau001@...
>> http://jj-blogger.blogspot.com
>> http://www.jythonpodcast.com
>> Twitter ID: javajuneau
>>
>>
>> On Mon, Mar 8, 2010 at 4:28 PM, Andy Rose <barbalute@...> wrote:
>>
>>> Thanks very much to both of you for the help, but with the new copy.py
>>> I'm getting an error:
>>>
>>> raise Error('un-deep-copyable object of type %s' % type(x))
>>> copy.Error: un-deep-copyable object of type <class 'testClass.testClass'>
>>>
>>> testClass in this case is a very simple class containing only a single
>>> integer. Any ideas why this might be happening? I can give my code if it
>>> will help.
>>>
>>> Thanks again,
>>> Barbalute
>>>
>>>
>>> On Mon, Mar 8, 2010 at 4:08 PM, Josh Juneau <juneau001@...> wrote:
>>>
>>>> Yes, there is an issue with the current version of copy.py that is being
>>>> distributed with 2.5.1. You can read more about the issue on the bug
>>>> tracker at http://bugs.jython.org/issue1551...but it specifically
>>>> addresses issues while making copies of Java objects using copy() and
>>>> deepcopy(). I am going to be checking in the attached version of copy.py
>>>> which has been corrected to address the issues related to the bug report.
>>>> There is also an effort taking place to convert the current version of
>>>> copy.py into a Java implementation to help boost performance a bit. Please
>>>> stay tuned for that version sometime in the future.
>>>>
>>>> If you have a moment, please drop the attached version of copy.py into
>>>> your jython Lib directory and give it a try. Hopefully it will resolve your
>>>> issues. If it does not, please submit another bug or add onto issue 1551.
>>>>
>>>> Thanks
>>>>
>>>>
>>>> Josh Juneau
>>>> juneau001@...
>>>> http://jj-blogger.blogspot.com
>>>> http://www.jythonpodcast.com
>>>> Twitter ID: javajuneau
>>>>
>>>>
>>>>
>>>> On Mon, Mar 8, 2010 at 1:49 PM, Barbalute <Barbalute@...> wrote:
>>>>
>>>>>
>>>>> As the name suggests, it seems that copy and deepcopy aren't copying
>>>>> the
>>>>> variables in my Java class.
>>>>>
>>>>> I currently have a Python class extending an existing Java abstract
>>>>> class.
>>>>> For various reasons, I've overwritten clone() in the Python class so
>>>>> that
>>>>> when the Java class calls it, it returns a deepcopy() of itself.
>>>>>
>>>>> This seems to properly copy the methods from the class, but the
>>>>> variables
>>>>> from the abstract Java class are lost in the copy, and I have no idea
>>>>> why.
>>>>>
>>>>> In the overwritten Python clone() method, I'm able to manually copy
>>>>> over the
>>>>> variables, doing for example:
>>>>>
>>>>> x = copy.deepcopy(self)
>>>>> x.name = self.name
>>>>> return x
>>>>>
>>>>> But this shouldn't be necessary and becomes increasingly unwieldy for
>>>>> classes with lots of variables. If I don't do it, though, name is not
>>>>> set in
>>>>> x and will return null in Java. Am I doing something wrong, or is
>>>>> something
>>>>> broken with copy() and deepcopy()?
>>>>>
>>>>> Thanks for your time.
>>>>> --
>>>>> View this message in context:
>>>>> http://old.nabble.com/copy-and-deepcopy-not-copying-Java-class-variables--tp27826254p27826254.html
>>>>> Sent from the jython-users mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> Download Intel® Parallel Studio Eval
>>>>> Try the new software tools for yourself. Speed compiling, find bugs
>>>>> proactively, and fine-tune applications for parallel performance.
>>>>> See why Intel Parallel Studio got high marks during beta.
>>>>> http://p.sf.net/sfu/intel-sw-dev
>>>>> _______________________________________________
>>>>> Jython-users mailing list
>>>>> Jython-users@...
>>>>> https://lists.sourceforge.net/lists/listinfo/jython-users
>>>>>
>>>>
>>>>
>>>
>>
>
|