Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Defining persistence.xml programmatically?

Hi Tim,

   Good luck with the bakeoff!  BTW, in my examples in persistence.xml I mistakenly included

            <property name="eclipselink.cache.shared.default" value="false" />

which should be deleted as it makes all caches isolated by default. Not sure why I had that in there?  Guess I was trying something out and then forgot about it.   The bottom line is that by default you want to use the shared cache so if you happened to clone any of the config in my examples be sure to delete that setting.  I'll be updated SVN.

  And if you need any help with the comparison email the list.  Typically in homegrown frameworks there's some custom feature with a locally understood name that you can't find the analog for in EclipseLink.  We can help you figure out how what feature equates to the one you're looking for and how to use it.

  Cheers,
      Shaun


Tim Hollosy wrote:
Thanks Shaun,
I was wrong on the cannot find driver, the real error was that it
couldn't find the entities, so my queries didn't make any sense.

Thanks for the info on the SPI, looking at the source I figured I was
missing some files if I wanted to do it that way.

For now we're going to go ahead and explicitly define the classes,
which isn't a show stopper.

Thanks again, I'm off to make a CRUD app to better compare EclipseLink
vs our homegrown DAO layer :)

On Mon, Mar 31, 2008 at 2:25 PM, Shaun Smith <shaun.smith@xxxxxxxxxx> wrote:
  
 Hi Tim,

 Tim Hollosy wrote:

Thanks Dough & Shaun,
The properties map worked fine, the only issue we had was using:

<persistence-unit name="unit-name">
<exclude-unlisted-classes>false</exclude-unlisted-classes>
</persistence-unit>

With that set, I cannot create an Entity Manager, I get an error
saying it can't find the database driver (PostgreSQL), however if I
just define my classes in my persistence.xml like this:

<persistence-unit name="unit-name">
<class>org.bla.bla.Table</class>
<class>org.bla.bla.Table</class>
</persistence-unit>

It works fine.


 Why you can't find your driver is a mystery but I think you're running into
some issues due to classloader behavior in Equinox.  I hadn't tried any
examples with <exclude-unlisted-classes>false</exclude-unlisted-classes> but
as I learn more I see this may require special support.  This is something
we'll have to look into once we get the main branch switched over to OSGi.


On top of that, it will only work if I create my Entity Manager like this:
emf = new PersistenceProvider().createEntityManagerFactory("unit-name",
properties,this.getClass().getClassLoader());

If I try to do it like in the examples, using the static method:

emf = Persistence.createEntityManagerFactory("unit-name", properties);

It will not work, throwing a PersistenceException "No Persistence
provider for EntityManager named unit-name".


 In the Proof of Concept there are three ways to create an
EntityManagerFactory.  The one you're using is the easiest in that it passes
the classloader that can load all the necessary classes directly to the
EclipseLink persistence provider and avoids the need for
javax.persistence.Peristence to locate it.  If you want to invoke
Persistence.createEntityManagerFactory you'll need to follow the steps
outlined on the section Creating a JPA application bundle using the standard
JPA SPI. When doing this you have to make sure you have the start  levels
set so that EclipseLink JPA is initialized before you try to use it in
application code.

 I can mostly live with creating my em the other way, however it would
be nice to get auto discovery of classes to work.

 I'm working on it in conjunction with enabling byte code weaving in
Equinox. ;-)  This is a ways off so hopefully you can live with listing the
classes for now.  I expect we'll see a big improvement in the ease of use as
we transition over to OSGi in EclipseLink and we get more experience with
it.

 --Shaun



 Thanks again,
Tim

On Mon, Mar 31, 2008 at 12:43 PM, Doug Clarke <douglas.clarke@xxxxxxxxxx>
wrote:


 Tim,

 You can definitely avoid putting any database login information in your
EclipseLink configuration files. I have recently blogged about a common
framework I use for testing JPA outside of a container. This will work as
well for any JavaSE or RCP application usage where the additional properties
are passed in through a properties map to the
Persistence.createEntitymanagerFactory call.


http://java-persistence.blogspot.com/2008/02/testing-eclipselink-jpa-in-javase.html

 On Friday night I moved some of this content into the EclipseLink wiki
example pages to make it more available.

 http://wiki.eclipse.org/EclipseLink/Examples/JPA/OutsideContainer

 I hope this addresses your issue,

 Doug

 -----Original Message-----
 From: eclipselink-users-bounces@xxxxxxxxxxx
 [mailto:eclipselink-users-bounces@xxxxxxxxxxx]On Behalf Of Tim Hollosy
 Sent: Monday, March 31, 2008 11:49 AM
 To: eclipselink-users@xxxxxxxxxxx
 Subject: [eclipselink-users] Defining persistence.xml programatically?


 I'm looking into using EclipseLink in an RCP application, and for
 obvious reason's i'm not keen on distributing my database login info
 in an xml file.

 I'd like to define it programatically in java, however all the
 documentation I can find just talks about defining a project.xml or
 sessions.xml

 Has anyone done this?

 --
 ./tch
 _______________________________________________
 eclipselink-users mailing list
 eclipselink-users@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/eclipselink-users

 _______________________________________________
 eclipselink-users mailing list
 eclipselink-users@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/eclipselink-users







--



 Shaun Smith | Principal Product Manager, TopLink | +1.905.502.3094
 Oracle Fusion Middleware
 110 Matheson Boulevard West, Suite 100
 Mississauga, Ontario, Canada L5R 3P4

_______________________________________________
 eclipselink-users mailing list
 eclipselink-users@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/eclipselink-users


    


  

--


Oracle
Shaun Smith | Principal Product Manager, TopLink | +1.905.502.3094
Oracle Fusion Middleware
110 Matheson Boulevard West, Suite 100
Mississauga, Ontario, Canada L5R 3P4

Back to the top