pyrolite: newbie quicker-start for Java

"Frank J. Iannarilli, Jr." <franki-u9QQAxJRRC9Wk0Htik3J/[email protected]> Wed, 18 Feb 2015 01:42:03 -0500
Newsgroups gmane.comp.python.pyro
Message-ID <[email protected]>
This is a cryptographically signed message in MIME format.

--===============7401194371232216776==
Content-Type: multipart/signed; protocol="application/pkcs7-signature";
	micalg=sha1; boundary="------------ms060709090908010108070904"

This is a cryptographically signed message in MIME format.

--------------ms060709090908010108070904
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Hi,


Thanks, Irmen for Pyro and Pyrolite!  It saves my day.

I'm posting what I hope is useful for other newbies like me, which is an =

elaboration of the Pyro simple example greeting.py appearing in=20
http://pythonhosted.org//Pyro4/intro.html#with-a-name-server but with a=20
Java (rather than Python) client.

That is, tying together the above with an elaboration of the "small code =

example in Java" that appears in:=20
https://pythonhosted.org/Pyro4/pyrolite.html

FYI, I am running under Window 7 64-bit, WinPython-64bit-3.4.2.4 and=20
Java1.6 (forced by my using ImageJ).

Install Pyro4 onto Python side:
https://pythonhosted.org/Pyro4/install.html

Install pyrolite on Java side (stick the .jar files wherever they need=20
to be):
https://pythonhosted.org/Pyro4/pyrolite.html

Under Python, start a Pyro NameServer: python -m Pyro4.naming
refs:
      http://pythonhosted.org//Pyro4/intro.html#with-a-name-server
http://pythonhosted.org//Pyro4/nameserver.html#nameserver-nameserver

Under Python, following=20
http://pythonhosted.org//Pyro4/intro.html#with-a-name-server ,
type in the contents of greeting.py to Python interpreter (omitting the=20
print statement) or execute greeting.py.  What this does is to set up a=20
"server" class (i.e. something you want to serve up Python library=20
methods to Java client) and instantiate it, start the Pyro daemon,=20
register the server class instance to the daemon and also to the=20
(auto-found) Pyro name server (already running due to previous step above=
).

Under Java, essentially follow the "small code example in Java" that=20
appears in
  https://pythonhosted.org/Pyro4/pyrolite.html   but minding some=20
clarification comments and possibly needed adaptations, as I show=20
below.  This Java example is actually an ImageJ plugin implementation,=20
but those particulars are unimportant.  What this code does is to=20
locate|grab the NameServerProxy, construct the (java proxy|instance of=20
the) Pyro-served Python server class instance (here, the class=20
GreetingMaker), invoke its method (get_fortune), and cast the return=20
value to the appropriate Java type (see Python-Java mappings in pyrolite =

readme.txt).

//  Stuff for ImageJ -- of no interest to non-ImageJ folks!
import ij.*;
import ij.process.*;
import ij.gui.*;
import java.awt.*;
import ij.plugin.*;
import ij.plugin.frame.*;

// Needed for pyrolite
import net.razorvine.pyro.*;
import java.io.*;   // Needed (?) for IOException thrown by some=20
pyrolite methods


