[jboss-jira] [JBoss JIRA] Closed: (JBMESSAGING-1101) Failure to deserialize BytesMessage contents
Tim Fox (JIRA)
jira-events at lists.jboss.org
Mon Oct 15 09:05:04 EDT 2007
[ http://jira.jboss.com/jira/browse/JBMESSAGING-1101?page=all ]
Tim Fox closed JBMESSAGING-1101.
--------------------------------
Resolution: Done
> Failure to deserialize BytesMessage contents
> --------------------------------------------
>
> Key: JBMESSAGING-1101
> URL: http://jira.jboss.com/jira/browse/JBMESSAGING-1101
> Project: JBoss Messaging
> Issue Type: Bug
> Environment: jboss-4.2.1.GA, jboss-remoting 2.2.2.SP1-brew, 7 node cluster
> Reporter: Travis Brown
> Assigned To: Tim Fox
> Fix For: 1.4.0.SP1
>
>
> BytesMessage consumers often receive the following error:
> Client side:
> 2007-10-09 06:54:12,076 [WorkerThread#1[10.7.68.52:2209]] ERROR ServerThread - Worker thread initialization failure
> java.io.EOFException
> at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:530)
> at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373)
> at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166)
> Server side:
> 2007-10-09 06:54:12,071 ERROR [org.jboss.jms.wireformat.JMSWireFormat] Failed to write packet
> java.lang.RuntimeException: Unknown type: 76
> at org.jboss.messaging.util.StreamUtils.readObject(StreamUtils.java:159)
> at org.jboss.messaging.core.impl.message.MessageSupport.readPayload(MessageSupport.java:435)
> at org.jboss.messaging.core.impl.message.MessageSupport.getPayload(MessageSupport.java:264)
> at org.jboss.jms.message.JBossBytesMessage.getPayloadAsByteArray(JBossBytesMessage.java:592)
> at org.jboss.messaging.core.impl.message.MessageSupport.write(MessageSupport.java:369)
> at org.jboss.jms.message.JBossMessage.write(JBossMessage.java:1048)
> at org.jboss.jms.wireformat.ClientDelivery.write(ClientDelivery.java:91)
> at org.jboss.jms.wireformat.JMSWireFormat.write(JMSWireFormat.java:237)
> at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedWrite(MicroSocketClientInvoker.java:983)
> at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:559)
> at org.jboss.remoting.transport.bisocket.BisocketClientInvoker.transport(BisocketClientInvoker.java:413)
> at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
> at org.jboss.remoting.Client.invoke(Client.java:1634)
> at org.jboss.remoting.Client.invoke(Client.java:548)
> at org.jboss.remoting.Client.invokeOneway(Client.java:598)
> at org.jboss.remoting.callback.ServerInvokerCallbackHandler.handleCallback(ServerInvokerCallbackHandler.java:815)
> at org.jboss.remoting.callback.ServerInvokerCallbackHandler.handleCallbackOneway(ServerInvokerCallbackHandler.java:686)
> at org.jboss.jms.server.endpoint.ServerSessionEndpoint.performDelivery(ServerSessionEndpoint.java:1494)
> at org.jboss.jms.server.endpoint.ServerSessionEndpoint.replicateDeliveryResponseReceived(ServerSessionEndpoint.java:1094)
> at org.jboss.messaging.core.impl.postoffice.MessagingPostOffice.handleReplicateDeliveryAck(MessagingPostOffice.java:1274)
> at org.jboss.messaging.core.impl.postoffice.ReplicateDeliveryAckMessage.execute(ReplicateDeliveryAckMessage.java:54)
> at org.jboss.messaging.core.impl.postoffice.GroupMember$DataReceiver.receive(GroupMember.java:582)
> at org.jgroups.JChannel.up(JChannel.java:1102)
> at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:382)
> at org.jgroups.stack.ProtocolStack.receiveUpEvent(ProtocolStack.java:398)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.FRAG2.up(FRAG2.java:197)
> at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.FC.up(FC.java:422)
> at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.pbcast.GMS.up(GMS.java:768)
> at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
> at org.jgroups.protocols.pbcast.GMS.receiveUpEvent(GMS.java:788)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:258)
> at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.UNICAST.handleDataReceived(UNICAST.java:516)
> at org.jgroups.protocols.UNICAST.up(UNICAST.java:242)
> at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:569)
> at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:170)
> at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.FD.up(FD.java:300)
> at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:301)
> at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.MERGE2.up(MERGE2.java:162)
> at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.Discovery.up(Discovery.java:225)
> at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
> at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
> at org.jgroups.protocols.TP.handleIncomingMessage(TP.java:908)
> at org.jgroups.protocols.TP.handleIncomingPacket(TP.java:850)
> at org.jgroups.protocols.TP.access$400(TP.java:45)
> at org.jgroups.protocols.TP$IncomingPacketHandler.run(TP.java:1296)
> at java.lang.Thread.run(Thread.java:595)
> In MessageSupport.getPayload(MessageSupport.java:264), if payload == null, it attempts to deserialize the byte array, which in this case is the content of the BytesMessage. StreamUtils.readObject(StreamUtils.java:159) will report "Unknown type" followed by the value of the first byte of the BytesMessage payload. (This could be misinterpreted during deserialization if the first byte happens to match a constant.)
> I am not sure how to recreate the test case yet (payload is perhaps typically non-null), but it happens frequently in our environment, where the BytesMessage is 95% of the traffic.
> This fix resolves the issue in our environment:
> diff -r org/jboss/jms/message/JBossBytesMessage.java
> 592c592
> < return (byte[])getPayload();
> ---
> > return (byte[])getBytesMessagePayload();
> diff -r org/jboss/messaging/core/impl/message/MessageSupport.java
> 281a282,303
> > public synchronized Object getBytesMessagePayload()
> > {
> > if (payload != null)
> > {
> > return payload;
> > }
> > else if (payloadAsByteArray != null)
> > {
> > payload = payloadAsByteArray;
> > payloadAsByteArray = null;
> > return payload;
> > }
> > else
> > {
> > return null;
> > }
> > }
> >
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list