# Wednesday, 08 March 2006
« Eclipse Again | Main | IKVM 0.26 rc2 »
IKVM 0.26 rc1

A new release candidate based on GNU Classpath 0.90 (the successor to 0.20). IKVM.GNU.Classpath.dll grew by more than a megabyte. A big part of this is due to the new crypto implementation that was merged into GNU Classpath. This a great improvement!

Updated japi results are available here.

  • Integrated GNU Classpath 0.90
  • Updated classpath.security with new security providers
  • Added "Windows Vista" as a possible value of os.name system property
  • Included VMObjectInputStream.currentClassLoader() fix from Classpath version
  • Fixed Float.toString() bug (1E8 would be converted to "1E+08.0" instead of "1.0E8")
  • Made some VMThread members package accessible to avoid accessor methods
  • Added copyright banners to executables (when run without command line arguments or with the -version option)
  • Added "-showversion" option to ikvm.exe
  • Fixed ikvmstub to use IKVM.Runtime.Util.GetClassFromTypeHandle() instead of IKVM.Runtime.Util.GetFriendlyClassFromType(), because that would cause problems on remapped types in mscorlib.
  • Fixed support for dynamically instantiating a class that was not loadable at method compilation time.
  • Added support for running interface static initializer when accessing a final field.
  • Moved most .NET resource reading code from IKVM.GNU.Classpath to IKVM.Runtime, to make it easier to use new resource and compression APIs on Whidbey.
  • Introduced ikvm.io.InputStreamWrapper (wraps a java.io.InputStream around a System.IO.Stream).
  • Removed undocumented -manifestResources ikvmc option. When compiled for Whidbey, resources are now always stored as manifest resources.
  • When compiled for Whidbey, resources are now compressed using DeflateStream instead of custom compression.
  • Changed SoftReference never to be cleared, since there is no reliable way to detect low memory and clearing them too eagerly breaks Eclipse.
  • Fixed ikvmstub to also export implemented interfaces that are non-public.
  • Split off dynamic class loading support from ClassLoaderWrapper.cs into new DynamicClassLoader.cs.
  • Moved static compiler support from vm.cs to new file CompilerClassLoader.cs.
  • Fixed CompiledTypeWrapper and DotNetTypeWrapper to finish base class and interfaces in their Finish method.

Files are available here: ikvm-0.26.0.0.zip (sources + binaries), ikvmbin-0.26.0.0.zip (binaries), ikvmbin-generics-0.26.0.0.zip (binaries built from generics branch)

Wednesday, 08 March 2006 11:14:37 (W. Europe Standard Time, UTC+01:00)  #    Comments [1]
Friday, 10 March 2006 10:22:47 (W. Europe Standard Time, UTC+01:00)
We're using ikvm to access ActiveMQ (activemq.org) from.NET. When we run a .NET 1.1 client, connections to ActiveMQ runs flawlessly. However, when we move to .NET 2.0 clients, the socketconnections to ActiveMQ drops off after about 5 seconds. Stacktrace at bottom. Is this an issue for the GNU classpath project? Stacktrace:
INFO Thread-1 org.activemq.ActiveMQConnection - channel status changed: Channel: TcpTransportChannel: Socket[addr=localhost/127.0.0.1,port=61616,localport=1241] has connected
DEBUG TcpTransportChannel: Socket[addr=localhost/127.0.0.1,port=61616,localport=1241] org.activemq.transport.tcp.TcpTransportChannel - TCP consumer thread starting
INFO TcpTransportChannel: Socket[addr=localhost/127.0.0.1,port=61616,localport=1241] org.activemq.ActiveMQConnection - channel status changed: Channel: TcpTransportChannel: Socket[addr=localhost/127.0.0.1,port=61616,localport=1241] has disconnected
DEBUG TcpTransportChannel: Socket[addr=localhost/127.0.0.1,port=61616,localport=1241] org.activemq.util.JMSExceptionHelper - Error reading socket: java.net.SocketException: A non-blocking connect operation cannot be completed immediately
java.net.SocketException: A non-blocking connect operation cannot be completed immediately
at gnu.java.net.PlainSocketImpl.convertSocketExceptionToIOException (PlainSocketImpl.java:83)
at gnu.java.net.PlainSocketImpl.read (PlainSocketImpl.java:352)
at gnu.java.net.PlainSocketImpl$1.read (PlainSocketImpl.java:606)
at java.io.FilterInputStream.read (FilterInputStream.java:189)
at java.io.BufferedInputStream.refill (BufferedInputStream.java:371)
at java.io.BufferedInputStream.read (BufferedInputStream.java:229)
at java.io.DataInputStream.readByte (DataInputStream.java:152)
at org.activemq.io.AbstractWireFormat.readPacket (AbstractWireFormat.java:230)
at org.activemq.transport.tcp.TcpTransportChannel.run (TcpTransportChannel.java:313)
at java.lang.Thread.run (Thread.java:675)
at java.lang.VMThread.run (VMThread.java:44)
at java.lang.VMThread$1.Invoke (VMThread.java:299)
at cli.System.Threading.ThreadHelper.ThreadStart_Context (Unknown Source)
at cli.System.Threading.ExecutionContext.Run (Unknown Source)
at cli.System.Threading.ThreadHelper.ThreadStart (Unknown Source)

WARN TcpTransportChannel: Socket[addr=localhost/127.0.0.1,port=61616,localport=1241] org.activemq.ActiveMQConnection - Async exception with no exception listener: javax.jms.JMSException: Error reading socket: java.net.SocketException: A non-blocking connect operation cannot be completed immediately
javax.jms.JMSException: Error reading socket: java.net.SocketException: A non-blocking connect operation cannot be completed immediately
at org.activemq.util.JMSExceptionHelper.newJMSException (JMSExceptionHelper.java:49)
at org.activemq.transport.tcp.TcpTransportChannel.doClose (TcpTransportChannel.java:513)
at org.activemq.transport.tcp.TcpTransportChannel.run (TcpTransportChannel.java:332)
at java.lang.Thread.run (Thread.java:675)
at java.lang.VMThread.run (VMThread.java:44)
at java.lang.VMThread$1.Invoke (VMThread.java:299)
at cli.System.Threading.ThreadHelper.ThreadStart_Context (Unknown Source)
at cli.System.Threading.ExecutionContext.Run (Unknown Source)
at cli.System.Threading.ThreadHelper.ThreadStart (Unknown Source)
Caused by: java.net.SocketException: A non-blocking connect operation cannot be completed immediately
at gnu.java.net.PlainSocketImpl.convertSocketExceptionToIOException (PlainSocketImpl.java:83)
at gnu.java.net.PlainSocketImpl.read (PlainSocketImpl.java:352)
at gnu.java.net.PlainSocketImpl$1.read (PlainSocketImpl.java:606)
at java.io.FilterInputStream.read (FilterInputStream.java:189)
at java.io.BufferedInputStream.refill (BufferedInputStream.java:371)
at java.io.BufferedInputStream.read (BufferedInputStream.java:229)
at java.io.DataInputStream.readByte (DataInputStream.java:152)
at org.activemq.io.AbstractWireFormat.readPacket (AbstractWireFormat.java:230)
at org.activemq.transport.tcp.TcpTransportChannel.run (TcpTransportChannel.java:313)
... 6 more

DEBUG TcpTransportChannel: Socket[addr=localhost/127.0.0.1,port=61616,localport=1241] org.activemq.ActiveMQConnection - Exception closing the connection
javax.jms.JMSException: syncSendTimedOut: connection no longer OK
at org.activemq.ActiveMQConnection.syncSendPacket (ActiveMQConnection.java:1392)
at org.activemq.ActiveMQConnection.sendConnectionInfoToBroker (ActiveMQConnection.java:1617)
at org.activemq.ActiveMQConnection.close (ActiveMQConnection.java:762)
at org.activemq.ActiveMQConnection.onException (ActiveMQConnection.java:1138)
at org.activemq.transport.TransportChannelSupport.onAsyncException (TransportChannelSupport.java:446)
at org.activemq.transport.tcp.TcpTransportChannel.doClose (TcpTransportChannel.java:516)
at org.activemq.transport.tcp.TcpTransportChannel.run (TcpTransportChannel.java:332)
at java.lang.Thread.run (Thread.java:675)
at java.lang.VMThread.run (VMThread.java:44)
at java.lang.VMThread$1.Invoke (VMThread.java:299)
at cli.System.Threading.ThreadHelper.ThreadStart_Context (Unknown Source)
at cli.System.Threading.ExecutionContext.Run (Unknown Source)
at cli.System.Threading.ThreadHelper.ThreadStart (Unknown Source)

Lars
Name
E-mail
Home page

I apologize for the lameness of this, but the comment spam was driving me nuts. In order to be able to post a comment, you need to answer a simple question. Hopefully this question is easy enough not to annoy serious commenters, but hard enough to keep the spammers away.

Anti-Spam Question: What method on java.lang.System returns an object's original hashcode (i.e. the one that would be returned by java.lang.Object.hashCode() if it wasn't overridden)? (case is significant)

Answer:  
Comment (HTML not allowed)  

Live Comment Preview