[prev in list] [next in list] [prev in thread] [next in thread] 

List:       fop-user
Subject:    Re: No default font defined by OutputConverter
From:       "Andreas L. Delmelle" <andreas.delmelle () telenet ! be>
Date:       2011-07-23 20:21:34
Message-ID: 433BDEF2-3ED2-424B-A5BE-12E9281F8C69 () telenet ! be
[Download RAW message or body]

On 22 Jul 2011, at 16:59, Lance Goforth wrote:

Hi Lance

> > <snip />
> > Does the context allow for multiple concurrent sessions, or can the user only \
> > render a single document at a time? Has it been reported across a number of \
> > different Java Runtime implementations or are all users working with the exact \
> > same OS/VM? 
> It should only be allowing one document rendering at one time.  However, I might \
> have to backtrack through the code to verify that is true. 
> All the JVMs should be 1.6, although some minor releases might vary, 1.6.17 and \
> 1.6.22 - all are on a remote windows session running Windows Server 2003

Given that:
a) it has only been noticed with AWT rendering, which relies on the implementation of \
java.awt.font, and b) it runs in remote sessions, which in all likelihood _do_ run \
concurrently --albeit in separate JVM instances  
I am beginning to suspect it is a matter of contention on the OS level. All those JVM \
instances are basically relying on the OS to provide them with the font information. \
If the OS screws that up somehow, then the Java implementation can be as \
good/waterproof as it wants... On the other hand, it may just as well point to a \
quirk in the Java VM implementation, as a lot of those concurrent sessions would \
basically be relying on the same, single Java installation on the server. From that \
perspective, purists could point out that that is simply not how Java was intended to \
be used in the first place. Think of it this way: it is analogous/similar to having \
Windows running in a VM on the server, and booting that VM from scratch for each \
request to render a single document with FOP. All very creative, but that is \
definitely not how virtualization was meant to be used.  Another point of comparison: \
one could conceivably write a client app that, instead of issuing a query via \
standard JDBC, opens a remote desktop session to a server to start up a database \
instance and then issue the query there. Make sense? I didn't think so...

At any rate, if it really is an issue affecting only concurrent runs in separate, \
isolated Java processes, then it is guaranteed that nothing FOP can do, is ever going \
to mitigate that. We can only try to safeguard the code for multiple concurrent runs \
in the same Java runtime. Any synchronization outside of that scope is up to Java \
itself and/or the OS. From FOP's point of view, there are just many isolated \
FopFactory instances that know absolutely nothing about each other, let alone share \
any common info.

An interesting, yet not so straightforward experiment, would be to try this on a \
*nix-ish server, and see whether the issue persists there in a similar context. Java \
is Java, so will run on any Linux variant just as well. If Linux would do a better \
job at keeping those sessions truly separated, the problem would be Windows. If the \
issue persists on Linux as well, it would be a Java issue.

From the looks of it, short-term relief can probably only be obtained, without too \
much effort, by reducing the maximum number of concurrent sessions on the server. \
That would mean that users will have to wait longer. Still, they might find that more \
palatable than the recovery process you referred to.  Other than that, of course you \
could also buy more servers to handle the increased workload... JK ;-)

If you ask me, the better/more robust solution in the longer term would probably mean \
investing in refactoring, in a paradigm shift in the application. Instead of \
previewing in Java AWT in a remote desktop session, just render in PDF, PNG, TIFF... \
and serve that via HTTP as the 'preview'. If the user accepts the preview, the server \
can then optionally write the stream also to a shared location, from where it is \
available for future reference. Or even something more personal, like send a mail \
with the output file as an attachment.


Regards

Andreas
---
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic