persistence@glassfish.java.net

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

From: Mitesh Meswani <Mitesh.Meswani_at_Sun.COM>
Date: Tue, 26 Sep 2006 14:25:10 -0700

David Van Couvering wrote:
> 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?
One possibility is that some how you have javaee.jar in your classpath.
This jar also contains javax.persistence.* classes. Please also check
your applet configuration as suggested by Lance.
>
> 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.
Your persistence.xml looks ok to me. You do not need any of the
properties without toplink prefix. But they are harmless as far as the
problem you are facing is concerned.

Thanks,
Mitesh
> 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
>>>>>
>>>
>>>
> ------------------------------------------------------------------------
>
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <persistence-unit name="derbycal">
> <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
> <class>org.apache.derbyDemo.derbyCalendar.DerbyCalEvent</class>
> <class>org.apache.derbyDemo.derbyCalendar.AddEventRequest</class>
> <class>org.apache.derbyDemo.derbyCalendar.GCalendarRequest</class>
> <properties>
> <!-- JDBC connection properties -->
> <property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
> <property name="jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
> <property name="toplink.jdbc.connection.string" value="jdbc:derby:DerbyCalDb;create=true"/>
> <property name="jdbc.connection.string" value="jdbc:derby:DerbyCalDb;create=true"/>
> <property name="toplink.jdbc.user" value="davidvc"/>
> <property name="jdbc.user" value="davidvc"/>
> <property name="toplink.jdbc.password" value="secret"/>
> <property name="jdbc.password" value="secret"/>
> <!-- SQL dialect to use -->
> <property name="toplink.platform.class.name" value="oracle.toplink.essentials.platform.database.DerbyPlatform"/>
> <property name="toplink.logging.level" value="INFO"/>
> <property name="toplink.ddl-generation" value="drop-and-create-tables"/>
> <property name="toplink.ddl-generation.output-mode" value="database"/>
> <property name="toplink.no-weaving" value="true"/>
> <property name="no-weaving" value="true"/>
> </properties>
> </persistence-unit>
> </persistence>
>