вторник, 10 июля 2012 г.

netty 3.5.1 bundle in Felix 3.2.1 osgi Container = ClassNotFoundException

netty 3.5.1 started in osgi (felix 3.2.1):

...
[org.jboss.netty.util.internal.QueueFactory] - Unable to instance LinkedTransferQueue, fallback to LegacyLinkedTransferQueue
java.lang.NoClassDefFoundError: Could not initialize class org.jboss.netty.util.internal.LinkedTransferQueue
 at org.jboss.netty.util.internal.QueueFactory.createQueue(QueueFactory.java:53) ~[na:na]
 at org.jboss.netty.channel.socket.nio.AbstractNioWorker.(AbstractNioWorker.java:111) ~[netty-3.5.1.Final.jar:na]
 at org.jboss.netty.channel.socket.nio.NioWorker.(NioWorker.java:44) ~[netty-3.5.1.Final.jar:na]
 at org.jboss.netty.channel.socket.nio.NioWorkerPool.createWorker(NioWorkerPool.java:34) ~[netty-3.5.1.Final.jar:na]
 at org.jboss.netty.channel.socket.nio.NioWorkerPool.createWorker(NioWorkerPool.java:26) ~[netty-3.5.1.Final.jar:na]
 at org.jboss.netty.channel.socket.nio.AbstractNioWorkerPool.(AbstractNioWorkerPool.java:58) ~[netty-3.5.1.Final.jar:na]
 at org.jboss.netty.channel.socket.nio.NioWorkerPool.(NioWorkerPool.java:29) ~[netty-3.5.1.Final.jar:na]
 at org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory.(NioClientSocketChannelFactory.java:149) ~[netty-3.5.1.Final.jar:na]
 at org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory.(NioClientSocketChannelFactory.java:114) ~[netty-3.5.1.Final.jar:na]
...

If you debug and dig into netty source code - you'll find more descriptive exception: java.lang.ClassNotFoundException: sun.misc.Unsafe not found by org.jboss.netty

The problem seems that osgi container doesn't normally expose sun.misc.* internals, so the application cannot find it, though it's Oracle Jdk 1.6 with this stuff inside.

Looking further to the source code - you'll find the workaround: -Dorg.jboss.netty.tryUnsafe=false

p.s. issue discussion on the netty github tracker

Комментариев нет:

Отправить комментарий