Thread: [Py4j-users] Error when accessing jvm for basic sample (take 2)
Status: Beta
Brought to you by:
barthe
From: bn <av...@ya...> - 2011-10-24 02:04:48
|
Hi, I seem to be having this issue also, having written a small program which runs fine in linux but gets 'connection refused' in win7 64bit. So I tried the AdditionApplication example with the win7 firewall turned off (see console A output below), then attempted to connect from python where I also get a socket.error 10061 (console B output below). As you can see netstat shows that 192.168.1.39:25333 status is 'LISTENING' after I exit python. Trying a different port gives the same error. Initially I thought it may somehow have to do with mixing 32bit java and 64bit python, but switching python to 32bit didn't help. I don't know much about sockets and would appreciate any insight here. thanks, -Bahman --------------------------- console A: --------------------------- >java -version java version "1.6.0_12" Java(TM) SE Runtime Environment (build 1.6.0_12-b04) Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing) >netsh advfirewall set allprofiles state off Ok. >java -cp lib\py4j0.7.jar;AdditionApplication-0.1.jar AdditionApplication --------------------------- console B: --------------------------- >python Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from py4j.java_gateway import JavaGateway >>> gateway = JavaGateway() >>> a = gateway.entry_point >>> a.addition(1,2) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "F:\Programs\Python27\lib\site-packages\py4j-0.7-py2.7.egg\py4j\java_gateway.py", line 430, in __call__ answer = self.gateway_client.send_command(command) File "F:\Programs\Python27\lib\site-packages\py4j-0.7-py2.7.egg\py4j\java_gateway.py", line 257, in send_command connection = self._get_connection() File "F:\Programs\Python27\lib\site-packages\py4j-0.7-py2.7.egg\py4j\java_gateway.py", line 213, in _get_connection connection = self._create_connection() File "F:\Programs\Python27\lib\site-packages\py4j-0.7-py2.7.egg\py4j\java_gateway.py", line 220, in _create_connection connection.start() File "F:\Programs\Python27\lib\site-packages\py4j-0.7-py2.7.egg\py4j\java_gateway.py", line 318, in start self.socket.connect((self.address, self.port)) File "F:\Programs\Python27\lib\socket.py", line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 10061] No connection could be made because the target machine actively refused it >>> ^Z >netstat -an Active Connections Proto Local Address Foreign Address State TCP 0.0.0.0:135 0.0.0.0:0 LISTENING TCP 0.0.0.0:445 0.0.0.0:0 LISTENING TCP 0.0.0.0:554 0.0.0.0:0 LISTENING TCP 0.0.0.0:2869 0.0.0.0:0 LISTENING TCP 0.0.0.0:10243 0.0.0.0:0 LISTENING TCP 0.0.0.0:49152 0.0.0.0:0 LISTENING TCP 0.0.0.0:49153 0.0.0.0:0 LISTENING TCP 0.0.0.0:49154 0.0.0.0:0 LISTENING TCP 0.0.0.0:49155 0.0.0.0:0 LISTENING TCP 0.0.0.0:49156 0.0.0.0:0 LISTENING TCP 0.0.0.0:49157 0.0.0.0:0 LISTENING TCP 0.0.0.0:49164 0.0.0.0:0 LISTENING TCP 0.0.0.0:54465 0.0.0.0:0 LISTENING TCP 127.0.0.1:1299 0.0.0.0:0 LISTENING TCP 127.0.0.1:49160 0.0.0.0:0 LISTENING TCP 127.0.0.1:49293 127.0.0.1:49294 ESTABLISHED TCP 127.0.0.1:49294 127.0.0.1:49293 ESTABLISHED TCP 127.0.0.1:49297 127.0.0.1:49298 ESTABLISHED TCP 127.0.0.1:49298 127.0.0.1:49297 ESTABLISHED TCP 127.0.0.1:49570 127.0.0.1:49160 TIME_WAIT TCP 192.168.1.39:139 0.0.0.0:0 LISTENING TCP 192.168.1.39:25333 0.0.0.0:0 LISTENING TCP 192.168.1.39:49360 168.143.242.112:80 CLOSE_WAIT TCP 192.168.1.39:49563 72.14.204.147:80 ESTABLISHED TCP [::]:135 [::]:0 LISTENING TCP [::]:445 [::]:0 LISTENING TCP [::]:554 [::]:0 LISTENING TCP [::]:2869 [::]:0 LISTENING TCP [::]:10243 [::]:0 LISTENING TCP [::]:49152 [::]:0 LISTENING TCP [::]:49153 [::]:0 LISTENING TCP [::]:49154 [::]:0 LISTENING TCP [::]:49155 [::]:0 LISTENING TCP [::]:49156 [::]:0 LISTENING TCP [::]:49157 [::]:0 LISTENING TCP [::]:49164 [::]:0 LISTENING TCP [::]:54465 [::]:0 LISTENING --------------------------- AdditionApplication.java: --------------------------- import py4j.GatewayServer; public class AdditionApplication { public int addition(int first, int second) { return first + second; } public static void main(String[] args) { AdditionApplication app = new AdditionApplication(); // app is now the gateway.entry_point GatewayServer server = new GatewayServer(app); server.start(); } } --------------------------- |
From: Barthelemy D. <ba...@cs...> - 2011-10-24 10:30:42
|
Hi Bahman, Just to make sure, are you trying to start both the client and the server on the same host? I think this is a bug that I fixed in the forthcoming version of Py4J (0.8). I'm not super familiar with windows networking but I think the Java server is listening on 192.168.1.39 while the Python client is trying to connect to 127.0.0.1 (localhost). In the new version of Py4J, the server always listen to localhost by default (instead of all interfaces/ips, which was bad security), but this can be configured. In the meantime, you could try specifying an ip in the Python client: from py4j.java_gateway import GatewayClient, JavaGateway g_client = GatewayClient(address='192.168.1.39') gateway = JavaGateway(gateway_client=g_client) Does that work? Barthélémy On 10/23/2011 10:04 PM, bn wrote: > Hi, > > I seem to be having this issue also, having written a small > program which runs fine in linux but gets 'connection refused' in win7 64bit. > > So I tried the AdditionApplication example with the win7 > firewall turned off (see console A output below), then attempted to connect from python where I also get a socket.error 10061 (console B output below). As you can see netstat shows that 192.168.1.39:25333 status is 'LISTENING' after I exit python. > > Trying a different port gives the same error. Initially I thought it may somehow have to do with mixing 32bit java and 64bit python, but switching python to 32bit didn't help. I don't know much about sockets and would appreciate any insight here. > > thanks, > -Bahman > > --------------------------- > console A: > --------------------------- > >> java -version > java version "1.6.0_12" > Java(TM) SE Runtime Environment (build 1.6.0_12-b04) > Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing) > >> netsh advfirewall set allprofiles state off > Ok. > >> java -cp lib\py4j0.7.jar;AdditionApplication-0.1.jar AdditionApplication > > --------------------------- > console B: > --------------------------- > >> python > Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32 > Type "help", "copyright", "credits" or "license" for more information. >>>> from py4j.java_gateway import JavaGateway >>>> gateway = JavaGateway() >>>> a = gateway.entry_point >>>> a.addition(1,2) > Traceback (most recent call last): > File "<stdin>", line 1, in<module> > File "F:\Programs\Python27\lib\site-packages\py4j-0.7-py2.7.egg\py4j\java_gateway.py", line 430, in __call__ > answer = self.gateway_client.send_command(command) > File "F:\Programs\Python27\lib\site-packages\py4j-0.7-py2.7.egg\py4j\java_gateway.py", line 257, in send_command > connection = self._get_connection() > File "F:\Programs\Python27\lib\site-packages\py4j-0.7-py2.7.egg\py4j\java_gateway.py", line 213, in _get_connection > connection = self._create_connection() > File "F:\Programs\Python27\lib\site-packages\py4j-0.7-py2.7.egg\py4j\java_gateway.py", line 220, in _create_connection > connection.start() > File "F:\Programs\Python27\lib\site-packages\py4j-0.7-py2.7.egg\py4j\java_gateway.py", line 318, in start > self.socket.connect((self.address, self.port)) > File "F:\Programs\Python27\lib\socket.py", line 224, in meth > return getattr(self._sock,name)(*args) > socket.error: [Errno 10061] No connection could be made because the target machine actively refused it >>>> ^Z > >> netstat -an > > Active Connections > > Proto Local Address Foreign Address State > TCP 0.0.0.0:135 0.0.0.0:0 LISTENING > TCP 0.0.0.0:445 0.0.0.0:0 LISTENING > TCP 0.0.0.0:554 0.0.0.0:0 LISTENING > TCP 0.0.0.0:2869 0.0.0.0:0 LISTENING > TCP 0.0.0.0:10243 0.0.0.0:0 LISTENING > TCP 0.0.0.0:49152 0.0.0.0:0 LISTENING > TCP 0.0.0.0:49153 0.0.0.0:0 LISTENING > TCP 0.0.0.0:49154 0.0.0.0:0 LISTENING > TCP 0.0.0.0:49155 0.0.0.0:0 LISTENING > TCP 0.0.0.0:49156 0.0.0.0:0 LISTENING > TCP 0.0.0.0:49157 0.0.0.0:0 LISTENING > TCP 0.0.0.0:49164 0.0.0.0:0 LISTENING > TCP 0.0.0.0:54465 0.0.0.0:0 LISTENING > TCP 127.0.0.1:1299 0.0.0.0:0 LISTENING > TCP 127.0.0.1:49160 0.0.0.0:0 LISTENING > TCP 127.0.0.1:49293 127.0.0.1:49294 ESTABLISHED > TCP 127.0.0.1:49294 127.0.0.1:49293 ESTABLISHED > TCP 127.0.0.1:49297 127.0.0.1:49298 ESTABLISHED > TCP 127.0.0.1:49298 127.0.0.1:49297 ESTABLISHED > TCP 127.0.0.1:49570 127.0.0.1:49160 TIME_WAIT > TCP 192.168.1.39:139 0.0.0.0:0 LISTENING > TCP 192.168.1.39:25333 0.0.0.0:0 LISTENING > TCP 192.168.1.39:49360 168.143.242.112:80 CLOSE_WAIT > TCP 192.168.1.39:49563 72.14.204.147:80 ESTABLISHED > TCP [::]:135 [::]:0 LISTENING > TCP [::]:445 [::]:0 LISTENING > TCP [::]:554 [::]:0 LISTENING > TCP [::]:2869 [::]:0 LISTENING > TCP [::]:10243 [::]:0 LISTENING > TCP [::]:49152 [::]:0 LISTENING > TCP [::]:49153 [::]:0 LISTENING > TCP [::]:49154 [::]:0 LISTENING > TCP [::]:49155 [::]:0 LISTENING > TCP [::]:49156 [::]:0 LISTENING > TCP [::]:49157 [::]:0 LISTENING > TCP [::]:49164 [::]:0 LISTENING > TCP [::]:54465 [::]:0 LISTENING > > --------------------------- > AdditionApplication.java: > --------------------------- > import py4j.GatewayServer; > > public class AdditionApplication { > > public int addition(int first, int second) { > return first + second; > } > > public static void main(String[] args) { > AdditionApplication app = new AdditionApplication(); > // app is now the gateway.entry_point > GatewayServer server = new GatewayServer(app); > server.start(); > } > } > --------------------------- > > > ------------------------------------------------------------------------------ > The demand for IT networking professionals continues to grow, and the > demand for specialized networking skills is growing even more rapidly. > Take a complimentary Learning@Cisco Self-Assessment and learn > about Cisco certifications, training, and career opportunities. > http://p.sf.net/sfu/cisco-dev2dev > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users |
From: bn <av...@ya...> - 2011-10-24 14:13:27
|
Hi Barthelemy, Yes, that did the trick! With the firewall enabled even. The actual context is that I'm writing a java plugin to create a python scripting api for the main app. I open up the gateway in java and launch the python script in a subprocess, and the script can then make api calls through the gateway. So both sides are always on the same host. The main app is a dlna server itself (http://code.google.com/p/ps3mediaserver/) and when serving multiple dlna clients concurrently will need to run separate py4j instances on different sockets. Is there any gateway discovery magic in the forthcoming py4j that can sort this out automatically, or do I need to pass address:port to python in each instance (which actually wouldn't be hard since it's a subprocess and I can set environment variables). Thanks, using py4j has been very smooth sailing apart from this tiny bump in windows. -Bahman --- On Mon, 10/24/11, Barthelemy Dagenais <ba...@cs...> wrote: > From: Barthelemy Dagenais <ba...@cs...> > Subject: Re: [Py4j-users] Error when accessing jvm for basic sample (take 2) > To: "Support and Comments about Py4J" <py4...@li...> > Date: Monday, October 24, 2011, 6:03 AM > Hi Bahman, > > Just to make sure, are you trying to start both the client > and the > server on the same host? > > I think this is a bug that I fixed in the forthcoming > version of Py4J (0.8). > > I'm not super familiar with windows networking but I think > the Java > server is listening on 192.168.1.39 while the Python client > is trying to > connect to 127.0.0.1 (localhost). > > In the new version of Py4J, the server always listen to > localhost by > default (instead of all interfaces/ips, which was bad > security), but > this can be configured. > > In the meantime, you could try specifying an ip in the > Python client: > > from py4j.java_gateway import GatewayClient, JavaGateway > g_client = GatewayClient(address='192.168.1.39') > gateway = JavaGateway(gateway_client=g_client) > > Does that work? > > Barthélémy > |
From: Barthelemy D. <ba...@cs...> - 2011-10-24 20:07:27
|
Hi, there is no self-discovery, but unless it does not fit your model, multiple Python clients can connect to the same Java server. The server creates as many threads as required when handling the requests. The client and server are thread-safe, but if you use the entry point, multiple threads might access it concurrently. Barthélémy On 10/24/2011 10:13 AM, bn wrote: > Hi Barthelemy, > > Yes, that did the trick! With the firewall enabled even. > > The actual context is that I'm writing a java plugin to create a python scripting api for the main app. I open up the gateway in java and launch the python script in a subprocess, and the script can then make api calls through the gateway. So both sides are always on the same host. > > The main app is a dlna server itself (http://code.google.com/p/ps3mediaserver/) and when serving multiple dlna clients concurrently will need to run separate py4j instances on different sockets. Is there any gateway discovery magic in the forthcoming py4j that can sort this out automatically, or do I need to pass address:port to python in each instance (which actually wouldn't be hard since it's a subprocess and I can set environment variables). > > Thanks, using py4j has been very smooth sailing apart from this tiny bump in windows. > > -Bahman > > > --- On Mon, 10/24/11, Barthelemy Dagenais<ba...@cs...> wrote: > >> From: Barthelemy Dagenais<ba...@cs...> >> Subject: Re: [Py4j-users] Error when accessing jvm for basic sample (take 2) >> To: "Support and Comments about Py4J"<py4...@li...> >> Date: Monday, October 24, 2011, 6:03 AM >> Hi Bahman, >> >> Just to make sure, are you trying to start both the client >> and the >> server on the same host? >> >> I think this is a bug that I fixed in the forthcoming >> version of Py4J (0.8). >> >> I'm not super familiar with windows networking but I think >> the Java >> server is listening on 192.168.1.39 while the Python client >> is trying to >> connect to 127.0.0.1 (localhost). >> >> In the new version of Py4J, the server always listen to >> localhost by >> default (instead of all interfaces/ips, which was bad >> security), but >> this can be configured. >> >> In the meantime, you could try specifying an ip in the >> Python client: >> >> from py4j.java_gateway import GatewayClient, JavaGateway >> g_client = GatewayClient(address='192.168.1.39') >> gateway = JavaGateway(gateway_client=g_client) >> >> Does that work? >> >> Barthélémy >> > > > ------------------------------------------------------------------------------ > The demand for IT networking professionals continues to grow, and the > demand for specialized networking skills is growing even more rapidly. > Take a complimentary Learning@Cisco Self-Assessment and learn > about Cisco certifications, training, and career opportunities. > http://p.sf.net/sfu/cisco-dev2dev > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users |