Hello Alexey,
the fix looks fine to me.
Thanks,
Andrew
On 8/11/2014 1:42 PM, Alexey Ivanov wrote:
Hello,
Could anybody please review the fix as the second reviewer?
bug: https://bugs.openjdk.java.net/browse/JDK-8046007
webrev: http://cr.openjdk.java.net/~aivanov/8046007/jdk9/webrev.00/
Thank you in advance,
Alexey.
On 23.07.2014 1:44, Phil Race wrote:
I think this is OK. Perhaps some of these states being deleted ought
instead
to bubble up into a PrinterState of STOPPED and appropriate
PrinterStateReasons
but that's something that can be handled separately.
-phil.
On 7/22/14 7:52 AM, Alexey Ivanov wrote:
Hi Phil, Jennifer,
Could you please review this fix?
Thank you in advance,
Alexey.
On 16.07.2014 17:09, Alexey Ivanov wrote:
Hello,
Please review the fix for jdk9:
bug: https://bugs.openjdk.java.net/browse/JDK-8046007
webrev:
http://cr.openjdk.java.net/~aivanov/8046007/jdk9/webrev.00/
Problem description:
If printer is an error state for some reason, Java application
cannot post a new print job to printer queue because of exception:
java.awt.print.PrinterException: Printer is not accepting job.
at
sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1326)
at
javax.swing.text.JTextComponent$2.call(JTextComponent.java:2320)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at
javax.swing.text.AbstractDocument.render(AbstractDocument.java:420)
at
javax.swing.text.JTextComponent$3.run(JTextComponent.java:2369)
at java.lang.Thread.run(Thread.java:744)
At the same time, regular Windows applications (e.g. Word) can
still add new print jobs to the queue of this printer.
See also related JDK-6996782: RFE: Optionally allow submitting
printjobs even if Printer is not accepting job
and JDK-6525150: Printer has "paper out" status and won't print due
to a PrinterException.
The fix:
Currently Java checks the status of the printer, and does not allow
posting a new print job if the printer is in an error state. At the
same time, the print queue functions without any issues. It is
user's responsibility to fix a problem with the printer, as soon as
it's resolved, all the print jobs will be processed by the printer.
Microsoft Knowledge Base article
http://support.microsoft.com/kb/160129 says:
The Printer is assumed ready to accept print jobs … even if the
physical printer is in an error state such as off-line.
As far as I can see, the only printer state from the list
(http://msdn.microsoft.com/en-us/library/windows/desktop/dd162845%28v=vs.85%29.aspx)
that doesn't allow adding new print jobs is
PRINTER_STATUS_PENDING_DELETION which means "The printer is being
deleted." Surely one cannot print to a deleted printer.
I tested this fix by disconnecting the network printer. It takes
some time for printer monitor to update the status before
communication error is detected. It would not be detected at all
until you add at least one print job. As soon as the printer driver
detects the problem and communicates it to Windows, printer queue
displays an error state on the currently processed print job. From
that moment, Java apps cannot print to this printer.
With this fix, Java still considers "Accepting jobs" and thus
allows posting new jobs to the printer queue.
When the connection to the printer is restored, all the queued jobs
are successfully processed and documents are printed.
Regression test:
I ran regressions tests in jdk/tests/javax/print, and all tests
passed.
No regression test is provided due to its complexity. Printer
should go to an error state, it depends on the printer driver and
on whether the printer is local or network.
There's a test app and steps to try to reproduce the issue in the
JBS bug 8046007.
Thank you,
Alexey.