When to acknowledge when dispatching using multiple threads?

So on a project I'm working on I read from a queue and I dispatch to a thread pool that has worker threads and the general idea is that I never want to acknowledge a message until I know for sure that I've processed it otherwise it risks becoming lost.
There are two approaches
1. is to acknowledge the message immediately after the details have been written to a working table and then in the event that the client restarts you pickup messages from this table prior to processing any new ones from the queue. upon processing each message you update it's state or delete the row from this table to reflect that it's no longer working.
2. another approach is to queue up acknowledgements in the main message listener thread such that as each worker thread completes it's job it enqueues the message for acknowledge by the main delivery thread (async). ie. the same thread that is picking up the messages. So after pulling a message from the queue and having dispatched it you then at the end of the cycle work thru the queue to acknowledge the messages that has been queued up by the worker threads to be acknowledged. One thing about this is that acknowleding a message implicitly acknowledges all those prior unacknowledged messages it's probably overkill to be acknowledging every message in the "queue." You just want to acknowledge the most recent one.
I believe that option 2 results in less work since there's no round trips to the database necessary to maintain a working table.
Websphere's MQ in JMS requires that you acknowledge in the delivery thread so unless you do it immediately or after processing each message you have to maintain a working table if you want to guarantee that any message pulled off the queue was actually processed and not lost along the way.

steffi wrote:
So on a project I'm working on I read from a queue and I dispatch to a thread pool that has worker threads and the general idea is that I never want to acknowledge a message until I know for sure that I've processed it otherwise it risks becoming lost.
There are two approaches
1. is to acknowledge the message immediately after the details have been written to a working table and then in the event that the client restarts you pickup messages from this table prior to processing any new ones from the queue. upon processing each message you update it's state or delete the row from this table to reflect that it's no longer working.
2. another approach is to queue up acknowledgements in the main message listener thread such that as each worker thread completes it's job it enqueues the message for acknowledge by the main delivery thread (async). ie. the same thread that is picking up the messages. So after pulling a message from the queue and having dispatched it you then at the end of the cycle work thru the queue to acknowledge the messages that has been queued up by the worker threads to be acknowledged. One thing about this is that acknowleding a message implicitly acknowledges all those prior unacknowledged messages it's probably overkill to be acknowledging every message in the "queue." You just want to acknowledge the most recent one.
I believe that option 2 results in less work since there's no round trips to the database necessary to maintain a working table.certainly. but how exactly does it achieve your reliability goals from the first paragraph?
Websphere's MQ in JMS requires that you acknowledge in the delivery thread so unless you do it immediately or after processing each message you have to maintain a working table if you want to guarantee that any message pulled off the queue was actually processed and not lost along the way.sounds about right, yes.

