
package <vendor>.inquiry.start;
import <...>
@WebService(portName = "StartInquiryProcessAbs_Port", serviceName = "StartInquiryProcessAbs_Service", endpointInterface = "<vendor>.inquiry.start.StartInquiryProcessAbsLocal", targetNamespace = "http://<vendor>/inquiry/inquiryprocess", wsdlLocation = "META-INF/wsdl/<vendor>/inquiry/start/StartInquiryProcessAbs/StartInquiryProcessAbs.wsdl")
@Stateless
public class StartInquiryProcessAbs implements StartInquiryProcessAbsLocal {
private static final com.sap.tc.logging.Location logger = com.sap.tc.logging.Location.getLocation(StartInquiryProcessAbs.class);
@Resource
private SessionContext ctx;
public void startInquiryProcessAbs(<vendor>.inquiry.start.StartInquiryProcessRequest startInquiryProcessRequestMessage) {
StartInquiryProcessProvider startInquiryProcessProvider = new StartInquiryProcessProvider();
startInquiryProcessProvider.startInquiryProcess(startInquiryProcessRequestMessage, ctx.getCallerPrincipal().getName());
}
}
package <vendor>.inquiry.start;
import <...>
@WebService(portName = "StartInquiryProcessAbs_Port", serviceName = "StartInquiryProcessAbs_Service", endpointInterface = "<vendor>.inquiry.start.StartInquiryProcessAbsLocal", targetNamespace = "http://<vendor>/inquiry/inquiryprocess", wsdlLocation = "META-INF/wsdl/<vendor>/inquiry/start/StartInquiryProcessAbs/StartInquiryProcessAbs.wsdl")
@Stateless
public class StartInquiryProcessAbs implements StartInquiryProcessAbsLocal {
private static final com.sap.tc.logging.Location logger = com.sap.tc.logging.Location.getLocation(StartInquiryProcessAbs.class);
@Resource
private SessionContext ctx;
private static final com.sap.tc.logging.Location logger = com.sap.tc.logging.Location.getLocation(StartInquiryProcessAbs.class);
@Resource
private SessionContext ctx;
//JNDI lookup is used regarding @Resouce was not working inside the exception of startInquiryProcessAbs()
// @Resource(name = "<vendor>QueueConnectionFactory")
// private QueueConnectionFactory <vendor>QueueConnectionFactory;
// @Resource(name = "InquiryPrcQueue")
// private Queue inquiryPrcQueue;
// @Resource(name = "InquiryPrcCancelQueue")
// private Queue inquiryPrcCancelQueue;
public void startInquiryProcessAbs(<vendor>.inquiry.start.StartInquiryProcessRequest startInquiryProcessRequestMessage) {
try {
HashMap<String, String> requestParams = new HashMap<String, String>();
requestParams.put(StartInquiryProcessConstants.MASTERGUID, startInquiryProcessRequestMessage.getMasterGUID());
requestParams.put(StartInquiryProcessConstants.SENDERSID, startInquiryProcessRequestMessage.getSenderSID());
requestParams.put(StartInquiryProcessConstants.BUSINESSUNIT, startInquiryProcessRequestMessage.getBusinessUnit().value());
requestParams.put(StartInquiryProcessConstants.DOCUMENTTYPE, startInquiryProcessRequestMessage.getDocumentType().value());
requestParams.put(StartInquiryProcessConstants.COUNTRYCODE, startInquiryProcessRequestMessage.getCountryCode());
requestParams.put(StartInquiryProcessConstants.QUESTIONID, startInquiryProcessRequestMessage.getQuestionID());
requestParams.put(StartInquiryProcessConstants.INQUIRYUSERID, startInquiryProcessRequestMessage.getInquiryUserID());
StartInquiryProcessProvider startInquiryProcessProvider = new StartInquiryProcessProvider();
if (startInquiryProcessProvider.startInquiryProcess(requestParams, ctx.getCallerPrincipal().getName())) {
String cancelMessageId = this.sendMessageIntoInquiryPrcCancelQueue(requestParams);
logger.infoT("InquiryPrcCancelMessage was successfully stored into JMS queue \"InquiryPrcCancelQueue\" with message id " + cancelMessageId);
}
} catch (Exception e) {
SimpleLogger.traceThrowable(Severity.ERROR, logger, "aBPM inquiry process could not be started", e);
String messageId = this.sendMessageIntoInquiryPrcStartQueue(startInquiryProcessRequestMessage);
SimpleLogger.trace(Severity.ERROR, logger, "aBPM InquiryPrcStartMessage was successfully stored into JMS queue \"InquiryPrcQueue\" with message id " + messageId);
}
}
private String sendMessageIntoInquiryPrcStartQueue(<vendor>.inquiry.start.StartInquiryProcessRequest startInquiryProcessRequestMessage) {
QueueConnection queueConnection = null;
QueueSession queueSession = null;
QueueSender queueSender = null;
MapMessage message = null;
String messageId = null;
try {
InitialContext context = new InitialContext();
//JNDI lookup is used regarding @Resouce was not working inside the exception of startInquiryProcessAbs()
QueueConnectionFactory <vendor>QueueConnectionFactory = (QueueConnectionFactory) context.lookup("jmsfactory/<virtualprovider>/<vendor>QueueConnectionFactory");
queueConnection = <vendor>QueueConnectionFactory.createQueueConnection("<theJMSPrincipal>", "<theJMSCredential>");
queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue inquiryPrcQueue = (Queue) context.lookup("jmsqueues/<virtualprovider>/InquiryPrcQueue");
queueSender = queueSession.createSender(inquiryPrcQueue);
message = queueSession.createMapMessage();
message.setString(StartInquiryProcessConstants.MASTERGUID, startInquiryProcessRequestMessage.getMasterGUID());
message.setString(StartInquiryProcessConstants.SENDERSID, startInquiryProcessRequestMessage.getSenderSID());
message.setString(StartInquiryProcessConstants.BUSINESSUNIT, startInquiryProcessRequestMessage.getBusinessUnit().value());
message.setString(StartInquiryProcessConstants.DOCUMENTTYPE, startInquiryProcessRequestMessage.getDocumentType().value());
message.setString(StartInquiryProcessConstants.COUNTRYCODE, startInquiryProcessRequestMessage.getCountryCode());
message.setString(StartInquiryProcessConstants.QUESTIONID, startInquiryProcessRequestMessage.getQuestionID());
message.setString(StartInquiryProcessConstants.INQUIRYUSERID, startInquiryProcessRequestMessage.getInquiryUserID());
message.setString(StartInquiryProcessConstants.CALLERPRINCIPALUSERID, ctx.getCallerPrincipal().getName());
JAXBElement<StartInquiryProcessRequest> jaxbEle = new ObjectFactory().createStartInquiryProcessRequestMessage(startInquiryProcessRequestMessage);
JAXBContext jaxbContext = JAXBContext.newInstance(StartInquiryProcessRequest.class);
Marshaller marshaller = jaxbContext.createMarshaller();
StringWriter strWriter = new StringWriter();
marshaller.marshal(jaxbEle, strWriter);
message.setString(StartInquiryProcessConstants.ORIGINALTRIGGERPAYLOAD, strWriter.toString());
queueSender.send(message);
messageId = message.getJMSMessageID();
} catch (JMSException jmsExc) {
SimpleLogger.traceThrowable(Severity.ERROR, logger, "JMSException occurred inside sendMessageIntoInquiryPrcStartQueue()", jmsExc);
throw new RuntimeException(jmsExc);
} catch (JAXBException jaxbExc) {
SimpleLogger.traceThrowable(Severity.ERROR, logger, "JAXBException occurred inside sendMessageIntoInquiryPrcStartQueue()", jaxbExc);
throw new RuntimeException(jaxbExc);
} catch (NamingException nameExc) {
SimpleLogger.traceThrowable(Severity.ERROR, logger, "NamingException occurred inside sendMessageIntoInquiryPrcStartQueue()", nameExc);
throw new RuntimeException(nameExc);
} finally {
if (queueConnection != null) {
try {
queueConnection.close();
} catch (JMSException jmsExc) {
SimpleLogger.traceThrowable(Severity.ERROR, logger, "JMSException occurred inside sendMessageIntoInquiryPrcStartQueue() by closing QueueConnection", jmsExc);
throw new RuntimeException(jmsExc);
}
}
}
return messageId;
}
private String sendMessageIntoInquiryPrcCancelQueue(HashMap<String, String> requestParams) {
QueueConnection queueConnection = null;
QueueSession queueSession = null;
QueueSender queueSender = null;
MapMessage message = null;
String messageId = null;
try {
String jmsPrincipal = "<theJMSPrincipal>";
InitialContext context = new InitialContext();
//JNDI lookup is used regarding @Resouce was not working inside the exception of startInquiryProcessAbs()
QueueConnectionFactory <vendor>QueueConnectionFactory = (QueueConnectionFactory) context.lookup("jmsfactory/<virtualprovider>/<vendor>QueueConnectionFactory");
queueConnection = <vendor>QueueConnectionFactory.createQueueConnection(jmsPrincipal, "<theJMSCredential>");
queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue inquiryPrcCancelQueue = (Queue) context.lookup("jmsqueues/<virtualprovider>/InquiryPrcCancelQueue");
queueSender = queueSession.createSender(inquiryPrcCancelQueue);
message = queueSession.createMapMessage();
// correlation condition params inside process
// 1. MasterGUID
message.setString(TerminateInquiryProcessConstants.MASTERGUID, (String) requestParams.get(StartInquiryProcessConstants.MASTERGUID));
// 2. SenderSID
message.setString(TerminateInquiryProcessConstants.SENDERSID, (String) requestParams.get(StartInquiryProcessConstants.SENDERSID));
// 3. BusinessUnit
message.setString(TerminateInquiryProcessConstants.BUSINESSUNIT, (String) requestParams.get(StartInquiryProcessConstants.BUSINESSUNIT));
// params for protocol interface
// 1. Processor = JMSPrincipal
message.setString(TerminateInquiryProcessConstants.PROCESSOR, jmsPrincipal);
// 2. Reason = cancel reason
// IPO is a technical user = default language English, that means cancel reason will not be translated at the moment
message.setString(TerminateInquiryProcessConstants.REASON, MessageFormat.format(
"Automated inquiry process termination regarding the param InquiryUserID {0} could not be found inside ActiveDirectory/LDAP.", (String) requestParams
.get(StartInquiryProcessConstants.INQUIRYUSERID)));
queueSender.send(message);
messageId = message.getJMSMessageID();
} catch (JMSException jmsExc) {
SimpleLogger.traceThrowable(Severity.ERROR, logger, "JMSException occurred inside sendMessageIntoInquiryPrcCancelQueue()", jmsExc);
throw new RuntimeException(jmsExc);
} catch (NamingException nameExc) {
SimpleLogger.traceThrowable(Severity.ERROR, logger, "NamingException occurred inside sendMessageIntoInquiryPrcCancelQueue()", nameExc);
throw new RuntimeException(nameExc);
} finally {
if (queueConnection != null) {
try {
queueConnection.close();
} catch (JMSException jmsExc) {
SimpleLogger.traceThrowable(Severity.ERROR, logger, "JMSException occurred inside sendMessageIntoInquiryPrcCancelQueue() by closing QueueConnection", jmsExc);
throw new RuntimeException(jmsExc);
}
}
}
return messageId;
}
}
package <vendor>.inquiry.start;
import <...>
/**
* Message-Driven Bean implementation class for: StartInquiryProcessMDB
*
*/
@DeclareRoles(value={"BPMTriggerRole"})
@RunAs(value="BPMTriggerRole")
@MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }, mappedName = "InquiryPrcQueue")
public class StartInquiryProcessMDB implements MessageListener {
private static final com.sap.tc.logging.Location logger = com.sap.tc.logging.Location.getLocation(StartInquiryProcessMDB.class);
@Resource(name = "<vendor>QueueConnectionFactory")
private QueueConnectionFactory <vendor>QueueConnectionFactory;
@Resource(name = "InquiryPrcCancelQueue")
private Queue inquiryPrcCancelQueue;
@EJB
private PropertyProviderLocal propertyProvider;
public void onMessage(Message message) {
try {
if (message instanceof MapMessage) {
MapMessage mapMessage = (MapMessage) message;
HashMap<String, String> requestParams = new HashMap<String, String>();
requestParams.put(StartInquiryProcessConstants.MASTERGUID, mapMessage.getString(StartInquiryProcessConstants.MASTERGUID));
requestParams.put(StartInquiryProcessConstants.SENDERSID, mapMessage.getString(StartInquiryProcessConstants.SENDERSID));
requestParams.put(StartInquiryProcessConstants.BUSINESSUNIT, mapMessage.getString(StartInquiryProcessConstants.BUSINESSUNIT));
requestParams.put(StartInquiryProcessConstants.DOCUMENTTYPE, mapMessage.getString(StartInquiryProcessConstants.DOCUMENTTYPE));
requestParams.put(StartInquiryProcessConstants.COUNTRYCODE, mapMessage.getString(StartInquiryProcessConstants.COUNTRYCODE));
requestParams.put(StartInquiryProcessConstants.QUESTIONID, mapMessage.getString(StartInquiryProcessConstants.QUESTIONID));
requestParams.put(StartInquiryProcessConstants.INQUIRYUSERID, mapMessage.getString(StartInquiryProcessConstants.INQUIRYUSERID));
try {
StartInquiryProcessProvider startInquiryProcessProvider = new StartInquiryProcessProvider();
if (startInquiryProcessProvider.startInquiryProcess(requestParams, mapMessage.getString(StartInquiryProcessConstants.CALLERPRINCIPALUSERID))) {
String cancelMessageId = this.sendMessageIntoInquiryPrcCancelQueue(requestParams);
logger.infoT("InquiryPrcCancelMessage was successfully stored into JMS queue \"InquiryPrcCancelQueue\" with message id " + cancelMessageId);
}
} catch (Exception e) {
SimpleLogger.traceThrowable(Severity.ERROR, logger, "aBPM inquiry process could not be started", e);
throw new RuntimeException(e);
}
} else {
String errorMsg = "StartInquiryProcessMDB: Message is of wrong type: " + message.getClass().getName() + ", expected " + MapMessage.class.getName();
logger.errorT(errorMsg);
throw new RuntimeException(errorMsg);
}
} catch (JMSException e) {
String errorMsg = "StartInquiryProcessMDB: JMSException inside onMessage()";
logger.errorT(errorMsg);
throw new RuntimeException(errorMsg);
}
}
private String sendMessageIntoInquiryPrcCancelQueue(HashMap<String, String> requestParams) {
QueueConnection queueConnection = null;
QueueSession queueSession = null;
QueueSender queueSender = null;
MapMessage message = null;
String messageId = null;
try {
String jmsPrincipal = "<theJMSPrincipal>";
queueConnection = <vendor>QueueConnectionFactory.createQueueConnection(jmsPrincipal, "<theJMSCredential>");
queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(inquiryPrcCancelQueue);
message = queueSession.createMapMessage();
// correlation condition params inside process
// 1. MasterGUID
message.setString(TerminateInquiryProcessConstants.MASTERGUID, (String) requestParams.get(StartInquiryProcessConstants.MASTERGUID));
// 2. SenderSID
message.setString(TerminateInquiryProcessConstants.SENDERSID, (String) requestParams.get(StartInquiryProcessConstants.SENDERSID));
// 3. BusinessUnit
message.setString(TerminateInquiryProcessConstants.BUSINESSUNIT, (String) requestParams.get(StartInquiryProcessConstants.BUSINESSUNIT));
// params for protocol interface
// 1. Processor = JMSPrincipal
message.setString(TerminateInquiryProcessConstants.PROCESSOR, jmsPrincipal);
// 2. Reason = cancel reason
// IPO is a technical user = default language English, that means cancel reason will not be translated at the moment
message.setString(TerminateInquiryProcessConstants.REASON, MessageFormat.format(
"Automated inquiry process termination regarding the param InquiryUserID {0} could not be found inside ActiveDirectory/LDAP.", (String) requestParams
.get(StartInquiryProcessConstants.INQUIRYUSERID)));
queueSender.send(message);
messageId = message.getJMSMessageID();
} catch (JMSException jmsExc) {
SimpleLogger.traceThrowable(Severity.ERROR, logger, "JMSException occurred inside sendMessageIntoInquiryPrcCancelQueue()", jmsExc);
throw new RuntimeException(jmsExc);
} finally {
if (queueConnection != null) {
try {
queueConnection.close();
} catch (JMSException jmsExc) {
SimpleLogger.traceThrowable(Severity.ERROR, logger, "JMSException occurred inside sendMessageIntoInquiryPrcCancelQueue() by closing QueueConnection", jmsExc);
throw new RuntimeException(jmsExc);
}
}
}
return messageId;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ejb-j2ee-engine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ejb-j2ee-engine_3_0.xsd">
<security-permission>
<security-role-map>
<role-name>BPMTriggerRole</role-name>
<server-role-name>SAP_BPM_TRIGGER_EVENT</server-role-name>
</security-role-map>
</security-permission>
</ejb-j2ee-engine>
<?xml version="1.0" encoding="ASCII"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
<assembly-descriptor>
<security-role>
<role-name>BPMTriggerRole</role-name>
</security-role>
</assembly-descriptor>
</ejb-jar>
<?xml version="1.0" encoding="UTF-8"?>
<jms-resources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="jms-resources.xsd">
<connection-factory>
<name>"<vendor>QueueConnectionFactory"</name>
<sap-local-factory-type>
<type>javax.jms.QueueConnectionFactory</type>
<virtual-provider>"<virtualprovider>"</virtual-provider>
</sap-local-factory-type>
</connection-factory>
<destination>
<name>InquiryPrcErrorQueue</name>
<type>javax.jms.Queue</type>
<sap-local-destination-type>
<virtual-provider>"<virtualprovider>"</virtual-provider>
<property>
<description>Error Destination</description>
<config-property-name>errorDestination</config-property-name>
<config-property-value> </config-property-value>
</property>
</sap-local-destination-type>
</destination>
<destination>
<name>InquiryPrcCancelErrorQueue</name>
<type>javax.jms.Queue</type>
<sap-local-destination-type>
<virtual-provider>"<virtualprovider>"</virtual-provider>
<property>
<description>Error Destination</description>
<config-property-name>errorDestination</config-property-name>
<config-property-value> </config-property-value>
</property>
</sap-local-destination-type>
</destination>
<destination>
<name>InquiryPrcQueue</name>
<type>javax.jms.Queue</type>
<sap-local-destination-type>
<virtual-provider>"<virtualprovider>"</virtual-provider>
<property>
<description>Message Delivery Attempts Limited</description>
<config-property-name>deliveryAttemptsLimited</config-property-name>
<config-property-value>true</config-property-value>
</property>
<property>
<description>Maximum Delivery Attempts</description>
<config-property-name>maxDeliveryAttempts</config-property-name>
<config-property-value>3</config-property-value>
</property>
<property>
<description>Delay in Milliseconds</description>
<config-property-name>deliveryDelayInterval</config-property-name>
<config-property-value>5000</config-property-value>
</property>
<property>
<description>Error Destination</description>
<config-property-name>errorDestination</config-property-name>
<config-property-value>InquiryPrcErrorQueue</config-property-value>
</property>
<property>
<description>Load Balance Behavior</description>
<config-property-name>loadBalanceBehavior</config-property-name>
<config-property-value>3</config-property-value>
</property>
</sap-local-destination-type>
</destination>
<destination>
<name>InquiryPrcCancelQueue</name>
<type>javax.jms.Queue</type>
<sap-local-destination-type>
<virtual-provider>"<virtualprovider>"</virtual-provider>
<property>
<description>Message Delivery Attempts Limited</description>
<config-property-name>deliveryAttemptsLimited</config-property-name>
<config-property-value>true</config-property-value>
</property>
<property>
<description>Maximum Delivery Attempts</description>
<config-property-name>maxDeliveryAttempts</config-property-name>
<config-property-value>3</config-property-value>
</property>
<property>
<description>Delay in Milliseconds</description>
<config-property-name>deliveryDelayInterval</config-property-name>
<config-property-value>5000</config-property-value>
</property>
<property>
<description>Error Destination</description>
<config-property-name>errorDestination</config-property-name>
<config-property-value>InquiryPrcCancelErrorQueue</config-property-value>
</property>
<property>
<description>Load Balance Behavior</description>
<config-property-name>loadBalanceBehavior</config-property-name>
<config-property-value>3</config-property-value>
</property>
</sap-local-destination-type>
</destination>
<virtual-provider-properties>
<name>"<virtualprovider>"</name>
<property>
<description>runningMode</description>
<config-property-name>runningMode</config-property-name>
<config-property-value>GLOBAL</config-property-value>
</property>
</virtual-provider-properties>
</jms-resources>
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
16 | |
15 | |
13 | |
9 | |
9 | |
9 | |
8 | |
7 | |
7 | |
6 |