6

I am new to Java Persistence API. I have just learnt it and now want to use it in my Java Desktop Application. But I have the following questions regarding it:

Q1. Which JPA implementation is smallest in size (as I want to have my application's size as small as possible)?

Q2. How to find the value of the <provider> tag in the persistence.xml file. I know that its value is vendor specific but I couldn't find the value for the JPA implementation downloaded from here.

naXa stands with Ukraine
  • 35,493
  • 19
  • 190
  • 259
Amit
  • 33,847
  • 91
  • 226
  • 299
  • 1
    That being referred to is NOT an *implementation* of JPA. It's simply the JPA API jar (of interfaces) and is required by all implementations. – DataNucleus Apr 01 '10 at 15:16

3 Answers3

5

Q1. Which JPA implementation is smallest in size (as I want to have my application's size as small as possible)?

For JPA 1.0:

  • Hibernate Entity Manager 3.4.0.GA: ~4.9MB
  • EclipseLink 1.1.3: ~4.7MB
  • OpenJPA 1.2.2: ~2.7MB (I'm not sure for this one, not tested for now so I may be missing some jars)

I would stay away from TopLink Essentials.

For JPA 2.0:

  • DataNucleus 2.0.3: ~3.7MB
  • EclipseLink 1.2 and 2.0+: ~4.8MB
  • Hibernate Entity Manager 3.5.0-Final: ~5.8MB
  • OpenJPA 2.0.0-beta3: not measured (still in beta)

These measures have been done on my pet project (including dependencies except the JDBC driver). Personally, I wouldn't base my choice on the size only, even for a desktop app.

Q2. How to find the value of the tag in the persistence.xml file.

  • DataNucleus: org.datanucleus.jpa.PersistenceProviderImpl
  • EclipseLink: org.eclipse.persistence.jpa.PersistenceProvider
  • Hibernate: org.hibernate.ejb.HibernatePersistence
  • OpenJPA: org.apache.openjpa.persistence.PersistenceProviderImpl
  • TopLink Essentials: oracle.toplink.essentials.PersistenceProvider
Pascal Thivent
  • 562,542
  • 136
  • 1,062
  • 1,124
  • Ok... which implementation would you choose regardless of the size? – Amit Apr 01 '10 at 17:28
  • I was about to go with TopLink Essentials. Why would you stay away from that? – Amit Apr 01 '10 at 17:29
  • @Yatendra Because nothing happens with Toplink Essentials (it's maintained but dead), because it requires weaving, because you need to use a javaagent, because I've always found it painful to use (might not be that painful with 5 entities though). But it works. – Pascal Thivent Apr 01 '10 at 18:05
  • @Yatendra I like Hibernate which is widely used, tested, supported and this matters to me. But, again, this might not be that critical for a five tables application. Maybe you should implement your app and test it with various JPA providers. – Pascal Thivent Apr 01 '10 at 19:58
2

Q1. VERY rough calculated:

  • Hibernate (versions around 3.4.0.GA) with deps is ca. 3.6 Mb.
  • TopLink Essentials (2.0.1-04) ca. 2.4 Mb.
  • EclipseLink (ex. TopLink) (1.1.3-M1) ca. 4.7 Mb.

Q2. Open the JAR, check the META-INF/services/javax.persistence.spi.PersistenceProvider file.

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
lexicore
  • 42,748
  • 17
  • 132
  • 221
0

You mean size in memory ? or size of jar ? Size in memory depends on how many classes are being persisted, the metadata for them, how many EntityManagers open, what is in the L1/L2 caches. I know that DataNucleus uses less memory than Hibernate since users themselves have reported that, no idea against the other primary implementations.

Size of a jar is a pointless measure of anything, since the majority of things there may not be in use.

PS. DataNucleus is also a JPA1+2 implementation

DataNucleus
  • 15,497
  • 3
  • 32
  • 37