tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Darryl L. Miles" <dar...@netbauds.net>
Subject RFC: Commonly occuring problems with integrated IDE development <-> test cycle?
Date Wed, 26 Oct 2005 01:48:32 GMT

Hello there I am using the Eclipse/WTP enviroment to develop with Tomcat 
and would like to get a greater understanding of some issues that crop 
up that lower the quality of development <-> testing cycle for web 
application developers.


Do you know of any JSR that covers _REMOTE_ web-app deployment, 
exporting of entire web-apps, updating of file/dirs within exploded 
web-apps (delta uploads during development on a remote server), web-app 
deployment control, web-app reconfiguration, server re-configuration, 
etc..., apart from the TC add-on package "admin" is there any other work 
you could advise me to go look at that goes someway to forfilling these 
requirements ?

Do you think such work should be integrated into the "admin" package ?  
My perception of the admin package is that it provides a HTML based 
interface to deployment function.  Where as I'm thinking of a more grass 
roots level protocol (like Java Debug) that works over TCPIP, which is 
more a "developer support" package and runs entirely within the 
container (not as web-app itself).


Things I'd like to address (and experiment with) :


My first advise to ask is on a ThreadDeath issue within 
ContainerBackgroundProcessor, when this occurs the TC server no longer 
responds to any web requests, although it appears to be running and the 
warning message in the log indicates all should be well.  The only way 
to recover is to restart TC, this was caused during a web-app automatic 
re-deploy.  At the end of this email is the log output and stack trace.

Is it possible to get a log output emitted by TC for the event that 
occured for it to auto-redeploy ?  From my understanding of the 
annoyances I see this area "the automatic re-deploy" mechanism is at the 
root of most problems.  I'd like my development IDE to instruct TC when 
its editing the web-app runtime enviroment, so that the deploy part (of 
the automatic re-reploy) is delayed until my IDE has finished all its 
edits.  My IDEs build process is often slower than the time it takes TC 
to detect, undeploy and redeploy, but My IDE is still updating the 
enviroment, so the re-deploy bounces again as another edit comes in.  It 
is at these times I see all sorts of problems from the TC JVM crashing 
out to ThreadDeath errors.  I believe this could be solved by being able 
to send TC an instruction that for Context "/foo" to disable the 
auto-deploy temporarly, then once building is complete to re-enable and 
start the deploy.  Maybe this could be achieved locally with a simple 
file existance test (lockfile) but I'd really like to see a solution 
that works local and remotely.

I would also like to experiment with setting TC up to be able to switch 
between two exploded web-app trees for the same context.  Think of this 
like double-buffering used on 2D/3D graphics.  Updates are made to the 
one that is currently not deployed, TC is kept informed as to which 
files have changed and TC has complete control to be able to decide if 
this update can be merged into the currently running wbe-app or a 
re-deploy is necessary for the changes to be picked up.  TC would also 
have control as to exactly when a particular change is merged if that 
helps maintain stability of the running development container.  But for 
this to happen there needs to be an API to delta update an exploded web-app.

Do you have any problems or situations yourself you'd like to throw in 
that maybe relevant ?


Your thoughts ?

Darryl


DEBUG 03:13:15,020 (ApplicationLifecycleListener.java:contextDestroyed:36)  -contextDestroyed
on "foo"
INFO  03:13:15,024 (ApplicationLifecycleListener.java:contextDestroyed:43)  -contextDestroyed
on "foo" done!
25-Oct-2005 03:13:16 org.apache.catalina.session.PersistentManagerBase start
SEVERE: No Store configured, persistence disabled
INFO  03:13:16,813 (ApplicationLifecycleListener.java:contextInitialized:23)  -contextInitialized
on "foo"
25-Oct-2005 03:13:16 org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped
already.  Could not load org.apache.log4j.spi.ThrowableInformation.  The
eventual following stack trace is caused by an error thrown for debugging
purposes as well as to attempt to terminate the thread which caused the
illegal access, and has no functional impact.
25-Oct-2005 03:13:24 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor processChildren
SEVERE: Exception invoking periodic operation: java.lang.ThreadDeath
       at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1221)
       at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1181)
       at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
       at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:145)
       at org.apache.log4j.Category.forcedLog(Category.java:379)
       at org.apache.log4j.Category.log(Category.java:844)
       at org.apache.commons.logging.impl.Log4JLogger.error(Log4JLogger.java:193)
       at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3673)
       at org.apache.catalina.core.StandardContext.start(StandardContext.java:4104)
       at org.apache.catalina.core.StandardContext.reload(StandardContext.java:2930)
       at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:403)
       at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1276)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1568)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1557)
       at java.lang.Thread.run(Thread.java:595)
25-Oct-2005 03:13:34 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
DEBUG 03:13:34,128 (ApplicationLifecycleListener.java:contextDestroyed:36)  -contextDestroyed
on "foo"
25-Oct-2005 03:13:34 org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped
already.  Could not load org.apache.log4j.spi.ThrowableInformation.  The
eventual following stack trace is caused by an error thrown for debugging
purposes as well as to attempt to terminate the thread which caused the
illegal access, and has no functional impact.
25-Oct-2005 03:13:34 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor processChildren
SEVERE: Exception invoking periodic operation: java.lang.ThreadDeath
       at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1221)
       at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1181)
       at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
       at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:145)
       at org.apache.log4j.Category.forcedLog(Category.java:379)
       at org.apache.log4j.Category.log(Category.java:844)
       at org.apache.commons.logging.impl.Log4JLogger.error(Log4JLogger.java:193)
       at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:3714)
       at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4283)
       at org.apache.catalina.core.StandardContext.reload(StandardContext.java:2924)
       at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:403)
       at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1276)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1568)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1557)
       at java.lang.Thread.run(Thread.java:595)

-- 
Darryl L. Miles



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Mime
View raw message