View r820390 of the geronimo-jpa_2.0_spec code for the implemented createEMF() behavior for handling exceptions -
Basically, even if a provider returns an exception, we'll still give any other provider on the classpath a chance, as required by the JPA 2.0 spec.
If one exception is returned and no provider can return a EMF, then that exception is returned as the cause within a PersistenceException, so apps can use getCause() to determine the provider returned failure.
If more than one exception is returned and no provider can return a EMF, then the exceptions are added to the end of the PersistenceException message and no cause will be set.
Even if one or more providers return an exception, if a provider does return a EMF, then all exceptions will be discarded and the EMF will be returned to the caller.
If no exceptions occur and no EMF can be returned, then a PersistenceException will be thrown with a generic message and list of providers discovered.