JPOX
JPOX
 Project  |  Ver 1.1  |  Ver 1.2  |  JDO  |  JPA  |  Guides  |  Tools
Overview
Support
Development
Performance

It is the JPOX projects' committed aim to provide the best performance possible, and to publish benchmarks so that users can judge for themselves the performance of the persistence solution. If anybody has a publically available benchmark of Java object persistence that they want to compare JPOX on, we would be interested in contributing to the exercise so we can see how JPOX performs.

Our attitude is that :-

  • Public benchmarks are there for a reason and provide valuable information for our users.
  • We will publish valid public benchmarks no matter if they show JPOX is deficient in some area. Published benchmarks will show, wherever possible, all competing products so that you, the user, can see how JPOX compares. Benchmarks are comparative so you have to have other products to compare against. This is in stark contrast to competing persistence technologies which do not publish benchmarks maybe in the fear that it may make them look bad.
  • If JPOX is found lacking in performance in a particular area, we will strive to remedy the problem so that you always have a competitive product.
  • If any group wishes to make a comparison of JPOX with other persistence solutions we are willing to aid them in finding an optimum JPOX configuration.


See also :-

The following comparisons are currently available





PolePosition

JPOX has been run on the publically available object persistence performance benchmark PolePosition, comparing against JDBC, and Hibernate. PolePosition was originally written by the authors of db4o, an object database project, but exists in its own right as a separate project. It is open source and by being so is considered "independent" since its tests can be challenged for validity, and can be run by anybody with the urge to do so. Application architects should review the benchmark themselves when judging the relevance of any of the tests to their target application. The benchmark provides a large number of very common situations. PolePosition comes provided with JDBC and Hibernate configurations already set. The Hibernate team were invited to provide a custom configuration for use of their software but generously declined. The JPOX configuration was provided by ourselves. This is available from us upon request.

The results show :-

  • JDBC can be the best choice for some projects when only very simple data models are required to be persisted. When object relationships are required, or where complex inheritance hierarchies are present, the amount of code necessary would preclude JDBC and so an O/R persistence solution would be required.
  • Consistent significant performance benefit for using JPOX rather than Hibernate. This was with the default Hibernate configuration provided with PolePosition. We aren't experts on Hibernate so don't claim to have any optimised Hibernate configuration (please refer to the PolePosition documentation for the configuration used).

This benchmark provides its results in detailed HTML or in Excel. The results are summarised below.

PolePosition CircuitJPOX (1.1.0-beta-6) time (ms)Hibernate (2.1) time (ms)
Melbourne28265581
Sepang468222140
Bahrain2808581610
Imola3253653
Barcelona4613127329
Grand Total40531240313


Ziemniak, Sakowicz, Napieralski - 2007

There was a report by "Piotr Ziemniak, Bartosz Sakowicz, Andrzej Napieralski" published at CADSM?2007, February 20-24, 2007, Polyana, UKRAINE. This group made no contact with JPOX to aid in their report and so we were left to find out about it second hand. They made a conclusion that JPOX had worse performance than Hibernate and TopLink on their unpublished tests. Analysis of their report demonstrates the following

  • They had schema generation turned on at runtime. This is against JPOX best practice
  • They have no datastore connection pooling enabled for JPOX. Out of the box JPOX will not enable this, whereas Hibernate and TopLink will. This is a glaring omission when you are allegedly comparing performance. In our tests database connection pooling can change performance by 60% or so.
  • They also claimed that JPOX configuration was "hardest" yet provided no details whatsoever to back this up.

If any of that group read this and have extra information we'd be delighted to add it here. Moreover, we'd be willing to provide them with updates to their JPOX configuration so that they could re-run their tests. Perhaps if they also actually publish the benchmark then people would have grounds to comment.

DevX Article - Jim White

There was an article in DevX comparing JPOX with Hibernate et al. JPOX were not asked on how to provide an optimised configuration for this study and so only read about it second hand. After analysis of the report we have the following observations :-

  • The report states "JPOX JDO 1.2" ? JPOX implements JDO1/JDO2 yes, but it also implements JPA1 ... and we have never used the name "JPOX JDO" in the last year. Version 1.2 is not out yet. He presumably means 1.1.6 but this doesnt bode well for the rest of the study if doesnt know the version number of what he is testing.
  • JPOX has "log4j" as a dependency. This is optional only.
  • The report has "c3p0" for Hibernate (and so are using connection pooling for that) yet it doesn't for JPOX (and so JPOX is being run without any connection pooling). This will significantly impact any performance!
  • The report states JDO takes a different approach. It allows lazy loading, but does not load anything into the lazily loaded field like addresses. In fact, if you access the property directly, you will see that the lazy loaded field would contain null. This can cause some issues if you don?t properly access the data with getters and setters: It is obvious from this that the author hasn't read as far as PersistenceAware

Overall the performance shows that JPOX is on a par with Hibernate ... yet it has no database connection pooling enabled and so with this turned on would have been far superior. Writing a performance comparison and making such an omission is unprofessional and demonstrates that the author took little time to understand the technology.