Similar Messages

  • How to use multiple threads and swing for displaying status/interaction

    I have a Swing-app which have to show progress and allow userinteraction for these tasks:
    * First:
    retrieve a list of IDs(String) from the database (single thread running)
    * Second:
    some work on the id-list and list written to hd (same thread as above)
    * Third:
    retrieve Objects (based on the id-list) from different sources (Multiple Threads are running)
    To show the status I have a JProgressBar (indeterminate while task1&2 running) and
    a JTextArea showing the current status (connect,retrieve list, sort, ...)
    When task3 is starting the JTextArea have to disappear and be replaced by a ScrollPane
    with an array of Labels/TextAreas showing the status of each thread.
    While theses threads are working, the ID-list will be consumed and the JProgressBar
    shows the remaining precentage of the hole progress.
    Everything is working so far (excepts UI :) , the problem(s) I have:
    I need the threads to interacts with the user through the ui. e.g: "Connection to db-xyz lost! reconnect?"
    But I don´t know how to do this correctly.
    I think one way would be to send an event to the ui... but how?
    (the ui must know which thread is calling to unpause it after user answered)
    I know that threads should NOT change the swing(-container) - How do I notify the ui that a thread has a question?
    Since these threads are really time-consuming the UI is not updated frequently,
    how can I increase this? (perhaps using another thread-priority?)
    thanks for help!

    if/when your threads need to interact with the UI, they can create a Runnable & send it to SwingUtilities.invokeLater or invokeAndWait. This Runnable can popup a message to the user, and act on the choice of the user (reconnect, cancel, ...). This action could be something which "unpauses" the task thread.
    You may need to do synchronisation between the code in the Runnable & the Thread to which it is related - so the latter Thread knows when the user has made the choice.

  • How do i use multiple threads( very much real time), using JavaFX?

    I'm creating an application, using JavaFX because one can create awesome GUI using JavaFX. I need to know how to create real time multiple threads using javafx.
    JavaFX doesn't support creation of multiple threads, but i think there is another way of doing it. I need it work in real time as my application works with an hardware (wacom intous 3 tablet), and i need mutiple threads to get all the parameters from the stylus of the tablet simultaneously...
    any code which will help me out or explaination on how to go about this is appreciated...
    Help required quickly...

    See example at
    [http://jfxstudio.wordpress.com/2009/06/09/asynchronous-operations-in-javafx/|http://jfxstudio.wordpress.com/2009/06/09/asynchronous-operations-in-javafx/]

  • Is there any problem to use multiple threads to send email with JavaMail

    Dear all,
    I am using JavaMail 1.3.2 to send emails with SMTP, it works very well for a long time.
    But one day, I found that the email service hanged and I could never send email again until I restart the tomcat. I found that the reason was a deadlock had been created, the required resource for sending email had not been released.
    I guess the error is due to multiple threads are sending email at the same time. I made a test to create seperate thread for sending each email. After few days, I found this deadlock happened again. So, my question is: Can I use JavaMail with multiple threads? If not, I may need to sychronized all the thread that using JavaMail. I would like to make sure this is the reason for causing the deadlock problem.
    Here is part of my code for using JavaMail:
    transport = session.getTransport("smtp");
    transport.connect(email_host, smtp_user, smtp_pass);
    message.saveChanges();
    transport.sendMessage(message,message.getAllRecipients());
    which is very standard call, and it worked well for a long time.
    Here is part for my thread dump on tomcat:
    (Thread-339)
    - waiting to lock <0x5447c180> (a sun.nio.cs.StandardCharsets)
    (Thread-342)
    - locked <0x5447c180> (a sun.nio.cs.StandardCharsets)
    It seems that these happened after call the method transport.sendMessage() or message.updateChanges()
    , and the underlying implementation may require the JRE StandardCharsets object. But the object had been locked and never be released. So, the sendMessage() or updateChanges() can't be completed.
    Please give me some helps if you have any idea about it.
    Thanks very much!
    Sirius

    Note that the Nightly build gets updated daily (and sometimes more than once in case of a respin) and it is always possible that something goes wrong and it doesn't work properly, so be prepared for issues if you decide to stay with the Nightly build and make sure to have the current release with its own profile installed as well in case of problems.
    See also:
    * http://kb.mozillazine.org/Testing_pre-release_versions
    *http://kb.mozillazine.org/Creating_a_new_Firefox_profile_on_Windows
    *http://kb.mozillazine.org/Shortcut_to_a_specific_profile
    *http://kb.mozillazine.org/Using_multiple_profiles_-_Firefox

  • Client/Server in one program (using multiple threads)?

    Is there some examples out there of how to use a client and server in a single program using separate threads? Also, is it possible to start a third thread to control the packets, such as drop a random or specified number of packets (or match on specific data in a packet)?

    Just trying to have a client send udp packets to a server (all on the same machine running from the same program) and want to be able to drop packets coming from the client side to the server side.
    E.g.,
    Here's an example that I found here: http://compnet.epfl.ch/tps/tp5.html
    import java.io.<strong>;
    import java.net.</strong>;
    import java.util.<strong>;
    /</strong>
    * Server to process ping requests over UDP.
    public class PingServer {
         private static double lossRate = 0.3;
         private static int averageDelay = 100; // milliseconds
         private static int port;
         private static DatagramSocket socket;
         public static void main(String[] args) {
              // Get command line arguments.
              try {
                   if (args.length == 0) {
                        throw new Exception("Mandatory parameter missing");
                   port = Integer.parseInt(args[0]);
                   if (args.length > 1) {
                        lossRate = Double.parseDouble(args[1]);
                   if (args.length > 2) {
                        averageDelay = Integer.parseInt(args[2]);
              } catch (Exception e) {
                   System.out.println("UDP Ping Server");
                   System.out.println("Usage: java PingServer port [loss rate] [average delay in miliseconds]");
                   return;
              // Create random number generator for use in simulating
              // packet loss and network delay.
              Random random = new Random();
              // Create a datagram socket for receiving and sending UDP packets
              // through the port specified on the command line.
              try {
                   socket = new DatagramSocket(port);
                   System.out.println("UDP PingSever awaiting echo requests");
              } catch (SocketException e) {
                   System.out.println("Failed to create a socket");
                   System.out.println(e);
                   return;
              // Processing loop.
              while (true) {
                   // Create a datagram packet to hold incoming UDP packet.
                   DatagramPacket request = new DatagramPacket(new byte[1024], 1024);
                   // Block until the host receives a UDP packet.
                   try {
                        socket.receive(request);
                   } catch (IOException e) {
                        System.out.println("Error receiving from socket");
                        System.out.println(e);
                        break;
                   // Print the received data.
                   printData(request);
                   // Decide whether to reply, or simulate packet loss.
                   if (random.nextDouble() < lossRate) {
                        System.out.println("   Reply not sent.");
                        continue;
                   // Simulate network delay.
                   try {
                        Thread.sleep((int) (random.nextDouble() * 2 * averageDelay));
                   } catch (InterruptedException e) {}; // Ignore early awakenings.
                   // Send reply.
                   InetAddress clientHost = request.getAddress();
                   int clientPort = request.getPort();
                   byte[] buf = request.getData();
                   DatagramPacket reply = new DatagramPacket(buf, buf.length,
                             clientHost, clientPort);
                   try {
                        socket.send(reply);
                   } catch (IOException e) {
                        System.out.println("Error sending to a socket");
                        System.out.println(e);
                        break;
                   System.out.println("   Reply sent.");
          * Print ping data to the standard output stream.
         private static void printData(DatagramPacket request) {
              // Obtain references to the packet's array of bytes.
              byte[] buf = request.getData();
              // Wrap the bytes in a byte array input stream,
              // so that you can read the data as a stream of bytes.
              ByteArrayInputStream bais = new ByteArrayInputStream(buf);
              // Wrap the byte array output stream in an input stream reader,
              // so you can read the data as a stream of characters.
              InputStreamReader isr = new InputStreamReader(bais);
              // Wrap the input stream reader in a buffered reader,
              // so you can read the character data a line at a time.
              // (A line is a sequence of chars terminated by any combination of \r
              // and \n.)
              BufferedReader br = new BufferedReader(isr);
              // We will display the first line of the data.
              String line = "";
              try {
                   line = br.readLine();
              } catch (IOException e) {
              // Print host address and data received from it.
              System.out.println("Received echo request from "
                        + request.getAddress().getHostAddress() + ": " + line);
    }I'm looking to do the "processing loop" in a separate thread, but I'd also like to do the client in a separate thread
    So you're saying, just put the client code in a separate class and start the thread and that's it? As far as the packet rate loss thread, is this possible to do in another thread?

  • Modifying the stack class to use multiple threads

    Im trying to re write the stack class but with using 2 threads. One of the thread calls the pop method and the other calls the push method.
    I don't know where im going wrong...
    Any tips would be great thnx
    Haven't bothered putting in any try / catch clauses yet, will make it look pretty later :)
    http://nopaste.php-q.net/19555

    java.util.Stack is thread safe so all you need to do are create two threads
    one which pushes data onto the stack and one which pops it off.
    class PushThread implements Runnable {
       private Stack stack;
       public PushThread(Stack s) {
          this.stack = s;
       public void run() {
         while(true) { // loop for ever
            stack.push(new Object());
            for(int i=0;i<100000;i++); // waste some time.
    }The code above deliberatly does not use wait, sleep, notify etc as these
    would force an ordering onto the stack. The code instead goes into a
    loop that should waste time.
    your PopThread class will be identical but will call stack.pop() instead.
    matfud

  • How to decrease CPU usage when using multiple threads?

    I am using vb.net , .NetFramework 2.0 . 
    My application gets live stock prices from google and updates stocks in database each 10 seconds.
    I get this code for  multithreading. When application starts updating stocks in database(about 200 stocks) , the update takes up to 3 seconds but it increase CPU usage from 10 % to 70 % or 80 %.
    What is the best way to to update database without getting CPU increase to high level?
    I observed that all threads works at the same time. how to make each thread wait until the second ends?
    This is my code. The problem is in function updateThreaded2().
    Please I need quick help. Thanks
    Public Function Update2(ByVal l As SortableBindingList(Of NewStockList)) As Long
    res = 0
    UThread = New System.Threading.Thread(AddressOf UpdateThreaded2)
    If Me.URunning = True Then
    Else
    Try
    Me.URunning = True
    Interlocked.Exchange(Me.UCount, 0) 'threadsafe method of assigning static value
    Interlocked.Exchange(Me.UDone, 0) 'threadsafe method of assigning static value
    UThread.Priority = Threading.ThreadPriority.BelowNormal
    UThread.IsBackground = True
    UThread.Start(l)
    Return 0
    Catch ex As Exception
    End Try
    End If
    End Function
    Private Sub UpdateThreaded2(ByVal l As SortableBindingList(Of NewStockList))
    Dim i As Integer = 0
    Dim threadcount As Integer = Math.Min(Me.MaxThreads, Me.Stocks.Count)
    Dim threads(threadcount - 1) As SUTC
    Try
    While i < Me.Stocks.Count
    For j As Integer = 0 To threadcount - 1
    If threads(j) Is Nothing Then
    If i < Me.Stocks.Count Then
    threads(j) = New SUTC(Me.Stocks(i), Me.DefaultService, AdjustSplits, Use20Minutes, l)
    threads(j).Thread.Priority = Threading.ThreadPriority.BelowNormal
    threads(j).Thread.IsBackground = True
    threads(j).Thread.Start()
    i += 1
    End If
    ElseIf threads(j).UpdateState = 0 Then
    If i < Me.Stocks.Count Then
    SecUpd(j) = Me.Stocks(i).symbol
    threads(j) = New SUTC(Me.Stocks(i), Me.DefaultService, AdjustSplits, Use20Minutes, l)
    threads(j).Thread.Priority = Threading.ThreadPriority.BelowNormal
    threads(j).Thread.IsBackground = True
    threads(j).Thread.Start()
    i += 1
    End If
    End If
    Next
    Dim running As Boolean = True
    While running
    For j As Integer = 0 To threadcount - 1
    If threads(j).UpdateState = 0 Then
    Thread.Sleep(10)
    running = False
    SecUpd(j) = ""
    Interlocked.Increment(UDone) 'threadsafe method of incrementing a variable by 1
    Interlocked.Exchange(UCount, UCount + threads(j).UpdateCount) 'Threadsafe method for assigning a value
    End If
    Next
    End While
    End While
    Dim pending As Integer = threadcount
    Dim tempcount As Integer = 0
    Dim oldcount As Integer = UCount
    While pending > 0
    pending = threadcount
    tempcount = 0
    For i = 0 To threadcount - 1
    If threads(i).UpdateState = 0 Then
    SecUpd(i) = ""
    pending -= 1
    tempcount += threads(i).UpdateCount
    Thread.Sleep(10)
    End If
    Next
    Interlocked.Exchange(UDone, Me.Stocks.Count - pending) 'Threadsafe method for assigning a value
    Interlocked.Exchange(UCount, oldcount + tempcount) 'Threadsafe method for assigning a value
    End While
    Me.URunning = False
    Catch ex As System.Threading.ThreadAbortException 'handle abort correctly
    Dim pending As Integer = threadcount
    Dim tempcount As Integer = 0
    Dim oldcount As Integer = UCount
    While pending > 0
    pending = threadcount
    tempcount = 0
    For i = 0 To threadcount - 1
    If threads(i).UpdateState = 0 Then
    SecUpd(i) = ""
    pending -= 1
    tempcount += threads(i).UpdateCount
    End If
    Next
    Interlocked.Exchange(UDone, Me.Stocks.Count - pending) 'Threadsafe method for assigning a value
    Interlocked.Exchange(UCount, oldcount + tempcount) 'Threadsafe method for assigning a value
    End While
    End Try
    End Sub

    When the market is opened, stock prices changed every 500 ms . You can see this change on google finance.
    I figured as much, but my thoughts are that if you can somehow find a way to make your program more event driven, then it may be possible to reduce unnecessary looping...
    “If you want something you've never had, you need to do something you've never done.”
    Don't forget to mark
    helpful posts and answers
    ! Answer an interesting question? Write a
    new article
    about it! My Articles
    *This post does not reflect the opinion of Microsoft, or its employees.

  • Connection problems when I use multiple Airport Expresses

    I have one Mac that I use to stream music to multiple Airport Express's. Its seems that when I connect to 3 expresses things work fine. If I connect to 4 the sound cuts out on all speakers.
    Is 3 the limit or am I doing something wrong?

    Yes you can but....
    With the apex in the ceiling you may get a signal loss from your main wireless system. To be able to do what you want in a whole home sound system they all need to be on the main wireless system. You also have to plug them in to a wall outlet which may be an issue with your fire regulations with them inside the walls/ceiling. With airplay you have some limitation also. If she has an ios device and likes say pandora she can only do it to one set of speakers/APex. Only itunes from a computer can do multiple/house party sound. I have 2 APex in my house and love them all. If your main wifi is out of range for some of the new APex's you can run 1 cat5/6 (APex is 10/100)  and make a new network and bridge the rest to it. As long as your new wire is connected to your main network you will stay on the same network.
    So now you get sound and a roaming wifi through out the house. (that's what I did but not in the ceiling.)
    Sonus are good but $$$. by then rewire!

  • Security exception when provisioning using multiple access policies

    We have upgraded our eDirectory connector to version 9.0.4.12. When provisoning manually all process tasks work correctly. However, when provisioning through an access policy or multiple access policies, once the edirectory Create User task runs it creates a security exception and all other connectors fail to provision until retried. We have set the system config parameter of Access Policy Multiple Resource Enhancement to TRUE and we have set the account discirminator in the process form to Server. Why would it fail?

    I have the same problem. Have you solved your problem, if so please let me know what the solution is.
    Einar �rn

  • False Signature is chosen, when i use multiple exchange mailboxes in Outlook 2010

    Hi,
    My Problem: 
    A user has his own Exchange mailbox and an additional exchange mailbox with full access permissions connected in Outlook 2010. I have made different signatures for every Mailbox.
    Mailbox A is working properly. Sending and answering / forwarding works correctly with signature A.
    When i send a mail with mailbox B, outlook uses signature B.
    When i ANSWER a mail with mailbox B, outlook uses signature A.
    The "from" button is highlighted on mailbox B. When i choose mailbox B in the from button manually, it works .....
    Any idea?
    Regards,
    Dave

    Hi,
    I need to confirm one thing first, did you add Mailbox B as an additional Mailbox, or a second Account in E-mail list?
    Regards,
    Melon Chen
    TechNet Community Support
    It's recommended to download and install
    Configuration Analyzer Tool (OffCAT), which is developed by Microsoft Support teams. Once the tool is installed, you can run it at any time to scan for hundreds of known issues in Office
    programs.

  • Using Multiple Threads

    I'm pretty new to Java and am currently working on this assignment for one of my classes:
    The goal is to create a program that will transfer an audio file using TCP/IP from a server to a client, then play the audio file. Additionally they wanted variable buffer sizes to measure the communication times when the buffer is changed. 've got all those parts complete (and good lord it took me days). The next step is to complete the same process, but begin playing the file before all the packets have been received by the client. That's where I'm stuck. Is a separate thread the way to go? If so, any suggestions on how to make that work would be appreciated.
    Currently I'm dumping all the data into a ByteArray once it's been received, but I'm suspecting this won't work for real time streaming. Am I right in thinking this, and if that's the case, are PipedOutputStreams the solution? (And if they are, how do I pass values like that between threads?)
    Below is the portion of code on the client side that works for transfer and play, but not for streaming.
    Thanks in advance for any assistance.
    <<<CODE>>>
    //Setup data repository and transfer data to the array
    byte[] byteData = new byte[byteCount];
    int t=0;
    double startTime = System.currentTimeMillis(); //Begin transfer time counter
    while(t!=byteCount){
    byteData[t]=inFromServer.readByte(); //Receive data
    t++;
    double endTime = System.currentTimeMillis() - startTime; //Calculate transfer time
    System.out.println("Total Delay Time: " + endTime/1000 + " seconds");
    //Stream the data into a byte array, set audio format, and setup the dataline
    ByteArrayInputStream arrayStream = new ByteArrayInputStream(byteData,0,byteCount);
    AudioInputStream audioStream = AudioSystem.getAudioInputStream(arrayStream);
    AudioFormat audioFormat = audioStream.getFormat();
    System.out.println("Now Playing: " + audioFormat);
    DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class,audioFormat);
    SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
    sourceDataLine.open(audioFormat);
    sourceDataLine.start();
    //Transfer data to the audio source dataline and play
    int counter;
    while((counter = audioStream.read(byteData,0,byteData.length)) != -1){
    if(counter >0)
    sourceDataLine.write(byteData,0,counter);
    sourceDataLine.drain();
    sourceDataLine.close();

    Well nix that I managed to have a breakthrough and got things working. =)
    Cheers!

  • Will using multiple threads get me my curry in a hurry?

    Mr. Singh says no, but I say otherwise. What say you all?
    http://blogs.phillynews.com/inquirer/foodanddrinq/2007/12/you_cant_hurry_curry.html
    Just a minor diversion from ongoing production issues...
    :-(

    Well nix that I managed to have a breakthrough and got things working. =)
    Cheers!

  • PrinterException when multiple threads try to print report using JRC

    Iam using Crystal Report's JRC for printing reports, it works fine.
    But the problem araises when i use multiple threads.
    I used the following:
    reportClientDocument.getPrinterOutputController().printReport(.....); to print.
    I get the following exception
    Caused by: java.awt.print.PrinterException: No printer named "\\ch03\printer05" could be found.
    Without multiple thread it works fine.
    I have been scratching my head for days on this problem, any help is very much appreciated..

    If an API doesn't specifically say that it is thread safe then it isn't likely to be thread safe and the only way to approach it is to assume that it isn't.

  • How to proces the record in Table with multiple threads using Pl/Sql & Java

    I have a table containing millions of records in it; and numbers of records also keep on increasing because of a high speed process populating this table.
    I want to process this table using multiple threads of java. But the condition is that each records should process only once by any of the thread. And after processing I need to delete that record from the table.
    Here is what I am thinking. I will put the code to process the records in PL/SQL procedure and call it by multiple threads of Java to make the processing concurrent.
    Java Thread.1 }
    Java Thread.2 }
    .....................} -------------> PL/SQL Procedure to process and delete Records ------> <<<Table >>>
    Java Thread.n }
    But the problem is how can I restrict a record not to pick by another thread while processing(So it should not processed multiple times) ?
    I am very much familiar with PL/SQL code. Only issue I am facing is How to fetch/process/delete the record only once.
    I can change the structure of table to add any new column if needed.
    Thanks in advance.
    Edited by: abhisheak123 on Aug 2, 2009 11:29 PM

    Check if you can use the bucket logic in your PLSQL code..
    By bucket I mean if you can make multiple buckets of your data to be processed so that each bucket contains the different rows and then call the PLSQL process in parallel.
    Lets say there is a column create_date and processed_flag in your table.
    Your PLSQL code should take 2 parameters start_date and end_date.
    Now if you want to process data say between 01-Jan to 06-Jan, a wrapper program should first create 6 buckets each of one day and then call PLSQL proc in parallel for these 6 different buckets.
    Regards
    Arun

  • A hint if you use multiple mail clients to check one IMAP account

    FYI:
    Mail.app in leopard turns on an advanced "push" mail feature automatically, called IDLE. This can cause strange problems when you use multiple IMAP clients to access you IMAP server.
    For instance, I have a computer in my office and one in my lab. Normally Mail.app is running on them both constantly. After installing Leopard I would sit in my office delete and move messages from my INBOX, and when I went down to the lab I would find those emails still in my INBOX and also in the mailboxes I had moved them to on my office machine. In very short order I ended up with multiple copies of emails in many places and no ability to actually delete mail.
    Originally I thought this was a bug with Leopard Mail.app, or a problem with compatibility between Mail.app and the UW IMAP server that I use. I wasted significant time searching on the web for possible solutions.
    It turns out that the IDLE feature (that is automatically turned on for you in Leopard) was the cause of my problems. Turning this feature off (in the Advanced pane of the accounts setting) on EACH machine caused me email to return to its previous functional state.
    If you only use one IMAP mail client the IDLE feature is nice, it pushes new mail to you as soon as the IMAP server receives the new mail.
    (note -- IDLE is also automatically turned on in Thunderbird)

    Assuming you're on a NAT'd network, DNS services can cause all sorts of weird errors with the mail server, including spontaneous name changes.
    To verify local DNS services, launch Terminal.app from Applications > Utilities and issue the following harmless diagnostic message:
    sudo changeip -checkhostname
    You'll need to enter an administrative password for the sudo, might see a one-time informational message around the usage of sudo, then you'll see some host and network configuration information, and finally an indication that either no changes are required, or that there are local DNS or the network has configuration issues.  Also, make sure you're not using .local or .arpa as the top-level domain within the DNS services.
    Public DNS for the mail server can also cause communications issues, if that's not configured correctly — that won't cause the issue you're seeing in the logs here, but it will cause inbound mail to not reach your server, and outbound mail from your server to be dropped by the remote server.  To verify your public DNS, launch Terminal.app from Applications > Utilities and issue the commands discussed in this thread or this thread and confirm that your internal and external MX record and your internal and external forward and reverse DNS settings are all correct.

Maybe you are looking for

  • How To See Numbers In Arabic Instead Of Indian Format

    I want to see numbers in Arabic format not in Indian format when i log on the Arabic Interface . I have EBS (12.0.6) installed on Linux centos , I have implement the below Oracle Metalink Note to solve this issue How To See Numbers In Arabic Instead

  • Not authorized when suspensing, but not when logged in from terminal

    Hi All, I have the following line in my inittab, to start an X server for the user "cedric" x:5:once:/bin/su cedric -l -c "/bin/bash --login -c /usr/bin/startx >/dev/null 2>&1" This works great, my X server is started during the startup of the rest o

  • Camera raw error in photoshop elements 11

    I have PE11 with a Canon EOS Rebel T5 camera. When I try to open the raw image (CR2) in photo editor it get an error: "cannot open file because it appears to be from a camera model that is not supported by the installed version of camera raw" I have

  • Syncing and streaming

    I got my first Apple TV and am very happy with it. I set it up to stream from my macPro and it works well, but for some movies... it often takes long to stream before it starts playing. Is there a way to sync part of my library, and stream the rest?

  • MBA frozen at start-up

    My MBA 2011 (latest update) froze at the apple icon after I installed Java 7 and Adobe Flash.  The Java 7 was installed without an issue, but during updating Adobe Flash, it had asked me to quit Firefox to continue with the update.  I delayed closing