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.