You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pylucene-dev@lucene.apache.org by "Andi Vajda (JIRA)" <ji...@apache.org> on 2012/08/14 10:17:38 UTC

[jira] [Resolved] (PYLUCENE-21) JCC Nested Java Object Access from Python

     [ https://issues.apache.org/jira/browse/PYLUCENE-21?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andi Vajda resolved PYLUCENE-21.
--------------------------------

    Resolution: Not A Problem

Please ask questions on pylucene-dev@lucene.apache.org, JIRA is for bugs.

To your question: you didn't give me your JCC invocation so I can only guess that you didn't ask for App$Embedded to be wrapped. The following steps work for me:

$ python -m jcc.__main__ --shared --arch x86_64 --classpath `pwd` home.App home.App\$Embedded --rename home.App\$Embedded=AppEmbedded --python jcchello --build --install

$ python
>>> from jcchello import *
>>> initVM()
<jcc.JCCEnv object at 0x10040a0d8>
>>> App().hello()
hello from App method
>>> AppEmbedded(App()).hello2()
hello from App.Embedded method
>>> 
                
> JCC Nested Java Object Access from Python
> -----------------------------------------
>
>                 Key: PYLUCENE-21
>                 URL: https://issues.apache.org/jira/browse/PYLUCENE-21
>             Project: PyLucene
>          Issue Type: Question
>         Environment: generic
>            Reporter: Craig Rickle
>            Priority: Minor
>
> Is it possible to access a nested object from python using jcc?
> package home;
> public class App
> {
>     public class Embedded {
>         public void hello2() {
>             System.out.println("hello from App.Embedded method");
>         }
>     }
>         
>     public void hello() {
> 	System.out.println("hello from App method");
>     }
>     public static void main( String[] args )
>     {
>         System.out.println( "Hello World!" );
>     }
> }
> Once processed by jcc,
> $ python -c "import jcchello;from jcchello import initVM,CLASSPATH,App;initVM(classpath=CLASSPATH);a = App();a.hello();"
> hello from App method
> is ok, but,
> $ python -c "import jcchello;from jcchello import initVM,CLASSPATH,App;initVM(classpath=CLASSPATH);a = App();a.hello2();"
> Traceback (most recent call last):
>  File "<string>", line 1, in <module>
> AttributeError: 'App' object has no attribute 'hello2'
> does not resolve.  We might say, ok, makes sense, lets try to --rename home.App\$Embedded=AppEmbedded, then, import an AppEmbedded object, but this approach has not worked either in the numerous forms that I have tried.
> For completeness, a jar listing follows:
> $ jar tf jcc-hello/target/jcc-hello-1.0-SNAPSHOT.jar 
> META-INF/
> META-INF/MANIFEST.MF
> home/
> home/App$Embedded.class
> home/App.class
> META-INF/maven/
> META-INF/maven/home/
> META-INF/maven/home/jcc-hello/
> META-INF/maven/home/jcc-hello/pom.xml
> META-INF/maven/home/jcc-hello/pom.properties
> In reality, hello2() will effectively be a result set iterator written by an external group back to the python caller.  Current thinking is to segment this portion of code as a new java method and apply jcc for subsequent integration. This would avoid the need to access the nested logic from python, but, would require blocking up the resulting data.  Would appreciate any thoughts on this.
> Thanks in advance,
> Craig

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira