首页 > 代码库 > Liberty Profile Jython automation – TypeError – javax.management.remote.JMXServiceURL() – 3rd arg can’t be coerced to int

Liberty Profile Jython automation – TypeError – javax.management.remote.JMXServiceURL() – 3rd arg can’t be coerced to int

转载自: http://www.themiddlewareshop.com/2016/03/24/liberty-profile-jython-automation-typeerror-javax-management-remote-jmxserviceurl-3rd-arg-cant-be-coerced-to-int/

When running a Jython script to control the state of an Application Deployed to a Standalone Liberty Profile server, we get the following error: TypeError: javax.management.remote.JMXServiceURL(): 3rd arg can‘t be coerced to int

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
root@node01 standalone]# ./controlApp.sh status HelloWorld-0.0.1-SNAPSHOT
Environment Settings
PATH=/opt/ibm/java-x86_64-80/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/var/apps/jython_2.7.0/bin
WLP_INSTALL_DIR=/var/apps/waslp_DV01/wlp
JYTHON_SCRIPTS=/var/apps/scripts/liberty
CLASSPATH=/var/apps/waslp_DV01/wlp/clients/restConnector.jar
JYTHONPATH=/var/apps/waslp_DV01/wlp/clients/jython:/var/apps/scripts/liberty/lib
script parameters
ACTION=status
APP_NAME=HelloWorld-0.0.1-SNAPSHOT
Server settings..
SERVER_NAME=server1
TRUST_STORE=/var/apps/waslp_DV01/wlp/usr/servers/server1/resources/security/key.jks
TRUST_STORE_PASSWORD=Liberty
HOST=192.168.0.40
PORT=9443
USER_NAME=wasadmin
USER_PASSWORD=wasadmin
Executing CMD: jython controlApp.py status HelloWorld-0.0.1-SNAPSHOT /var/apps/waslp_DV01/wlp/usr/servers/server1/resources/security/key.jks Liberty 192.168.0.40 9443 wasadmin wasadmin
MAIN:BEGIN
varName=controlApp.py
varValue=status
action=%s controlApp.py
appName=%s status
trustStore=%s HelloWorld-0.0.1-SNAPSHOT
trustStorePassword=%s /var/apps/waslp_DV01/wlp/usr/servers/server1/resources/security/key.jks
hostname=%s Liberty
port=%s 192.168.0.40
username=%s 9443
password=%s wasadmin
Connecting to the server...
Traceback (most recent call last):
  File "controlApp.py", line 57, in <module>
    _mBeanConnection  = getConnection(
  File "controlApp.py", line 21, in getConnection
    connector.connect(hostname, port, username, password)
  File "/var/apps/waslp_DV01/wlp/clients/jython/restConnector.py", line 57, in connect
    self.connectBasic(host, port, args[0], args[1])
  File "/var/apps/waslp_DV01/wlp/clients/jython/restConnector.py", line 76, in connectBasic
    self.connectAdvanced(host, port, map)
  File "/var/apps/waslp_DV01/wlp/clients/jython/restConnector.py", line 65, in connectAdvanced
    url = JMXServiceURL("REST", host, port, "/IBMJMXConnectorREST")
TypeError: javax.management.remote.JMXServiceURL(): 3rd arg can‘t be coerced to int

The reason for this is the line of code in the Jython script that create a connection to the Liberty Server’s JMX interface (WebSphere:service=com.ibm.websphere.application.ApplicationMBean,name=*) is a string not an int i.e. the port number was passed as string not int

 
1
2
3
4
5
6
7
8
9
def getConnection(trustStore, trustStorePassword, hostname, port, username, password) :
    JMXRESTConnector.trustStore = trustStore
    JMXRESTConnector.trustStorePassword = trustStorePassword
    
    connector = JMXRESTConnector()
    connector.connect(hostname, port, username, password)
    mconnection = connector.getMBeanServerConnection()
    return mconnection
#endDef

The code was changed from

 
1
2
3
4
5
6
7
_mBeanConnection  = getConnection(
                trustStore,
                trustStorePassword,
                hostname,
                port,
                username,
                password)

to

 
1
2
3
4
5
6
7
_mBeanConnection  = getConnection(
                trustStore,
                trustStorePassword,
                hostname,
                int(port),
                username,
                password)

 

Liberty Profile Jython automation – TypeError – javax.management.remote.JMXServiceURL() – 3rd arg can’t be coerced to int