JDK-7033678 : JMX doesn't work with Turkish locale settings
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.rmi
  • Affected Version: 6u20
  • Priority: P3
  • Status: Closed
  • Resolution: Won't Fix
  • OS: windows_7
  • CPU: x86
  • Submitted: 2011-04-04
  • Updated: 2017-11-10
  • Resolved: 2017-11-10
Related Reports
Relates :  
Description
FULL PRODUCT VERSION :
Java(TM) SE Runtime Environment (build 1.6.0_20-b02) &
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)

ADDITIONAL OS VERSION INFORMATION :
SunOS 5.10 (en), Windows 7 32 bit (en), RedHat 5.1 (en) (kernel 2.6)

A DESCRIPTION OF THE PROBLEM :
JMX connection could not established from jconsole with Turkish locale.

REGRESSION.  Last worked in version 6

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and execute test case with this configuration:

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
-Duser.language=tr

and then try to connect application with jconsole.

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
be able to connect application with using jmx remote.
ACTUAL -
Jconsole gives "Connection Lost: Reconnect?" error message.

ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.rmi.NoSuchObjectException: no such object in table
	at sun.rmi.transport.Transport.serviceCall(Transport.java:135)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
30.Mar.2011 10:02:23 sun.rmi.transport.StreamRemoteCall getOutputStream
FINER: RMI TCP Connection(4)-172.16.250.178: getting output stream
30.Mar.2011 10:02:23 sun.rmi.transport.tcp.TCPTransport handleMessages
FINE: RMI TCP Connection(4)-172.16.250.178: (port 49478) op = 115
30.Mar.2011 10:02:23 sun.rmi.transport.tcp.TCPTransport handleMessages
FINE: RMI TCP Connection(4)-172.16.250.178: (port 49478) exception:
java.io.IOException: unknown transport op 115
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:552)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
30.Mar.2011 10:02:23 sun.rmi.transport.tcp.TCPConnection close
FINE: RMI TCP Connection(4)-172.16.250.178: close connection
30.Mar.2011 10:02:53 sun.rmi.transport.tcp.TCPTransport handleMessages
FINE: RMI TCP Connection(2)-172.16.250.178: (port 49478) connection closed
30.Mar.2011 10:02:53 sun.rmi.transport.tcp.TCPConnection close
FINE: RMI TCP Connection(2)-172.16.250.178: close connection
30.Mar.2011 10:02:53 sun.rmi.transport.tcp.TCPTransport handleMessages
FINE: RMI TCP Connection(1)-172.16.250.178: (port 49478) connection closed
30.Mar.2011 10:02:53 sun.rmi.transport.tcp.TCPTransport handleMessages
FINE: RMI TCP Connection(3)-172.16.250.178: (port 49478) connection closed
30.Mar.2011 10:02:53 sun.rmi.transport.tcp.TCPConnection close
FINE: RMI TCP Connection(3)-172.16.250.178: close connection
30.Mar.2011 10:02:53 sun.rmi.transport.tcp.TCPConnection close
FINE: RMI TCP Connection(1)-172.16.250.178: close connection


REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
public class JMXTest {

	public static void main(String[] args) throws Throwable {
		System.out.println("hello, world!");
		Thread.sleep(10000000);
	}
}

---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
change -Duser.language=tr param with -Duser.language=en (or fr, de etc.)
or change jvm 1.6 to 1.5

Release Regression From : 5.0
The above release value was the last known release where this 
bug was not reproducible. Since then there has been a regression.

Release Regression From : 
The above release value was the last known release where this 
bug was not reproducible. Since then there has been a regression.

Comments
Most likely the same issue as JDK-7187703
02-08-2013

EVALUATION It is not clear whether this is a bug in JMX, in the built-in management agent, or in RMI. Problems with the Turkish locale are often due to the fact that Turkish has two letters "i", a dotted one and a dotless one. The ASCII letter "i" is used for the lowercase dotted "i" but the ASCII letter "I" is used for the uppercase dotless "I"; non-ASCII characters are used for lowercase dotless "i" and uppercase dotted "I". Therefore "i".toUpperCase() and "I".toLowerCase() produce non-ASCII characters in this locale. I am guessing that some code somewhere is abusing these methods, for example by forcing a String to upper or lower case in order to do a case-insensitive comparison. Based on the traces that the submitter was kind enough to provide, my guess is that the bug is in RMI. I am not sure how code elsewhere could provoke the error "unknown transport op 115".
04-04-2011