The main concern I have is we now have a busy thread burning CPU ..
bad for laptops .. and if we add a delay we have less prompt notification
of a new local printer.
I think the compromise is that the existing thread maybe kept as is,
and we add a new thread that pools every 10 minutes for a remote printer.
If we can make the existing thread wake up from its wait and do that,
even better.
-phil.
-------- Original Message --------
Subject: Re: [11] JDK-8153732: Windows remote printer changes do not
reflect in lookupPrintServices()
Date: Wed, 20 Jun 2018 17:03:56 -0700
From: Philip Race <philip.r...@oracle.com>
Organization: Oracle Corporation
To: Shashidhara Veerabhadraiah <shashidhara.veerabhadra...@oracle.com>
CC: awt-...@openjdk.java.net, swing-...@openjdk.java.net
This is on the wrong lists. Not Swing. Not AWT. Should be 2d.
I'll forward it there and continue there. Consider the AWT+Swing threads
dead.
-phil.
On 6/20/18, 3:12 AM, Shashidhara Veerabhadraiah wrote:
Hi All, Please review this code changes for the below enhancement.
Enhancement: https://bugs.openjdk.java.net/browse/JDK-8153732
Webrev: http://cr.openjdk.java.net/~sveerabhadra/8153732/webrev.00/
<http://cr.openjdk.java.net/%7Esveerabhadra/8153732/webrev.00/>
Details of the changes: Windows provides *PrinterChangeNotification*
functions that provides information about printer status changes of
the local printers(subset) but not network printers.
Alternatively, Windows provides a way thro' which one can get the
network printer status changes by using WMI, RegistryKeyChange
combination, which is a slightly complex mechanism.
The Windows WMI offers an async and sync method to read thro' registry
via the WQL query. The async method is considered dangerous as it
leaves open a channel until we close it. But the async method has the
advantage of being notified of a change in registry by calling
callback without polling for it. The sync method uses the polling
mechanism to notify.
RegistryValueChange cannot be used in combination with WMI to get
registry value change notification because of an error that may be
generated because the scope of the query would be too big to handle(at
times).
Hence an alternative mechanism is choosen via the EnumPrinters by
polling for the count of printer status changes(add\remove) and based
on it update the printers list(both local and remote printers - superset).
Thanks and regards,
Shashi