# Tuesday, 06 September 2011
New Development Snapshot

Time for a new snapshot.

Changes:

  • Enabled parallel class loading.
  • Fix ClassLoader.findLoadedClass0() to handle null string.
  • Fixed class loader to always check parent class loader for validity.
  • Implemented platform MBean server support (although with very limited information/exposed operations).
  • Fixed race condition in Thread.initContextClassLoader().
  • Updated StringHelper to OpenJDK 7.
  • Fixed field reflection not use "slow path" to get consistent exception behavior (accessing Throwable fields on non-Java exceptions is not supported).
  • Implemented Unsafe.defineClass().
  • Completed implementation of new Unsafe.copyMemory() overload. This fixes several direct ByteBuffer regressions (introduced when we started using OpenJDK 7).
  • Implemented SocketChannel.sendOutOfBandData().
  • Implemented DatagramChannel multicast methods.
  • Fix for #3404229.
  • Bug fix. Don't create a miranda method if the class already has a static method with the same signature.

Binaries available here: ikvmbin-7.0.4266.zip

Tuesday, 06 September 2011 12:07:48 (W. Europe Daylight Time, UTC+02:00)  #    Comments [5]
# Thursday, 01 September 2011
Platform MBean Server

The release notes for IKVM.NET have always said "Not implemented" for java.lang.management and javax.management. This was mostly due to the fact that I don't know very much about this area of Java and it doesn't make a lot of sense to use Java management tools when the equivalent .NET management tools are probably a better fit (at least for VM level operations).

This week, prompted by a question on the ikvm-developers list, I decided to look into improving the situation (a bit). As a result it is now possible to get the platform MBean server and to connect to it with the jconsole application.

To start the server run the following code:

java.lang.System.setProperty("com.sun.management.jmxremote", "true");
java.lang.System.setProperty("com.sun.management.jmxremote.authenticate", "false");
java.lang.System.setProperty("com.sun.management.jmxremote.ssl", "false");
java.lang.System.setProperty("com.sun.management.jmxremote.port", "9999");

sun.management.Agent.startAgent();

Now when you start jconsole in the following way, you can connect to localhost:9999

jconsole -J-Dcom.sun.management.jmxremote.ssl=false

Note that the mechanism that jconsole uses to detect and connect to locally running JDK instances is very platform specific and is not supported. Note also that IKVM does not support "agents" , so you have to start the management agent explicitly by calling it directly.

Limitations

The information (and operations) exposed is pretty limited. I still maintain that using .NET specific management tools is a better solution, but if you have any specific scenario you want to see supported, please let me know and I'll consider it.

Code

If you want to play with it, the binaries are available here: ikvmbin-7.0.4261.zip

Thursday, 01 September 2011 11:16:57 (W. Europe Daylight Time, UTC+02:00)  #    Comments [2]