Hi Mike!
I have something like that working.
I have a "base" project that has all hibernate, user management, etc. And
other projects that work like plugins. I can drop the jars from one of those
projects in the war, and automatically get the functionality.
There are 2 important techniques that make that work:
1. I have spring importing additional applicationContext files from the jars
with :
<import resource="classpath*:META-INF/applicationContext-*.xml"/>
so I can define new beans in the "plugin" projects, and get them working in
the webapp.
2. I'm using a spring BeanFactoryPostProcessor that takes references from
beans in the plugins and "injects" them in other beans of the base project.
An example are hibernate mapping files, were on the base i have something
like:
<bean id="sessionFactory" class="...">
...
<property name="mappingResources">
<list>
<value>pt/telindus/ikon/model/Model1.hbm.xml</value>
<value>pt/telindus/ikon/model/Model2.hbm.xml</value>
</list>
</property>
</bean>
and on the plugin I have something like:
<bean class="...PluginBeanFactoryPostProcessor">
<property name="extensionBeanName" value="sessionFactory"/>
<property name="propertyName" value="mappingResources"/>
<property name="values">
<list>
<value>pt/telindus/ikon/model/Model3.hbm.xml</value>
</list>
</property>
</bean>
this takes, Model3.hbm.xml and "injects" it in the sessionFactory, before it
is initialized.
I use the second technique quite extensively as a kind of lightweight plugin
system.
regards,
João Nelas
On Dec 17, 2007 7:19 PM, Mike Wille <[EMAIL PROTECTED]> wrote:
> Just one war file. They are stand alone projects in the sense that
> there are two maven projectsI started down this path after reading:
>
> http://maven.apache.org/plugins/maven-war-plugin/examples/war-overlay.html
>
> I just realized that there is no corresponding feature for JARs. So my
> Project B core project with Dependency on Project A core (a jar) is not
> being overlayed but simply made available like normal. Duh!
>
> So now it seems I was asking to do something that wasn't possible...
>
> -Mike
>
> Alexander Coles wrote:
> > I am not quite clear - if that's the case, then project A and project
> > B aren't standalone projects.
> > In other words, how many WAR files will you be deploying to Tomcat (or
> > your container)?
> >
> > Cheers,
> >
> > Alex
> >
> > On 17 Dec 2007, at 19:18, Mike Wille wrote:
> >
> >> I just realized that I have left something out. My end goal was to
> >> generate one combined web app from project A and B using the jar/war
> >> overlay feature. Does that change anything?
> >>
> >> Thanks!
> >>
> >> -Mike
> >>
> >> Alexander Coles wrote:
> >>> I think so. I am offering this as a purely suggestion - the system I
> >>> am currently working on -- with two WARs/web apps - is constrained
> >>> by exactly what you mentioned: Tomcat is the deployment environment
> >>> for the enterprise, so I don't have the full J2EE stack available to
> >>> me.
> >>>
> >>> Instead I've just developed two monolithic applications, that share
> >>> JAR'ed-up code in the core module. But there's no sharing of a
> >>> applicationContext at run app. Ostensibly they're entirely separate
> >>> with separate SessionFactories, etc.
> >>>
> >>> Let us know how it works out!
> >>>
> >>> Alex
> >>>
> >>>
> >>> On 17 Dec 2007, at 18:49, Mike Wille wrote:
> >>>
> >>>> Yes, project A is also a stand alone project. It has both Core and
> >>>> Web modules.
> >>>>
> >>>> Thanks for the links. I will take a look. At first glance, it
> >>>> seems that this creates an EAR file and would then require
> >>>> something more then Jetty or Tomcat.
> >>>>
> >>>> Thanks!
> >>>>
> >>>> -Mike
> >>>>
> >>>> Alexander Coles wrote:
> >>>>> Is Project A also a stand alone project, or does it just provide
> >>>>> infrastructure support?
> >>>>>
> >>>>> If I am understanding your requirement rightly, you could create a
> >>>>> shared parent application context:
> >>>>>
> http://blog.interface21.com/main/2007/06/11/using-a-shared-parent-application-context-in-a-multi-war-spring-application/
> >>>>>
> >>>>>
> http://springtips.blogspot.com/2007/06/using-shared-parent-application-context.html
> >>>>>
> >>>>>
> >>>>> Alex
> >>>>>
> >>>>> On 17 Dec 2007, at 18:16, Mike Wille wrote:
> >>>>>
> >>>>>> 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]
> >>>>>>
> >>>>>
> >>>>>
> ---------------------------------------------------------------------
> >>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>>
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>