Hi All,
I'm looking for advice on setting up multiple projects. I've been using
the Spring MVC Modular archetype with appfuse and it works great.
Now I was thinking about trying it out on a larger scale. I'm setting
up a second project (multi module) that depends on the first.
Everything worked out great until I went to add new model objects to my
second project. I can't get the new DAOs and model to work in the Core
module of the second project. I am using Hibernate and I'm getting any
one of a number of errors (depending on how I adjust the spring
config). So I'm looking for the recommended way to set something like
this up.
Let me describe what I have done and the errors I am receiving. I have
two projects: Project A and Project B. Project A provides
infrastructure support. Project B provides application specific
features. Project B depends on Project A.
1. It appears that I cannot leverage the hibernate session factory or
data source from Project A. When I do not specify a SessionFactory in
Project B, my DAOs fail to be created in the spring context with a
failed dependency on bean named sessionFactory. I guess this isn't a
problem really, just something I needed to be aware of.
2. After adding a session factory and data source to Project B, my
annotated hibernate entities created in Project B are not found. By not
found, I mean my unit tests fail when attempting to call DAO methods.
The exeception is:
org.hibernate.MappingException: Unknown entity: company.app.model.Entity
My hibernate.cfg.xml file in Project B (both main and test directories)
*does* list the entity and I even added it to persistence.xml just for
the heck of it. So it appears to me that the Project B SessionFactory
is loading the hibernate.cfg.xml from Project A. I assume this because
of the property: configLocation that is set to
"classpath:hibernate.cfg.xml". I tried changing that setting to just
"hibernate.cfg.xml" in the interests of just getting the tests to work.
No luck there. I then went back to project A and tried renaming
hibernate.cfg.xml to something like projecta-hibernate.cfg.xml and then
updated the SessionFactory for Project A to point to that. When I do
that, I get an exception on build: "No hibernate.cfg.xml configuration
provided. Annotated classes/packages is only configurable via
hibernate.cfg.xml"
I thought that maybe I could suppress Project A's hibernate.cfg.xml and
so I added Project A's entities to Project B's hibernate.cfg.xml, but in
the end I couldn't figure out a way to suppress Project A.
While I knew it wouldn't work, I even tried adding Project B's entity
declarations to Project A's hibernate.cfg.xml to try and get Project B
to work. That caused Project A's build to fail, of course.
I've tried adding an entry to Project B's spring context for a
HibernateExtensionPostProcessor that includes Project B's entities. But
that gives me a different exception:
org.springframework.beans.factory.BeanCreationException: Error creating
bean with name 'sessionFactory' defined in class path resource
[applicationContext-dao.xml]: Invocation of init method failed; nested
exception is org.hibernate.HibernateException: cannot simultaneously
fetch multiple bags
So now I'm completely lost. Is there anybody out there that can offer
any help or advice? Has anyone tried to do what I am doing?
Thanks a bajillion for any help!
-Mike
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]