Processing of messages
Hi all
continuing with my posts for today i would also like to know how and in which formats the messages are transformed under different level. your help in req for me to understand on this topic.
thkx
chako
hi,
inside XI they are all in XML (XI-SOAP)
the only thing that adapters do is to change
a) (flat file, excel etc) any format to XML
sender adapters
b) XML to any format (flat file, excel etc)
receiver adapters
so XI can always process them in XML only
Regards,
michal
<a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions"><b>XI / PI FAQ - Frequently Asked Questions</b></a>
Similar Messages
-
Sender Mail Adapter Error: exception caught during processing mail message;
HI , I am configuring mail to file scenario. Need to read mail content (no need to capture From,TO or Subject details) and create a file with the content in the mail.
Need to read mails from microsoft outlook. Exchange server has been configured for POP3 protocol.
Following are the details provoding in sender mail adapter:
URL: provided url in the format: pop://<server name>
Authentication method: plain
provided user credinetions to access mails.
poll interval - 1min
content encoding none.
processing parameters : quality of service-exactly once
Since there is no need to capture From,TO or Subject details, didn't select the option - use mail package.
Verified for unread mails in the mail box and made sure that there are few unread mails.
Also, created data types and other components in IR and completed mapping.
But after starting sender mail communication channel, getting error "exception caught during processing mail message; java.lang.NullPointerException" in RWB-adapter-communication channel monitoring.
please let me know what needs to be done to resolve this error.
Thanks.HI Stefan, i tried, but still it is giving same error. Yes, i am able to access outlook mail with the user credentials given in the communication channel to access exchange server.
I am using message protocol: xipayload . Also since i dont have to capture TO,from,subject details., created data type just with one element of type string, not in the standard format .Does this makes any difference. -
PI 7.11 process SOAP message with Attachments failed
Hello,
we have a scenario where the sender (3rd-Party) start a sync call via PI to a receiver (SAP BW system).
The receiver send a response with attachment. SAP processed the message successfully but sender could not processed message because the SOAP header do not have the attribut Content-Transfer-Encoding.
with this attribut I could tell the sender that the attachments are more then 7bit.
How to can I set this attribut into the SOAP header in the SAP PI?
Or have someone an other idee?
Thanks and regards
MartinHave a look at at MultipartHeaderBean and MessageTransformBean at [http://help.sap.com/saphelp_nwpi711/helpdata/en/cd/5af7c0c994e24fb0d0088443513de2/frameset.htm|http://help.sap.com/saphelp_nwpi711/helpdata/en/cd/5af7c0c994e24fb0d0088443513de2/frameset.htm]
It talks about content ID, content description, content type, content disposition but it does not mention Content-Transfer-Encoding.
Regards
Asif -
Bug Report: #SQLERRM_TEXT# in Process Error Message
According to the Online Help for "Process Error Message" #SQLERRM_TEXT# should be replaced by "Text of error message without the error number". But it isn't.
Patrick
My APEX Blog: http://inside-apex.blogspot.com
The ApexLib Framework: http://apexlib.sourceforge.net
The APEX Builder Plugin: http://sourceforge.net/projects/apexplugin/I created an after submit PL/SQL process:begin
raise_application_error(-20000,'custom error text');
end;In the process error message attribute, I put:
My error message with #SQLERRM_TEXT# in it.
I submit the page and see this page:ORA-20000: custom error text
Error My error message with custom error text in it.
OKScott -
Error while processing audit message
hi
I'm running a reconciliation, and throws me the following error .
please help me
ERROR,28 Aug 2009 03:50:32,492,[XELLERATE.AUDITOR],Error while processing audit message
java.lang.NullPointerException
at com.thortech.xl.audit.engine.AuditEngine.processSingleAudJmsEntry(Unknown Source)
at com.thortech.xl.audit.engine.AuditEngine.processOfflineNew(Unknown Source)
at com.thortech.xl.audit.engine.jms.XLAuditMessageHandler.execute(Unknown Source)
at com.thortech.xl.schedule.jms.messagehandler.MessageProcessUtil.processMessage(Unknown Source)
at com.thortech.xl.schedule.jms.messagehandler.AuditMessageHandlerMDB.onMessage(Unknown Source)
at sun.reflect.GeneratedMethodAccessor26.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.evermind.server.ejb.interceptor.joinpoint.EJBJoinPointImpl.invoke(EJBJoinPointImpl.java:35)
at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
at com.evermind.server.ejb.interceptor.system.DMSInterceptor.invoke(DMSInterceptor.java:52)
at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
at com.evermind.server.ejb.interceptor.system.SetContextActionInterceptor.invoke(SetContextActionInterceptor.java:44)
at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
at com.evermind.server.ejb.interceptor.system.RunAsInterceptor.invoke(RunAsInterceptor.java:31)
at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
at com.evermind.server.ejb.InvocationContextPool.invoke(InvocationContextPool.java:55)
at com.evermind.server.ejb.MessageDrivenConsumer.onMessage(MessageDrivenConsumer.java:347)
at com.evermind.server.ejb.MessageDrivenConsumer.processMessages(MessageDrivenConsumer.java:233)
at com.evermind.server.ejb.MessageDrivenConsumer.run(MessageDrivenConsumer.java:169)
at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:298)
at java.lang.Thread.run(Thread.java:595)Seems like Article ID: 864906.1
Cause
The cause of this problem is, the entries in aud_jms table which were not processed
after run "Issue Audit Messages Task" schedule task are not complete audit entries.
Solution
1. Run the following query.
select IDENTIFIER from aud_jms where aud_class='UserProfileAuditor'
IDENTIFIER is the usr_key.
Save the output of above query into text file. lets say a.txt, the a.txt will looks like........
a.txt
122896 122896 122997 122999 122999
122986
122997
2. Delete the all entries (rows ) from aud_jms table
3. Run the GenerateSnapshot.sh/GenerateSnapshot.bat using following parameter.
GenerateSnapshot.bat -inputFile E:\OIM9101\XLServer\xellerate\bin\a.txt -missingSnapshots -username xelsysadm -password xelsysadm -numOfThreads 2
Where E:\OIM9101\XLServer\xellerate\bin\a.txt is the location of text file which is created in Step1.
4. Run the "Issue Audit Messages Task" schedule task -
Single queue: concurrent processing of messages in multiple consumers
Hi,
I am new to jms . The goal is to process messages concurrently from a queue in an asynchronous listener's onMessage method by attaching a listener instance to multiple consumer's with each consumer using its own session and running in a separate thread, that way the messages are passed on to the different consumers for concurrent processing.
1) Is it ossible to process messsages concurrently from a single queue by creating multiple consumers ?
2) I came up with the below code, but would like to get your thoughts on whether the below code looks correct for what I want to accomplish.
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.walmart.platform.jms.client.JMSConnectionFactory;
public class QueueConsumer implements Runnable, MessageListener {
public static void main(String[] args) {
// Create an instance of the client
QueueConsumer consumer1 = new QueueConsumer();
QueueConsumer consumer2 = new QueueConsumer();
try {
consumer1.init("oms","US.Q.CHECKOUT-ORDER.1.0.JSON"); //US.Q.CHECKOUT-ORDER.1.0.JSON is the queue name
consumer2.init("oms","US.Q.CHECKOUT-ORDER.1.0.JSON");
}catch( JMSException ex ){
ex.printStackTrace();
System.exit(-1);
// Start the client running
Thread newThread1 = new Thread(consumer1);
Thread newThread2 = new Thread(consumer1);
newThread1.start();newThread2.start();
InputStreamReader aISR = new InputStreamReader(System.in);
char aAnswer = ' ';
do {
try {
aAnswer = (char) aISR.read();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
} while ((aAnswer != 'q') && (aAnswer != 'Q'));
newThread1.interrupt();
newThread2.interrupt();
try {
newThread1.join();newThread2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out
.println("--------------------exiting main thread------------------------"+Thread.currentThread().getId());
System.exit(0);
// values will be read from a resource properties file
private static String connectionFactoryName = null;
private static String queueName = null;
// thread safe object ref
private static ConnectionFactory qcf = null;
private static Connection queueConnection = null;
// not thread safe
private Session ses = null;
private Destination queue = null;
private MessageConsumer msgConsumer = null;
public static final Logger logger = LoggerFactory
.getLogger(QueueConsumer.class);
public QueueConsumer() {
super();
public void onMessage(Message msg) {
if (msg instanceof TextMessage) {
try {
System.out
.println("listener is "+Thread.currentThread().getId()+"--------------------Message recieved from queue is ------------------------"
+ ((TextMessage) msg).getJMSMessageID());
} catch (JMSException ex) {
ex.printStackTrace();
public void run() {
// Start listening
try {
queueConnection.start();
} catch (JMSException e) {
e.printStackTrace();
System.exit(-1);
while (!Thread.currentThread().isInterrupted()) {
synchronized (this) {
try {
wait();
} catch (InterruptedException ex) {
break;
* This method is called to set up and initialize the necessary Session,
* destination and message listener
* @param queue2
* @param factoryName
public void init(String factoryName, String queue2) throws JMSException {
try {
qcf = new JMSConnectionFactory(factoryName);
/* create the connection */
queueConnection = qcf.createConnection();
* Create a session that is non-transacted and is client
* acknowledged
ses = queueConnection.createSession(false,
Session.CLIENT_ACKNOWLEDGE);
queue = ses.createQueue(queue2);
logger.info("Subscribing to destination: " + queue2);
msgConsumer = ses.createConsumer(queue);
/* set the listener */
msgConsumer.setMessageListener(this);
System.out.println("Listening on queue " +queue2);
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
private static void setConnectionFactoryName(String name) {
connectionFactoryName = name;
private static String getQueueName() {
return queueName;
private static void setQueueName(String name) {
queueName = name;Hi Mark,
if the messages are sent with quality of service EO (=exactly once) you can add queues.
From documentation:
Netweaver XI -> Runtime -> Processing xml messages -> Queues for asynchronous message processing
...For incoming messages you set the parameter EO_INBOUND_PARALLEL from the Tuning category.
If more than one message is sent to the same receiver, use the configuration parameter EO_OUTBOUND_PARALLEL of the Tuning category to process messages simultaneously in different queues.
Transaction: SXMB_ADM
Regards
Holger -
Exception caught during processing mail message
I am getting the following error in CC monitoring for my sender mail adpater:
exception caught during processing mail message; java.io.IOException: invalid IMAP status response; not finding * STATUS, but 001I NO The requested item could not be found.
Please tell me how to resolve ?NOw when i changed the protocol from IMap to POP3 the error is
exception caught during processing mail message[18]; com.sap.aii.af.mp.processor.ModuleProcessorException: Error during processing local bean: localejbs/AF_modules/MessageTransformBean caused by: com.sap.engine.services.jndi.persistent.exceptions.NameNotFoundException: Path to object does not exist at AF_modules, the whole lookup name is localejbs/AF_modules/MessageTransformBean. -
RE: Processing Logged messages in batch mode ?
Paul,
One way to findout the log file is to inspect your
<CentralServer>.log. It should have a line something like..
Redirecting output to <someDirectory>/forte_ex_26564.log.
That is the file the the current ftexec is writing to.
This has worked fine for me.
Another way is to sort the files by date, and look at the latest
ones.
...I'd love to hear about a better way to do this.
Ajith Kallambella. M
Forte Systems Engineer
International Business Corporation.
-----Original Message-----
From: [email protected] [mailto:[email protected]]
Sent: Monday, March 01, 1999 9:06 AM
To: Forte-Users (Adresse de messagerie)
Subject: Processing Logged messages in batch mode ?
Hi,
When I launch partitions, they display a whole bunch of 'useful' messages.
(maybe using 'task.logmgr.putline')
I'm afraid these traces go directly in the launcher's log file under
$FORTE_ROOT/log
As I get control only when the ftexec ends for the next instruction to be
interpreted,
how can I figure out which of these log files relates to the ftexec I just
got executed ?
(example: "forte_ex_3613.log")
I found '/output' for node managers, but for single ftexec(s) ?
(thinking also about re-used ftexec(s))
Thanks in advance,
j-paul gabrielli
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>Paul,
One way to findout the log file is to inspect your
<CentralServer>.log. It should have a line something like..
Redirecting output to <someDirectory>/forte_ex_26564.log.
That is the file the the current ftexec is writing to.
This has worked fine for me.
Another way is to sort the files by date, and look at the latest
ones.
...I'd love to hear about a better way to do this.
Ajith Kallambella. M
Forte Systems Engineer
International Business Corporation.
-----Original Message-----
From: [email protected] [mailto:[email protected]]
Sent: Monday, March 01, 1999 9:06 AM
To: Forte-Users (Adresse de messagerie)
Subject: Processing Logged messages in batch mode ?
Hi,
When I launch partitions, they display a whole bunch of 'useful' messages.
(maybe using 'task.logmgr.putline')
I'm afraid these traces go directly in the launcher's log file under
$FORTE_ROOT/log
As I get control only when the ftexec ends for the next instruction to be
interpreted,
how can I figure out which of these log files relates to the ftexec I just
got executed ?
(example: "forte_ex_3613.log")
I found '/output' for node managers, but for single ftexec(s) ?
(thinking also about re-used ftexec(s))
Thanks in advance,
j-paul gabrielli
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/> -
FW: Processing Logged messages in batch mode ?
If you rename your partitions' log files before running the app and do the
renaming according to each partitions' purpose or partition number, then
after running the app, just go to the approprate log file. You can do the
renaming using system agents so that it is not a manual process.
Essentially, you know in advance where the output goes.
-Ravi
-----Original Message-----
From: J-Paul GABRIELLI [SMTP:[email protected]]
Sent: Monday, March 01, 1999 11:29 AM
To: 'Kalidindi, Ravi CWT-MSP'
Subject: RE: Processing Logged messages in batch mode ?
Sorry, I was looking for a batch way, when the partition is dead (i.E.
can't monitor it nor view it in escript)
No gui :-)
j-p
-----Message d'origine-----
De: Kalidindi, Ravi CWT-MSP [SMTP:[email protected]]
Date: lundi 1 mars 1999 17:51
A: 'Kallambella, Ajith'; 'J-Paul GABRIELLI'; 'Forte'
Objet: RE: Processing Logged messages in batch mode ?
In case of installed applications or running in distributed mode, you can
use econsole to choose the appropriate active partition and view the log
file for it. The "log file" window also displays the name of the
particular
log file. In case of installed applications, you can also rename the log
file for your partitions.
Hope that helps
-Ravi Kalidindi
Born Info Svcs Group
-----Original Message-----
From: Kallambella, Ajith [SMTP:[email protected]]
Sent: Monday, March 01, 1999 9:47 AM
To: 'J-Paul GABRIELLI'; 'Forte'
Subject: RE: Processing Logged messages in batch mode ?
Paul,
One way to findout the log file is to inspect your
<CentralServer>.log. It should have a line something like..
Redirecting output to <someDirectory>/forte_ex_26564.log.
That is the file the the current ftexec is writing to.
This has worked fine for me.
Another way is to sort the files by date, and look at the latest
ones.
...I'd love to hear about a better way to do this.
Ajith Kallambella. M
Forte Systems Engineer
International Business Corporation.
-----Original Message-----
From: [email protected] [mailto:[email protected]]
Sent: Monday, March 01, 1999 9:06 AM
To: Forte-Users (Adresse de messagerie)
Subject: Processing Logged messages in batch mode ?
Hi,
When I launch partitions, they display a whole bunch of 'useful'messages.
(maybe using 'task.logmgr.putline')
I'm afraid these traces go directly in the launcher's log file under
$FORTE_ROOT/log
As I get control only when the ftexec ends for the next instruction tobe
interpreted,
how can I figure out which of these log files relates to the ftexec Ijust
got executed ?
(example: "forte_ex_3613.log")
I found '/output' for node managers, but for single ftexec(s) ?
(thinking also about re-used ftexec(s))
Thanks in advance,
j-paul gabrielli
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>If you rename your partitions' log files before running the app and do the
renaming according to each partitions' purpose or partition number, then
after running the app, just go to the approprate log file. You can do the
renaming using system agents so that it is not a manual process.
Essentially, you know in advance where the output goes.
-Ravi
-----Original Message-----
From: J-Paul GABRIELLI [SMTP:[email protected]]
Sent: Monday, March 01, 1999 11:29 AM
To: 'Kalidindi, Ravi CWT-MSP'
Subject: RE: Processing Logged messages in batch mode ?
Sorry, I was looking for a batch way, when the partition is dead (i.E.
can't monitor it nor view it in escript)
No gui :-)
j-p
-----Message d'origine-----
De: Kalidindi, Ravi CWT-MSP [SMTP:[email protected]]
Date: lundi 1 mars 1999 17:51
A: 'Kallambella, Ajith'; 'J-Paul GABRIELLI'; 'Forte'
Objet: RE: Processing Logged messages in batch mode ?
In case of installed applications or running in distributed mode, you can
use econsole to choose the appropriate active partition and view the log
file for it. The "log file" window also displays the name of the
particular
log file. In case of installed applications, you can also rename the log
file for your partitions.
Hope that helps
-Ravi Kalidindi
Born Info Svcs Group
-----Original Message-----
From: Kallambella, Ajith [SMTP:[email protected]]
Sent: Monday, March 01, 1999 9:47 AM
To: 'J-Paul GABRIELLI'; 'Forte'
Subject: RE: Processing Logged messages in batch mode ?
Paul,
One way to findout the log file is to inspect your
<CentralServer>.log. It should have a line something like..
Redirecting output to <someDirectory>/forte_ex_26564.log.
That is the file the the current ftexec is writing to.
This has worked fine for me.
Another way is to sort the files by date, and look at the latest
ones.
...I'd love to hear about a better way to do this.
Ajith Kallambella. M
Forte Systems Engineer
International Business Corporation.
-----Original Message-----
From: [email protected] [mailto:[email protected]]
Sent: Monday, March 01, 1999 9:06 AM
To: Forte-Users (Adresse de messagerie)
Subject: Processing Logged messages in batch mode ?
Hi,
When I launch partitions, they display a whole bunch of 'useful'messages.
(maybe using 'task.logmgr.putline')
I'm afraid these traces go directly in the launcher's log file under
$FORTE_ROOT/log
As I get control only when the ftexec ends for the next instruction tobe
interpreted,
how can I figure out which of these log files relates to the ftexec Ijust
got executed ?
(example: "forte_ex_3613.log")
I found '/output' for node managers, but for single ftexec(s) ?
(thinking also about re-used ftexec(s))
Thanks in advance,
j-paul gabrielli
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/> -
Sequential processing of messages with bpm process
hi,
i have a bpm process that i want to process my messages sequential. for this i initially have played around with crerating my own queue but that didn t work. then i mocved to use the collect pattern and then process the messages. this works only for around 150 messages and the others are staying stuck in the queue for the bpm process the queue is in status stop. if a drop in another file then the queue get cleared and the new messages are placed in it and it still stays in stop and i need to delete queu and start again. Is there a solutio for this that the queue will collect the messages and when the bpm proces is finished it will start again ?
i have tried to avoid using the collect pattern and worked with my bpm process to let it use a specific queue but that also didn t work. i can process 1 message and then the rest stays in the queue? any help would be welcomeHey
is there any reason specific reason for using BPM?
you can use EOIO to transfer your files sequentially.
thanx
ahmad -
Processing Logged messages in batch mode ?
Hi,
When I launch partitions, they display a whole bunch of 'useful' messages.
(maybe using 'task.logmgr.putline')
I'm afraid these traces go directly in the launcher's log file under $FORTE_ROOT/log
As I get control only when the ftexec ends for the next instruction to be interpreted,
how can I figure out which of these log files relates to the ftexec I just got executed ?
(example: "forte_ex_3613.log")
I found '/output' for node managers, but for single ftexec(s) ?
(thinking also about re-used ftexec(s))
Thanks in advance,
j-paul gabrielliThe instrument "LogFile" on the active partition agent contains the name of
the log file.
At 10:47 AM 3/1/99 -0500, Kallambella, Ajith wrote:
Paul,
One way to findout the log file is to inspect your
<CentralServer>.log. It should have a line something like..
Redirecting output to <someDirectory>/forte_ex_26564.log.
That is the file the the current ftexec is writing to.
This has worked fine for me.
Another way is to sort the files by date, and look at the latest
ones.
...I'd love to hear about a better way to do this.
Ajith Kallambella. M
Forte Systems Engineer
International Business Corporation.
-----Original Message-----
From: [email protected] [mailto:[email protected]]
Sent: Monday, March 01, 1999 9:06 AM
To: Forte-Users (Adresse de messagerie)
Subject: Processing Logged messages in batch mode ?
Hi,
When I launch partitions, they display a whole bunch of 'useful' messages.
(maybe using 'task.logmgr.putline')
I'm afraid these traces go directly in the launcher's log file under
$FORTE_ROOT/log
As I get control only when the ftexec ends for the next instruction to be
interpreted,
how can I figure out which of these log files relates to the ftexec I just
got executed ?
(example: "forte_ex_3613.log")
I found '/output' for node managers, but for single ftexec(s) ?
(thinking also about re-used ftexec(s))
Thanks in advance,
j-paul gabrielli
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>============================================
Don Nelson
Senior Systems Architect
Forte Software, Inc.
Denver, CO
Phone: 303-265-7709
Corporate voice mail: 510-986-3810
aka: [email protected]
============================================
"Nothing spoils fun like finding out it builds character." - Calvin
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/> -
Processing JMS messages in sequence one after another
This is my use case which I wan to implement in OSB.
1. I have a queue which will receive messages in huge numbers from a single sender.
2. I have a proxy which will read each message and process the message and send it out.
In step 1 , I want each message to be read sequentially and when step 2 finishes executing then I want to read the next message from the queue.
I need to give an acknowledgment to JMS that the message has finished processing and it can make the next message available to the proxy.
What is the best option to implement this use case ?.
RegardsBy default Weblogic JMS Queues are FIFO. But that is true only if there is only one consumer of the queue.
In case of a clustered environment that is not true and in case of OSB even with a single managed server multiple threads are created for a JMS listener Proxy(by default 16). So there will be 16 instances of the Proxy trying to read messages from the Queue and each will be handed out a message and sequential integrity is disturbed.
There are three ways to overcome this problem:
1. Unit of Order
This is suitable only when you want messages of the same group to be processed sequentially while multiple groups can be processed in parallel.
For e.x. you are getting multiple orders for multiple customers and you want to ensure that the orders of same customer are processed sequentially (in case a customer tries to change the quantity of an order then the latest one should be processed last). In this case you can set UOO as the CustomerID and each customer's order will be processed sequentially but orders of different customers will be still processed in parallel. WLS JMS achieves this by assigning a target queue instance on the cluster for each UOO value. It will assign Q!MS1 to CustID=1, Q!MS2 to CustID=2 and so on. All messages of the same UOO(of the same customer) will go to the same instance on the queue. Furthermore it will ensure that no two messages of the same UOO are released together to the listeners. So if a queue instance has 5 messages each of both Cust=1 and Cust=2, only one message each of Cust1 and Cust2 will be processed by the listeners even if there are 16 listening threads.
Pros and Cons:
Overall performance is improved since you can still achieve some parallel processing.
There will be a slight overhead of processing the UOO headers on the JMS servers.
Can not ensure sequencing of all the messages. (Although you can achieve that by setting the same UOO on all the messages)
If the managed server assigned to a UOO is down, if a publisher tried to put the next message for that UOO, it will fail since it will not try to send that message to any other managed server.
2. Single threaded processing
If you don't want to process even different groups of messages in parallel and if you want absolute sequencing (i.e. irrespective of the CustomerID you want all the messages to be processed in the sequence they arrive) you will need to process them in a single threaded model. The JMS queue should be deployed on only one managed server of the cluster. The JMS proxy listening to the queue should also be deployed on a single managed server(You will need to change the targeting for the EJB created for this Proxy in the Deployments) and there should be a Work Manager for this Proxy with Maximum Thread Constraint set as 1. In the Connection Factory which the Proxy uses, set the Maximum Messages per session to 1. Another approach for Single threaded could be to set the same value of UOO on all of the messages. This will make all the messages to go to the same Q instance in the cluster and also will make sure that even if Proxy has multiple threads, only one message will be processed at a time.
Pros and Cons:
Completely single threaded processing, will take more time since messages will be processed one after the other.
Load balancing will go awry as all the messages will be processed by only one server.
3. Using custom implementation
The most complex way is to create a completely custom implementation. Put all the messages in a DB and then process them one at a time based on timestamp.
Pros and Cons:
It will take more effort to implement than the other two approaches.
It will again need single threaded processing after the messages are put on the DB
Performance wise there will be more impact because of additional DB calls
More complex to maintain
Based on your exact requirements you can choose which approach you want. If you have SOA suite as well them it would be better to move this solution to SOA suite as OESB(Mediator) component of SOA suite has re-sequencing feature. -
Queue processing of messages (files / idocs)
Hi,
We have 4 communication channels:
INT A
1 filesender (file)
1 filereceiver (idoc)
INT B
1 filesender (file)
1 filereceiver (idoc)
So, the issue is we need to process the messages in order. First, 2 files from INT A, next 1 file from INT B. The correlationship is the key.
Is any configuration possible for queue processing with no using of BPM?
Regards,hi,
yes you can set queue (EOIO) processing in both filesenders
and if you hava ERP (IDOC) on WAS 6.40 it can be processed
in this one queue
how to (IDOC queue processing part) described in my book:
<a href="/people/michal.krawczyk2/blog/2006/10/11/xi-new-book-mastering-idoc-business-scenarios-with-sap-xi"><b>Mastering IDoc Business Scenarios with SAP XI</b></a>
Regards,
michal
<a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions"><b>XI / PI FAQ - Frequently Asked Questions</b></a> -
Concurrent processing of messages
Hello,
We are splitting big messages in the file adapter.
After the split, we want XI to process the different messages concurrently (at the same time).
Does anybody have an idea how to arrange this?
Now all messages are processed after each other.
Regards,
MarkHi Mark,
if the messages are sent with quality of service EO (=exactly once) you can add queues.
From documentation:
Netweaver XI -> Runtime -> Processing xml messages -> Queues for asynchronous message processing
...For incoming messages you set the parameter EO_INBOUND_PARALLEL from the Tuning category.
If more than one message is sent to the same receiver, use the configuration parameter EO_OUTBOUND_PARALLEL of the Tuning category to process messages simultaneously in different queues.
Transaction: SXMB_ADM
Regards
Holger -
Process Success Message not working
Hi
I have created a process to send a mail on some button click...
The process success message i have given that
Mail Sent Successfully!
Though the mail is coming I am not getting the Mail Sent Message!
Can someone help to let me know what am I missing?
Thanks
AnkitOk another fishy question
Can a process sent a Successful Message without completing the task?
I get the message Mail Sent though I never receive the mail...
In test environment apex.oraclecorp.com it is working sending the mail.
But in production database.us.oracle.com it is not working :(
I have made the exact copy in production site!
What can i be missing? -
Sender jms adapter-archiving before processing the message
Hi,
Do we have any option in Sender JMS adapter to archive the message before processing the message?
I have searched in sender JMS adapter (XI7.0) settings, but couldn't find any option.
My assumption is whether any option provided in configuration setting of adapter engine or any other alternatives.
Thanks,
Srini.Hi Srini.
Here is the code. But you may prefer the EAR module, just for deploy. I need your email to send it to you.
If you want to create it yourself follow the steps in this guide and paste the code:
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/f013e82c-e56e-2910-c3ae-c602a67b918e
When you configure the module in the JMS sender communication channel you have to spedify 2 parameter for the log file location:
"file.path" (XI server file system path) and "file.name"
CODE:
package com.bfa.af.modules;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import com.sap.aii.af.mp.module.Module;
import com.sap.aii.af.mp.module.ModuleContext;
import com.sap.aii.af.mp.module.ModuleData;
import com.sap.aii.af.mp.module.ModuleException;
import com.sap.aii.af.ra.ms.api.Message;
@author ibermatica
public class BFATraceModule implements SessionBean, Module {
private SessionContext myContext;
public void ejbRemove() {
public void ejbActivate() {
public void ejbPassivate() {
public void setSessionContext(SessionContext context) {
myContext = context;
public void ejbCreate() throws CreateException {
public ModuleData process(ModuleContext moduleContext, ModuleData inputModuleData) throws ModuleException
FileWriter outFile;
try
Date date = new Date();
String filePath = moduleContext.getContextData("file.path");
String fileName = moduleContext.getContextData("file.name");
outFile = new FileWriter(filePath + System.getProperty("file.separator") + fileName, true);
catch (IOException e)
e.printStackTrace();
throw new ModuleException(e);
PrintWriter out = new PrintWriter(outFile, true);
try
out.println("--- Start of message ---");
//Get message content.
Message data = (Message)inputModuleData.getPrincipalData();
if(data.getDocument() != null)
out.println(data.getDocument().getText());
else
out.println("Empty message.");
out.println("--- End of message ---");
out.println("Total characters: " + data.getDocument().getText().length());
catch(Exception exc)
out.println(exc.toString());
finally
if(out != null)
out.close();
if(outFile != null)
try {
outFile.close();
} catch (IOException e1) {
throw new ModuleException(e1);
return inputModuleData;
Maybe you are looking for
-
Cannot get hardware limits to work when using Lintech switches with a ACR9000 motion controller
This has been my conversation with Parker Automation. From: Susan Connors <[email protected]> Date: April 21, 2015 at 8:52:55 AM CDT To: Bowlerdusty <[email protected]> Subject: Re: ACR 9000 Hi Dustin, Since the product was not purchased fr
-
I recently factory reinstalled my Lenovo W510. The recovery discs come with Vista 32 and I upgraded the system to Win7 64. The device manager did a good job at finding the missing drivers I needed except for two things... The most concerning problem
-
Any way of taking a screenshot to show the mouse cursor?
I often take screenshots to explain things on the FCP X forum etc. In FCP X, like most video editing apps, the cursor can change its appearance dramatically according to what tool you are currently using. Unfortunately taking a screenshot does not di
-
I can't seem to hear sound from MPG movies from my Quicktime player and I can't hear sound from YouTube as well, anybody can help me? thx
-
Db creation with dbca template
I have created database creation template using dbca in oracle 9i, it created .dbc file. How to create the database using this file.can any one help me in resolving this issue. thanks