Hot deploy is a very neat feature that people expect nowadays, but yes
it's true, fast startup is even more important and if fast enough, it
can offset the lack of hot-deploy. But I think making deploy /
undeploy to function would force us to properly implement and give
more thought to some of the things, and I think there are scenarios
(more than I can imagine) where lack of it is a hurdle.
I'm thinking things like:
- component modularization
Looks like WSRP attempts either exposed some lack of clean portal -
components separation, or maybe there's just a lack of understanding
the facilities in place, and how to use them properly.
- automated testing
Let's think Shrinkwrap / Arquillian style of testing ...
Programmatically compose a test archive, start container, deploy the
test archive and execute tests.
Currently to test things with GateIn you have to do that upside down:
place tests into deploy first, then start the container, then trigger
test execution. Completely different (and surprising) flow. I'm
guessing, but seems to me this might be the reason that's holding back
GateIn support in Arquillian.
- cleanup after component is removed (that's handy for testing)
If added component registers stuff in JCR, creates pages, navigations
... is there a simple way for configurations to get removed if
component is undeployed?
That would be very useful for testing. Or, transient storage could be
configured for testing ... but would have to be prefilled with some
initial portal data to prevent first-time init upon every start.
Maybe someone can think of some more scenarios related to this ...
On Wed, Jan 26, 2011 at 10:36 PM, Matt Wringe <mwringe(a)redhat.com
<mailto:mwringe@redhat.com>> wrote:
On Wed, 2011-01-26 at 22:23 +0100, Julien Viet wrote:
> why do one's need hot redeploy ?
I don't think hot deploy/undeploy/redeploy is really that important.
What I do think is important is that deploy/undeploy/redeploy can be
done. Right now we can't do this with the extension mechanism, we can
only add a page or a portlet when the server first starts.
>
> if it's to increase productivity, I don't believe in that solution
> anymore because the complexity to make it real in a server agnostic
> manner is very high.
>
>
> However, I do believe in providing a server that is so quick to boot
> that redeploy is not necessary anymore, or is not perceived as a
value
> add.
>
>
> If you take GateIn on Tomcat, it starts in 25 seconds (first
one). It
> used to boot in 18s seconds one year ago, at this time, the boot
time
> was roughly divided into
>
>
> - Tomcat deployment and web app scanning : 5 seconds
> - JCR init 7 seconds
> - XML parsing 3 seconds (JAXB and JBoss XB)
> - various other things for the rest of the time
>
>
> - I know that the JCR team is working on improving startup time
of JCR
> (it lost seconds because of the switch to JBoss Cache, which is slow
> to start and they start like 18 cache instances but they are now
able
> to collocate a single instance).
> - We will decrease XML parsing by getting rid of *XB , it's just a
> matter of rewriting XML deployment parsing.
> - We can also decrease web app deployment if we deploy less web
> applications.
>
>
> I know that JBoss is also working on making AS7 blazing fast to boot
> and they will achieve it because they took the right decisions.
>
>
> Therefore instead of taking the decision to do R&D to provide hot
> redeploy, I would instead take the decision to work on reducing the
> server boot time.
>
>
> So the real challenge is: do you think we can make GateIn boot in 10
> seconds (Tomcat / AS7 / Jetty) ?
>
>
> On Jan 26, 2011, at 9:42 PM, Marko Strukelj wrote:
>
> >
> > One technical constraint preventing hot redeployment
is the
> > lack of shared classes between applications in Java
EE, this
> > is required for many parts of GateIn.
> >
> > So Java EE sucks :-)
> >
> > (that being said, the WSRP JSF administration should
be hot
> > redeployable as it's a consumer of the shared classes).
> >
> >
> >
> >
> > Class sharing is a matter of classloader sharing, and all .wars
> > share a parent classloader that contains classes in
> > JBOSS_HOME/server/default/lib/*.jar or TOMCAT_HOME/lib/*.jar.
> >
> >
> > That's outside Java EE scope, true, but it's de-facto how all
> > implementations do it so it's a real-world existing mechanism, and
> > we're relying on it too :)
> > Those shared classes aren't hot-deployable though - it's just
> > directories containing jars.
> >
> >
> > In JBoss it's possible to get very creative with classloader
> > hierarchies, but it requires extra configuration, and then extra
> > configuration for user .war / .ear as well so that they can
> > participate in these custom classloaders. Maybe that could be
done
> > automatically via custom deployers if only we could reliably
> > identify user .ear/.wars containing portal apps (maybe if they
> > contain portlet.xml?).
> >
> >
> > The kernel problem is that it should respond to some undeploy /
> > redeploy events fired by jboss, and remove services from its
> > RootContainer and PortalContainer, then rescan only redeployed
> > archives to read configuration, and instantiate, inject, init /
> > start the services and other picocontainer components.
> >
> >
> > We have WCI layer to provide integration with container. Maybe we
> > could add deploy / undeploy callbacks there, with different wiring
> > for Tomcat and JBoss. Although at the moment kernel doesn't
actually
> > interact with WCI, I think it's completely separate.
> >
> >
> >
> >
>
>
_______________________________________________
gatein-dev mailing list
gatein-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/gatein-dev