X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.activemq%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fjms%2FJmsAttachmentUploader.java;h=bdc242c9475d573bb1074aa78714f2346d3cfd61;hb=ffe7754e421f8ad5d3a336f54a498f67c6d72839;hp=f5ea454ea5143c6d98a5c32805e3d577f0d9d05e;hpb=44dd5750650b46d9979b4e06e4cc76c0b0003f4f;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentUploader.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentUploader.java index f5ea454ea..bdc242c94 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentUploader.java +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentUploader.java @@ -1,8 +1,23 @@ +/* + * Copyright (C) 2010 Mathieu Baudier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.argeo.slc.jms; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; import java.io.IOException; +import java.io.InputStream; import javax.jms.BytesMessage; import javax.jms.Destination; @@ -10,14 +25,21 @@ import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.slc.SlcException; import org.argeo.slc.core.attachment.Attachment; import org.argeo.slc.core.attachment.AttachmentUploader; import org.springframework.core.io.Resource; +import org.springframework.jms.JmsException; import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.core.MessageCreator; public class JmsAttachmentUploader implements AttachmentUploader { + private final static Log log = LogFactory + .getLog(JmsAttachmentUploader.class); + public final static String ATTACHMENT_ID = "slc_attachmentId"; public final static String ATTACHMENT_NAME = "slc_attachmentName"; public final static String ATTACHMENT_CONTENT_TYPE = "slc_attachmentContentType"; @@ -26,33 +48,44 @@ public class JmsAttachmentUploader implements AttachmentUploader { private Destination destination; public void upload(final Attachment attachment, final Resource resource) { - jmsTemplate.send(destination, new MessageCreator() { + try { + jmsTemplate.send(destination, new MessageCreator() { - public Message createMessage(Session session) throws JMSException { - BytesMessage message = session.createBytesMessage(); - message.setStringProperty(ATTACHMENT_ID, attachment.getUuid()); - message - .setStringProperty(ATTACHMENT_NAME, attachment - .getName()); - message.setStringProperty(ATTACHMENT_CONTENT_TYPE, attachment - .getContentType()); + public Message createMessage(Session session) + throws JMSException { + BytesMessage message = session.createBytesMessage(); + message.setStringProperty(ATTACHMENT_ID, attachment + .getUuid()); + message.setStringProperty(ATTACHMENT_NAME, attachment + .getName()); + message.setStringProperty(ATTACHMENT_CONTENT_TYPE, + attachment.getContentType()); - try { - BufferedInputStream in = new BufferedInputStream(resource - .getInputStream()); - byte[] buffer = new byte[1024 * 1024]; - while (in.read(buffer) > 0) { - message.writeBytes(buffer); + InputStream in = null; + try { + in = resource.getInputStream(); + byte[] buffer = new byte[1024 * 1024]; + int read = -1; + while ((read = in.read(buffer)) > 0) { + message.writeBytes(buffer, 0, read); + } + } catch (IOException e) { + throw new SlcException( + "Cannot write into byte message for attachment " + + attachment + " and resource " + + resource, e); + } finally { + IOUtils.closeQuietly(in); } - } catch (IOException e) { - throw new SlcException( - "Cannot write into byte message for attachment " - + attachment + " and resource " + resource, - e); + return message; } - return message; - } - }); + }); + } catch (JmsException e) { + if (log.isTraceEnabled()) + log.debug("Cannot upload", e); + else if (log.isDebugEnabled()) + log.debug("Cannot upload: " + e.getMessage()); + } }