sorry for the bare explanation.
I have a listener (in the server side) who receive request for send files (Streams):
public class RequestUpdateListener implements SessionAwareMessageListener {
private JmsTemplate jmsTemplate;
private String fileUpdateLocation;
public void onMessage(Message request, Session session) throws JMSException {
ActiveMQConnectionFactory connectionFactory = ((PooledConnectionFactory) jmsTemplate
.getConnectionFactory()).getConnectionFactory();
FileInputStream fis = null;
try {
fis = new FileInputStream(new File(fileUpdateLocation));
StreamSender ss = new StreamSender();
ss.send(connectionFactory, fis,uuid);
} catch (Exception e) {
e.printStackTrace();
}
}
.............
and a class:
public class StreamSender {
public void send(ConnectionFactory connectionFactory, FileInputStream fis, String uuid) {
try {
connection = (ActiveMQConnection) connectionFactory.createConnection();
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("TransferQueue");
int deliveryMode = DeliveryMode.NON_PERSISTENT;
int priority = 1;
long timeToLive = 0;
outputStreamMQ = connection.createOutputStream(destination, prop, deliveryMode, priority,
timeToLive);
int total = 0;
int reads;
byte[] array = new byte[8 * 1024];
while ((reads = fis.read(array)) != -1) {
outputStreamMQ.write(array, 0, reads);
}
JmsUtils.commitIfNecessary(session);
......
and again the spring container:
<bean id="updateContainer"
class="org.springframework.jms.listener.DefaultMes sageListenerContainer">
<property name="concurrentConsumers" value="50" />
<property name="connectionFactory" ref="jmsFactory" />
<property name="destination" ref="requestUpdateQueue" />
<property name="messageListener" ref="requestUpdateListener" />
</bean>
and in the client side I have a listener who receive the Stream:
public class NotificationListener implements SessionAwareMessageListener {
public void onMessage(Message response, Session session) throws JMSException {
String message = "xml descriptor";
jmsTemplate.convertAndSend(requestUpdateQueue, message, new MessagePostProcessor() {
public Message postProcessMessage(Message message) throws JMSException {
....
return message;
}
});
StreamReceiver receiver = new StreamReceiver();
receiver.setConnectionFactory(connectionFactory);
receiver.receive();
}
public class StreamReceiver {
public void receive() {
...
try {
connection = (ActiveMQConnection) connectionFactory.createConnection();
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("TransferQueue");
fisMQ = connection.createInputStream(destination, selector);
fos = new FileOutputStream("...");
int reads;
int total = 0;
byte[] array = new byte[8 * 1024];
while ((reads = fisMQ.read(array)) != -1) {
fos.write(array, 0, reads);
total += reads;
}
JmsUtils.commitIfNecessary(session);
.........
Now the problem arise when more than 2 client running in different machines does a request simultaneously, the server (StreamSender) stop the transfer
what could be this?


Reply With Quote