persistence@glassfish.java.net

Re: Can't find persistence.xml from web browser

From: David Van Couvering <David.Vancouvering_at_Sun.COM>
Date: Tue, 26 Sep 2006 14:15:56 -0700

Thanks, Mitesh. I am subscribed now. It bounced me the first time I
sent an email, but it looks like the request went through. I sent it a
second time once I was subscribed, and I saw my question but that was
all. Thanks *very* much for forwarding these responses.

I definitely have a provider listed as you specified, and also I must
have toplink-essentials.jar in my classpath; otherwise how would the
javax.persistence.Persistence class even be able to run so as to throw
the exception below, as this class is also in the toplink-essentials jar
file?

Note that this file is accepted by the Glassfish persistence library
when running in a unit test. I get a different error saying "no
suitable driver" when it tries to get a connection, but that's a
separate problem; it seems to be making it a lot farther in the unit
test environment.

So, I can only deduce it's not the format of the persistence.xml, and
it's not the toplink-essentials.jar not being in the classpath. So,
what else can cause the exception?

I'm including my persistence.xml file below, if that helps. Note I use
both types of properties, one with the toplink- prefix and one without,
because I am getting inconsistent information on the mailing list and
various tutorials/blogs about what the format should be. You might want
to do a Google scan and fix all the tutorials out there that use the old
format for persistence.xml.

Thanks,

David

Mitesh Meswani wrote:
> Hi David,
>
> Are you subscribed to persistence alias? Did you get these mails?
>
> Thanks,
> Mitesh
>
> Tom Ware wrote:
>
>> Hi David,
>>
>> 'Just to add to what Mitesh has said.
>> The javax.persistence.Persistence class is trying to find potential
>> providers where you see your error. Essentially all it does is look
>> for a resource on the classpath called:
>> "META-INF/services/javax.persistence.spi.PersistenceProvider".
>>
>> The toplink-essentials.jar contains that resource.
>>
>> -Tom
>>
>> Mitesh Meswani wrote:
>>
>>> Hi David,
>>>
>>> As the exception indicates Persistence is not able to find a provider
>>> for persistence unit. Please make sure that
>>> 1. Your persistence.xml lists a provider
>>> <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
>>>
>>> 2. toplink-essentials.jar is available at runtime.
>>>
>>> Thanks,
>>> Mitesh
>>>
>>> David Van Couvering wrote:
>>>
>>>
>>>> Hi, all. I am trying to run Java Persistence from within an applet
>>>> -- yes, from within an applet.
>>>>
>>>> This is kind of urgent. If I can't get this to work, I'm going to
>>>> have to revert to JDBC.
>>>>
>>>> The applet is loading derbycal.jar, which contains three Entity
>>>> classes and META-INF/persistence.xml.
>>>>
>>>> When I run unit tests against derbycal standalone, Glassfish JPA is
>>>> able to find persistence.xml and runs fine (except that it keeps
>>>> complaining it can't find a suitable driver, but I can work on that).
>>>>
>>>> When I run the applet, however, it says
>>>>
>>>> javax.persistence.PersistenceException: No Persistence provider for
>>>> EntityManager named derbycal
>>>> at
>>>> javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:89)
>>>>
>>>> at
>>>> javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)
>>>>
>>>> at
>>>> org.apache.derbyDemo.derbyCalendar.RequestManager$1.run(RequestManager.java:41)
>>>>
>>>> at java.security.AccessController.doPrivileged(Native Method)
>>>> at
>>>> org.apache.derbyDemo.derbyCalendar.RequestManager.<init>(RequestManager.java:38)
>>>>
>>>> at
>>>> org.apache.derbyDemo.derbyCalendar.DerbyCalendarApplet.login(DerbyCalendarApplet.java:97)
>>>>
>>>>
>>>>
>>>> In scanning this mailing list, it appears this is a classloading
>>>> problem.
>>>>
>>>> Does anyone know why the loader can't find META-INF/persistence.xml
>>>> in derbycal.jar when it's loaded within an applet? How would I
>>>> tell the applet classloader to look somewhere else? I tried putting
>>>> it directly into the codebase directory for the applet but that
>>>> didn't work either.
>>>>
>>>> Many thanks,
>>>>
>>>> David
>>>>
>>
>>