Title: Systems Science
1Systems Science
For situations where tools are disjoint Different
developers Different methods, styles Independent
models to be federated Need to implement data
flow among models
but not as simple as it may sound
2Information Flow in Systems Toxicology
3Multi-media Modeling
Air model
Water model
soil model
4Multi-media Modeling
file of int, 5 per line
Air model
file of float, one per line with 3 ints after
5 minute steps
Access DB out
Water model
Unix pipe of char in
3 hour steps
soil model
1 month steps
5Model Federations
No scientist has expertise for the
whole Scientists must be able to develop
components individually i.e., not be software
engineers working as a cohesive team Component
models must interoperate
Air model
Water model
soil model
6Model Federations
Mismatch management module
Air model
5 minute steps
Water model
3 hour steps
soil model
1 month steps
7JDeco Functional Federations
8New Areas
- Human lung model biochemistry, fluid dynamics,
protein motors and cilia mechanics, cell
physiology for cystic fibrosis research
9AOP Infrastructure
10Model Federations
Mismatch management module
Air model
5 minute steps
Aspects
Water model
3 hour steps
soil model
1 month steps
11Good modularity
XML parsing
- XML parsing in org.apache.tomcat
- red shows relevant lines of code
- nicely fits in one box
12Good modularity
URL pattern matching
- URL pattern matching in org.apache.tomcat
- red shows relevant lines of code
- nicely fits in two boxes (using inheritance)
13But problems exist
logging is not modularized
- logging in org.apache.tomcat
- red shows lines of code that handle logging
- not in just one place
- not even in a small number of places
14Logging, zoomed in
//From ContextManager public void service(
Request rrequest, Response rresponse ) // log(
"New request " rrequest ) try //
System.out.print("A") rrequest.setContextMan
ager( this ) rrequest.setResponse(rresponse)
rresponse.setRequest(rrequest) //
wront request - parsing error int
statusrresponse.getStatus() if( status lt
400 ) status processRequest( rrequest )
if(status0) statusauthenticate( rrequest,
rresponse ) if(status 0)
statusauthorize( rrequest, rresponse ) if(
status 0 ) rrequest.getWrapper().handleRequ
est(rrequest, rresponse) else
// something went wrong handleError(
rrequest, rresponse, null, status )
catch (Throwable t) handleError( rrequest,
rresponse, t, 0 ) // System.out.print("B")
try rresponse.finish()
rrequest.recycle() rresponse.recycle()
catch( Throwable ex ) if(debuggt0) log(
"Error closing request " ex) // log( "Done
with request " rrequest ) //
System.out.print("C") return
// log( "New request " rrequest )
// System.out.print(A)
// System.out.print("B")
if(debuggt0) log("Error closing request "
ex)
// log("Done with request " rrequest)
// System.out.print("C")
15Cross Cutting Concerns