A bug in message pattern's queue implementation?

Here is how to reproduce the problem.
Have 2 Java program ready.
A is to create a queue and publish 3 messages to the queue.
B is to subscribe to the same queue and try to get all messages from the queue (put the getMessage inside a while(true) loop) then wait for new message.
Step 1. Run A, which put 3 messages into queue.
Step 2. Run B, which get 3 messages out of the queue then waiting on the getMessage() blocking call.
Step 3. Kill program B without unsubscribe() call.
Step 4. Run A, which put 3 messages into the queue again.
Step 5. Run B, this time it only get 2 messages. The 1st message A put in on Step 4 got lost.
Actually, if you run Step 2 multiple times before step 3, you will lost more message. It seems each time when there is a subscription created without a unsubscribe(), it will get one message lost.
I know the propery way is to call unsubscribe(), but the JVM could be killed thus won't have time to do cleanup.

Using message pattern 2.3, command pattern 2.3 and common 1.3
Coherence version is 3.4.2.
BTW, if the unit test program you mentioned is the MessageTests.java included in the src zip file, you won't be able to test this issue.
All unit test inside the MessageTests.java are comsuming exactly number of messages been published then do unscribe() call.
In order to reproduce this issue, you'd need to put your consumer JVM in a blocking getMessage() state (i.e. call getMessage() while there is no message in queue)
then kill the JVM. The unit test codes in MessageTests.java never enter blocking wait state when call getMessage().
Example code -
For the one putting message
MessagingSession messagingSession = DefaultMessagingSession.getInstance();
Identifier topicIdentifier = messagingSession.createQueue("test-queue");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY1");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY2");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY3");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY5");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY5");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY5");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY5");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY5");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY5");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY1");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY2");
messagingSession.publishMessage(topicIdentifier, "Hello WorldY3");
For the one getting message
MessagingSession messagingSession = DefaultMessagingSession.getInstance();
Identifier topicIdentifier = messagingSession.createQueue("test-queue");
Subscriber subscriber = messagingSession.subscribe("test-queue");
while (true) {
String message = (String)subscriber.getMessage();
System.out.println(message);
}

