You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@excalibur.apache.org by rd...@apache.org on 2009/06/16 19:55:28 UTC
svn commit: r785324 [5/28] - in /excalibur/site: ./ css/ developing/ event/
fortress/ framework/ images/logos/ instrument/ lifecycle/ sourceresolve/
store/ xmlutil/
Modified: excalibur/site/developing/conclusion.html
URL: http://svn.apache.org/viewvc/excalibur/site/developing/conclusion.html?rev=785324&r1=785323&r2=785324&view=diff
==============================================================================
--- excalibur/site/developing/conclusion.html (original)
+++ excalibur/site/developing/conclusion.html Tue Jun 16 17:55:25 2009
@@ -1,31 +1,453 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>Apache Excalibur - Conclusion</title><style type="text/css" media="all">
- @import url("../style/maven-base.css");
-
- @import url("../style/maven-theme.css");</style><link rel="stylesheet" href="../style/print.css" type="text/css" media="print"></link><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta><meta name="author" content="Paul Hammant"></meta><meta name="email" content="hammant@apache.org"></meta><meta name="author" content="Berin Loritsch"></meta><meta name="email" content="bloritsch@apache.org"></meta></head><body class="composite"><div id="banner"><a href="http://www.apache.org/" id="organizationLogo"><img alt="The Apache Software Foundation" src="http://www.apache.org/images/asf-logo.gif"></img></a><a href="http://excalibur.apache.org/" id="projectLogo"><img alt="Apache Excalibur" src="http://excalibur.apache.org/logo.gif"></img></a><div class="clear"><hr></hr></div></div><div id="breadcrumbs"><div class="xright">
-
- <a href="../index.html">Home</a>
-
-
-
- <span class="separator">|</span>
-
-
- <a href="../fortress/index.html">Fortress</a>
-
-
-
- <span class="separator">|</span>
-
-
- <a href="../component-list.html">Components</a>
-
-
-
- <span class="separator">|</span>
-
-
- <a href="../containerkit.html">Containerkit</a>
- </div><div class="clear"><hr></hr></div></div><div id="leftColumn"><div id="navcolumn"><div id="menuEssentials"><h5>Essentials</h5><ul><li class="none"><a href="../index.html">Overview</a></li><li class="none"><a href="../mail-lists.html">Mailing Lists</a></li><li class="none"><a href="../svn.html">Subversion</a></li><li class="none"><a href="http://wiki.apache.org/excalibur/" class="externalLink" title="External Link">Wiki</a></li><li class="none"><a href="http://wiki.apache.org/excalibur/FrequentlyAskedQuestions" class="externalLink" title="External Link">FAQ</a></li><li class="none"><a href="http://excalibur.apache.org/apidocs/" class="externalLink" title="External Link">Javadocs</a></li><li class="none"><a href="http://excalibur.apache.org/download.cgi" class="externalLink" title="External Link">Download</a></li><li class="none"><a href="../issue-tracking.html">Issue Tracking</a></li><li class="collapsed"><a href="../misc.html">Miscellaneous</a></li></ul></div><div
id="menuFortress"><h5>Fortress</h5><ul><li class="none"><a href="../fortress/index.html">Overview</a></li><li class="none"><a href="../fortress/features.html">Features Oriented</a></li><li class="none"><a href="../fortress/getting-started.html">Getting Started</a></li><li class="none"><a href="../fortress/using-meta-info.html">Using Meta Info</a></li><li class="none"><a href="../fortress/cli.html">CLI</a></li><li class="none"><a href="../fortress/swing.html">Swing</a></li><li class="none"><a href="../fortress/servlet.html">Servlet</a></li><li class="none"><a href="../lifecycle/index.html">Lifecycle Extensions</a></li><li class="none"><a href="../fortress/design-notes.html">Design Notes</a></li></ul></div><div id="menuFramework"><h5>Framework</h5><ul><li class="collapsed"><a href="../framework/index.html">Documentation</a></li><li class="expanded"><a href="../developing/index.html">Developing</a><ul><li class="none"><a href="../developing/authors.html">Authors</a></li><li cl
ass="none"><a href="../developing/introduction.html">Introduction</a></li><li class="none"><a href="../developing/decomposing.html">Decomposition</a></li><li class="none"><a href="../developing/framework.html">Avalon Framework</a></li><li class="none"><a href="../developing/implementing.html">Using the framework</a></li><li class="none"><a href="../developing/compatiblity.html">Compatibility with Avalon</a></li><li class="none"><a href="../developing/strategies.html">Development Strategies</a></li><li class="none"><strong><a href="../developing/conclusion.html">Conclusion</a></strong></li></ul></li></ul></div><div id="menuComponents"><h5>Components</h5><ul><li class="none"><a href="../component-list.html">Overview</a></li><li class="collapsed"><a href="../sourceresolve/index.html">Sourceresolver</a></li><li class="collapsed"><a href="../store/index.html">Store</a></li><li class="none"><a href="../thread.html">Thread</a></li><li class="collapsed"><a href="../xmlutil/index.htm
l">XMLUtil</a></li></ul></div><div id="menuContainerkit"><h5>Containerkit</h5><ul><li class="none"><a href="../containerkit.html">Overview</a></li><li class="collapsed"><a href="../instrument/index.html">Instrument</a></li><li class="collapsed"><a href="../lifecycle/index.html">Lifecycle</a></li><li class="none"><a href="../logger.html">Logger</a></li></ul></div><div id="menuDeprecated_Materials"><h5>Deprecated Materials</h5><ul><li class="none"><a href="../deprecation.html">Overview</a></li><li class="expanded"><a href="../deprecation.html">Old Documentation</a><ul><li class="none"><a href="../component.html">ECM</a></li><li class="collapsed"><a href="../event/index.html">Event</a></li><li class="none"><a href="../configuration.html">Configuration</a></li></ul></li></ul></div><div id="menuThanks"><h5>Thanks</h5><ul><li class="none"><a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="External Link">to our sponsors!</a></li><li class="none"><a h
ref="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="External Link">Sponsor the ASF</a></li></ul></div><div id="menuProject_Documentation"><h5>Project Documentation</h5><ul><li class="none"><a href="../index.html">About Apache Excalibur</a></li><li class="collapsed"><a href="../project-info.html">Project Info</a></li><li class="collapsed"><a href="../maven-reports.html">Project Reports</a></li><li class="none"><a href="http://maven.apache.org/development-process.html" class="externalLink" title="External Link">Development Process</a></li></ul></div></div></div><div id="bodyColumn"><div class="contentBox"><div class="section"><a name="Conclusion"></a><h2>Conclusion</h2><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+
+
+
+
+
+
+
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <title>Excalibur - Conclusion</title>
+ <style type="text/css" media="all">
+ @import url("../css/maven-base.css");
+ @import url("../css/maven-theme.css");
+ @import url("../css/site.css");
+ </style>
+ <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
+ <meta name="author" content="Paul Hammant" />
+ <meta name="author" content="Berin Loritsch" />
+ </head>
+ <body class="composite">
+ <div id="banner">
+ <span id="bannerLeft">
+
+ Excalibur
+
+ </span>
+ <div class="clear">
+ <hr/>
+ </div>
+ </div>
+ <div id="breadcrumbs">
+
+
+
+
+
+
+
+
+ <div class="xleft">
+ Last Published: 2009-06-16
+ </div>
+ <div class="xright"> <a href="../index.html">Home</a>
+ |
+ <a href="../fortress/index.html">Fortress</a>
+ |
+ <a href="../component-list.html">Components</a>
+ |
+ <a href="../containerkit.html">Containerkit</a>
+
+
+
+
+
+
+
+
+ </div>
+ <div class="clear">
+ <hr/>
+ </div>
+ </div>
+ <div id="leftColumn">
+ <div id="navcolumn">
+
+
+
+
+
+
+
+
+ <h5>Essentials</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../index.html">Overview</a>
+ </li>
+
+ <li class="none">
+ <a href="../mail-lists.html">Mailing Lists</a>
+ </li>
+
+ <li class="none">
+ <a href="../svn.html">Subversion</a>
+ </li>
+
+ <li class="none">
+ <a href="http://wiki.apache.org/excalibur/" class="externalLink">Wiki</a>
+ </li>
+
+ <li class="none">
+ <a href="http://wiki.apache.org/excalibur/FrequentlyAskedQuestions" class="externalLink">FAQ</a>
+ </li>
+
+ <li class="none">
+ <a href="http://excalibur.apache.org/apidocs/" class="externalLink">Javadocs</a>
+ </li>
+
+ <li class="none">
+ <a href="http://excalibur.apache.org/download.cgi" class="externalLink">Download</a>
+ </li>
+
+ <li class="none">
+ <a href="../issue-tracking.html">Issue Tracking</a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../misc.html">Miscellaneous</a>
+ </li>
+ </ul>
+ <h5>Fortress</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../fortress/index.html">Overview</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/features.html">Features Oriented</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/getting-started.html">Getting Started</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/using-meta-info.html">Using Meta Info</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/cli.html">CLI</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/swing.html">Swing</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/servlet.html">Servlet</a>
+ </li>
+
+ <li class="none">
+ <a href="../lifecycle/index.html">Lifecycle Extensions</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/design-notes.html">Design Notes</a>
+ </li>
+ </ul>
+ <h5>Framework</h5>
+ <ul>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../framework/index.html">Documentation</a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <li class="expanded">
+ <a href="../developing/index.html">Developing</a>
+ <ul>
+
+ <li class="none">
+ <a href="../developing/authors.html">Authors</a>
+ </li>
+
+ <li class="none">
+ <a href="../developing/introduction.html">Introduction</a>
+ </li>
+
+ <li class="none">
+ <a href="../developing/decomposing.html">Decomposition</a>
+ </li>
+
+ <li class="none">
+ <a href="../developing/framework.html">Avalon Framework</a>
+ </li>
+
+ <li class="none">
+ <a href="../developing/implementing.html">Using the framework</a>
+ </li>
+
+ <li class="none">
+ <a href="../developing/compatiblity.html">Compatibility with Avalon</a>
+ </li>
+
+ <li class="none">
+ <a href="../developing/strategies.html">Development Strategies</a>
+ </li>
+
+ <li class="none">
+ <strong>Conclusion</strong>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h5>Components</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../component-list.html">Overview</a>
+ </li>
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../sourceresolve/index.html">Sourceresolver</a>
+ </li>
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../store/index.html">Store</a>
+ </li>
+
+ <li class="none">
+ <a href="../thread.html">Thread</a>
+ </li>
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../xmlutil/index.html">XMLUtil</a>
+ </li>
+ </ul>
+ <h5>Containerkit</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../containerkit.html">Overview</a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../instrument/index.html">Instrument</a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../lifecycle/index.html">Lifecycle</a>
+ </li>
+
+ <li class="none">
+ <a href="../logger.html">Logger</a>
+ </li>
+ </ul>
+ <h5>Deprecated Materials</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../deprecation.html">Overview</a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <li class="expanded">
+ <a href="../deprecation.html">Old Documentation</a>
+ <ul>
+
+ <li class="none">
+ <a href="../component.html">ECM</a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../event/index.html">Event</a>
+ </li>
+
+ <li class="none">
+ <a href="../configuration.html">Configuration</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h5>Thanks</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../../foundation/thanks.html">to our sponsors!</a>
+ </li>
+
+ <li class="none">
+ <a href="../../foundation/sponsorship.html">Sponsor the ASF</a>
+ </li>
+ </ul>
+ <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
+ <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img>
+ </a>
+
+
+
+
+
+
+
+
+ </div>
+ </div>
+ <div id="bodyColumn">
+ <div id="contentBox">
+ <div class="section"><h2><a name="Conclusion"></a>Conclusion</h2>
+<p>
Maybe you are already convinced, but need some help convincing
your colleagues that Avalon is right for you. Maybe you need
some convincing yourself. Either way, this chapter will help
@@ -34,12 +456,15 @@
Open Source model. For arguments on the validity of Open Source,
I will direct you to Eric S. Raymond's excellent treatises on the
subject (
- <a href="http://www.tuxedo.org/~esr/writings/cathedral-bazaar/" class="externalLink" title="External Link">http://www.tuxedo.org/~esr/writings/cathedral-bazaar/</a> ).
+ <a href="http://www.tuxedo.org/~esr/writings/cathedral-bazaar/" class="externalLink">http://www.tuxedo.org/~esr/writings/cathedral-bazaar/</a> ).
Regardless of your opinions on his politics, the
papers he wrote and compiled into the book <em>The Cathedral
and the Bazaar</em> will give you the information you need to
be convinced about the open source model as a whole.
- </p></div><div class="section"><a name="Avalon_Works"></a><h2>Avalon Works</h2><p>
+ </p>
+</div>
+<div class="section"><h2><a name="Avalon_Works"></a>Avalon Works</h2>
+<p>
The bottom line is that Avalon accomplishes the goal it was
originally designed to fulfill. Avalon does not introduce new
concepts and ideas, but rather uses and formalizes several concepts
@@ -47,12 +472,16 @@
the design of Avalon is the Separation of Concerns pattern introduced
sometime around 1995. Even then, Separation of Concerns is a
formalization of System Analysis techniques.
- </p><p>
+ </p>
+<p>
Avalon's user base is measured in the hundreds. Several projects
like Apache Cocoon, Apache JAMES, and Jesktop are all built on Avalon.
Developers for those projects are users of Avalon Framework. Because of
the number of users Avalon has, it is very well tested.
- </p><div class="subsection"><a name="Designed_by_the_Best_Minds"></a><h3>Designed by the Best Minds</h3><p>
+ </p>
+<div class="section"><h3><a name="Designed_by_the_Best_Minds"></a>Designed by the Best Minds</h3>
+3
+ <p>
The authors of Avalon recognize that we are not the sole experts
on server side programming. We use concepts and ideas from other
people's research. We respond to feedback from our users. Avalon
@@ -60,7 +489,8 @@
introduction -- the people who came up with the concepts of Inversion
of Control, Separation of Concerns, and Component Oriented
Programming designed it.
- </p><p>
+ </p>
+<p>
The beauty of Open Source projects is that the result is an
amalgamation of the best ideas and the best code. Avalon has gone
through periods of testing ideas and rejecting them because there
@@ -69,7 +499,10 @@
predefined components in Excalibur and use them in your own
projects -- they have been tested to work under heavy load without
errors.
- </p></div><div class="subsection"><a name="Compatible_License"></a><h3>Compatible License</h3><p>
+ </p>
+</div>
+<div class="section"><h3><a name="Compatible_License"></a>Compatible License</h3>
+<p>
The <em>Apache Software License</em> (ASL) is compatible
with just about every other license known. The biggest known
exceptions are the <em>GNU Public License</em> (GPL)
@@ -78,7 +511,10 @@
and does not force you to release your source code if you don't want
to. It is the same license used for the Apache Software Foundation's
venerable HTTP server.
- </p></div><div class="subsection"><a name="Pooled_Research"></a><h3>Pooled Research</h3><p>
+ </p>
+</div>
+<div class="section"><h3><a name="Pooled_Research"></a>Pooled Research</h3>
+<p>
Most of Avalon's users contribute back to the project in some way.
This spreads the cost of developing, debugging, and documenting the
framework across several users. It also means that Avalon's code
@@ -88,19 +524,54 @@
a help desk or telephone support line, we do have a mailing list.
Many times your questions can be answered in less time on the list
than it would take on some support lines.
- </p></div><div class="subsection"><a name="Simplified_Analysis_and_Design"></a><h3>Simplified Analysis and Design</h3><p>
+ </p>
+</div>
+<div class="section"><h3><a name="Simplified_Analysis_and_Design"></a>Simplified Analysis and Design</h3>
+<p>
Developing on Avalon helps the developer to get into a mindset.
That mindset focuses the efforts on how to discover Components and
Services. Since many of the details regarding the life of the
Components and Services in the system are already analyzed and
designed, the developer only has to choose which ones they need.
- </p><p>
+ </p>
+<p>
It is important to state that Avalon development does not replace
traditional Object Oriented Analysis and Design, but enhances it.
You are still using the same techniques you did before, only now
you have a tool set you can use to achieve your design faster.
- </p></div></div><div class="section"><a name="Avalon_is_Ready"></a><h2>Avalon is Ready</h2><p>
+ </p>
+</div>
+</div>
+<div class="section"><h2><a name="Avalon_is_Ready"></a>Avalon is Ready</h2>
+<p>
Avalon Framework, Avalon Excalibur, Avalon Phoenix and Avalon LogKit
are ready for you to use now. They are mature, powerful products and
they are only getting better!
- </p></div></div></div><div class="clear"><hr></hr></div><div id="footer"><div class="xright">© 1997-2007, The Apache Software Foundation</div><div class="clear"><hr></hr></div></div></body></html>
\ No newline at end of file
+ </p>
+</div>
+
+ </div>
+ </div>
+ <div class="clear">
+ <hr/>
+ </div>
+ <div id="footer">
+ <div class="xright">©
+ 2009
+
+ The Apache Software Foundation
+
+
+
+
+
+
+
+
+ </div>
+ <div class="clear">
+ <hr/>
+ </div>
+ </div>
+ </body>
+</html>
Modified: excalibur/site/developing/decomposing.html
URL: http://svn.apache.org/viewvc/excalibur/site/developing/decomposing.html?rev=785324&r1=785323&r2=785324&view=diff
==============================================================================
--- excalibur/site/developing/decomposing.html (original)
+++ excalibur/site/developing/decomposing.html Tue Jun 16 17:55:25 2009
@@ -1,74 +1,517 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>Apache Excalibur - Decomposing A System</title><style type="text/css" media="all">
- @import url("../style/maven-base.css");
-
- @import url("../style/maven-theme.css");</style><link rel="stylesheet" href="../style/print.css" type="text/css" media="print"></link><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta><meta name="author" content="Paul Hammant"></meta><meta name="email" content="hammant@apache.org"></meta><meta name="author" content="Berin Loritsch"></meta><meta name="email" content="bloritsch@apache.org"></meta></head><body class="composite"><div id="banner"><a href="http://www.apache.org/" id="organizationLogo"><img alt="The Apache Software Foundation" src="http://www.apache.org/images/asf-logo.gif"></img></a><a href="http://excalibur.apache.org/" id="projectLogo"><img alt="Apache Excalibur" src="http://excalibur.apache.org/logo.gif"></img></a><div class="clear"><hr></hr></div></div><div id="breadcrumbs"><div class="xright">
-
- <a href="../index.html">Home</a>
-
-
-
- <span class="separator">|</span>
-
-
- <a href="../fortress/index.html">Fortress</a>
-
-
-
- <span class="separator">|</span>
-
-
- <a href="../component-list.html">Components</a>
-
-
-
- <span class="separator">|</span>
-
-
- <a href="../containerkit.html">Containerkit</a>
- </div><div class="clear"><hr></hr></div></div><div id="leftColumn"><div id="navcolumn"><div id="menuEssentials"><h5>Essentials</h5><ul><li class="none"><a href="../index.html">Overview</a></li><li class="none"><a href="../mail-lists.html">Mailing Lists</a></li><li class="none"><a href="../svn.html">Subversion</a></li><li class="none"><a href="http://wiki.apache.org/excalibur/" class="externalLink" title="External Link">Wiki</a></li><li class="none"><a href="http://wiki.apache.org/excalibur/FrequentlyAskedQuestions" class="externalLink" title="External Link">FAQ</a></li><li class="none"><a href="http://excalibur.apache.org/apidocs/" class="externalLink" title="External Link">Javadocs</a></li><li class="none"><a href="http://excalibur.apache.org/download.cgi" class="externalLink" title="External Link">Download</a></li><li class="none"><a href="../issue-tracking.html">Issue Tracking</a></li><li class="collapsed"><a href="../misc.html">Miscellaneous</a></li></ul></div><div
id="menuFortress"><h5>Fortress</h5><ul><li class="none"><a href="../fortress/index.html">Overview</a></li><li class="none"><a href="../fortress/features.html">Features Oriented</a></li><li class="none"><a href="../fortress/getting-started.html">Getting Started</a></li><li class="none"><a href="../fortress/using-meta-info.html">Using Meta Info</a></li><li class="none"><a href="../fortress/cli.html">CLI</a></li><li class="none"><a href="../fortress/swing.html">Swing</a></li><li class="none"><a href="../fortress/servlet.html">Servlet</a></li><li class="none"><a href="../lifecycle/index.html">Lifecycle Extensions</a></li><li class="none"><a href="../fortress/design-notes.html">Design Notes</a></li></ul></div><div id="menuFramework"><h5>Framework</h5><ul><li class="collapsed"><a href="../framework/index.html">Documentation</a></li><li class="expanded"><a href="../developing/index.html">Developing</a><ul><li class="none"><a href="../developing/authors.html">Authors</a></li><li cl
ass="none"><a href="../developing/introduction.html">Introduction</a></li><li class="none"><strong><a href="../developing/decomposing.html">Decomposition</a></strong></li><li class="none"><a href="../developing/framework.html">Avalon Framework</a></li><li class="none"><a href="../developing/implementing.html">Using the framework</a></li><li class="none"><a href="../developing/compatiblity.html">Compatibility with Avalon</a></li><li class="none"><a href="../developing/strategies.html">Development Strategies</a></li><li class="none"><a href="../developing/conclusion.html">Conclusion</a></li></ul></li></ul></div><div id="menuComponents"><h5>Components</h5><ul><li class="none"><a href="../component-list.html">Overview</a></li><li class="collapsed"><a href="../sourceresolve/index.html">Sourceresolver</a></li><li class="collapsed"><a href="../store/index.html">Store</a></li><li class="none"><a href="../thread.html">Thread</a></li><li class="collapsed"><a href="../xmlutil/index.htm
l">XMLUtil</a></li></ul></div><div id="menuContainerkit"><h5>Containerkit</h5><ul><li class="none"><a href="../containerkit.html">Overview</a></li><li class="collapsed"><a href="../instrument/index.html">Instrument</a></li><li class="collapsed"><a href="../lifecycle/index.html">Lifecycle</a></li><li class="none"><a href="../logger.html">Logger</a></li></ul></div><div id="menuDeprecated_Materials"><h5>Deprecated Materials</h5><ul><li class="none"><a href="../deprecation.html">Overview</a></li><li class="expanded"><a href="../deprecation.html">Old Documentation</a><ul><li class="none"><a href="../component.html">ECM</a></li><li class="collapsed"><a href="../event/index.html">Event</a></li><li class="none"><a href="../configuration.html">Configuration</a></li></ul></li></ul></div><div id="menuThanks"><h5>Thanks</h5><ul><li class="none"><a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="External Link">to our sponsors!</a></li><li class="none"><a h
ref="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="External Link">Sponsor the ASF</a></li></ul></div><div id="menuProject_Documentation"><h5>Project Documentation</h5><ul><li class="none"><a href="../index.html">About Apache Excalibur</a></li><li class="collapsed"><a href="../project-info.html">Project Info</a></li><li class="collapsed"><a href="../maven-reports.html">Project Reports</a></li><li class="none"><a href="http://maven.apache.org/development-process.html" class="externalLink" title="External Link">Development Process</a></li></ul></div></div></div><div id="bodyColumn"><div class="contentBox"><div class="section"><a name="Decomposing_A_System"></a><h2>Decomposing A System</h2><p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+
+
+
+
+
+
+
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <title>Excalibur - Decomposing A System</title>
+ <style type="text/css" media="all">
+ @import url("../css/maven-base.css");
+ @import url("../css/maven-theme.css");
+ @import url("../css/site.css");
+ </style>
+ <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
+ <meta name="author" content="Paul Hammant" />
+ <meta name="author" content="Berin Loritsch" />
+ </head>
+ <body class="composite">
+ <div id="banner">
+ <span id="bannerLeft">
+
+ Excalibur
+
+ </span>
+ <div class="clear">
+ <hr/>
+ </div>
+ </div>
+ <div id="breadcrumbs">
+
+
+
+
+
+
+
+
+ <div class="xleft">
+ Last Published: 2009-06-16
+ </div>
+ <div class="xright"> <a href="../index.html">Home</a>
+ |
+ <a href="../fortress/index.html">Fortress</a>
+ |
+ <a href="../component-list.html">Components</a>
+ |
+ <a href="../containerkit.html">Containerkit</a>
+
+
+
+
+
+
+
+
+ </div>
+ <div class="clear">
+ <hr/>
+ </div>
+ </div>
+ <div id="leftColumn">
+ <div id="navcolumn">
+
+
+
+
+
+
+
+
+ <h5>Essentials</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../index.html">Overview</a>
+ </li>
+
+ <li class="none">
+ <a href="../mail-lists.html">Mailing Lists</a>
+ </li>
+
+ <li class="none">
+ <a href="../svn.html">Subversion</a>
+ </li>
+
+ <li class="none">
+ <a href="http://wiki.apache.org/excalibur/" class="externalLink">Wiki</a>
+ </li>
+
+ <li class="none">
+ <a href="http://wiki.apache.org/excalibur/FrequentlyAskedQuestions" class="externalLink">FAQ</a>
+ </li>
+
+ <li class="none">
+ <a href="http://excalibur.apache.org/apidocs/" class="externalLink">Javadocs</a>
+ </li>
+
+ <li class="none">
+ <a href="http://excalibur.apache.org/download.cgi" class="externalLink">Download</a>
+ </li>
+
+ <li class="none">
+ <a href="../issue-tracking.html">Issue Tracking</a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../misc.html">Miscellaneous</a>
+ </li>
+ </ul>
+ <h5>Fortress</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../fortress/index.html">Overview</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/features.html">Features Oriented</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/getting-started.html">Getting Started</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/using-meta-info.html">Using Meta Info</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/cli.html">CLI</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/swing.html">Swing</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/servlet.html">Servlet</a>
+ </li>
+
+ <li class="none">
+ <a href="../lifecycle/index.html">Lifecycle Extensions</a>
+ </li>
+
+ <li class="none">
+ <a href="../fortress/design-notes.html">Design Notes</a>
+ </li>
+ </ul>
+ <h5>Framework</h5>
+ <ul>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../framework/index.html">Documentation</a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <li class="expanded">
+ <a href="../developing/index.html">Developing</a>
+ <ul>
+
+ <li class="none">
+ <a href="../developing/authors.html">Authors</a>
+ </li>
+
+ <li class="none">
+ <a href="../developing/introduction.html">Introduction</a>
+ </li>
+
+ <li class="none">
+ <strong>Decomposition</strong>
+ </li>
+
+ <li class="none">
+ <a href="../developing/framework.html">Avalon Framework</a>
+ </li>
+
+ <li class="none">
+ <a href="../developing/implementing.html">Using the framework</a>
+ </li>
+
+ <li class="none">
+ <a href="../developing/compatiblity.html">Compatibility with Avalon</a>
+ </li>
+
+ <li class="none">
+ <a href="../developing/strategies.html">Development Strategies</a>
+ </li>
+
+ <li class="none">
+ <a href="../developing/conclusion.html">Conclusion</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h5>Components</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../component-list.html">Overview</a>
+ </li>
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../sourceresolve/index.html">Sourceresolver</a>
+ </li>
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../store/index.html">Store</a>
+ </li>
+
+ <li class="none">
+ <a href="../thread.html">Thread</a>
+ </li>
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../xmlutil/index.html">XMLUtil</a>
+ </li>
+ </ul>
+ <h5>Containerkit</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../containerkit.html">Overview</a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../instrument/index.html">Instrument</a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../lifecycle/index.html">Lifecycle</a>
+ </li>
+
+ <li class="none">
+ <a href="../logger.html">Logger</a>
+ </li>
+ </ul>
+ <h5>Deprecated Materials</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../deprecation.html">Overview</a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <li class="expanded">
+ <a href="../deprecation.html">Old Documentation</a>
+ <ul>
+
+ <li class="none">
+ <a href="../component.html">ECM</a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <li class="collapsed">
+ <a href="../event/index.html">Event</a>
+ </li>
+
+ <li class="none">
+ <a href="../configuration.html">Configuration</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h5>Thanks</h5>
+ <ul>
+
+ <li class="none">
+ <a href="../../foundation/thanks.html">to our sponsors!</a>
+ </li>
+
+ <li class="none">
+ <a href="../../foundation/sponsorship.html">Sponsor the ASF</a>
+ </li>
+ </ul>
+ <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
+ <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img>
+ </a>
+
+
+
+
+
+
+
+
+ </div>
+ </div>
+ <div id="bodyColumn">
+ <div id="contentBox">
+ <div class="section"><h2><a name="Decomposing_A_System"></a>Decomposing A System</h2>
+<p>
We will use a hypothetical business server to demonstrate
how to identify services and Components. After we define some
services that are used in the system, we will take one of those
services and define the different components needed by the
service. My goal is to pass on some concepts that will help
you define your system in manageable pieces.
- </p></div><div class="section"><a name="System_Analysis_--_Identifying_Components"></a><h2>System Analysis -- Identifying Components</h2><p>
+ </p>
+</div>
+<div class="section"><h2><a name="System_Analysis_--_Identifying_Components"></a>System Analysis -- Identifying Components</h2>
+<p>
While it is beyond the scope of this presentation to provide
a full-blown methodology, I do want to provide some pointers.
We will start with the implementation oriented definition of
Components and Services, and then provide a practical definition.
- </p><table class="bodyTable"><tr class="b"><th>Component</th></tr><tr class="a"><td>
+ </p>
+<table class="bodyTable"><tr class="a"><th>Component</th>
+</tr>
+<tr class="b"><td>
A Component is the combination of a work interface, and the
implementation of that interface. Its use provides a looser
coupling between objects, allowing the implementation to
change independently of its clients.
- </td></tr></table><table class="bodyTable"><tr class="b"><th>Service</th></tr><tr class="a"><td>
+ </td>
+</tr>
+</table>
+<table class="bodyTable"><tr class="a"><th>Service</th>
+</tr>
+<tr class="b"><td>
A Service is a group of one or more Components that provide
a complete solution. Examples of a Service are protocol
handlers, job schedulers, and authentication and authorization
services.
- </td></tr></table><p>
+ </td>
+</tr>
+</table>
+<p>
While these definitions provide a starting place, they don't
give the whole picture. In order to decompose a system (defined
as a group of facilities that comprise a project) into the
necessary parts, I advocate a top-down approach. That way you
will avoid being bogged down in details before you know what the
different facilities are.
- </p><div class="subsection"><a name="Determining_the_Scope_of_Your_Project"></a><h3>Determining the Scope of Your Project</h3><p>
+ </p>
+<div class="section"><h3><a name="Determining_the_Scope_of_Your_Project"></a>Determining the Scope of Your Project</h3>
+<p>
You always have to start out with a general idea of what your
project is supposed to accomplish. In the commercial world, the
initial statement of work accomplishes this. In the open source
world, this is usually accomplished by an idea or brainstorming
session. I can't stress enough the importance of having a high
level view of the project.
- </p><p>
+ </p>
+<p>
Obviously, a large project will be comprised of many different
services, and a small project will only have one or two. If you
start to feel a bit overwhelmed, just remind yourself that a large
project is really an umbrella for a bunch of smaller projects.
Eventually, you will get to the point where you will be able to
comprehend the big picture.
- </p></div></div><div class="section"><a name="Statement_of_Work:_Business_Server"></a><h2>Statement of Work: Business Server</h2><p>
+ </p>
+</div>
+</div>
+<div class="section"><h2><a name="Statement_of_Work:_Business_Server"></a>Statement of Work: Business Server</h2>
+<p>
The Business Server is a hypothetical project. For the purpose
of our discussion, its function is to handle sales orders,
automatically bill customers, and manage the inventory control.
@@ -79,7 +522,10 @@
at the factory or warehouse. The business server will be a
distributed system, and each server will communicate with others
via a messaging service.
- </p></div><div class="section"><a name="Finding_the_Services"></a><h2>Finding the Services</h2><p>
+ </p>
+</div>
+<div class="section"><h2><a name="Finding_the_Services"></a>Finding the Services</h2>
+<p>
We will use the Business Server Project to discover the services.
Considering the overly broad statement of work, we can immediately
begin to see some services defined in the description of the
@@ -92,46 +538,58 @@
probably put a wrapper so that we still have a specific way of
interacting with the commercial product. The implementing company
will build the majority of the services.
- </p><div class="subsection"><a name="Explicit_Services"></a><h3>Explicit Services</h3><p>
+ </p>
+<div class="section"><h3><a name="Explicit_Services"></a>Explicit Services</h3>
+<p>
We can quickly derive a number of services from the statement
of work. Our work is not done after this initial analysis,
because the definition of some services requires the existence
of other services.
- </p><div class="subsection"><a name="Transaction_Processing_Service"></a><h3>Transaction Processing Service</h3><p>
- The statement of work specifies that "Sales orders have to be
- processed as they come in". This means we need to have a
+ </p>
+<div class="section"><h3><a name="Transaction_Processing_Service"></a>Transaction Processing Service</h3>
+<p>
+ The statement of work specifies that "Sales orders have to be
+ processed as they come in". This means we need to have a
mechanism of receiving sales requests and automatically process
them. This is similar to the way web servers work. They
receive a request for a resource, process it, and return a
result (e.g. the HTML page). This is known as Transaction
Processing.
- </p><p>
+ </p>
+<p>
To be fair, there are different types of transactions. The
generic transaction service will most likely have to be broken
- down into something more specific like a "Sales Order Processor".
+ down into something more specific like a "Sales Order Processor".
The approach has to do with how generic you make your service.
There is a balance between usability and reusability. The more
generic a service is, the more reusable it is. Usually it is
also more difficult to comprehend.
- </p></div><div class="subsection"><a name="Scheduling_Service"></a><h3>Scheduling Service</h3><p>
+ </p>
+</div>
+<div class="section"><h3><a name="Scheduling_Service"></a>Scheduling Service</h3>
+<p>
There are a couple of instances where an event must be scheduled
for a specified amount of time after a transaction. In addition,
the inventory control processes need to kick off supply orders on
- a periodic basis. Because the statement of work states "server
+ a periodic basis. Because the statement of work states "server
automatically bills the customers 30 days after the sales order
- is filled" we need a scheduling service. The good news is that
+ is filled" we need a scheduling service. The good news is that
Avalon Cornerstone provides one for us so we don't have to create
our own.
- </p></div><div class="subsection"><a name="Messaging_Service"></a><h3>Messaging Service</h3><p>
- The statement of work specifies that "each server will
- communicate via a messaging service" in our distributed system.
+ </p>
+</div>
+<div class="section"><h3><a name="Messaging_Service"></a>Messaging Service</h3>
+<p>
+ The statement of work specifies that "each server will
+ communicate via a messaging service" in our distributed system.
Let's face it, sometimes customers want a specific product or
method they want to use. The messaging service is a prime
example of using another company's product. Most likely, we
would use Java Messaging Service (JMS) to interface with the
Messaging Service. Since JMS is a standard, it is unlikely
that the interface will change any time soon.
- </p><p>
+ </p>
+<p>
In practical experience, a well-designed message oriented system
will scale better than object oriented systems (like EJB). One
reason for better scalability is that messaging tends to have
@@ -139,38 +597,57 @@
it is easier to spread the load of message processing across all
servers instead of concentrating all the processing in a small
cluster of servers (or even just one server).
- </p></div><div class="subsection"><a name="Inventory_Control_Service"></a><h3>Inventory Control Service</h3><p>
+ </p>
+</div>
+<div class="section"><h3><a name="Inventory_Control_Service"></a>Inventory Control Service</h3>
+<p>
While this is not a classic server piece in textbooks, it is a
requirement of this system. The inventory control service
routinely monitors the records for what the factory or warehouse
has in stock, and triggers events when stock starts running out.
- </p></div></div><div class="subsection"><a name="Implied_Services"></a><h3>Implied Services</h3><p>
+ </p>
+</div>
+</div>
+<div class="section"><h3><a name="Implied_Services"></a>Implied Services</h3>
+<p>
Using experience with past systems, and further breaking down
other services will yield a number of services that the system
needs that wasn't specified. Due to space limitations, we will
avoid doing a full decomposition.
- </p><div class="subsection"><a name="Authentication_and_Authorization_Service"></a><h3>Authentication and Authorization Service</h3><p>
+ </p>
+<div class="section"><h3><a name="Authentication_and_Authorization_Service"></a>Authentication and Authorization Service</h3>
+<p>
The authentication and authorization service is not necessarily
specified in the statement of work -- but all business systems
must take security seriously. That means all clients of the system
must be authenticated, and every action of the user must be
authorized.
- </p></div><div class="subsection"><a name="Workflow_Automation_Service"></a><h3>Workflow Automation Service</h3><p>
+ </p>
+</div>
+<div class="section"><h3><a name="Workflow_Automation_Service"></a>Workflow Automation Service</h3>
+<p>
Workflow automation is a hot development area in enterprise
systems. If you don't use a third party workflow management
server, you will have to invent your own. Workflow automation
is generally the act of using a software system to route tasks
through a Company's business process. For more information,
view the Workflow Management Council's web page at
- <a href="http://www.wfmc.org" class="externalLink" title="External Link">http://www.wfmc.org</a>.
- </p></div><div class="subsection"><a name="Document_Repository_Service"></a><h3>Document Repository Service</h3><p>
- This definition of a "document repository" is very loosely
+ <a href="http://www.wfmc.org" class="externalLink">http://www.wfmc.org</a>.
+ </p>
+</div>
+<div class="section"><h3><a name="Document_Repository_Service"></a>Document Repository Service</h3>
+<p>
+ This definition of a "document repository" is very loosely
defined as the current state of information in a task. In
other words, when the company receives a purchase order, our
system needs to store and recall the purchase order information.
The same goes for billing and any other process in the system
from inventory to new customer requests.
- </p></div></div><div class="subsection"><a name="Summary"></a><h3>Summary</h3><p>
+ </p>
+</div>
+</div>
+<div class="section"><h3><a name="Summary"></a>Summary</h3>
+<p>
I hope that the examples of services for the Business Server
project will help you discover more. You will find that as you
go from higher levels of abstraction down to lower levels, you
@@ -182,7 +659,8 @@
you can change vendors later. Some services are actually multiple
services acting as one larger service. Some are already available
within Avalon Excalibur or Avalon Cornerstone.
- </p><p>
+ </p>
+<p>
One thing to keep in mind while discovering the services in a
system is that a service should be a high level sub-system. This
will help you define components using teams of analysts. Because
@@ -192,19 +670,27 @@
overlap. If you decide to do the parallel analysis, you should
come back together to identify common Components so that you can
reuse as much code as possible.
- </p><img src="../images/deployment.gif" alt=""></img></div></div><div class="section"><a name="Finding_Components"></a><h2>Finding Components</h2><p>
+ </p>
+<img src="../images/deployment.gif" /></div>
+</div>
+<div class="section"><h2><a name="Finding_Components"></a>Finding Components</h2>
+<p>
We will use the Document Repository Service mentioned already for the
process of identifying the proper Components. For the sake of our
conversation, we will now state the requirements of the Document
Repository Service. The repository will use a database for persistent
storage, identify and authorize clients, and cache documents in memory.
- </p><div class="subsection"><a name="Practical_Definition_of_Components"></a><h3>Practical Definition of Components</h3><p>
- When we talk about components, you have to think in terms of "What
- facilities does my service need to operate?" Avalon was conceived
+ </p>
+<div class="section"><h3><a name="Practical_Definition_of_Components"></a>Practical Definition of Components</h3>
+<p>
+ When we talk about components, you have to think in terms of "What
+ facilities does my service need to operate?" Avalon was conceived
with the concept of <em>casting</em> your system. The
developer of the system would come up with a list of responsibilities
for the Component known as its <em>role</em>.
- </p><div class="subsection"><a name="What_is_a_Role_"></a><h3>What is a Role?</h3><p>
+ </p>
+<div class="section"><h3><a name="What_is_a_Role"></a>What is a Role?</h3>
+<p>
The concept of roles comes from the theater. A play, musical, or
movie will have a certain number of roles that actors play. Although
there never seems to be a shortage of actors, there are a finite
@@ -213,17 +699,19 @@
script determines how you interact with the Component. Think of the
different roles in your system, and you will have your
<em>cast</em> of Components so to speak.
- </p><p>
+ </p>
+<p>
A role is the contract for a type of component. For example, our
Document Repository Service needs to interact with a database.
- Avalon Excalibur defines a Component that satisfies the role "Data
- Source". Excalibur includes two different Components that satisfy
+ Avalon Excalibur defines a Component that satisfies the role "Data
+ Source". Excalibur includes two different Components that satisfy
that role, depending on the setting our Service will be living in;
however, they both satisfy the same contracts. The majority of
Avalon based systems will only use one active Component for each
role. The script is the work interface: the interface with which
other components interact.
- </p><p>
+ </p>
+<p>
There are specific contracts that you must define and keep in mind
when you specify interfaces for your Components. The contracts
specify what users of the Component must provide, and what the
@@ -232,25 +720,33 @@
storage Component and a permanent storage Component. When the
interface and contract are defined, you can work on your
implementation.
- </p></div></div><div class="subsection"><a name="What_is_a_good_candidate_for_a_Component_"></a><h3>What is a good candidate for a Component?</h3><p>
+ </p>
+</div>
+</div>
+<div class="section"><h3><a name="What_is_a_good_candidate_for_a_Component"></a>What is a good candidate for a Component?</h3>
+<p>
We have already identified four possibilities for Components within
our Document Repository Service: DataSourceComponent (from Excalibur),
Cache, Repository, and Guardian. You should look for roles with a high
likelihood of multiple implementations that need to inter-operate
seamlessly.
- </p><p>
+ </p>
+<p>
Using that example, you will discover several instances where you need
replaceable facilities. Most of the time, you will only be using one
implementation of the facility, but you need the ability to upgrade it
independently of the rest of the system. Other times, you will need
alternate implementations due to environmental issues. For example,
- the "Data Source" that Excalibur defined will usually handle all the
+ the "Data Source" that Excalibur defined will usually handle all the
JDBC Connection pooling itself-but sometimes you want to take advantage
of that facility built into a Java 2 Enterprise Edition (J2EE) server.
- Excalibur solves this by having a "Data Source" that directly pools and
+ Excalibur solves this by having a "Data Source" that directly pools and
manages the JDBC connections, and one that uses Java's Naming and
Directory Interface (JNDI) to get the specified connection.
- </p></div><div class="subsection"><a name="What_is_not_a_good_Component_"></a><h3>What is not a good Component?</h3><p>
+ </p>
+</div>
+<div class="section"><h3><a name="What_is_not_a_good_Component"></a>What is not a good Component?</h3>
+<p>
People who are used to JavaBeans tend to implement everything as a
JavaBean. This means everything from data modeling to transaction
processing. If you used this approach with Components, you might end
@@ -259,7 +755,8 @@
pulls data from another resource, but the data should remain distinct
as data. An example of this philosophy in Avalon Excalibur is the
fact that the Connection is not a Component.
- </p><p>
+ </p>
+<p>
Another example could be the Guardian Component we specified earlier.
It could be argued that the logic involved in the Guardian is so
specific to the Document Repository Service that it could not be used
@@ -275,11 +772,16 @@
example of the Guardian Component and the Repository Component, we
could argue that our Guardian is so specific to the Repository, that it
is not implemented as a Component.
- </p></div><div class="subsection"><a name="Decomposing_the_Document_Repository_Service"></a><h3>Decomposing the Document Repository Service</h3><p>
+ </p>
+</div>
+<div class="section"><h3><a name="Decomposing_the_Document_Repository_Service"></a>Decomposing the Document Repository Service</h3>
+<p>
We will list the Components that we are going to implement with a
description of their roles, the rationale, and their origination (if
the component already exists).
- </p><div class="subsection"><a name="DocumentRepository"></a><h3>DocumentRepository</h3><p>
+ </p>
+<div class="section"><h3><a name="DocumentRepository"></a>DocumentRepository</h3>
+<p>
The DocumentRepository is the parent Component of the whole service.
In Avalon, services are implemented as Blocks, which are a specific
kind of Component. The Block must have a work interface that extends
@@ -287,31 +789,73 @@
Avalon's Component interface. Please note that Block and Service are
interfaces that are part of Avalon Phoenix. In the end, a Service is
still technically just a specific type of Component.
- </p><p>
+ </p>
+<p>
The DocumentRepository is our method of getting Document objects from
persistent storage. It interacts with the other Components in the
service to provide security, functionality, and speed. This
particular DocumentRepository will connect to a database and employ
the logic to build the Document objects internally.
- </p></div><div class="subsection"><a name="DataSourceComponent"></a><h3>DataSourceComponent</h3><p>
+ </p>
+</div>
+<div class="section"><h3><a name="DataSourceComponent"></a>DataSourceComponent</h3>
+<p>
The DataSourceComponent is supplied by Avalon Excalibur. It is our
method of retrieving valid JDBC Connection objects for our use.
- </p></div><div class="subsection"><a name="Cache"></a><h3>Cache</h3><p>
+ </p>
+</div>
+<div class="section"><h3><a name="Cache"></a>Cache</h3>
+<p>
The Cache is a short-term memory-based storage facility. The
DocumentRepository will use it to store Document objects referenced
by a hash algorithm. In order to promote the reusability of the
Cache Component, the stored object must implement a Cacheable
interface.
- </p></div><div class="subsection"><a name="Guardian"></a><h3>Guardian</h3><p>
+ </p>
+</div>
+<div class="section"><h3><a name="Guardian"></a>Guardian</h3>
+<p>
The Guardian Component is used to manage permissions based on the
Principal. The Guardian will load its permission sets from a
database. The Guardian will use the standard Java security model to
enforce access to the specific Document objects.
- </p></div></div><div class="subsection"><a name="Summary"></a><h3>Summary</h3><p>
+ </p>
+</div>
+</div>
+<div class="section"><h3><a name="Summary"></a>Summary</h3>
+<p>
At this point, you should have an idea of what makes a good Component.
The examples describe all the Components that will be in the Document
Repository Service, with a brief summary of what they will do. A quick
glance through the list supports the approach of only implementing
facilities as Components -- not data. At this point, you should be able
to determine what components your services need to operate.
- </p></div></div></div></div><div class="clear"><hr></hr></div><div id="footer"><div class="xright">© 1997-2007, The Apache Software Foundation</div><div class="clear"><hr></hr></div></div></body></html>
\ No newline at end of file
+ </p>
+</div>
+</div>
+
+ </div>
+ </div>
+ <div class="clear">
+ <hr/>
+ </div>
+ <div id="footer">
+ <div class="xright">©
+ 2009
+
+ The Apache Software Foundation
+
+
+
+
+
+
+
+
+ </div>
+ <div class="clear">
+ <hr/>
+ </div>
+ </div>
+ </body>
+</html>
---------------------------------------------------------------------
To unsubscribe, e-mail: scm-unsubscribe@excalibur.apache.org
For additional commands, e-mail: scm-help@excalibur.apache.org