Synchronizing a "Selector"

regarding thread safety of java.nio.channels.Selector:
"a selector's key and selected-key are not, *in general*,
safe for use by concurrent threads. if such a thread
might modify one of these sets directly then access
*can* be controlled by synchronizing on the set itself".
well... i want 2 threads to share one Selector instance.
and with some extra effort, the docs imply i can.
note:
the following use of a SynchronizedSet does not work.
Selector selector = Selector.open();
new Listener(selector);
new Server(selector);
public class Listener implements Runnable {
  public Listener(Selector selector) { ... }
  public void run() {
    while(true) {
      Set syncSet = Collections.synchronizedSet(selector.keys());
      Iterator it = syncSet.iterator();
      while(it.hasNext()) {
        ... // view the contents of the "keys" in Selector.
        ... // and add channels to Selector.
    } // _ while() _
  }  // __ run() __
} // ___ class ___ class ___
public class Server implements Runnable {
  public Server(Selector selector) { ... }
  public void run() {
    while(true) {
      selector.select();
      Set syncSet = Collections.synchronizedSet(selector.selectedKeys());
      Iterator it = syncSet.iterator();
      while(it.hasNext()) {
         SelectionKey key = (SelectionKey) it.next();
         it.remove();
         if(key.isAcceptable()) {
      SocketChannel sokChannel = (SocketChannel) setSokChannel.accept();
         sokChannel.register(selector, SelectionKey.OP_READ);
    } // _ while() _
  } // ___ run() ___
}depending on timing, i get different errors.
one popular error is when i try:
"SelectionKey key = (SelectionKey) iterator.next()"
i get "NullPointerException".
and, sometimes, i don't get an error, but what i
add in one thread("Server") does not show-up in the
other("Client") thread.
this is doable; i need some help and wisdom.
thanks.

>
Set syncSet = Collections.synchronizedSet(selector.keys());will create a synchronized set wrapping the selector.keys() set. It will not synchronize the selector.keys() itself. Look at the api-documentation of Collections:
Returns a synchronized (thread-safe) set backed by the specified set. In order to guarantee serial access, it is critical that all access to the backing set is accomplished through the returned set.So you should find a way to synchonize your threads by using either the same synchronized list in all of them or by sychronizing using a synchronized block - something like:
synchronized ( selector.keys() ){
....}or
synchronized( selector ){
}should do the job I think.

Similar Messages

  • Synchronous operation with a message selector possible?

    I have a situation where the following condition exists:
    - a number of servlet threads (1-n) will post to request to an external asynchronous system with a unique id.
    - the external system will post the responses to a JMS queue.
    - my servlet threads need to receive their - and only their message from the queue
    - my servlet threads need to have timeout
    The problem is, I need the selectivity of a message selector, but also the timeout of a .receive() method.
    I have considered filtering the responses in each onMessage event, but this will not scale well when many responses exist.
    Any recommendations will be appreciated.

    I think I answered my own question. I was confusing a MessageSelector with a MessageListener - two different animals....
    I was able to implement the pub/sub with the following syntax:
    /* the publisher would put the transaction_id (unique id) in the
    JMSCorrelationID field in the message header. */
    message.setJMSCorrelationID(transaction_id);          
    /* The subscriber will only receive messages that match this trans ID. This will be accomplished by adding the following MessageSelector clause to the subscriber session:*/
    String selector = "JMSCorrelationID = '"+transaction_id+"'";
    subscriber = subscriberSession.createSubscriber(topic,selector,true);
    "Astitva" , thanks for the help!

  • How can I use a Selector in a thread safe way?

    Hello,
    I'm using a server socket with a java.nio.channels.Selector contemporarily by 3 different threads (this number may change in the future).
    From the javadoc: Selectors are themselves safe for use by multiple concurrent threads; their key sets, however, are not.
    Following this advise, I wrote code in this way:
             List keys = new LinkedList(); //private key list for each thread
             while (true) {
              keys.clear();
              synchronized(selector) {
                  int num = selector.select();
                  if (num == 0)
                   continue;
                  Set selectedKeys = selector.selectedKeys();
                  //I expected this code to produce disjoint key sets on each thread...
                  keys.addAll(selectedKeys);
                  selectedKeys.clear();
              Iterator it = keys.iterator();
              while (it.hasNext()) {
                  SelectionKey key = (SelectionKey) it.next();
                  if ((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) {
                   Socket s = serverSocket.accept();
                   SocketChannel sc = s.getChannel();
                   sc.configureBlocking( false );
                   sc.register( selector, SelectionKey.OP_READ );
                  } else if ((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) {
    //.....Unfortunately synchronizing on the selector didn't have the effect I expected. When another thread select()s, it sees the same key list as the other thread that select()ed previously. When control arrives to serverSocket.accept(), one thread goes ahead and the other two catch an IllegalBlockingModeException.
    I'm not willing to handle this exception, the right thing to do is giving disjoint key sets to each thread. How can I achieve this goal?
    Thanks in advance

    A single thread won't be enough cause after reading data from the socket I do some processing on it that may take long.So despatch that processing to a separate thread.
    Most of this processing is I/O boundI/O bound on the socket? or something else? If it's I/O bound on the socket that's even more of a reason to use a single thread.
    Anyway I think I'll use a single thread with the selector, put incoming data in a queue and let other 2 or 3 threads read from it.Precisely. Ditto outbound data.
    Thanks for your replies. But I'm still curious: why is a selector thread safe if it can't be used with multiple threads because of it's semantics?It can, but there are synchronization issues to overcome (with Selector.wakeup()), and generally the cost of solving these is much higher than the cost of a single-threaded selector solution with worker threads for the application processing.

  • Synchronous IO with nio

    Hello,
    I have been programming in Java for a while but today is my first shot at NIO.
    I'm implementing a custom protocol over TCP between a java server and several Java and C clients. The classical one-thread-per-client approach works with a couple of test connections, but I'm afraid it will not scale:
    - I will not have control on all clients programs
    - I don't know yet the expected traffic
    - I might introduce bugs as well in the sever program and leak sockets and threads
    Here is the code for the classical approach:
    ServerSocket server.accept()  = ...;
    Socket client = server.accept();
    Thread clientThread = new ClientThread(client);
    clientThread.start();Where ClientThread's run method deos the following:
    BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
    while (isConnected) {
        String pdu = reader.readLine();
        storeClientInfo(pdu);
    }The key is that in order to make for a very simple protocol we designed it so that each PDU is one line of text, sent over TCP. Reading one PDU is therefiore a synchronous operation.
    In order to provision scaling to many clients, we are trying to reimplement it using NIO.
    We use a Selector to wait for requests, and once accepted, we register the Selector with the created SocketChannel (one per client).
    One single thread dequeues reads selected by the Selector, but we are still trying to read using the synchronous BufferredReader.
    When a SocketChannel has readable data, we create a Buffered reader like this:
    BufferedReader reader = new BufferedReader(new InputStreamReader(socketChannel.socket().getInputStream()));
    String pdu = reader.readLine(); //  throws IllegalBlockingModeException
    }And as you probably expect, we get an IllegalBlockingModeException when reading the line (synchronous operation) over the (asynchronous) socket.
    If my understanding is correct, the SocketChannel has to be put in non-blocking mode to be selectable by the Selector (otherwise the register(...) call throws an IllegalBlockingStateException), but it cannot be read synchronously in this non-blocking mode.
    Is there any way I can connect a BufferedReader to a non-blocking SocketChannel somehow?
    There would be an alternative approach, where the listeing thread reads the data from the SocketChannel into a ByteBuffer, then stuffs those bytes into a PipedOutputStream, and build a reader over a PipedInputStream.
    The problem is that in this case, we need, again, one thread per client to read the data froml the reader...
    There's a third approach, where we would use the "attachment" feature of SocketChannel.register() and SelectedKey; in this approach, the attachment could be a stringBuffer; each time the Selector warns us that data is readable, the data would be read from the SocketChannel into a ByteBuffer. then added to the StringBuffer. We would have to analyze the StringBuffer's content to find out whether it contains a whole line, and only then extract this line as the "PDU".
    Is this a recommended approach?
    Thanks in advance, and regards,
    J.
    Message was edited by: jduprez (some code markers had been swallowed)
    Message was edited by:
    jduprez

    OK, thanks.
    I implemented this third approach, and it works under moderate load. The difficulty though, is that what I can read from the channel is a chunk of binary data, possibly incomplete, and that possibly doesn't even translate to valid chars (for example, a 16-bits char may be cut in-between and I get only the first byte).
    That orients me to a binary protocol (at least, to a protocol where I can identify "end of message " markers at the binary level).
    Alternately, if I can ensure all my messages fit a UDP packet, I'd better stuff the String in a UDP packet on the client end, and decode a String from the UDP received (atomically) on the server end.
    I'd lose TCP's relative reliability, but simplify the programming model for the protocol handling...
    I'm still free to choose the transport at this step of the project...
    Any recommendation?

  • Issue in Synchronous OSB using Jms Queues in OSB11g

    Hi,
    I am working on building a synchronous OSB using the following steps.
    1)     Creating the Synchronous OSB Proxy Service which routes the message to the business service which in turn places a message in the Queue(inqueue) by populating the JMSCorrelationId and waits for the response message to consume from another queue.
    2)     A Composite(SOA) will consume the message from this Queue
    3)     It will do necessary transformation and Places it in another Queue (Say Response Queue).
    4)     OSB Business service waiting in Step 1 will receive the response from this response Queue.
    I used a sample Wsdl which has both request and response message types.
    I observed that the correlation ID is maintained properly from inqueue to response queue. But the message is not getting picked up by OSB from the response Queue
    Twist: It is working absolutely fine in OSB 10g but it is not working in OSB 11g.
    I tried using Messaging service as well as using the sample WSDL i.e keepiing the soap message in the queue. Both the cases are working absolutely fine OSB 10g but not in OSB 11g.
    Can anyone faced a similar issue or any pointers will be great help in this regard.
    Regards,
    Ashok

    To debug this further can you check if the response Q has any active consumers. ? When you use response by correlation ID business service, OSB actually creates MDB's with message selectors under the hood.
    This is a sample of the ejb-jar.xml of the MDB created for a business service with response by Correlation ID pattern.
    <?xml version='1.0' encoding='UTF-8'?>
    <jav:ejb-jar xmlns:jav="http://java.sun.com/xml/ns/javaee">
    <jav:display-name>BEA ALSB JMS Outbound Sync-Async Endpoint</jav:display-name>
    <jav:enterprise-beans>
    <jav:message-driven>
    <jav:ejb-name>ResponseEJB-6577847719916437493-3893eeb7.1287d30ba4f.-7fe1</jav:ejb-name>
    <jav:ejb-class>com.bea.wli.sb.transports.jms.JmsAsyncResponseMDB</jav:ejb-class>
    <jav:transaction-type>Container</jav:transaction-type>
    <jav:message-destination-type>javax.jms.Queue</jav:message-destination-type>
    <jav:activation-config>
    *<jav:activation-config-property>*
    *<jav:activation-config-property-name>messageSelector</jav:activation-config-property-name>*
    *<jav:activation-config-property-value>JMSCorrelationID LIKE 'ID:424541534594cf52%'</jav:activation-config-property-value>*
    *</jav:activation-config-property>*
    </jav:activation-config>
    <jav:env-entry>
    <jav:env-entry-name>service-ref</jav:env-entry-name>
    <jav:env-entry-type>java.lang.String</jav:env-entry-type>
    <jav:env-entry-value>BusinessService$Test$RequestQ</jav:env-entry-value>
    </jav:env-entry>
    As you can see the message selector is based on JMSCorrelationID LIKE 'ID:424541534594cf52%'. This means the business service will pick only those messages which has its correlation ID starting with ID:424541534594cf52.
    You can see the message selector for your MDB from admin console --> deployments.
    Check and confirm if the correlation ID created in the request also starts with this value and the same is send back from the server. Also try deleting and recreating the business service or rename the business service which will create a new MDB under the hood and check the above.

  • Problem while SocketChannel registers with selector

    Hi ,
    I am coming across problem when i tries to register channel (SocketChannel) with Selector.
    Following is the scenario:
    1) I create selector in main program
    2) I spawns thread and calls (selector.select()) in that thread using created selector in main program
    3) Now I have to do toggle of this created SocketChannel (close() the channel and open() again in main program)
    4) I close the channel in main program ( i have synchronized channel during close operation)
    5) When I try to register again after opening socket my main program hangs forever...Actually
    I am seeing random behavior at this point. Some time it works and registers channel with selector
    and some time it hangs...Socket connection established correctly..just channel for that socket connection
    can not able to register with selector that is currently doing select in another thread...
    Please let me know if anybody come across this kind of problem.
    Thanks a lot,
    Priyank

    Thanks a bunch for the above messages, it actually solved one of my problems, which was,
    I was,
    1. Making serverSocketChannel and registering it with the selector.
    2. Starting selector thread.
    3. Making ClientSocketChannels and registering these with the selector.
    As the selector was started at Step 2, Step 3 was getting blocked, because of selector thread making selector busy, so i read the above messages, and inferred that
    1. Make SerSocketChannels
    2. Make ClientSocketChannels
    3. Start Selector
    and it solved my problem of my program getting blocked at step 3 in the first arrangement. So once again thanks alot to the guys here for making a useful discussion and helping me
    --Aamir                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • Implementing synchronous request response behaviour with JMS

    i have a requirement wherein i send a list of tasks to be executed (this has to be executed in parallel so taking the JMS route) and should wait for the results of al these tasks. How could i do this with JMS? I need JMS since the originally these tasks was being done using threading and since in j2ee it is not advisable to spawn threads we are planning to use JMS so that we can have concurrency that is done by the container. can someone please tell how can i simulate this synchronous request-response paradigm using JMS?

    It may not be great idea however possibility of State full session bean can be explored.
    State full session bean will send all 100 tasks to JMS queue without waiting for the result. There will be another JMS program (Say ResponseCollector) which will listen on queue for all responses. Once ResponseCollector collects all the responses, it will trigger the state full session bean again.
    You can use some properties in JMS header to discriminate between the request and response on same queue and apply the message selector.

  • A question regarding Synchronous, Pub-Sub non-durable model

              Scenario:
              Non-durable, publish-subscribe, syncronous model.
              Publisher1 and Publisher2 both post messages to a Topic at the same time. How to
              design the non durable Subscribers that would be able to obtain both these messages
              in the same thread?
              e.g. if i in my program I create 2 subscribers, with selectors configured for the
              2 different messages...
              program start
              1. create sub1 using selector1 for topic1
              2. create sub2 using selector2 for topic1
              3. sub1.receive(timeout)
              4. sub2.receive(timeout)
              5. further processing using both the obtained messages
              6. program end.
              In the above case, if messages arrive at the same time in the topic, only sub1 will
              be able to get the message, as sub2 won't be active at that time.
              Is there anyway to acheive this considering Synchronous, Pub-Sub non-durable model
              is to be used?
              Many thanks...
              

              Thanks for the response.
              Is a subscriber active the moment it is created?
              e.g. objSub=tsession.createSubscriber(topic,strMessSelector,true);
              or it is said to be active when we call
              objSub.receive() (in case of synchronous subscriber)
              "Shean-Guang Chang" <[email protected]> wrote:
              >I don't know the details of the design. You can use a single subscriber
              >without a selector and then do two receive to get both message.
              >If you have to use selector so sub1 can only select message from pub1 and
              >sub2 can only select message from pub2 then you need sub3 without a
              >selector and sub3 will do blocking receive first and then once the sub3
              >receives a message you can use sub1 and sub2 to do receiveNoWait.
              >
              >e.g.
              >while (true) {
              > if (sub3.receive() ! = null) { // have message in the topic
              > if (sub1.receiveNoWait() != null) { // got message from pub1
              > do something
              > }
              > if (sub2.receiveNoWait() != null) {// got message from pub2
              > do something
              > }
              > }
              >}
              >
              >"vinay s" <[email protected]> wrote in message
              >news:[email protected]...
              >>
              >> Scenario:
              >> Non-durable, publish-subscribe, syncronous model.
              >> Publisher1 and Publisher2 both post messages to a Topic at the same time.
              >How to
              >> design the non durable Subscribers that would be able to obtain both these
              >messages
              >> in the same thread?
              >> e.g. if i in my program I create 2 subscribers, with selectors configured
              >for the
              >> 2 different messages...
              >>
              >> program start
              >> 1. create sub1 using selector1 for topic1
              >> 2. create sub2 using selector2 for topic1
              >> 3. sub1.receive(timeout)
              >> 4. sub2.receive(timeout)
              >> 5. further processing using both the obtained messages
              >> 6. program end.
              >>
              >> In the above case, if messages arrive at the same time in the topic, only
              >sub1 will
              >> be able to get the message, as sub2 won't be active at that time.
              >>
              >> Is there anyway to acheive this considering Synchronous, Pub-Sub
              >non-durable model
              >> is to be used?
              >>
              >> Many thanks...
              >
              >
              

  • Java NIO - Key Cancellation and Registering with New Selector

    Hi
    Sometimes when a channel is unregistered from a particular selector (key.cancel() ) and then registered with another selector, the registration does not happen. It just blocks in that registration method..It does not execute after that..
    I am doing
    key.cancel();
    selector2.wakeup();
    channel.register(selector2, SelectionKey.OP_READ,this);
    System.out.println("Associated with another selector");The System.Out does not get executed, and blocks at earlier statement.
    What could be the reason?
    What is the best way to deregister with a selector and register to another selector
    Thanks

    Synchronization is the reason. register() and select() are synchronized against each other. wakeup() causes the select() to exit but if the selector got round its loop and back to select() before this code got to execute the register it will still block of course.
    You could have selector2's select loop do a little sleep if it finds zero ready keys, or maybe reduce its selection timeout so that register will only block for a finite amount at worst.
    I don't think selection timeouts should ever be infinite and in practice I rarely set them above a minute. If that's still too long to wait you could consider reducing it further.

  • Issue in Synchronous File Read in clustered environment

    Hi,
    We are using clustered environment (4 managed servers) in Unix. In a OSB 11gR3 proxy service we are using Synchronous File Read. Randomly we are getting the below error. Let us know what could cause the issue. But the same code is working fine in a single stand-alone server configuration.
    Error Code : BEA-380002 , Error Reason : Invoke JCA outbound service failed with connection error, exception: com.bea.wli.sb.transports.jca.JCATransportException: oracle.tip.adapter.sa.api.JCABindingException: oracle.tip.adapter.sa.impl.fw.ext.org.collaxa.thirdparty.apache.wsif.WSIFException: servicebus:/WSDL/wsdlPathAndName [ SynchRead_ptt::SynchRead(Empty,body) ] - WSIF JCA Execute of operation 'SynchRead' failed due to: No Data to process.
    No Data to process.
    File /root/oracle/domains/osb/11.1.1.4/cluster/data/osb2/FolderName/Filename.txt to be processed was not found or not available or has no content ; nested exception is:
    BINDING.JCA-11007
    No Data to process.
    No Data to process.
    File /root/oracle/domains/osb/11.1.1.4/cluster/data/osb2/FolderNamer/Filename.txt to be processed was not found or not available or has no content Please make sure that the file exists in the specified directory.
    com.bea.wli.sb.transports.jca.JCATransportException: oracle.tip.adapter.sa.api.JCABindingException: oracle.tip.adapter.sa.impl.fw.ext.org.collaxa.thirdparty.apache.wsif.WSIFException: servicebus:/WSDL/wsdlPathAndName [ SynchRead_ptt::SynchRead(Empty,body) ] - WSIF JCA Execute of operation 'SynchRead' failed due to: No Data to process.
    No Data to process.
    File /root/oracle/domains/osb/11.1.1.4/cluster/data/osb2/FolderName/Filename.txt to be processed was not found or not available or has no content ; nested exception is:
    BINDING.JCA-11007
    No Data to process.
    No Data to process.
    File /root/oracle/domains/osb/11.1.1.4/cluster/data/osb2/FolderName/Filename.txt to be processed was not found or not available or has no content Please make sure that the file exists in the specified directory.
    at com.bea.wli.sb.transports.jca.binding.JCATransportOutboundOperationBindingServiceImpl.invoke(JCATransportOutboundOperationBindingServiceImpl.java:153)
    at com.bea.wli.sb.transports.jca.JCATransportEndpoint.sendRequestResponse(JCATransportEndpoint.java:209)
    at com.bea.wli.sb.transports.jca.JCATransportEndpoint.send(JCATransportEndpoint.java:170)
    at com.bea.wli.sb.transports.jca.JCATransportProvider.sendMessageAsync(JCATransportProvider.java:598)
    at sun.reflect.GeneratedMethodAccessor1115.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.bea.wli.sb.transports.Util$1.invoke(Util.java:83)
    at $Proxy142.sendMessageAsync(Unknown Source)
    at com.bea.wli.sb.transports.LoadBalanceFailoverListener.sendMessageAsync(LoadBalanceFailoverListener.java:148)
    at com.bea.wli.sb.transports.LoadBalanceFailoverListener.sendMessageToServiceAsync(LoadBalanceFailoverListener.java:603)
    at com.bea.wli.sb.transports.LoadBalanceFailoverListener.sendMessageToService(LoadBalanceFailoverListener.java:538)
    at com.bea.wli.sb.transports.TransportManagerImpl.sendMessageToService(TransportManagerImpl.java:558)
    at com.bea.wli.sb.transports.TransportManagerImpl.sendMessageAsync(TransportManagerImpl.java:426)
    at com.bea.wli.sb.pipeline.PipelineContextImpl.doDispatch(PipelineContextImpl.java:670)
    at com.bea.wli.sb.pipeline.PipelineContextImpl.dispatchSync(PipelineContextImpl.java:551)
    at stages.transform.runtime.WsCalloutRuntimeStep$WsCalloutDispatcher.dispatch(WsCalloutRuntimeStep.java:1391)
    at stages.transform.runtime.WsCalloutRuntimeStep.processMessage(WsCalloutRuntimeStep.java:236)
    at com.bea.wli.sb.stages.StageMetadataImpl$WrapperRuntimeStep.processMessage(StageMetadataImpl.java:346)
    at com.bea.wli.sb.stages.impl.SequenceRuntimeStep.processMessage(SequenceRuntimeStep.java:33)
    at com.bea.wli.sb.pipeline.PipelineStage.processMessage(PipelineStage.java:84)
    at com.bea.wli.sb.pipeline.PipelineContextImpl.execute(PipelineContextImpl.java:1055)
    at com.bea.wli.sb.pipeline.Pipeline.processMessage(Pipeline.java:141)
    at com.bea.wli.sb.pipeline.PipelineContextImpl.execute(PipelineContextImpl.java:1055)
    at com.bea.wli.sb.pipeline.PipelineNode.doRequest(PipelineNode.java:55)
    at com.bea.wli.sb.pipeline.Node.processMessage(Node.java:67)
    at com.bea.wli.sb.pipeline.PipelineContextImpl.execute(PipelineContextImpl.java:1055)
    at com.bea.wli.sb.pipeline.Router.processMessage(Router.java:214)
    at com.bea.wli.sb.pipeline.MessageProcessor.processRequest(MessageProcessor.java:96)
    at com.bea.wli.sb.pipeline.RouterManager$1.run(RouterManager.java:593)
    at com.bea.wli.sb.pipeline.RouterManager$1.run(RouterManager.java:591)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
    at com.bea.wli.sb.security.WLSSecurityContextService.runAs(WLSSecurityContextService.java:55)
    at com.bea.wli.sb.pipeline.RouterManager.processMessage(RouterManager.java:590)
    at com.bea.wli.sb.transports.TransportManagerImpl.receiveMessage(TransportManagerImpl.java:375)
    at com.bea.wli.sb.transports.jca.binding.JCATransportInboundOperationBindingServiceImpl$4.run(JCATransportInboundOperationBindingServiceImpl.java:415)
    at com.bea.wli.sb.transports.jca.binding.JCATransportInboundOperationBindingServiceImpl$4.run(JCATransportInboundOperationBindingServiceImpl.java:413)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
    at weblogic.security.Security.runAs(Security.java:61)
    at com.bea.wli.sb.transports.jca.binding.JCATransportInboundOperationBindingServiceImpl.sendMessage(JCATransportInboundOperationBindingServiceImpl.java:413)
    at com.bea.wli.sb.transports.jca.binding.JCATransportInboundOperationBindingServiceImpl.invokeOneWay(JCATransportInboundOperationBindingServiceImpl.java:126)
    at com.bea.wli.sb.transports.jca.binding.JCAInboundRequestListener.post(JCAInboundRequestListener.java:39)
    at oracle.tip.adapter.sa.impl.inbound.JCAInboundListenerImpl.onMessage(JCAInboundListenerImpl.java:170)
    at oracle.tip.adapter.fw.jca.messageinflow.MessageEndpointImpl.onMessage(MessageEndpointImpl.java:502)
    at oracle.tip.adapter.file.inbound.Publisher.onMessageDelegate(Publisher.java:493)
    at oracle.tip.adapter.file.inbound.Publisher.publishMessage(Publisher.java:419)
    at oracle.tip.adapter.file.inbound.InboundTranslatorDelegate.xlate(InboundTranslatorDelegate.java:484)
    at oracle.tip.adapter.file.inbound.InboundTranslatorDelegate.doXlate(InboundTranslatorDelegate.java:121)
    at oracle.tip.adapter.file.inbound.ProcessorDelegate.doXlate(ProcessorDelegate.java:388)
    at oracle.tip.adapter.file.inbound.ProcessorDelegate.process(ProcessorDelegate.java:174)
    at oracle.tip.adapter.file.inbound.ProcessWork.run(ProcessWork.java:349)
    at weblogic.work.ContextWrap.run(ContextWrap.java:41)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:207)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:176)
    Caused by: oracle.tip.adapter.sa.api.JCABindingException: oracle.tip.adapter.sa.impl.fw.ext.org.collaxa.thirdparty.apache.wsif.WSIFException: servicebus:/WSDL/wsdlPathAndName [ SynchRead_ptt::SynchRead(Empty,body) ] - WSIF JCA Execute of operation 'SynchRead' failed due to: No Data to process.
    No Data to process.
    File /root/oracle/domains/osb/11.1.1.4/cluster/data/osb2/FolderName/Filename.txt to be processed was not found or not available or has no content ; nested exception is:
    BINDING.JCA-11007
    No Data to process.
    No Data to process.
    File /root/oracle/domains/osb/11.1.1.4/cluster/data/osb2/FolderName/Filename.txt to be processed was not found or not available or has no content Please make sure that the file exists in the specified directory.
    at oracle.tip.adapter.sa.impl.JCABindingReferenceImpl.request(JCABindingReferenceImpl.java:259)
    at com.bea.wli.sb.transports.jca.binding.JCATransportOutboundOperationBindingServiceImpl.invoke(JCATransportOutboundOperationBindingServiceImpl.java:150)
    ... 56 more
    Caused by: oracle.tip.adapter.sa.impl.fw.ext.org.collaxa.thirdparty.apache.wsif.WSIFException: servicebus:/WSDL/wsdlPathAndName [ SynchRead_ptt::SynchRead(Empty,body) ] - WSIF JCA Execute of operation 'SynchRead' failed due to: No Data to process.
    No Data to process.
    File /root/oracle/domains/osb/11.1.1.4/cluster/data/osb2/FolderName/Filename.txt to be processed was not found or not available or has no content ; nested exception is:
    BINDING.JCA-11007
    No Data to process.
    No Data to process.
    File /root/oracle/domains/osb/11.1.1.4/cluster/data/osb2/FolderName/Filename.txt to be processed was not found or not available or has no content Please make sure that the file exists in the specified directory.
    at oracle.tip.adapter.sa.impl.fw.wsif.jca.WSIFOperation_JCA.performOperation(WSIFOperation_JCA.java:662)
    at oracle.tip.adapter.sa.impl.fw.wsif.jca.WSIFOperation_JCA.executeOperation(WSIFOperation_JCA.java:353)
    at oracle.tip.adapter.sa.impl.fw.wsif.jca.WSIFOperation_JCA.executeRequestResponseOperation(WSIFOperation_JCA.java:312)
    at oracle.tip.adapter.sa.impl.JCABindingReferenceImpl.invokeWsifProvider(JCABindingReferenceImpl.java:350)
    at oracle.tip.adapter.sa.impl.JCABindingReferenceImpl.request(JCABindingReferenceImpl.java:253)
    ... 57 more
    Caused by: BINDING.JCA-11007
    No Data to process.
    No Data to process.
    File /root/oracle/domains/osb/11.1.1.4/cluster/data/osb2/FolderName/Filename.txt to be processed was not found or not available or has no content Please make sure that the file exists in the specified directory.
    at oracle.tip.adapter.file.outbound.FileReader.readFile(FileReader.java:277)
    at oracle.tip.adapter.file.outbound.FileReader.executeFileRead(FileReader.java:181)
    at oracle.tip.adapter.file.outbound.FileInteraction.executeFileRead(FileInteraction.java:331)
    at oracle.tip.adapter.file.outbound.FileInteraction.execute(FileInteraction.java:395)
    at oracle.tip.adapter.sa.impl.fw.wsif.jca.WSIFOperation_JCA.performOperation(WSIFOperation_JCA.java:529)
    ... 61 more
    Edited by: 842347 on Jul 6, 2011 3:11 AM

    I face the same issue and I have given all permissions to the folder for OS user.
    Because of this error my server is not starting up . Is there any way I can undeploy this composite to get my server running.
    I cant do this from EM because SOA server is failing to start up.
    I have tried removing it from $DOMAIN_HOME/deployed-composites but still when i try restarting the soa server the composite comes up there. Do we need to delete the entry some where else too. Kindly help.
    Thanks,
    Sri.

  • Oracle db to SAP R/3 synchronous solution ?

    Hi,
    I am looking for some comments from SDN members to come up with a solution.
    <u>Requirement:</u> Automatically update the R/3 system based on the updates in the "external" Oracle database.
    In order to accomplish this, currently we are working on the JDBC (Sender)> XI> R/3 ( RFC receiver) asynchronous scenario using poll interval to pull the data from Oracle db to R/3.
    Instead we are looking for a synchronous sort of solution where Oracle pushes the data into R/3 as soon as update happens in the Oracle tables.
    One of the possibility is to have a trigger in the database to generate the XML files using XMLGen.getxml utility.
    Thanks for your time,
    Sunil

    Hi Sunil.
    If I understand correctly, you want to push data from Oracle to XI rather than polling the database from XI and retrieving data.
    You may consider exposing your outbound interface in XI as a web service and then calling the web service from the triggers in Oracle. Thus data would be passed from the Oracle trigger to XI over SOAP.
    This link would help you on how to call web service from PL/SQL
    http://www.oracle.com/technology/tech/webservices/htdocs/samples/dbwebservice/DBWebServices_PLSQL.html
    These links would help you on how to expose a web service from XI.
    http://help.sap.com/saphelp_nw04/helpdata/en/31/daa0404dd52b54e10000000a1550b0/frameset.htm
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/336365d3-0401-0010-9884-a651295aeaa9
    You can write the trigger for the appropriate action (INSERT, UPDATE, DELETE) on the database table and then call the web service.
    Hope this help ,
    Gaurav

  • Slave instance can not synchronized with the master for a long time

    Hi,
    Slave instance can not synchronized with the master for a long time, and the gap of LSNs between slave and master are more and more larger. The transfer bytes per second between master and slave is 118MB/s , upper limit to the ethernet card. Why???
    ENVIRONMENT:
    1. A network program which we called mcdb is based on BDB 4.8.30. It is used to accept get/set requests and then query data from bdb or save data to bdb.
    2. mcdb implements replication with bdb replication manager api. The default start replication policy is DB_REP_ELECTION, rep ack policy is DB_REPMGR_ACKS_ONE_PEER and rep priority is 100.
    3. The bdb data files, bdb log files, region files and rep files are all in the same home directory.
    4. There are two instances of the mcdb are separately on two standalone servers which has no other programs. These two instances are in one replication group which can elect a master automatically.
    5. The master instance is online, which has lots of requests (get, set, delete).
    ACTIONS:
    1. Start two mcdb instances on two servers and the two instance make a replication group. Slave has already synchronized with the master.
    2. Stop the slave for a long time (more than 20 hours).
    3. Start the slave instance to synchronize data with master.
    RESULT:
    1. the gap of LSNs between slave and master are more and more larger.
    2. db_stat of master and slave:
    master db_stat:
    467170     Number of PERM messages not acknowledged
    9245     Number of messages queued due to network delay
    172415     Number of messages discarded due to queue length
    25880     Number of existing connections dropped
    3407     Number of failed new connection attempts
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    DB_REPMGR site information:
    10.67.15.146 (eid: 0, port: 30011)
    Environment configured as a replication master
    331726/3574994     Next LSN to be used
    0/0     Not waiting for any missed log records
    328872/466092     Maximum permanent LSN
    0     Next page number expected
    0     Not waiting for any missed pages
    0     Number of duplicate master conditions originally detected at this site
    2147M     Current environment ID (2147483647)
    100     Current environment priority
    49     Current generation number
    50     Election generation number for the current or next election
    2323     Number of duplicate log records received
    0     Number of log records currently queued
    6768     Maximum number of log records ever queued at once
    55284     Total number of log records queued
    120M     Number of log records received and appended to the log (120475988)
    111     Number of log records missed and requested
    2147M     Current master ID (2147483647)
    2     Number of times the master has changed
    0     Number of messages received with a bad generation number
    8505306     Number of messages received and processed
    12     Number of messages ignored due to pending recovery
    471869     Number of failed message sends
    12M     Number of messages sent (12959945)
    0     Number of new site messages received
    1     Number of environments believed to be in the replication group
    990543     Transmission limited
    0     Number of outdated conditions detected
    0     Number of duplicate page records received
    0     Number of page records received and added to databases
    0     Number of page records missed and requested
    Startup complete
    6244678     Number of transactions applied
    0     Number of startsync messages delayed
    1     Number of elections held
    1     Number of elections won
    No election in progress
    0.057097     Duration of last election (seconds)
    8944103     Number of bulk buffer sends triggered by full buffer
    0     Number of single records exceeding bulk buffer size
    5273M     Number of records added to a bulk buffer (5273592170)
    10M     Number of bulk buffers sent (10490865)
    0     Number of re-request messages received
    0     Number of request messages this client failed to process
    0     Number of request messages received by this client
    slave db_stat:
    0     Number of PERM messages not acknowledged
    0     Number of messages queued due to network delay
    0     Number of messages discarded due to queue length
    1454     Number of existing connections dropped
    0     Number of failed new connection attempts
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    DB_REPMGR site information:
    10.67.15.147 (eid: 0, port: 30011)
    Environment configured as a replication client
    329544/2916048     Next LSN expected
    330433/2013808     LSN of first log record we have after missed log records
    329543/5500501     Maximum permanent LSN
    0     Next page number expected
    0     Not waiting for any missed pages
    0     Number of duplicate master conditions originally detected at this site
    2147M     Current environment ID (2147483647)
    100     Current environment priority
    49     Current generation number
    50     Election generation number for the current or next election
    5256M     Number of duplicate log records received (5256599432)
    3925284     Number of log records currently queued
    3925285     Maximum number of log records ever queued at once
    4880561     Total number of log records queued
    3578038     Number of log records received and appended to the log
    1912297     Number of log records missed and requested
    0     Current master ID
    1     Number of times the master has changed
    0     Number of messages received with a bad generation number
    12M     Number of messages received and processed (12980442)
    2     Number of messages ignored due to pending recovery
    0     Number of failed message sends
    1912307     Number of messages sent
    0     Number of new site messages received
    0     Number of environments believed to be in the replication group
    0     Transmission limited
    0     Number of outdated conditions detected
    0     Number of duplicate page records received
    0     Number of page records received and added to databases
    0     Number of page records missed and requested
    Startup incomplete
    110568     Number of transactions applied
    80     Number of startsync messages delayed
    0     Number of elections held
    0     Number of elections won
    No election in progress
    0     Number of bulk buffer sends triggered by full buffer
    0     Number of single records exceeding bulk buffer size
    0     Number of records added to a bulk buffer
    0     Number of bulk buffers sent
    0     Number of re-request messages received
    0     Number of request messages this client failed to process
    0     Number of request messages received by this client
    Edited by: 899585 on 2013-1-4 下午10:54
    Edited by: 899585 on 2013-1-4 下午10:55

    Hi,
    Unfortunately, this issue is beyond the level of what is supported over the forum. Performance related issues are extremely complex and require an in-depth understanding of your environment and dedicated support. In a generic sense, you can look at this as a basic queueing problem. You have a server that went down and work is still coming in. When the server gets started it is possible that it may never catch up depending on new work coming in and the rate at processing the old work.
    So what would you do in this case --- one thing would be to reduce the new work coming in. In HA terms this would be slowing the master down and you can increase DB_REP_ACK_TIMEOUT for this. Another thing you could do is add fresh servers to help reduce the workload. In HA terms, this would be the equivalent of restarting the client and give it a fresh look at everything. Another thing you could do is replan the system and load balance. In HA terms, it would mean something like take a hot backup of the master and reinit a client from scratch.
    If you are interested in getting a dedicated support person working on this concern, please let me know and we can move forward down that path. Just respond to the thread with your email address and I will get in contact with you so we can pursue that approach.
    thanks
    mike

  • XML Message Body Selector in Automation

    Hi,
    I'm having some trouble implementing a XML Message Body Selector in an automated task. I'm running OSM 7.2.0.7 in a Unix environment and using Design Studio 7.2.1.
    I'm sendind in my request to an external system a request tthe following string: OSM-TaskName-%{CARTRIDGE_VERSION}
    <Request>
        <Header>
            <dueDate>20131128</dueDate>
            <application>OSM-MSS_Lookup-1.0.0.0.5</application>
        </Header>
    </Request>
    The response of MSS is:
    <Response>
        <Header>
            <dueDate>20131128</dueDate>
            <application>OSM-MSS_Lookup-1.0.0.0.5</application>
        </Header>
    In the selector I've tried different XPath expressions:
    Select:
    /*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']/text()
    *[local-name() ='Responset']/*[local-name()='Header']/*[local-name()='application']/text()
    //*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']/text()
    /*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']
    *[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']
    //*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']
    /Response/Header/application
    /Response/Header/application/text()
    Compare: OSM-MSS_Lookup-%{CARTRIDGE_VERSION}
    I keep getting the following error in the log file for the differente selectors:
    ####<Nov 28, 2013 10:34:31 AM CST> <Info> <oms> <hostname> <SOM_ManagedServer_1> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'
    > <sceadmin> <BEA1-49AB960B7AE5258D5CC8> <0710a255d6bbb54d:-1d6ed94c:142960580fb:-8000-0000000000026363> <1385656471431> <BEA-000000> <api.e:
            namespace/version: SOM_Cartridge/1.0.0.0.5
            automator type: taskAutomator
            plugin JNDI name: MSS_Lookup.automatedtask.somprovisioning.MSS_LookupReceiverBean
            plugin class name: oracle.communications.ordermanagement.automation.plugin.XQueryReceiver
            run plugin as: oms-automation   receiver:
                    type: external
                    JMS source: sky/MSS/Product/WebServiceResponseQueue
                    message [property|body] selector: JMS_BEA_SELECT('xpath', '/*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']')='OSM-MSS_Lookup-1.0.0.0.5'
    ####<Nov 28, 2013 10:34:31 AM CST> <Warning> <EJB> <hostname> <SOM_ManagedServer_1> <[ACTIVE] ExecuteThread: '7' for queue: 'weblogic.kernel.Default (self-tuning)'> <oms-automation> <> <0710a255d6bbb54d:-1d6ed94c:142960580fb:-8000-000000000002650a> <1385656471454> <BEA-010061> <The Message-Driven EJB: MSS_Lookup.automatedtask.somprovisioning.MSS_LookupReceiverBeanMDB is unable to connect to the JMS destination: sky/MSS/Product/WebServiceResponseQueue. The Error was:
    javax.jms.InvalidSelectorException: weblogic.messaging.kernel.InvalidExpressionException: Expression : "JMS_BEA_SELECT('xpath', '/*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']')='OSM-MSS_Lookup-1.0.0.0.5'"
    Nested exception: javax.jms.InvalidSelectorException: weblogic.messaging.kernel.InvalidExpressionException: Expression : "JMS_BEA_SELECT('xpath', '/*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']')='OSM-MSS_Lookup-1.0.0.0.5'"
    I would appreciate any help or ideas.
    Cheers

    Hi,
    Could you confirm on below:
    1 ) Are you using multiple automation plug-in external event receivers in the same automation task ?
    2 ) And are you having the default Correlation Message property set to 'JSMCorrelationID' in external event receiver?
    If your answer for the first question is No, they i would suggest to use Correlation XML Body as
    *[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']
    The value of the field(application) in request must match the value of the field in response, in your case it is matching. And you will be reading this correlation id in response processing xquery.
    Regards
    Srinivas

  • How can I reset the value of an indicator in a while loop, from another synchronous while loop?

    I am running 2 synchronous while loops, one which is keep track of time, and the other is measuring periods. In the while loop that is measuring periods, I have a boolean indicator displaying whether the signal is on or off. My problem is that when the signal is off, the VI I use to measure the periods is waiting for the next signal, and displays the boolean value from the previous period measurement. While this VI is waiting, I want the indicator to display false and not the value from the last iteration of the loop.
    I am using LV 5.1 for MAC.

    Two things you can try:
    In preface to the first, the most common (perhaps ONLY) use of local variables should be in transferring data between parallel loops. This is a matter of discipline, and creates programs that are easier to understand, take less time and memory, and are just plain cleaner. Having said that, to transfer data between loops, use a local variable.
    Second solution: Instead of setting the value to false, just hide the indicator in question by using control references (property nodes for prev. version of LabVIEW). Control references are a great way to control items on a dialog or HMI screen.

  • Synchronous RFC Receiver inside of a Loop in BPM

    Hi there,
    we have a RFC -> XI scenario where a BPM needs to receive messages from a RFC inside of a loop, to bundle these messages, just like the first example here: <a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/08/16163ff8519a06e10000000a114084/frameset.htm">http://help.sap.com/saphelp_nw2004s/helpdata/en/08/16163ff8519a06e10000000a114084/frameset.htm</a>.
    But the problem is that the RFC is set as synchronous (best effort), thus we need to use a receiver in "Open S/A Bridge" mode, but this mode is not available for receivers inside a loop.
    Actually, we have managed to get the scenario working by creating another BPM which just receives the RFC messages in a S/A Bridge, sends the asynchronous message to the main BPM and sends a response back to RFC, closing the S/A bridge. But I think this solution is kind of "messy".
    Is there any other cleaner way of doing it?
    Thanks in advance,
    Henrique.

    Hi Henrique,
    Read this page carefully:
    http://help.sap.com/saphelp_nw04/helpdata/en/43/d92e428819da2ce10000000a1550b0/frameset.htm
    "Do Not Transfer Application Logic
    Do not use integration processes to transfer application logic from the application systems to the Integration Server.
    No Replacement for Mass Interfaces
    Check whether it would not be better to execute particular processing steps, for example, collecting messages, on the sender or receiver system."
    I so recommend to rewrite the sending interface to collect the messages before sending.
    Andother idea is sending the messages with an asynchronous call.
    Regards
    Stefan

Maybe you are looking for

  • Mapping User defined function

    Dear experts, the following funktion has 3 inputs an one output. It shall forward input 3 if input 2 is found in input 1. public void take3IfFound2In1(String[] a, String[] b, String[] c, ResultList result, Container container) throws StreamTransforma

  • E-Recruitment process initiation against unavailable positions etc.

    Hi Experts, The client generally initiates recruitement processes well in advance with a projection of having certain positions created in the future but not actual position or vacant position available in the Organization at the time of Recruitment.

  • Scrap stock in transit cross company

    Dear Experts, We are trying to do intercompany return. We created Return PO and did a reverse GI. The stock is updated to stock in tranist CC. We now want to scrap stock from Stock in transit CC . Is there any way? Please help. Regards, Beena

  • BI Administrator cockpit queries not shown in portal

    Hi All, We have a same problem as mentioned in thread BI Administration Cockpit - Queries not shown in portal but i didn't understand the solution.can somebody tell me the solution Thanks Bala Duvvuri

  • NaviagateToURL

    Hi, I have a problem to display a file in a netscape window with the method navigateToURL. It brings, in parameter, the url of the file (it's path directory). It would be simple if this file was in my flex project directory (indeed, url would be, for