public class Greeting_Client implements PlugIn {

//    public void run(String arg) throws IOException {
//         The above "throws" augmentation would allow various=20
exception-throwing pyrolite methods to
//          compile, but ImageJ's plugin interface can't be overriden=20
this way.
//          So instead, required to use try-catch blocks below!
     public void run(String arg)  {

       IJ.showMessage("Here we go...");

       // NameServerProxy ns =3D NameServerProxy.locateNS(null);
       //  We have to break up the declaration and construction of the=20
ns variable as follows, or
       //    declaring and constructing it in one line (as above) within =

the try block means ns
       //     is local (only) within that try block.
       //   We follow this idiom with further instances later below.
       NameServerProxy ns =3D null;  // needs to be initialized to null o=
r=20
get
                                                         // "variable=20
might not have been initialized" compilation error
        try {
            ns =3D NameServerProxy.locateNS(null);
         } catch (IOException e) {
               IJ.showMessage("Caught LocateNS IOException: " +=20
e.getMessage());
              return;
         }


        // PyroProxy remoteobject =3D new=20
PyroProxy(ns.lookup("PYRONAME:example.greeting"));
        //   The Pyro dox for the Python side uses above argument form,=20
but the Java-side Pyrolite uses
        //      below form without the PYRONAME: prefix.
        //PyroProxy remoteobject =3D new=20
PyroProxy(ns.lookup("example.greeting"));
        PyroProxy remoteobject =3D null;
        try {
            remoteobject =3D new PyroProxy(ns.lookup("example.greeting"))=
;
         } catch (IOException e) {
                IJ.showMessage("Caught ns.lookup IOException: " +=20
e.getMessage());
               return;  // occurs AFTER the following finally block
         } finally {
             ns.close();
          }

        // Object result =3D remoteobject.call("get_fortune", "Lucifer");=

       Object result =3D null;
        try {
            result =3D remoteobject.call("get_fortune", "Lucifer");
         } catch (IOException e) {
               IJ.showMessage("Caught remoteobject.call IOException: " + =

e.getMessage());
              return;
         } finally {
               ns.close();
               remoteobject.close();
          }


        String message =3D (String)result;  // cast to the type that=20
'get_fortune' returns
         IJ.showMessage(message);
        boolean okQ =3D IJ.showMessageWithCancel("My_Plugin", "Pyrolite=20
Example");  // waits...till user action
        remoteobject.close();
        ns.close();
     }

}





--=20

Frank J. Iannarilli   franki-u9QQAxJRRC9Wk0Htik3J/[email protected]
Aerodyne Research, Inc., 45 Manning Road, Billerica, MA 01821 USA



--------------ms060709090908010108070904
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIKNTCC
BOkwggPRoAMCAQICBEwOjDcwDQYJKoZIhvcNAQEFBQAwgbQxFDASBgNVBAoTC0VudHJ1c3Qu
bmV0MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvQ1BTXzIwNDggaW5jb3JwLiBieSByZWYu
IChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
MTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAoMjA0OCkw
HhcNMTExMTExMTUzNDQxWhcNMjExMTEyMDc1MTIzWjCBpTELMAkGA1UEBhMCVVMxFjAUBgNV
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5j
b3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMTAgRW50cnVzdCwgSW5j
LjEiMCAGA1UEAxMZRW50cnVzdCBDbGFzcyAxIENsaWVudCBDQTCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBAKlg/IAuYnCTjPYZYkutNliXDk7+nY8ALj/+bIINQYYjI9aTzYP+
j0Ph4uttKBsRuwH664BOc17eWsWqOjOxi9540iT70RS9lE2SX5g0Wf/YhjYcd7hhYlZY+4BV
DwMphH3o0LOm3/UiuCS/5AOseSxNflqoEg8B+M0Qk88tHLN0a4fbvsKxZyMO6OPHEMUDOLfI
BUWgi+wkFd3LHDhfZpkIs/fXkdxflwdi3EGcjtHGNfZTp3euaBQ1pGcTPkmNbr6fIKOfqHcZ
vDi7VdNgzqD+r7fcTBmak3Pol74FP3938mml951e9OD4DrAi+z6oNhpuRMSPpGrVtqWM3Jzz
sAcCAwEAAaOCAQ4wggEKMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMDMG
CCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYD
VR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5lbnRydXN0Lm5ldC8yMDQ4Y2EuY3JsMDsGA1Ud
IAQ0MDIwMAYEVR0gADAoMCYGCCsGAQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3Jw
YTAdBgNVHQ4EFgQUR5CkoQpDIL/QdFS4lPrEe7W2HAUwHwYDVR0jBBgwFoAUVeSB0RGAvtiJ
uQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBAJzg23ebpgN5OBDc3giL898DPTiUq/LS
Q4Yqa7ZXAcZCUan164sTMpK+1B5m9JMEgo9QYy88m5Ts6uSR+CjQ5n/21c7aagc3K8H+VWx6
h9Y+VYhbYxNKgKSCHLxCXt8Rh91GEhTuL5FpgpGNobreAmC3AU1+NnKKeBcga4qscjxjMW8M
3CoIrzU+NpfgP56hkaHCYbgtzSQ5uQ2dcyRiwLw0MTDKCFH3vl5TkJegdVWaPp/xrnS/yzmR
w2q0IWhIq5/xumH3l4DyxFiwHVANHYExR79fkdhMh0tl9U+VvYZCKYoky3Z5r3/uK6/0m9tW
zrGKWMlG/fDG4dUCsYYOga4wggVEMIIELKADAgECAgRMMtZ9MA0GCSqGSIb3DQEBCwUAMIGl
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE5MDcGA1UECxMwd3d3LmVu
dHJ1c3QubmV0L0NQUyBpcyBpbmNvcnBvcmF0ZWQgYnkgcmVmZXJlbmNlMR8wHQYDVQQLExYo
YykgMjAxMCBFbnRydXN0LCBJbmMuMSIwIAYDVQQDExlFbnRydXN0IENsYXNzIDEgQ2xpZW50
IENBMB4XDTE0MDkzMDE1MDE1NFoXDTE1MDkzMDE3NDgxOFowgZkxNzA1BgNVBAsTLkVudHJ1
c3QgQ2xhc3MgMSBJZGVudGl0eSBDZXJ0aWZpY2F0aW9uIFNlcnZpY2UxHjAcBgNVBAsTFVBl
cnNvbmEgTm90IFZhbGlkYXRlZDE+MBoGA1UEAxQTZnJhbmtpQGFlcm9keW5lLmNvbTAgBgkq
hkiG9w0BCQEWE2ZyYW5raUBhZXJvZHluZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQDwA+lewtin+kaxhXXp/XN3qu5RfTpwezXU/lwx5mWBSyEaDAR/8zGkEB2iFyfj
3ZetuEFyG8k9tTJYBeOBdK/277D6IzdGFky1QSlP2ihd03B6gz4M3KbxSiU5giw24LRRlPbZ
HSp4T0RwU4Ttakq/5eOEeyYyDqNRpQC5mOOC2+SKITnQGLcJNI43FpXmkaXk13BUj+o8l5tl
s2xlXLI8QZlQY7OlGxYJ/3aFQKlZR681srBbZ7007AsGTiIAhGPQgR4hEt22eYtfpSWYr62c
4hHtHaBDtkAwXcfW6zVUMTp5Z52iI1dVnGDaxiiJxyp/GpPRpn0bvoBE53iJKgDJAgMBAAGj
ggGEMIIBgDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwME
MEIGA1UdIAQ7MDkwNwYLYIZIAYb6bAoBBAEwKDAmBggrBgEFBQcCARYaaHR0cDovL3d3dy5l
bnRydXN0Lm5ldC9ycGEwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL2NybC5lbnRydXN0Lm5l
dC9jbGFzczFjYS5jcmwwagYIKwYBBQUHAQEEXjBcMCMGCCsGAQUFBzABhhdodHRwOi8vb2Nz
cC5lbnRydXN0Lm5ldDA1BggrBgEFBQcwAoYpaHR0cDovL2FpYS5lbnRydXN0Lm5ldC8yMDQ4
Y2xhc3Mxc2hhMi5jZXIwHgYDVR0RBBcwFYETZnJhbmtpQGFlcm9keW5lLmNvbTAfBgNVHSME
GDAWgBRHkKShCkMgv9B0VLiU+sR7tbYcBTAdBgNVHQ4EFgQU4GgPY7iSa80jXy1VOsQpTOM9
iREwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAW/PeVw7k4Cr9ZnTh2hPo4/GiDfx8
AE09qMHPsu5aSbqj5LAP7DptuIYieLixiiMgWb4A6anfD8paZNIoaaiO7lucQccDAuOesaiE
TxW+lQXadQ0072RYnWlXSdoi38O842qYeDMK4VdHVH6rJc/JJiDoUNC2RCQ1CMDHrXj3uvXJ
opCtlUhmvDHU4WP9hhjx2VtvdRNpijSR270n1wRXi2VxB+p1BfJpvqjHQlMN60Fii9l5d4XI
jgb/HrTWPlTXDwFf9Yx2iuLm0go1PakpWTV6py0zKifPKJrNsaYVs6f2OjokpfmaR3NuakGh
KT/E3uWE61l5yfiCtloInVJ8NzGCBCswggQnAgEBMIGuMIGlMQswCQYDVQQGEwJVUzEWMBQG
A1UEChMNRW50cnVzdCwgSW5jLjE5MDcGA1UECxMwd3d3LmVudHJ1c3QubmV0L0NQUyBpcyBp
bmNvcnBvcmF0ZWQgYnkgcmVmZXJlbmNlMR8wHQYDVQQLExYoYykgMjAxMCBFbnRydXN0LCBJ
bmMuMSIwIAYDVQQDExlFbnRydXN0IENsYXNzIDEgQ2xpZW50IENBAgRMMtZ9MAkGBSsOAwIa
BQCgggJRMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE1MDIx
ODA2NDIwM1owIwYJKoZIhvcNAQkEMRYEFHMrH4nQ2CcmfPdDV2748VycQh8EMGwGCSqGSIb3
DQEJDzFfMF0wCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAOBggqhkiG
9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgwgb8GCSsG
AQQBgjcQBDGBsTCBrjCBpTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4x
OTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVy
ZW5jZTEfMB0GA1UECxMWKGMpIDIwMTAgRW50cnVzdCwgSW5jLjEiMCAGA1UEAxMZRW50cnVz
dCBDbGFzcyAxIENsaWVudCBDQQIETDLWfTCBwQYLKoZIhvcNAQkQAgsxgbGgga4wgaUxCzAJ
BgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkwNwYDVQQLEzB3d3cuZW50cnVz
dC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAy
MDEwIEVudHJ1c3QsIEluYy4xIjAgBgNVBAMTGUVudHJ1c3QgQ2xhc3MgMSBDbGllbnQgQ0EC
BEwy1n0wDQYJKoZIhvcNAQEBBQAEggEA0TUenpfjLUx0YvmUmjPtWluckeNbZpmLKEi3477Q
a9ZaNKOi/aTbZwq5nhCL8AB6iza6RUAiQ5b3INz2C3/zQTfNeBPDfijnQNIU8YLjGQR5xocn
vwUpXys+QQTKZmZEkrCO61yDvC6FJ3C9SoGM2JH3EBMYHZUK+DVhKzS1yv7sQoUYUCbccgcb
HbAo8ZBNJ6ChM99iiMJz92VFBQOUFhjDYBP8k2fR2jDuMu9hhFBXZEQLXvUbWVMIbk12BSTd
6e16pHW+eMMlke4bmolS/n0b9iYWcaJEc5fF4dAkoNSJYCiO4BL9jcsXg7/QIDKS9GydrJ44
8b3OETYjbZ9jOwAAAAAAAA==
--------------ms060709090908010108070904--


--===============7401194371232216776==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
--===============7401194371232216776==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Pyro-core mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pyro-core

--===============7401194371232216776==--