persistence@glassfish.java.net

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

From: Lance J. Andersen <Lance.Andersen_at_Sun.COM>
Date: Wed, 27 Sep 2006 12:50:41 -0400

Understand. I guess i prefer webstart to applets these days, but i do
not know if that makes sense for your scenario.

Regards
Lance

David Van Couvering wrote:
> Interesting question, Lance. I suspect it probably would. The
> problem is I don't have time to try right now. I'll get back to you
> in about three weeks :)
>
> David
>
> On 9/27/06, * Lance J. Andersen* <Lance.Andersen_at_sun.com
> <mailto:Lance.Andersen_at_sun.com>> wrote:
>
> David,
>
> Does it work if u use a webstart application?
> -lance
>
>
> David Van Couvering wrote:
>> Hi, Tom, thanks for the tip. I thought there might be some API
>> mechanism to do this, but at this point I am going to have to put
>> this aside for another day. The fact that you then try to load
>> persistence.xml as a resource is discouraging, as I suspect the
>> same issue will rear its ugly head.
>>
>> I'd like to see if I can make this work, but it's going to have
>> to wait until after my current deadline passes.
>>
>> Thanks much!
>>
>> David
>>
>> On 9/27/06, * Tom Ware* <tom.ware_at_oracle.com
>> <mailto:tom.ware_at_oracle.com>> wrote:
>>
>> Hi David,
>>
>> Some comments inline:
>>
>> David Van Couvering wrote:
>>
>> >*Really* good idea, Marina, but :( no luck. Note that
>> >D:/derby/DerbyCalendar/web/ is where all my jar files are.
>> >
>> >Again, it can find Persistence.class, so in general the
>> classloader's
>> >working the way it should. It's just when it tries to load a
>> resource
>> >(vs. a class).
>> >
>> >I suspect an applet bug... If I were eager I'd try to
>> produce an
>> >independent test case, where I simply try to load a resource
>> from inside
>> >an applet, but I don't have the bandwidth right now, and it
>> wouldn't
>> >help me anyway, to report a bug in the applet code and wait
>> nine months
>> >to a year to get it fixed. But this does mean JPA can't run
>> in an
>> >applet as far as I can tell...
>> >
>> >Is there any way for me to specify a provider using an API
>> instead of
>> >using persistence.xml ??
>> >
>> >
>> The problem is not really with the provider specification, it
>> is more
>> with the provider discovery done by the generic persistence
>> class. In
>> theory, you could just try instantiating the provider
>> class(oracle.toplink.essentials.PersistenceProvider) yourself
>> and just
>> start by using the createEntityManagerFactory(String , Map)
>> method in
>> your instantiated class.
>>
>> e.g. PersistenceProvider provider = new
>> oracle.toplink.essentials.PersistenceProvider();
>> provider.createEntityManagerFactory("myPersistenceUnit",
>> myMap);
>>
>> Although the bootstraping would not be portable it is
>> possible that you
>> could get to a point where you could use JPA API from then
>> on. The
>> remaining issue would be that we will still try to find
>> persistence.xml
>> as a ClassLoader resource, so depending on what the original
>> issue is,
>> you may only get slightly further.
>>
>> -Tom
>>
>> >Dump classloader list ...
>> > codebase=file:/D:/derby/DerbyCalendar/web/,
>> >key=file:/D:/derby/DerbyCalendar/web/,derbycal.jar,gdata-calendar-1.0.jar,gdata-client-1.0.jar,toplink-essentials.jar,derby.jar,
>> >zombie=false, cache=true, refcount=1, info=
>> sun.plugin.ClassLoaderInfo_at_b02928
>> >Done.
>> >
>> >Inside findAllProviders
>> >Got class loader as sun.misc.Launcher$AppClassLoader_at_92e78c
>> >
>> >[dvc - skipping PrivilegedActionException traces]
>> >javax.persistence.PersistenceException: No Persistence
>> provider for
>> >EntityManager named derbycal
>> > at
>> >javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:91)
>> > 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)
>> > ... 16 more
>> >
>> >
>> >Marina Vatkina wrote:
>> >
>> >
>> >>David,
>> >>
>> >>Just a wild guess... From (searched via Google)
>> >> http://java.sun.com/j2se/1.4.2/docs/guide/misc/applet.html
>> it looks like
>> >>there should be no spaces in the jar list. Also, check that
>> they are
>> >>available from the root of your app.
>> >>
>> >>Can you try?
>> >>
>> >>thanks,
>> >>-marina
>> >>
>> >>
>> >>David Van Couvering wrote:
>> >>
>> >>
>> >>
>> >>>First of all, thanks everyone for trying to help.
>> >>>
>> >>>All jar files are in the top-level directory for the web
>> app. This is
>> >>>a pure HTML/JavaScript web application, no JSPs or servlets
>> or PHP or...
>> >>>
>> >>>Other jar files in this list, such as the GData jars, are
>> being loaded
>> >>>just fine.
>> >>>
>> >>>I am currently running it directly from the filesystem.
>> >>>
>> >>> <applet
>> >>>code="org.apache.derbyDemo.derbyCalendar.DerbyCalendarApplet.class
>> "
>> >>> width=1 height=1 name="DerbyCalendarApplet"
>> >>> archive="derbycal.jar, gdata-calendar-1.0.jar,
>> >>>gdata-client-1.0.jar, toplink-essentials.jar, derby.jar ">
>> >>> </applet>
>> >>>
>> >>>In the Java console, if I print out the classloader list I get
>> >>>
>> >>>codebase=file:/D:/derby/DerbyCalendar/web/,
>> >>>key=file:/D:/derby/DerbyCalendar/web/, derbycal.jar,
>> >>>gdata-calendar-1.0.jar, gdata-client-1.0.jar,
>> toplink-essentials.jar,
>> >>>derby.jar, zombie=false, cache=true, refcount=1,
>> >>>info=sun.plugin.ClassLoaderInfo_at_f0b7f8
>> >>>
>> >>>Thanks,
>> >>>
>> >>>David
>> >>>
>> >>>Lance J. Andersen wrote:
>> >>>
>> >>>
>> >>>
>> >>>>what does your applet configuration look like in your
>> html? that
>> >>>>could be the culprit
>> >>>>
>> >>>>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?
>> >>>>>
>> >>>>>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
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>------------------------------------------------------------------------
>> >>>>>
>> >>>>>
>> >>>>><?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
>> <http://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>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>>
>>
>