Martins
Martins

Reputation: 1261

Wildfly 8.2 ClassNotFoundException sun.misc.Unsafe from Module "io.netty:main" when connecting from different WildFly instance

When a "client" WildFly-8.2 instance connects to the HornetQ server started by a different WidlFly-8.2 instance, the server side repeatedly throws a ClassNotFoundException and writes this WARN message with a stacktrace to the instance log:

2015-07-15 18:43:41,223 WARNING [io.netty.channel.ChannelOutboundBuffer] (Thread-1 (hornetq-netty-threads--170443211)) Failed to release a message.: java.lang.NoClassDefFoundError: sun.misc.Unsafe
        at io.netty.util.internal.PlatformDependent.freeDirectBuffer(PlatformDependent.java:234) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.buffer.UnpooledDirectByteBuf.freeDirect(UnpooledDirectByteBuf.java:112) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.buffer.UnpooledDirectByteBuf.deallocate(UnpooledDirectByteBuf.java:596) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:120) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.util.ReferenceCountUtil.release(ReferenceCountUtil.java:68) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.ChannelOutboundBuffer.safeRelease(ChannelOutboundBuffer.java:509) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:268) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.nio.AbstractNioByteChannel.doWrite(AbstractNioByteChannel.java:216) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.socket.nio.NioSocketChannel.doWrite(NioSocketChannel.java:231) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:682) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:283) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:651) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.DefaultChannelPipeline$HeadHandler.flush(DefaultChannelPipeline.java:1038) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.DefaultChannelHandlerContext.invokeFlush(DefaultChannelHandlerContext.java:675) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.DefaultChannelHandlerContext.flush(DefaultChannelHandlerContext.java:656) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.ChannelDuplexHandler.flush(ChannelDuplexHandler.java:117) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.DefaultChannelHandlerContext.invokeFlush(DefaultChannelHandlerContext.java:675) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.DefaultChannelHandlerContext.access$1600(DefaultChannelHandlerContext.java:29) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.DefaultChannelHandlerContext$WriteTask.run(DefaultChannelHandlerContext.java:908) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:354) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [netty-all-4.0.15.Final.jar:4.0.15.Final]
        at java.lang.Thread.run(Thread.java:853) [vm.jar:1.7.0]
Caused by: java.lang.ClassNotFoundException: sun.misc.Unsafe from [Module "io.netty:main" from local module loader @7be7a114 (finder: local module finder @4861e893 (roots: /norma/wildfly/modules,/norma/wildfly/modules/system/layers/base))]
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.3.Final]
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.3.Final]
        ... 23 more

The connection between the two WildFly instances still works, but the log file quickly reaches 100% of the server disk quota, and then the server application stops.

My instance configures the messaging section for HornetQ which is supposed to accept external connections in the following manner:

