use of javax.jms.ObjectMessage in project ArachneCentralAPI by OHDSI.
the class BaseDataNodeMessagingController method getEntityRequests.
@RequestMapping(value = "/api/v1/data-nodes/entities", method = GET)
public List<CommonEntityRequestDTO> getEntityRequests(Principal principal) throws PermissionDeniedException, JMSException {
DataNode dataNode = getDatanode(principal);
final String requestQueue = getRequestQueueName(MessagingUtils.Entities.getBaseQueue(dataNode));
ConsumerTemplate consumerTpl = new ConsumerTemplate(destinationResolver, requestQueue, // Give some time for case when new connection to a broker is established
1000L);
List<CommonEntityRequestDTO> cohortRequests = new ArrayList<>();
while (true) {
ObjectMessage requestMessage = jmsTemplate.execute(consumerTpl, true);
if (requestMessage == null) {
break;
}
final CommonEntityRequestDTO cohortRequest = (CommonEntityRequestDTO) requestMessage.getObject();
cohortRequest.setId(requestMessage.getJMSCorrelationID());
cohortRequests.add(cohortRequest);
}
return cohortRequests;
}
use of javax.jms.ObjectMessage in project ArachneCentralAPI by OHDSI.
the class BaseAnalysisController method getEntityFiles.
protected List<MultipartFile> getEntityFiles(DataReferenceDTO entityReference, DataNode dataNode, CommonAnalysisType entityType) throws JMSException, IOException, URISyntaxException {
Long waitForResponse = datanodeImportTimeout;
Long messageLifeTime = datanodeImportTimeout;
String baseQueue = MessagingUtils.Entities.getBaseQueue(dataNode);
CommonEntityRequestDTO request = new CommonEntityRequestDTO(entityReference.getEntityGuid(), entityType);
ProducerConsumerTemplate exchangeTpl = new ProducerConsumerTemplate(destinationResolver, request, baseQueue, waitForResponse, messageLifeTime);
final ObjectMessage responseMessage = jmsTemplate.execute(exchangeTpl, true);
if (responseMessage == null) {
String message = String.format(ENTITY_IS_NOT_AVAILABLE, entityType.getTitle(), entityReference.getEntityGuid(), entityReference.getDataNodeId());
throw new ServiceNotAvailableException(message);
}
List<MultipartFile> files = new LinkedList<>();
final List<ImportedFile> importedFiles = (List<ImportedFile>) responseMessage.getObject();
if (entityType.equals(CommonAnalysisType.ESTIMATION)) {
files.addAll(importService.processEstimation(importedFiles));
} else {
files = importedFiles.stream().map(file -> conversionService.convert(file, MockMultipartFile.class)).collect(Collectors.toList());
}
if (entityType.equals(CommonAnalysisType.PREDICTION)) {
attachPredictionFiles(files);
}
if (entityType.equals(CommonAnalysisType.COHORT_CHARACTERIZATION)) {
attachCohortCharacterizationFiles(files);
}
if (entityType.equals(CommonAnalysisType.INCIDENCE)) {
attachIncidenceRatesFiles(files);
}
return files;
}
use of javax.jms.ObjectMessage in project ArachneCentralAPI by OHDSI.
the class BaseDataNodeMessageServiceImpl method getListRequest.
@Override
public CommonListEntityRequest getListRequest(DN dataNode) throws JMSException {
Map<String, CommonEntityRequestObject> requestMap = new LinkedHashMap<>();
String requestQueue = getRequestQueueName(MessagingUtils.EntitiesList.getBaseQueue(dataNode));
ConsumerTemplate consumerTpl = new ConsumerTemplate(destinationResolver, requestQueue, // Give some time for case when new connection to a broker is established
1000L);
while (true) {
ObjectMessage requestMessage = jmsTemplate.execute(consumerTpl, true);
if (requestMessage == null) {
break;
}
requestMap.put(requestMessage.getJMSCorrelationID(), (CommonEntityRequestObject) requestMessage.getObject());
}
return new CommonListEntityRequest(requestMap);
}
use of javax.jms.ObjectMessage in project ArachneCentralAPI by OHDSI.
the class BaseDataNodeMessageServiceImpl method getDataList.
@Override
@PreAuthorize("hasPermission(#dataNode, " + "T(com.odysseusinc.arachne.portal.security.ArachnePermission).IMPORT_FROM_DATANODE)")
public <T extends CommonEntityDTO> List<T> getDataList(DN dataNode, CommonAnalysisType analysisType) throws JMSException {
Long waitForResponse = messagingTimeout;
Long messageLifeTime = messagingTimeout;
// Get all Atlases available in user's tenant
List<IAtlas> atlasList = atlasService.findAll().stream().filter(a -> a.getVersion() != null).collect(Collectors.toList());
String baseQueue = MessagingUtils.EntitiesList.getBaseQueue(dataNode);
ProducerConsumerTemplate exchangeTpl = new ProducerConsumerTemplate(destinationResolver, new CommonEntityRequestObject(atlasList.stream().map(IAtlas::getId).collect(Collectors.toList()), analysisType), baseQueue, waitForResponse, messageLifeTime);
ObjectMessage responseMessage = jmsTemplate.execute(exchangeTpl, true);
List<T> entityList = (List<T>) responseMessage.getObject();
Map<Long, IAtlas> atlasMap = atlasList.stream().collect(Collectors.toMap(IAtlas::getId, a -> a));
entityList.forEach(e -> e.setName(atlasMap.get(e.getOriginId()).getName() + ": " + e.getName()));
return entityList;
}
use of javax.jms.ObjectMessage in project camel by apache.
the class JmsBinding method createJmsMessageForType.
/**
*
* Create the {@link Message}
*
* @return jmsMessage or null if the mapping was not successfully
*/
protected Message createJmsMessageForType(Exchange exchange, Object body, Map<String, Object> headers, Session session, CamelContext context, JmsMessageType type) throws JMSException {
switch(type) {
case Text:
{
TextMessage message = session.createTextMessage();
if (body != null) {
String payload = context.getTypeConverter().convertTo(String.class, exchange, body);
message.setText(payload);
}
return message;
}
case Bytes:
{
BytesMessage message = session.createBytesMessage();
if (body != null) {
byte[] payload = context.getTypeConverter().convertTo(byte[].class, exchange, body);
message.writeBytes(payload);
}
return message;
}
case Map:
{
MapMessage message = session.createMapMessage();
if (body != null) {
Map<?, ?> payload = context.getTypeConverter().convertTo(Map.class, exchange, body);
populateMapMessage(message, payload, context);
}
return message;
}
case Object:
ObjectMessage message = session.createObjectMessage();
if (body != null) {
try {
Serializable payload = context.getTypeConverter().mandatoryConvertTo(Serializable.class, exchange, body);
message.setObject(payload);
} catch (NoTypeConversionAvailableException e) {
// cannot convert to serializable then thrown an exception to avoid sending a null message
JMSException cause = new MessageFormatException(e.getMessage());
cause.initCause(e);
throw cause;
}
}
return message;
default:
break;
}
return null;
}
Aggregations