This has been an ongoing problem for a project I worked on and I've just now found the solution. http://markmail.org/message/vpfgx2vgjzl354qm
It's pretty once I realized that you needed to treat Inline::Java socket connections to it's JVM (shared-jvm mode) just like you would DB handles under mod_perl. So here's a patch to the documentation to help others who might have this same problem:
-- Michael Peters Plus Three, LP
--- Java.pod.orig 2008-09-09 16:21:59.000000000 -0400 +++ Java.pod 2008-09-09 16:30:10.000000000 -0400 @@ -1046,7 +1046,28 @@ See the BUGS AND DEFICIENCIES section if you have problems starting the SHARED_JVM server under MOD_PERL. - Z<> + +=head2 Preloading and PerlChildInitHandler + +If you are loading Inline::Java during your server startup (common practice +to increase shared memory and reduce run time) and you are using C<SHARED_JVM> +then your Apache processes will all share the same socked connection to that JVM. +This will result in garbled communication and strange errors (like "Can't receive packet from JVM", "Broken pipe", etc). + +To fix this you need to tell Apache that after each child process has forked they +each need to create their own connections to the JVM. This is done during the C<ChildInit> +stage. + +For Apache 1.3.x this could look like: + + # in httpd.conf + PerlChildInitHandler MyProject::JavaReconnect + +And C<MyProject::JavaReconnect> could be as simple as this: + + package MyProject::JavaReconnect; + sub handler($$) { Inline::Java::reconnect_JVM() } + 1; =head1 BUGS AND DEFICIENCIES