<subsystem xmlns="urn:jboss:domain:messaging:2.0">
            <hornetq-server>
                <persistence-enabled>true</persistence-enabled>
                <security-enabled>false</security-enabled>
                <journal-file-size>102400</journal-file-size>
                <journal-min-files>2</journal-min-files>

                <connectors>
                    <http-connector name="http-connector" socket-binding="http">
                        <param key="http-upgrade-endpoint" value="http-acceptor"/>
                    </http-connector>
                    <http-connector name="http-connector-throughput" socket-binding="http">
                        <param key="http-upgrade-endpoint" value="http-acceptor-throughput"/>
                        <param key="batch-delay" value="50"/>
                    </http-connector>
                    <in-vm-connector name="in-vm" server-id="0"/>
                </connectors>

                <acceptors>
                    <http-acceptor http-listener="default" name="http-acceptor"/>
                    <http-acceptor http-listener="default" name="http-acceptor-throughput">
                        <param key="batch-delay" value="50"/>
                        <param key="direct-deliver" value="false"/>
                    </http-acceptor>
                    <netty-acceptor name="netty-norma" socket-binding="norma-jms-broker"/>
                    <netty-acceptor name="netty-norma-throughput" socket-binding="norma-jms-broker-throughput">
                        <param key="batch-delay" value="50"/>
                    </netty-acceptor>
                    <in-vm-acceptor name="in-vm" server-id="0"/>
                </acceptors>

                <security-settings>
                    <security-setting match="#">
                        <permission type="send" roles="guest"/>
                        <permission type="consume" roles="guest"/>
                        <permission type="createDurableQueue" roles="guest"/>
                        <permission type="deleteDurableQueue" roles="guest"/>
                        <permission type="createNonDurableQueue" roles="guest"/>
                        <permission type="deleteNonDurableQueue" roles="guest"/>
                    </security-setting>
                </security-settings>

                <address-settings>
                    <address-setting match="#">
                        <dead-letter-address>jms.queue.DLQ</dead-letter-address>
                        <expiry-address>jms.queue.ExpiryQueue</expiry-address>
                        <redelivery-delay>0</redelivery-delay>
                        <max-size-bytes>10485760</max-size-bytes>
                        <page-size-bytes>2097152</page-size-bytes>
                        <address-full-policy>PAGE</address-full-policy>
                        <message-counter-history-day-limit>10</message-counter-history-day-limit>
                    </address-setting>
                </address-settings>

                <jms-connection-factories>
                    <connection-factory name="InVmConnectionFactory">
                        <connectors>
                            <connector-ref connector-name="in-vm"/>
                        </connectors>
                        <entries>
                            <entry name="java:/ConnectionFactory"/>
                        </entries>
                    </connection-factory>
                    <connection-factory name="RemoteConnectionFactory">
                        <connectors>
                            <connector-ref connector-name="http-connector"/>
                        </connectors>
                        <entries>
                            <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
                        </entries>
                    </connection-factory>
                    <connection-factory name="DurableSubscribersConnectionFactory">
                        <connectors>
                            <connector-ref connector-name="http-connector"/>
                        </connectors>
                        <entries>
                            <entry name="java:/DurableSubscribersConnectionFactory"/>
                            <entry name="java:jboss/exported/DurableSubscribersConnectionFactory"/>
                        </entries>
                    </connection-factory>
                    <pooled-connection-factory name="hornetq-ra">
                        <transaction mode="xa"/>
                        <connectors>
                            <connector-ref connector-name="in-vm"/>
                        </connectors>
                        <entries>
                            <entry name="java:/JmsXA"/>
                            <entry name="java:jboss/DefaultJMSConnectionFactory"/>
                        </entries>
                    </pooled-connection-factory>
                </jms-connection-factories>

                <jms-destinations>
                    <jms-topic name="SunsetEventsTopic">
                        <entry name="jms/topic/SunsetEventsTopic"/>
                        <entry name="java:jboss/exported/jms/topic/SunsetEventsTopic"/>
                    </jms-topic>
                </jms-destinations>
            </hornetq-server>
        </subsystem>

And

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
        <socket-binding name="http" port="${jboss.http.port:8080}"/>
        <socket-binding name="https" port="${jboss.https.port:8443}"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <!-- CONNECT TO IBM HORNETQ BROKER -->
        <socket-binding name="norma-jms-broker" port="${norma.broker.port:5445}"/>
        <socket-binding name="norma-jms-broker-throughput" port="${norma.broker.port:5445}"/>
    </socket-binding-group>

How can I fix this problem?

Upvotes: 1

Views: 4004

Answers (3)

lie
lie

Reputation: 44

run configuration vm arguments. add "-Dio.netty.noUnsafe=true"

Upvotes: 0

Martins
Martins

Reputation: 1261

I followed Happy's advice and solved by configuring the netty module like this:

<module xmlns="urn:jboss:module:1.3" name="io.netty">
    <resources>
        <resource-root path="netty-all-4.0.15.Final.jar"/>
    </resources>

    <dependencies>
        <module name="sun.jdk" export="true" >
            <imports>
                <include path="sun/misc/Unsafe" />
            </imports>
        </module>
    </dependencies>
</module>

Upvotes: 2

happy
happy

Reputation: 2628

For this exception

Caused by: java.lang.ClassNotFoundException: sun.misc.Unsafe from [Module "io.netty:main" from local module loader @7be7a114 (finder: local module finder @4861e893 (roots: /norma/wildfly/modules,/norma/wildfly/modules/system/layers/base))]

Add dependencies in %jboss_home%/modules/system/layers/base/io/netty/main/module.xml

Module.xml will look like below

<module xmlns="urn:jboss:module:1.3" name="io.netty">
    <resources>
        <resource-root path="netty-all-4.0.15.Final.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="sun.jdk"/>
        <module name="org.javassist" optional="true"/>
    </dependencies>
</module>

Upvotes: 2

Related Questions