Hi Shubbis,
Thanks for asking before posting any results...  :-)  Much appreciated.

The first thing that comes to mind is whether you are "enhancing" your
Entities that are used with OpenJPA.  For optimal performance, OpenJPA uses
a byte-code weaving technique to enhance the Entity objects.  This
enhancement allows for more efficient interaction between the Entity objects
and the OpenJPA runtime.

This blog entry explains the various enhancement mechanisms available for an
OpenJPA environment (build vs runtime):
http://webspherepersistence.blogspot.com/2009/02/openjpa-enhancement.html

FYI, if you do not perform the byte-code enhancement either statically at
build time or dynamically at runtime, then OpenJPA falls back to a simpler
subclassing approach.  This subclassing approach is meant for simple
out-of-the-box examples, and not for production or performance comparisons.
This performance concern becomes especially noticeable with Eager type
relationship fetching like it looks your example is doing.

Let's start with this enhancement processing.  If you are doing enhancement
and you are still hitting this performance concern, then we need to dig
further because we definitely do not see this type of performance concern
when we do our comparisons...  :-)

Thanks,
Kevin

On Thu, Mar 12, 2009 at 7:22 AM, Shubbis <marius.jo...@broadpark.no> wrote:

>
> First post so bare with me, and I've search for quite a while and not found
> any answers.
>
> I'm working on a school project where we are testing performance with
> different ORM's compared to JDBC and I'm having a big issue with OpenJPA
> when using a ManyToMany relation.
>
> We're trying to do a simple select case where we run a for loop with 500
> iterations while calling a findById method that returns the instance.
>
> Wearhouse instance = getOJPAEntityManager().find(Wearhouse.class, id);
>
> This takes roughly 1~ sec on JDBC and 1.2~ EclipseLink while it takes 10+
> sec on OpenJPA.
> This only happens with ManyToMany! We have plenty of insert tests, select
> tests etc and all of them are much more similar, with openjpa winning and
> losing a few.
>
> Now, I'll gladly admit we dont have to much experience with this, but this
> strikes me as very odd. So, if anyone has any tips, comments or info I'll
> be
> glad to try it out.
>
> Thanks in advance!
>
> Marius
>
> Here are the two entities in question:
>
> package project.common.model;
>
> import java.util.*;
>
> import javax.persistence.*;
>
> @Entity
> public class Wearhouse {
>
>        @Id
>        @GeneratedValue(strategy = GenerationType.IDENTITY)
>        private Integer wearhouseNr;
>        private String wearhouseName;
>
>        @ManyToMany(cascade={CascadeType.PERSIST}, fetch = FetchType.EAGER)
>        @JoinTable(
>                        name="wearhouse_storagecategory",
>                        joincolum...@joincolumn(name="wearhouseNr"),
>
>  inversejoincolum...@joincolumn(name="storagecategoryNr")
>        )
>        private List<Storagecategory> storageCategories;
>
>        public Wearhouse() {
>        }
>
>        public Wearhouse(String wearhouseName) {
>                this.wearhouseName = wearhouseName;
>                storageCategories = new ArrayList<Storagecategory>();
>        }
>
>        public Integer getWearhouseNr() {
>                return this.wearhouseNr;
>        }
>
>        public void setWearhouseNr(Integer wearhouseNr) {
>                this.wearhouseNr = wearhouseNr;
>        }
>
>        public String getWearhouseName() {
>                return this.wearhouseName;
>        }
>
>        public void setWearhouseName(String wearhouseName) {
>                this.wearhouseName = wearhouseName;
>        }
>
>        public void setStorageCategories(List<Storagecategory>
> storageCategory){
>                this.storageCategories = storageCategory;
>        }
>
>        public List<Storagecategory> getStorageCategories(){
>                return storageCategories;
>        }
>
>        public void addStorageCategories(Storagecategory storagecategory) {
>                if(storageCategories == null)
>                        storageCategories = new
> ArrayList<Storagecategory>();
>                storageCategories.add(storagecategory);
>
>        }
>
> }
>
>
>
> package project.common.model;
>
> import java.util.*;
>
> import javax.persistence.*;
>
> @Entity
> public class Storagecategory {
>
>        @Id
>        @GeneratedValue(strategy = GenerationType.IDENTITY)
>        private Integer storagecategoryNr;
>        private String storageCategoryName;
>
>        @ManyToMany(mappedBy="storageCategories",
> cascade={CascadeType.PERSIST})
>        private List<Wearhouse> wearhouses;
>
>        public Storagecategory() {
>        }
>
>        public Storagecategory(String storageCategoryName) {
>                this.storageCategoryName = storageCategoryName;
>        }
>
>        public Integer getStoragecategoryNr() {
>                return this.storagecategoryNr;
>        }
>
>        public void setStoragecategoryNr(Integer storagecategoryNr) {
>                this.storagecategoryNr = storagecategoryNr;
>        }
>
>        public String getStorageCategoryName() {
>                return this.storageCategoryName;
>        }
>
>        public void setStorageCategoryName(String storageCategoryName) {
>                this.storageCategoryName = storageCategoryName;
>        }
>
>        public List<Wearhouse> getWearhouses() {
>                return wearhouses;
>        }
>
>        public void setWearhouses(List<Wearhouse> wearhouses) {
>                this.wearhouses = wearhouses;
>
>                //Wearhouse owns the relation, therefor we have to tell
> these
>                //wearhouses this storargecategories is on of the
> wearhouse's
> storagecategories.
>                for (Wearhouse wearhouse : wearhouses)
>                        wearhouse.addStorageCategories(this);
>        }
> }
> --
> View this message in context:
> http://n2.nabble.com/Slow-performance-with-OpenJPA-when-selecting-from-a-ManyToMany-relation.-tp2466994p2466994.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>
>

Reply via email to