You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Eduardo Montoya <hm...@hotmail.com> on 2009/03/26 17:55:30 UTC
RE: problems reading a cms::BytesMessage.
Hello, I have upgraded to the new 2.2.5 version of activemq-cpp
but when I receive a bytesmessage within onMessage listener method,
I get the following error:
< 836> 26 March 2009 05:34:55 PM[ERROR] - at [.\MyDispatcher.cpp ] (MyDispatcher::onMessage ) at line 110 ByteArrayInputStream::read - Buffer has not been initialized
FILE: ..\src\main\decaf\io\ByteArrayInputStream.cpp, LINE: 117
FILE: ..\src\main\decaf\io\ByteArrayInputStream.cpp, LINE: 146
FILE: ..\src\main\decaf\io\DataInputStream.cpp, LINE: 171
FILE: ..\src\main\activemq\connector\openwire\commands\ActiveMQBytesMessage.cpp, LINE: 324
FILE: .\MyDispatcher.cpp:MyDispatcher::onMessage, LINE: 99
the code is as follows:
void MyDispatcher::onMessage( const Message* message )
{
const BytesMessage* b = dynamic_cast<const BytesMessage* >( message );
if( b != NULL )
{
/* OLD HACK
* b->reset(); // this was my workaround hack using the previous version 2.2.4 (i made reset method const)
*/
try
{
msg->readInt();
}
MY_CATCH_RETHROW(Exception)
MY_CATCH_QL_EXCEPTION()
MY_CATCH_STD_EXCEPTION()
MY_CATCHALL_THROW(MyException)
}
}
please let me know if you are able to figure out what i am doing wrong!
> From: hm14194@hotmail.com
> To: users@activemq.apache.org
> Subject: RE: problems reading a cms::BytesMessage.
> Date: Fri, 20 Feb 2009 09:33:09 +0100
>
>
> Hi Tim,
>
>
>
> thanks for your answer.
>
>
>
> in fact, as a workaround I did clone the message, but even if I deleted the cloned message at the end of processing
>
> , memory usage increased very rapidly. about 200 MB in 30 seconds when receiving a lot of message from a topic.
>
> that's why i don't want to clone the message.
>
>
>
> i think message should be passed already in read-only status and with the input stream reset.
>
>
>
> as a workaround, and only for compiling client code, i modified the reset() prototype to make it const.
>
>
>
> it works now. i will try to read impl library code to verify if there is any reason why the message is not passed
>
> ready to be read.
>
>
>
> thanks again,
>
>
>
> Regards,
>
>
>
> Eduardo
>
>
>
>
> > Subject: Re: problems reading a cms::BytesMessage.
> > From: tabish121@gmail.com
> > To: users@activemq.apache.org
> > Date: Thu, 19 Feb 2009 14:24:21 -0500
> >
> > On Thu, 2009-02-19 at 19:06 +0100, Eduardo Montoya wrote:
> > > Hello,
> > >
> > > I have some problems when reading a cms::BytesMessage.
> > >
> > > first of all, my client code looks like:
> > >
> > > void MyMessageListener::onMessage( const Message* message )
> > > {
> > > const BytesMessage* b = dynamic_cast<const BytesMessage*>( message );
> > > if (b != NULL)
> > > {
> > > std::size_t len = b->getBodyLength(); // this line compiles and works.
> > >
> > > int i = b->readInt(); // this compiles but gives me an exception.
> >
> > Its possible that there's either no data in the message or we have a bug
> > in setting the message into readonly mode correctly.
> >
> > > // message is in write-only mode ....
> > >
> > > // then i tried to execute the following line to set the input stream to read-only
> > > b->reset(); // this line does not compile.
> >
> > You can't do this with async since the message is const here, you don't
> > own the message that's contained in the onMessage callback, if you
> > wanted to reset the message you'd need to call Message::clone to get a
> > new instance of it that's yours to alter or store for later use. This
> > might be a workaround if for you if we do in fact have a bug in the
> > code.
> >
> > >
> > > // VC++ 2008 express edition compiler says:
> > > // error C2662: 'cms::BytesMessage::reset' : cannot convert 'this' pointer from 'const
> > > // cms::BytesMessage' to 'cms::BytesMessage &'
> > >
> > > }
> > > }
> > >
> > > i found the following issue:
> > >
> > > https://issues.apache.org/activemq/browse/AMQCPP-143
> > >
> > > but it talks only about readXXX methods.
> > > not about reset method.
> > >
> > > could anyone give me any advice to resolve this problem?
> > >
> > > thank a lot for all your replies.
> > >
> >
> > If you can create a sample test case to reproduce this problem and
> > attach it to a new Jira issue we can look into what is going on and
> > hopefully get it fixed in the next release.
> >
> > > Kind Regards,
> > >
> > > Eduardo
> > >
> >
> > Regards
> > Tim.
> >
> >
> > --
> > Tim Bish
> > http://fusesource.com
> > http://timbish.blogspot.com/
> >
> >
> >
RE: problems reading a cms::BytesMessage.
Posted by Timothy Bish <ta...@gmail.com>.
On Thu, 2009-03-26 at 17:55 +0100, Eduardo Montoya wrote:
> Hello, I have upgraded to the new 2.2.5 version of activemq-cpp
>
> but when I receive a bytesmessage within onMessage listener method,
> I get the following error:
>
> < 836> 26 March 2009 05:34:55 PM[ERROR] - at [.\MyDispatcher.cpp ] (MyDispatcher::onMessage ) at line 110 ByteArrayInputStream::read - Buffer has not been initialized
> FILE: ..\src\main\decaf\io\ByteArrayInputStream.cpp, LINE: 117
> FILE: ..\src\main\decaf\io\ByteArrayInputStream.cpp, LINE: 146
> FILE: ..\src\main\decaf\io\DataInputStream.cpp, LINE: 171
> FILE: ..\src\main\activemq\connector\openwire\commands\ActiveMQBytesMessage.cpp, LINE: 324
> FILE: .\MyDispatcher.cpp:MyDispatcher::onMessage, LINE: 99
>
> the code is as follows:
>
> void MyDispatcher::onMessage( const Message* message )
> {
> const BytesMessage* b = dynamic_cast<const BytesMessage* >( message );
> if( b != NULL )
> {
> /* OLD HACK
> * b->reset(); // this was my workaround hack using the previous version 2.2.4 (i made reset method const)
> */
> try
> {
> msg->readInt();
> }
> MY_CATCH_RETHROW(Exception)
> MY_CATCH_QL_EXCEPTION()
> MY_CATCH_STD_EXCEPTION()
> MY_CATCHALL_THROW(MyException)
> }
> }
>
> please let me know if you are able to figure out what i am doing wrong!
>
Can you open a new issue and attach your sample code that demonstrates
the problem. I don't see anything wrong in your sample code.
Regards
Tim.
--
Tim Bish
http://fusesource.com
http://timbish.blogspot.com/