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:35:31 -0700

Hi, Mitesh, good idea, but as you can see from what I sent in response
to Lance, javaee.jar is not in my classpath. I haven't ever even
downloaded the full Glassfish installation onto this machine...

Rats, I was hoping this was going to be an easy one for you guys. :) I
really do appreciate the quick responses!

Thanks,

David

Mitesh Meswani wrote:
> 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>
>>