Maybe too late but...
Using lsof with wc can be misleading. The repeated files you are seeing are the same files but for each java thread running. The actual filehandles will be shared amongst each thread - so as a _rough_ guide you may want to divide the 4000+ figure by the number of java threads ('ps -e | grep java | wc -l').
I can't be 100% sure about RH but it's most likely that it is running a kernel with NPTL support. As threads are handled in a completely different way the system will only see JBoss under a single process ID - therefore you will only see each open file once. (and one 'java' process from 'ps -e')
Another good way to see open file descriptors is to "ls -l /proc/$PID/fd/" where $PID is the process id. (Obviously easier with NPTL where there is only one PID).
Hope this helps