Similar Messages

  • A bug in message pattern?

    We used a wrong cache factory class and seems to encounter a message pattern bug accidently...
    Here is the exception we got.
    java.util.MissingFormatArgumentException: Format specifier 's'
    at java.util.Formatter.format(Formatter.java:2431)
    at java.util.Formatter.format(Formatter.java:2366)
    at java.lang.String.format(String.java:2770)
    at com.oracle.coherence.common.logging.Logger.log(Logger.java:93)
    at com.oracle.coherence.patterns.messaging.MessagePublisher.initDestinationType(MessagePublisher.java:400)
    at com.oracle.coherence.patterns.messaging.MessagePublisher.<init>(MessagePublisher.java:133)
    at com.oracle.coherence.patterns.messaging.MessagePublisherManager.getPublisher(MessagePublisherManager.java:187)
    at com.oracle.coherence.patterns.messaging.MessagePublisherManager.ensurePublisher(MessagePublisherManager.java:98)
    at com.oracle.coherence.patterns.messaging.entryprocessors.PublishMessageProcessor.process(PublishMessageProcessor.java:118)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.DistributedCache$Storage.invoke(DistributedCache.CDB:20)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.DistributedCache.onInvokeRequest(DistributedCache.CDB:49)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.DistributedCache$InvokeRequest.run(DistributedCache.CDB:1)
    at com.tangosol.coherence.component.net.message.requestMessage.DistributedCacheKeyRequest.onReceived(DistributedCacheKeyRequest.CDB:12)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.Grid.onMessage(Grid.CDB:9)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.Grid.onNotify(Grid.CDB:136)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.DistributedCache.onNotify(DistributedCache.CDB:3)
    at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:42)
    at java.lang.Thread.run(Thread.java:619)
    The interesting part is that the source code from message pattern website seems doesn't match with the jar file.
    We "decompile" coherence-messagepattern-2.6.1.14471.jar and the line numer 400 of MessagePublisher.class is
    Logger.log(1,"Destination %s is not found for Id "+this.destinationIdentifier, new Object[0]);
    * this is the one caused the exception since you can't provide Object[0] when you have %s in the format string expect an input.
    But if I look at the source code inside coherence-messagepattern-2.6.1.14471-src.zip from message pattern page, line 400 of MessagePublisher.class is
    Logger.log(1,"Destination %s is not found for Id "+this.destinationIdentifier);

    I encountered an identical issue. The root cause is bad logging in messaging.
    The reason it happens is items were put to a cache that is backed by a publishing cache store, but there are no publishers attached to that cache. The temporary fix is to either add one or more publishers to the cache, or to alter your coherence config so that this particular cache is not backed by a publishing cachestore.
    Cheers,
    Neville.

  • Is message persistance with 3rd party queues implemented?

    Is message persistance with 3rd party queues implemented for 9.0.2 or 9.0.3 prev?
    I am not able to use Oracle JMS and want to try implementing this.
    Documents on how to implement this would be helpful.
    thanks,
    Isaac

    OC4J 9.0.2 is certified with few JMS providers like MQSeries, SonicMQ, SwiftMQ, etc. Please look at the Services Guide that documents how to use 3rd Party JMS providers.
    regards
    Debu

  • Performance for messaging queue - queue implemented as single cache entry.

    Hey Brian/All,
    Has there been any progress on addressing the long standing performance issues with messaging?
    i.e. messaging stores a queue within a single cache entry, which means it needs to deserialize, add item, and reserialize every time we add an item to the queue.
    For push rep, this means a burst of data can bring messaging to it knees and cause a cluster to fall over (eg: a clear of a large cache, or a remote site that is unavailable causing queues to grow to a very large size).
    I have also noticed that when a queue gets very large, the jmx suspend/drain times out, and throws an exception.
    Cheers,
    Neville.

    Hi Friends,
    Create a function that needs to be called on the ejbCreate.
    Inside this function make the connections as in the snippet below and close it when ejbRemove() or exception.
    fis                          = new FileInputStream("D:/MessageRouter_UAT/AppConfig.Properties");
    props.load(fis);
    fis.close();
    String logPath      = props.getProperty("Log_path").trim()+".log";
    logHandler      = new FileHandler(logPath);
    logHandler.setFormatter(new SimpleFormatter());
    logWriter.addHandler(logHandler);
    logWriter.setLevel(Level.ALL);
    MQEnvironment mqEnv      = null;
    mqEnv      = new MQEnvironment();
    MQEnvironment.hostname      = props.getProperty("MQ_HOST_NAME").trim();
    MQEnvironment.port      = Integer.parseInt(props.getProperty("MQ_PORT").trim());
    MQEnvironment.channel      = props.getProperty("CHANNEL_NAME").trim();
    MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT);
    q_Mgr                = new MQQueueManager(props.getProperty("QUEUE_MANAGER").trim());
    queueID                = q_Mgr.accessQueue(props.getProperty("ID_Queue").trim(), MQC.MQOO_OUTPUT);
    queueSG                     = q_Mgr.accessQueue(props.getProperty("SG_Queue").trim(), MQC.MQOO_OUTPUT);
    queueHK                = q_Mgr.accessQueue(props.getProperty("HK_Queue").trim(), MQC.MQOO_OUTPUT);
    queueCL                     = q_Mgr.accessQueue(props.getProperty("CL_Queue").trim(), MQC.MQOO_OUTPUT);
    Thanks,
    Arun Prithviraj

  • OC4J 9.0.4: Problem receiving message from JMS queue

    I've created an application which puts XML files in a JMS queue and try to get it out again. The enqueing (sending) is no problem, but when I dequeue from the same queue I receive nothing and if I don't specify a wait time the programs hangs.
    If I create a QueueBrowser I can see there are messages in the queue.
    Can someone tell me what I do wrong?
    Here is the code of my dequeue action:
    public String dequeue(int qName) throws RbsSysException
            final String method = "dequeue(int qName)";
            _log.debug(method);
            QueueConnection queueConnection = null;
            try
                queueConnection = _queueConnectionFactory.createQueueConnection();
                QueueSession queueSession = queueConnection.createQueueSession(false,
                        Session.AUTO_ACKNOWLEDGE);
                QueueReceiver queueRcv = queueSession.createReceiver(getQueue(qName));
                _log.debug("queue = "+ queueRcv.getQueue().getQueueName());
                // Due to bug 3376983 in OC4J We cannot use TextMessage if it exceeds
                // 64 kb. Therefore use ObjectMessage.
                Message msg = queueRcv.receiveNoWait();
                _log.debug("msg = " + msg);
                ObjectMessage objMsg = (ObjectMessage)msg;
                //ObjectMessage objMsg = (ObjectMessage) queueRcv.receiveNoWait();
                _log.debug("objMsg = " + objMsg);
                if (objMsg != null)
                    return (String) objMsg.getObject();
                else
                    return null;
            catch (JMSException je)
                throw new RbsSysException(je);
            finally
                if (queueConnection != null)
                    try
                        queueConnection.close();
                    catch (Exception any)
                        _log.error("Error while closing QueueConnection: ", any);
        }

    Did you implement javax.jms.MessageListener and the method onMessage(Message)?
    If you use onMessage() as wel as receive (or receiveNoWait() or receive(long)), the onMessage() can be called, while the main thread is blocking on a synchronous receive, so make sure you use only one of the two methods: onMessage() or receive.
    Receive() blocks your thread until a message is published. So your program 'hangs' by design. Usually this is used when your program is waiting for a particular message. Otherwise use onMessage().
    ReceiveNoWait() checks if something is in the queue at that very moment, so if nothing is there (yet), the main thread continues.
    Hope this helps,
    Lonneke

  • Messaging Pattern

    Hi,
    Back Ground – We are building claim-processing system. Currently we are using AQ as a load balancer and spring MDP (in concurrent threads) that grabs the messages from the queue and start claim processing. I see in case heavy load the AQ can itself become a bottleneck and hence want to replace the AQ with Coherence and leverage the Messaging Pattern.
    MDP – Message Driver Pojos
    I have following questions on the Messaging Pattern
    1.     Can the Coherence’s Messaging Pattern framework replace AQ?
    2.     If answer to the above question is ‘yes’, how can we make ‘queue’ durable i.e. guarantee that no messages are lost.
    3.     How many messages can be delivered per second using coherence?
    Regards,
    Gaurav Malhotra

    Hi All,
    I also integrated oracle coherence with spring integration. This enables the developer to work with pojos
    Concept
    Make a channel backed by oracle coherence as queue.
    So I extended the queue channel as follows
    >
    public class CoherenceAwareQueueChannel extends QueueChannel {
         private final static String nameOfQueue = "aq";
         private NamedCache queueNamedCache = null;
         private NamedCache jmsIdNamedCache = null;
         public static final String JMS_ID_CACHE = "jmsMsgId";
         public static final String JMS_ID_KEY_GEN = "jmsIdKeyGen";
         public CoherenceAwareQueueChannel() {
              // do nothing
         public CoherenceAwareQueueChannel(int capacity) {
              // do nothing
         private NamedCache getQueueNamedCache() {
              if (queueNamedCache == null) {
                   queueNamedCache = CacheFactory.getCache(nameOfQueue);
              return queueNamedCache;
         private long getJmsId() {
              long retVal = 0;
              getJmsNamedCache();
              JmsMsgId jmsMsgId = (JmsMsgId) jmsIdNamedCache.get(JMS_ID_KEY_GEN);
              if (jmsMsgId == null) {
                   jmsMsgId = new JmsMsgId();
                   retVal = jmsMsgId.getJmsId();
                   jmsIdNamedCache.put(JMS_ID_KEY_GEN, jmsMsgId);
              } else {
                   retVal = jmsMsgId.getJmsId();
                   jmsIdNamedCache.put(JMS_ID_KEY_GEN, jmsMsgId);
              return retVal;
         private void getJmsNamedCache() {
              if (jmsIdNamedCache == null) {
                   jmsIdNamedCache = CacheFactory.getCache(JMS_ID_CACHE);
         @Override
         public List<Message<?>> clear() {
              List<Message<?>> clearedMessages = new ArrayList<Message<?>>();
              Set<?> keys = getQueueNamedCache().keySet();
              for (Object key : keys) {
                   clearedMessages.add((Message<?>) getQueueNamedCache().get(key));
              getQueueNamedCache().clear();
              return clearedMessages;
         @Override
         protected Message<?> doReceive(long timeout) {
              // What is the key? Top element of the key
              getJmsNamedCache();
              JmsMsgId jmsId = (JmsMsgId) jmsIdNamedCache.get(JMS_ID_KEY_GEN);
              Long currJmsId = jmsId.getCurrentJmsId();
              Assert.assertNotNull(currJmsId);
              Message<?> msg = (Message<?>) getQueueNamedCache().remove(currJmsId);
              jmsId.resetBy(1);
              jmsIdNamedCache.put(JMS_ID_KEY_GEN, jmsId);
              return msg;
         @Override
         protected boolean doSend(Message<?> message, long timeout) {
              Object jmsId = message.getHeaders().get(JmsHeaders.MESSAGE_ID); // take control
              Object id = (jmsId == null ? getJmsId() : jmsId);
              getQueueNamedCache().put(id, message,timeout);
              return true;
         @Override
         public int getQueueSize() {
              return queueNamedCache.size();
         @Override
         public int getRemainingCapacity() {
              return 999999999; // there is not limit
         @Override
         public List<Message<?>> purge(MessageSelector selector) {
              if (selector == null) {
                   return this.clear();
              Set<?> keys = getQueueNamedCache().keySet();
              List<Message<?>> purgedMessages = new ArrayList<Message<?>>();
              for (Object key : keys) {
                   Message<?> msg = (Message<?>) getQueueNamedCache().get(key);
                   if (!selector.accept(msg) && this.getQueueNamedCache().remove(key) != null) {
                        purgedMessages.add(msg);
              return purgedMessages;
         public static class JmsMsgId implements ExternalizableLite {
              private static final long serialVersionUID = 1L;
              private long cnt = 0;
              public JmsMsgId() {
              public long getJmsId(){
                   return ++cnt;
              public long getCurrentJmsId() {
                   return cnt;
              public void resetBy(long cnt) {
                   this.cnt = this.cnt - cnt;
              @Override
              public void readExternal(DataInput in) throws IOException {
                   cnt = ExternalizableHelper.readLong(in);
              @Override
              public void writeExternal(DataOutput out) throws IOException {
                   ExternalizableHelper.writeLong(out, cnt);
    }My aq based cache store looks like
    public class AqCacheStore extends AbstractCacheStore {
         @Autowired
         private JmsTemplate jmsTemplate;
         // TODO provide pluggable transformation strategy which convert CoherenceMessage to javax.jms.Message
         @SuppressWarnings("unchecked")
         @Override
         public void store(Object msgId, Object jmsMsg) {
              Assert.isTrue((jmsMsg instanceof GenericMessage));
              // TODO we should restrict the payload ad String
              jmsTemplate.send(JmsHelper.createJmsTextMessage(((GenericMessage) jmsMsg).getPayload().toString(),((GenericMessage) >jmsMsg).getHeaders().get(JmsHeaders.TYPE).toString()));
         @Override
         public Object load(Object msgId) {
              throw new IllegalArgumentException("Message should never be loaded..");
         @Override
         public void erase(Object msgId) {
              if (msgId != null) {
                   jmsTemplate.receiveSelected("JMSMessageID = 'ID:" + msgId + "'");
              } else {
                   jmsTemplate.receive();
         @Override
         public void eraseAll(Collection msgIds) {
              for (Object msgId : msgIds) {
                   erase(msgId);
         @SuppressWarnings("unchecked")
         @Override
         public void storeAll(Map msgMap) {
              for (Iterator<Map.Entry> iter = msgMap.entrySet().iterator(); iter.hasNext();) {
    Map.Entry entry = iter.next();
    Object jmsMsg = entry.getValue();
    jmsTemplate.send(JmsHelper.createJmsMessage(jmsMsg));
    }My junit test cases looks like
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = { "classpath:com/oracle/aq/cachestore/junit/AqContext.xml" })
    public class AqCacheStoreTest {
         @Autowired
         private AqCacheStore aqCacheStore;
         @Autowired
         private JmsTemplate jmsTemplate;
         @Autowired
         private QueueChannel coherenceQueue;
         @Autowired
         private PollingConsumer coherenceConsumer;
         @Test
         public void sendSIMsgToCoherenceQueueChannel() throws InterruptedException,
                   JMSException {
              Assert.assertNotNull(aqCacheStore);
              Message<String> message = MessageBuilder.withPayload("gaurav in cache")
                        .setHeader(JmsHeaders.TYPE, "sometype").build();
              coherenceQueue.send(message);
              coherenceQueue.send(message);
         @Test
         public void recieveSIMsgFromCoherenceQueueChannel() {
              Assert.assertNotNull(aqCacheStore);
              Message<String> msg = (Message<String>) coherenceQueue.receive();
              System.err.println("^^^^^^^^^^^^^^^^^^^^^^^"+msg.getPayload());
              msg = (Message<String>) coherenceQueue.receive();
              System.err.println(">>>>>>>>>>>>>"+msg.getPayload());          
         public static class ServiceActivator {
              public void onMessage(Message<?> msg) {
                   System.err.println("%%%%" + msg.getPayload());
    }Conclusion
    Message can be stored in both AQ and coherence and hence can be used for store and forward of messages, which are also persisted. I have used spring integration GenericMessage<T> and provide injectable strategy to convert to JMS message and visa versa Why??? javax.jms.Message is not serializable. By this we can leverage both power of bothcoherence and AQ. Also programming model encourages POJO driver coding and JMS specifications
    Looking forward for the valuable feedback from the community.

  • How to set up the maximum number of messages on a queue programmatically

    Hi,
    I am using IMQ 3.5 to implement a message layer for one of my projects. I created a "Job Status Queue", which receives job status report from a java application every minute. But I just want to keep the most current status report instead of all the job running history. How can I restrict the maximum number of messages to 1 programmatically?
    Any suggestion or help will be appreciated.
    Xiaoyun Tang

    You can't limit the destination size programmatically, but you can do it administratively and associate a behavior to occur when the limit is reached. In your case it sounds like you want a queue, 1 message deep, and to discard the oldest message when the queue is full. When you create the physical queue on the broker you can specify these attributes (you can also update them on an existing queue). For example:
    imqcmd create dst -t q -n StatusQ -o maxNumMsgs=1 -o limitBehavior=REMOVE_OLDESTFor more information see Chapter 6 of the Message Queue Administration Guide. In particular the "Managing Destinations" section:
    http://docs.sun.com/app/docs/coll/MessageQueue_35_SP1
    Joe

  • Mails/Alerts-triggered for messages stuck in queues and failed in moni

    Hi,
    I have two doubts.
    1) Messages are getting stuck in smq2 of my ECC and PI system. I have to manually push them. Is there any mechanism in which we can get alerts/mails when messages get stuck in queues.
    I have already gone through the blog /people/santhosh.kumarv/blog/2009/05/19/sap-xipi-alerts-for-queue-errors and I have implemented it in ECC system. But no mails were generated.
    2)Is there any method in which I can get alerts/mails when a message fails in sxmb_moni of ECC system?
    Thanks and regards,
    Siji

    Hi Sanjeev,
    I made a report with the following code in it and executed it. So I think that should work even if the job for it is not scheduled. There were messages stuck in queue. But no alert was generated. I had also created alert category in ECC.
    Thanks and regards,
    Siji

  • Messages in Distributed Queue remain on one JMSServer in Cluster

    Hi,
              the situation is as follows:
              We're having Distributed Queues on a two-Node server setup. A queue therefore exists two times, once on each JMSServer on each node.
              Forward-Delay has been set on the DistibutedQueue to value 1 second (we tested with values 0 and 10, too).
              External Java client (both cluster nodes in the provider_url for initialcontext) connects to the DistributedQueue and sends messages. In the weblogic console you can see these messages on the physical queue on the JMSServer, let's call it QueueA on NodeA.
              An external java process to consume messages (again both clusters nodes in the jndi-connection-string) is started to consume messages. Because of round-robin it sometimes get's connections to QueueB (part of same DistributedQueue as QueueA, but on the other node in the cluster).
              When connected to QueueB on NodeB no single message is received. You can even see in the weblogic console that QueueA on NodeA has zero consumers and 50 messages, QueueB on NodeB has zero messages but one consumer.
              When we restart the consumer java process and it randomly get's connected to QueueA on NodeA it consumes fine, as it should.
              Should'nt Forward-Delay do exactly this? Transport messages from QueueA on NodeA with zero consumers to QueueB on NodeB which actually has consumers?
              Any help would be appreciated.
              Axel van Lil

    Hi,
              thanks for your answer. We opened a support case today for this issue... I don't know. Cluster seems to run fine, no warnings, no exceptions.
              The next step of this issue is the following (just to give an idea of our upcoming problems :-)
              External Java process listens on QueueA on NodeA (QueueA is part of a Distributed Queue). Currently receives all the messages located on that queue. We kill NodeA on that machine to simulate failover.
              The external process failovers immediately to NodeB (which is good! proven by netstat and debugger) but just doesn't receive messages even though there are messages in that queue! It seems that the new consumer is just being forgotten by the BEA server.
              I don't know... somehow our configuration is quirked... or the BEA implementation doesn't work at all...
              Rgds,
              Axel

  • MDB is not picking up messages in the Queue

    Hi ,
    I am trying to implement a MDB (Producer) , that acts as a Message Producer also . This MDB pickes up a message from a Queue and sends it to another Queue(Queue 2) after some processing. The MDB listening to the Queue 2 is not being able to pick this message.
    The Weblogic console shows that the message is pending.
    The transaction-type is Container and transaction-attribute is 'Required' for the Producer (MDB) ...
    I am creating a QueueSession as con.createQueueSession(true, Session.AUTO_ACKNOWLEDGE) . I also tried specifying queuesession.commit() ...
    even then the Message is not picked by the MDB listening on the other side...
    Please help me out

    any one

  • Message sitting in Queues for 30 minutes before MDB picks them up

    We're seeing a situation where we place messages on a queue and a small percentage of them will sit on the queue for 30 minutes before being picked up by the MDB to process. Anyone see this before?
              Here is the background. We're running 3 distributed queues on a cluster of 4 Weblogic 8.1 sp3 servers. The 30 minute issue happens on all 3 queues on all 4 servers. Currently we do not see a pattern. It can happen at a busy hour and in the middle of the night with nothing going on. During a busy timeframe, we can get up to 50 msg that hangup over a few minutes; less than 5 minutes.
              Our Service is an enterprise email service where various clients send email request to us via EJB. The EJB puts an entry into the database and puts a request msg into the queue. The MDB pulls it off the queue sends it to an email subsystem and updates the database.
              We added log msgs in both the EJB and MDB to track messages and narrowed it down to the requests just sitting in the JMS queue. We DO NOT set a delivery time via setJMSDeliveryTime().
              As mentioned is happens anytime during the day (busy or idle), may go for days without occuring, on any of the 3 JMS queues, on any of the 4 cluster servers, and for any of the clients. It's consistantly 30 minutes. This occurs on a small number of requests, but is enough to concern our business owner.
              Any thoughts on possible problems or any thoughts on monitoring or tracking down the issue is greatly appreciated.
              Thanks. Later...
              - Wayne

    One possibility is that the messages have already been pushed to an MDB instance in the JMS asynchronous consumer pipeline, but the MDB instance has stalled during message processing - which delays processing of the following messages. The waiting messages count as "pending" in the JMS statistics.
              You can reduce the number of messages in a JMS asynchronous consumer's pipeline via the "MessagesMaximum" connection factory setting (default is 10). First: create a custom connection factory with transactions enabled (to support transactional MDBs), and ack-mode set to "previous" (to support pub/sub MDBs), and MessagesMaximum set to its lowest possible value. Second: specify this connection factory's JNDI name in the MDB's weblogic descriptor.
              Tom, BEA

  • Message send failed: SSL implementation not available

    Objective: to Jdev version 10.1.3 generate a client proxy for a given URL / wsdl and deploy to Oracle 10q
    for use in PL \ SQL package. The problem it is necessary to establish an SSL connection.
    After generating the client created AgentConnectClient class
    / / SSL
    System.setProperty("ssl.SocketFactory.provider","oracle.security.ssl.OracleSSLSocketFactoryImpl");
    System.setProperty("ssl.ServerSocketFactory.provider","oracle.security.ssl.OracleSSLServerSocketFactoryImpl");
    System.setProperty("java.protocol.handler.pkgs","HTTPClient");
    System.setProperty ("oracle.wallet.location", "/ etc / ORACLE / WALLETS / oracle");
    System.setProperty ("oracle.wallet.password", "passw");
    / / Client
    c = new AgentConnectClient ();
    / / end_point = "https:// ....";
    c.setEndpoint (end_point);
    CityListRequest requst = new CityListRequest ();
    CityListResponse response = new CityListResponse ();
    requst.setTimeStamp (Calendar.getInstance ());
    requst.setApiVersion (apiVersion);
    requst.setMaxRowsToReturn (new BigInteger (maxRowsToReturn.toString ()));
    / / request - response
    response = c.cityList (requst);
    Here there is a bug
    ; Nested exception is:
    HTTP transport error: javax.xml.soap.SOAPException: java.security.PrivilegedActionException: javax.xml.soap.SOAPException: Message send failed: SSL implementation not available
    Can anyone help, any ideas welcome - thank you.
    Edited by: tyoma on Oct 6, 2011 6:52 PM

    I also have that error for days and still no answer from java people here. I don't think they don't know really what they are talking about even people from sun don't know how to solve this problem.

  • Did anyone tried Rejection Message Handler via Queue based method?

    Dear All,
    I am presently doing a Rejected Message Handler process and successfully implemented with File based and Web Service based. But I am not getting the clue for Queue based. We can enqueue the rejected message into queue as a JMS message via this method. But the URI format they have given is *"jdbc:oracle:thin:@<host>:<port>:<sid>#<un>/<pw>#queue"*. Format includes jdbc connection string along with queue name. For this I have created JMS module with JDBC Persistent store and created queue in it. But still I am not able to enqueue the message inside the queue. Also, is there anyway to see the queue names inside the DB. Did anyone tried this method? Could you please share the info??

    WL JMS Queue consume>BPEL1 (One way) invoke>Mediator service (one way) route> BPLE2 (one way). Also I have added transaction properties in BPEL1 and 2 + References + Services.
    Now, if there is a fault in BPEL2 the transaction should be rolled back in BPEL1 and the message should be seen in the WL queue itself. But that is not happening in my case. Everything is getting rolled back upto a point just after the >recieve activity in BPEL1 except the message is not getting rolled back to queue.There will be 2 transactions in this scenario : 1) jms queue to soa hydration store 2) soa-hydration to bpel execution.
    This is the behaviour for 1 way or async interfaces , jms adapter thread completes its transaction work after persisitng to dehydration store and another bpel system thread starts work executing the bpel code after retrieving the message off the db in a separate transaction. So the rollback you are seeing is only applicable for 2nd transaction which roll backs to the dehydration store instead of the queue.
    For synchronous interfaces, the same adapter thread will be involved for complete message processing including bpel code execution. So I think if you want to get the jms queue within the same transaction you can try set up the interfaces to be sync, even with dummy responses. This might make jms adapter thread to start a transaction --> read message off queue within the same transaction --> execute bpel code within same transaction --> complete/rollback transaction based on bpel code execution.

  • Subscription lost exception for message pattern

    We are using message pattern 2.4 and Coherence 3.5.3 patch 1.
    Seeing many subscription lost exception messages.
    I don't see any straight forward way to set the subscription expiration. We'd like to make it infinite (i.e. the getMessage() will block forever until
    a message has been put into the queue). Any suggest to get rid of this exception?
    Regards,
    Chen
    com.oracle.coherence.patterns.messaging.exceptions.SubscriptionLostException: Subscriber subscription was lost (with expired or the underlying destination has been removed)
         at com.oracle.coherence.patterns.messaging.AbstractSubscriber.ensureSubscription(AbstractSubscriber.java:282)
         at com.oracle.coherence.patterns.messaging.QueueSubscriber.getMessage(QueueSubscriber.java:81)
    com.oracle.coherence.patterns.messaging.exceptions.SubscriptionLostException: Subscriber subscription was lost (with expired or the underlying destination has been removed)
         at com.oracle.coherence.patterns.messaging.AbstractSubscriber.ensureSubscription(AbstractSubscriber.java:282)
         at com.oracle.coherence.patterns.messaging.QueueSubscriber.getMessage(QueueSubscriber.java:81)
    com.oracle.coherence.patterns.messaging.exceptions.SubscriptionLostException: Subscriber subscription was lost (with expired or the underlying destination has been removed)
         at com.oracle.coherence.patterns.messaging.AbstractSubscriber.ensureSubscription(AbstractSubscriber.java:282)
         at com.oracle.coherence.patterns.messaging.QueueSubscriber.getMessage(QueueSubscriber.java:81)

    Hi Wenjie,
    Try defining the <security-identity> in your ejb-jar.xml as the following:
    <security-identity>
         <description>SecurityIdentity</description>
         <use-caller-identity/>
    </security-identity>
    BTW, I suggest that you should use NW Developer Studio to edit your descriptors.
    Regards,
    Mustafa.

  • I want to use ODI to read XML messages from JMS queue and then process it..

    I want to use oracle ODI (Oracle Data Integrator) to read XML messages from JMS queue and then process it.. i also want to process and validate the data in it....
    Could anyone please tell me the steps to achieve the same. I tried some ways which i got on OTN, but not able to implement it exactly...
    As i m very new to ODI, it will be great if you provide detailed steps..
    Thanks in advance for your help....

    Hi,
    Were you able to do it? We are facing this same issue now and, despite the fact the docs say otherwise, it does not seem to be a trivial task.
    TIA,
    Tedi

Maybe you are looking for

  • I need to copy all my texts from my iPhone 5 to my new iPhone 6

    I have just bought the new iPhone 6 and I need to copy all my texts  from my iPhone 5

  • Focus Traversal Problem

    Hello, I implemented my own focus traversal policy provider for a JPanel. It appears to be working fine except for one of my components (a JTextArea contained in a JScrollPane). If I ctrl+tab out of the JTextArea, my custom FTP is never used. I am st

  • Random Image with Clickable Link

    Hey guys so far I found a code that lets me randomize an image and I found out a piece of code that makes the image clickable but I do not know how to add a specific link to each specific image. Here is the code: <head> <script language="JavaScript">

  • Trouble using FME twice on same computer

    I've tried for two weeks to run FME twice for two separate streams and get intermittent crashes, even with reconnect set at 5 minutes, one second so that the server can release the "old" stream name. I am now running one instance of FME and one insta

  • Remote Delta Link vs Direct Link - Federated Portal

    Hi, We couldn't get our Remote Delta Links to work on our Enterprise Portal so we just built a direct link to our IViews.  This link goes through the Enterprise Portal and to the IView on the BI Portal. (Points to the Producer on the Consumer) This w