[jboss-jira] [JBoss JIRA] Updated: (JBMESSAGING-1101) Failure to deserialize BytesMessage contents

Tim Fox (JIRA) jira-events at lists.jboss.org
Sat Oct 13 08:24:03 EDT 2007


     [ http://jira.jboss.com/jira/browse/JBMESSAGING-1101?page=all ]

Tim Fox updated JBMESSAGING-1101:
---------------------------------

          Component/s:     (was: Messaging Core)
    Affects Version/s:     (was: 1.4.0.GA)

> 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