Rapid Application Development with Cocoon
description
Transcript of Rapid Application Development with Cocoon
Torsten [email protected]<vafer/>.org
Rapid Application Developmentwith Cocoon
javaflow and the compiling classloader
Cocoon GetTogether 2005, Amsterdam
::about me
• with Cocoon since 1.x
• member of the Cocoon PMC
• member of the Jakarta PMC
• ASF member
2
::quote 3
“Rapid Application Development is exactly the opposite of what Cocoon
provided a fears ago - but gladly enough times have changed”
Torsten Curdt
::agenda
• general environment hints
• Cocoon features for RAD
• web application and IDE config
• live demonstration
• behind the scenes
• overview of jci and javaflow
4
::hints
• stripped down version of Cocoon
• build the source jars
• relocate the webapp with the COCOON_WEBAPP_HOME environment variable
• use “cocoon servlet-debug”
5
::features
• compiling + reloading of classes
• compiling + reloading of javaflow
• compiling + reloading of components
• reloading of jars
6
::map:classpath 7
<map:components> ... <map:classpath> <class-dir src=”...”/> <src-dir src=”...”/> <lib-dir src=”...”/> </map:classpath> ...
::store 8
<map:components> ... <map:classpath> <class-dir src=”...”> <store class=”...”/> </class-dir> </map:classpath> ...
::eclipse 9
DEMO
::hmmm 10
So how does it work?
::sitemap 11
• own component manager
• can have a dedicated classpath
• uses a paranoid* classloader
*parent-last classloader
::reloading 12
::adding flow 13
• resources transformed on-the-fly
• similar to pipelines
::...but! 14
• does not help for core development
• be careful on a live system upgrade
• object types defined per classloader
::dimensions 15
::gotchas 16
• objects in sessions
• parent component manager component interactions
• old continuations
::commons 17
• commons jci does the
• monitoring
• compilation
• commons javaflow provides
• java continuations
• cocoon javaflow block
• evolved out of cocoon 2.1
• now being used in cocoon trunk
::cocoon block
• flow interpreter
• flow object model
• base classes
• integration with CForms
18
::example 19
public class MyFlow extends AbstractContinuable {
public void run() { ... sendPageAndWait( ”page”, data); ... }
::jci 20
• compiler abstraction
• supports eclipse, janino, groovy
• filesystem monitoring
• events for create, change and delete
• compiling/reloading class loader
http://jakarta.apache.org/commons/sandbox/jci
::jci API 21
CompilationResult result = compiler.compiler( classNames, new FileResourceReader(dir), new MemoryResourceStore());
if (result.getErrors() .length > 0) { ...
::jci API 22
FilesystemAlterationMonitor fam = new F..A..M();
fam.start();
fam.addListener( new CompilingListener( dir));
::future
• almost ready for a release(94% testcase coverage!!)
• better dependencies support
• adding more compilers
• javac, pizza, jikes, gcj
• maven might switch to jci
23
::javaflow 24
• java continuations throughbytecode instrumentation
• works hand in hand with jci
• ant-task for jar/class rewriting
• supports serialization(!!)
http://jakarta.apache.org/commons/sandbox/javaflow
::javaflow API 25
Continuation continuation = Continuation.startWith( new Calculator()); ... Continuation.continueWith( continuation);
::continuations 26
::instrumentation 27
::scalability
• the deeper your flow, the more memory used per continuation
• increases linearly
• avoid recursion
• the more method calls, the more overhead
• can be heavily optimized
28
::limitations 29
• suspend in synchronized blocks
• suspend in a catch/finally
::future plans 30
• remove current limitations
• call graph analysis for optimization
• switching from BCEL to ASM(?)
• support for external suspends(?)
• talking with the guys from RIFE
• release within the next few months
::summary
• auto-compiling and reloading of
• classes
• javaflow
• components
• full IDE support
• debugging
• refactoring
• (potential) serialization support
• persisting continuations across restarts
• session and flow replication
31
::thanks 32
questions?