[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-4857?page=c...
]
Chris Baxter commented on HHH-4857:
-----------------------------------
Okay, I have attached my changes as well as a text file explaining them. Keep in mind
that when I made these changes, I had to get them done quickly as we were having issues in
production with memory that needed a quick solution. I definitely cut some corners that
you might want to smooth out when/if you reintegrate. Also, we tested these changes and
all seems well with how we are using Hibernate, but that sure doesn't mean that the
changes I made will cover all situations. Hopefully you'll be able to find any of
those situations and clean them up.
Let me know if you are okay with the changes and if you plan on integrating it back into
the main hibernate code. Also, let me know if you have any questions on the changes>
Sharing metadata between different SessionFactories
---------------------------------------------------
Key: HHH-4857
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-4857
Project: Hibernate Core
Issue Type: New Feature
Components: core, entity-manager
Reporter: Chris Baxter
Priority: Minor
Attachments: AnnotationConfiguration.java, changes.txt, Configuration.java,
Ejb3Configuration.java, SessionFactoryImpl.java, SharedAnnotationConfig.java
In our system, we have each clients data in a separate DB instance. We're using JPA
(via hibernate) on top of that to get at the data. The problem here is that for each
client DB supported by one of our jboss servers, we have to have an instance of
EntityManagerFactory compete with an Ejb3Configuration instance. Each config instance
takes up around 20 MBs of permanent space, so if we have have 1000 client DBs supported by
a jboss instance, it takes up a hugh amount of memory for information that will always be
the same (the DB schemas are always the exact same in each client DB) across all
EntityManagerFactory instances. So what I want to know is if there is a way to only have
one instance of Ejb3Configuration that can be shared across all of the
EntityManagerFactory instances that are spawning my EntityManagers. This would be huge as
it would help me save many gigs of memory that never can be collected (old gen in jboss).
I prototyped some changes locally to Ejb3Configuration (to allow an instance of
AnnotationConfiguration to be supplied in the constructor, allowing sharing across all
instanced of this class) and to SessionFactoryImpl (to share some of the properties like
entityPersisters, classMetadata and such) and I was able to reduce the footprint to 20 MBs
for the first DB and then under a MB for each additional DB. The changes I made were a
bit quick and dirty though, just to see if it was possible. So I'm taking out this
feature request to see if this is a piece of work that you guys can do (or I can
contribute after refactoring to a more suitable approach) and integrate into the main code
for hibernate-core and hibernate-entitymanager. Let me know if this is something you guys
think to be a valuable addition.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira