public CommandMessage parser( OrderRoutingInstance instance, ProductRoute orderRoute, CommandMessage order) throws Exception { Exception error = null; try { // check SMS syntax if (order.getChannel().equals("SMS")) { smsParser(instance, orderRoute, order); } if (order.getStatus() != Constants.ORDER_STATUS_DENIED) { order.setCause(orderRoute.getKeyword()); order.setStatus(Constants.ORDER_STATUS_APPROVED); SubscriberCampaignImpl.createCampaignEvent( order.getUserId(), order.getUserName(), order.getOrderId(), order.getOrderDate(), order.getSubscriberId(), order.getSubProductId(), order.getIsdn(), order.getSubscriberType(), order.getProductId(), order.getServiceAddress(), order.getKeyword(), order.getCampaignId(), order.getSegmentId(), null, Constants.DEFAULT_ID, "", Constants.ORDER_STATUS_PENDING); } } catch (Exception e) { error = e; } if (error != null) { order.setStatus(Constants.ORDER_STATUS_DENIED); if (error instanceof AppException) { order.setCause(error.getMessage()); } else { order.setDescription(error.getMessage()); } } if ((error != null) && !(error instanceof AppException)) { throw error; } return order; }
public CommandMessage sendOrder(Object request, String correlationId, long timeout) throws Exception { if (timeout <= 0) { timeout = 30000; } long startTime = System.currentTimeMillis(); QueueSession session = null; MessageProducer producer = null; Message message = null; Message callBack = null; CommandMessage response = null; if (request instanceof CommandMessage) { response = (CommandMessage) request; } else { response = new CommandMessage(); } try { Queue sendQueue = QueueFactory.getQueue(QueueFactory.ORDER_REQUEST_QUEUE); session = QueueFactory.getSession(); message = QueueFactory.createObjectMessage(session, request); producer = session.createProducer(sendQueue); try { long beforeSend = System.currentTimeMillis(); producer.send(message); long afterSend = System.currentTimeMillis(); log.info( "Send:" + (afterSend - beforeSend) + ((afterSend - beforeSend) > 20 ? "|high" : "|low") + "|SessionId:" + correlationId); } catch (Exception ex) { log.info("Send message error"); throw ex; } finally { QueueFactory.closeQueue(producer); QueueFactory.closeQueue(session); } if (!correlationId.equals("")) { startTime = System.currentTimeMillis(); long beforeReceive = System.currentTimeMillis(); QueueFactory.callbackListerner.put(message.getJMSCorrelationID(), message); synchronized (message) { try { message.wait(timeout); } catch (Exception e) { } finally { callBack = (Message) QueueFactory.callbackOrder.remove(message.getJMSCorrelationID()); QueueFactory.callbackListerner.remove(message.getJMSCorrelationID()); } } long afterReceive = System.currentTimeMillis(); log.info( "Receive:" + (afterReceive - beforeReceive) + ((afterReceive - beforeReceive) > 300 ? "|high " : "|low") + "|SessionId:'" + correlationId); } if (callBack == null) { throw new AppException("time-out"); } Object content = QueueFactory.getContentMessage(callBack); if (content != null) { if (content instanceof CommandMessage) { response = (CommandMessage) content; } else { response.setStatus(Constants.ORDER_STATUS_DENIED); response.setCause(Constants.ERROR); } } else { response.setStatus(Constants.ORDER_STATUS_DENIED); response.setCause(Constants.ERROR_TIMEOUT); } log.info( "Cost time:" + (System.currentTimeMillis() - startTime) + "|sessionId:" + correlationId); } catch (Exception e) { log.info(e); response.setStatus(Constants.ORDER_STATUS_DENIED); response.setCause(Constants.ERROR_RESOURCE_BUSY); throw e; } finally { } if ((response != null) && (response.getStatus() == Constants.ORDER_STATUS_DENIED)) { log.error("sessionId = " + correlationId + ", timeout = " + timeout + " : " + response); } return response; }