package com.sap.nwce.ra.edm.ejb.services;
import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource; import javax.ejb.Local; import javax.ejb.Stateless; import javax.ejb.TransactionManagement; import javax.ejb.TransactionManagementType; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage;
import com.sap.nwce.ra.edm.ejb.entity.CeraProject;
/** * JMS SenderSession. */ @Stateless @Local ({ProjectChangeSenderLocal.class}) @SuppressWarnings("boxing") @TransactionManagement(value = TransactionManagementType.CONTAINER) public class ProjectChangeSenderBean implements ProjectChangeSenderLocal {
@Resource(name="EDMQueueConnectionFactory") private ConnectionFactory queueConnectionFactory;
@Resource(name="prjChangeQueue") private Queue queue;
private Connection queueConnection;
public ProjectChangeSenderBean() { }
@PostConstruct public void initialize() { try { queueConnection = queueConnectionFactory.createConnection(); queueConnection.start(); } catch (JMSException jmse) { ReferenceApplicationEJBLogger.logException(jmse); throw new RuntimeException(jmse); } }
/** * Creates session, sender, message and send created message */ public void sendMessage(CeraProject pProject, String pCaller) { Session queueSession = null; MessageProducer queueSender = null; try { queueSession = queueConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); queueSender = queueSession.createProducer(queue); TextMessage textMsg = queueSession.createTextMessage(); textMsg.setIntProperty("ProjectId", pProject.getProjectId()); textMsg.setLongProperty("StartDate", pProject.getStartDate().getTime()); textMsg.setLongProperty("EndDate", pProject.getEndDate().getTime()); textMsg.setStringProperty("Title", pProject.getTitle()); textMsg.setStringProperty("Description", pProject.getDescription()); if(pProject.getLeader() != null) { textMsg.setIntProperty("LeadId", pProject.getLeader().getEmployeeId()); } else { textMsg.setIntProperty("LeadId", -1); } textMsg.setLongProperty("ChangeDate", System.currentTimeMillis()); textMsg.setIntProperty("Status", pProject.getStatus()); textMsg.setStringProperty("Changer", pCaller); queueSender.send(textMsg); } catch (JMSException jmse) { ReferenceApplicationEJBLogger.logException(jmse); throw new RuntimeException(jmse); } finally { if (queueSession != null) { try { queueSession.close(); } catch (JMSException jmse) { ReferenceApplicationEJBLogger.logException(jmse); } } } }
@PreDestroy public void stopSession() {
if (queueConnection != null) { try { queueConnection.close(); } catch (JMSException jmse) { ReferenceApplicationEJBLogger.logException(jmse); throw new RuntimeException(jmse); } } }
}
|