More info:
~~~~~~~
Digging into the source I found this test class:
org.apache.activemq.blob.DefaultBlobUploadStrategyTest
The code below show that the message is not sent via message.send() call. 
It is uploaded.
Should I add this part to my code:         strategy.uploadFile(msg, file); ?
As far as I understand I don't have to make an explicit call for this..
It should be handled by the msg.send() call - isn't it?

...
  public void xtestUploadViaDefaultBlobUploadStrategy() throws Exception {
        // 0. Initialise
        File file = File.createTempFile("amq-data-file-", ".dat");
        // lets write some data
        BufferedWriter writer = new BufferedWriter(new FileWriter(file));
        writer.append("Hello World!");
        writer.close();

        ActiveMQConnectionFactory factory = new
ActiveMQConnectionFactory(URI);
        BlobTransferPolicy policy = factory.getBlobTransferPolicy();

        ActiveMQBlobMessage msg = new ActiveMQBlobMessage();
        msg.setMessageId(new MessageId());

        // 1. Upload
        DefaultBlobUploadStrategy strategy = new
DefaultBlobUploadStrategy(policy);
        strategy.uploadFile(msg, file);

        // 2. Download
        msg.setURL(new URL(FILESERVER_URL + msg.getMessageId()));

        InputStream in = msg.getInputStream();
        long bytesRead = 0;
        byte[] buffer = new byte[1024 * 1024];

        while (true) {
            int c = in.read(buffer);
            if (c == -1) {
                break;
            }
            bytesRead += c;
        }
        in.close();
        TestCase.assertTrue(bytesRead == file.length());

        // 3. Delete
        strategy.deleteFile(msg);
    }
...

Avishay

balderman wrote:
> 
> Hi
> I am using ActiveMQ 5.1.
> I want to to use BlobMessage in order to send large amounts of data.
> When the consumer get the message  and the below code is executed:
>                  inputStream = blobMessage.getInputStream();
> the inputStream is null.
> I have seen few posts regarding this issue but I could not understand what
> is the right way to do it.
> More info:
> 1) The message sender and the message consumer run on my PC.
> 2) The message broker run on a different machine.
> 3) I am using Spring JMS template. Here is a config snippet of the Sender:
> (I replaced some part of the IP with xyz - but this is the IP of the
> message broker)
> ...
>   <bean id="jmsFactory"
> class="org.apache.activemq.pool.PooledConnectionFactory"
> destroy-method="stop">
>     <property name="connectionFactory">
>       <bean class="org.apache.activemq.ActiveMQConnectionFactory">
>         <property name="brokerURL">
>          
> <value>http://xyz.16.233.50:61618?jms.blobTransferPolicy.uploadUrl=http://xyz.16.233.50:8161/fileserver/</value>
>         </property>
>       </bean>
>     </property>
>   </bean>
> ...
> 4) Here is how I create the BlobMessage:
> blobMessage = activeMQSession.createBlobMessage(new File("path to the
> local file system here"));
> When I call blobMessage.getURL() I get null.
> If I create the message with a URL as argument:
> blobMessage = activeMQSession.createBlobMessage(new URL("url here"));
> the call to getURL() return a valid value. 
> 5) I know there is an option to use BlobTransferPolicy. Do I have to use
> it or the default is good enough?
> Please advice.
> 
> Thanks
> 
> Avishay
> 

-- 
View this message in context: 
http://www.nabble.com/BlobMessage---How-to-make-it-work--tp17644495s2354p17644989.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to