Changeset 14645

Show
Ignore:
Timestamp:
07/08/10 01:30:47 (2 months ago)
Author:
dkhaywood
Message:

more on docs and site

Location:
framework/trunk/plugins/src/site
Files:
2 added
2 modified

Legend:

Unmodified
Added
Removed
  • framework/trunk/plugins/src/site/apt/index.apt

    r14622 r14645  
    11 
    2 Plugins 
     2Viewers and Persistors 
    33  
    4  Naked Objects has a pluggable architecture, defining a set of APIs that can be used to customize its behaviour. 
    5  The principle plugin  
    6  to customize its behaviour: 
     4 Naked Objects can be thought of as a {{{http://alistair.cockburn.us/Hexagonal+architecture}hexagonal architecture}}, with  
     5 viewers exposing the domain objects to the end user, and persistors taking responsibility for persisting those objects 
     6 over time: 
    77  
     8[./images/HexagonalArchitectureOverview.png] Naked Objects viewers and persistors 
     9 
     10 [] 
     11   
     12 The framework defines APIs and implementations for both of these plugin types:  
     13   
    814 * viewer 
    915  
    10    The viewer mechanism provides different ways for domain objects to be rendered as an OOUI.  For desktop-based 
    11    viewers the framework provides a <<<ViewerInstaller>>> API; alternatively the viewer can use its own mechanism 
    12    to get started (eg as a webapp) and then simply bootstrap the Naked Objects runtime with a couple of lines of code. 
     16   The viewer mechanism provides different ways for domain objects to be rendered as an object-oriented UI.  For desktop-based 
     17   viewers the framework provides a <<<NakedObjectsViewerInstaller>>> API, defined in {{{../core/runtime/index.html}runtime}} module. 
     18   Implementations are provided for the {{{./dnd-viewer/index.html}DnD viewer}} and for the {{{./html-viewer/index.html}HTML viewer}}. 
    1319    
    14  * object store (aka persistor) 
     20   Alternatively the viewer can use its own mechanism to get started (eg as a webapp) and then simply bootstrap the Naked Objects runtime  
     21   with a couple of lines of code.  This is the technique used by the {{{./scimpi/index.html}Scimpi}} webapp viewer.  It's also the 
     22   approach used by two of the sister projects (the {{{http://wicketobjects.sourceforge.net}Wicket Objects}} webapp viewer, and the 
     23   {{{http://restful.sourceforge.net}Restful Objects}} webapp viewer). 
     24    
     25 * persistor (aka object store) 
    1526  
    16    The <<<ObjectStore>>> API provides different ways for domain objects to be persisted.  The {{{../core/index.html}core}} 
    17    framework provides only an in-memory object store, suitable for prototyping and testing only.  The plugins provide 
    18    a number of other implementations, as do the {{{http://starobjects.org}sister projects}}. 
     27   The <<<ObjectStore>>> API allows the framework to persist domain objects using different technologies.  The API is defined 
     28   in {{{../core/runtime/index.html}runtime}} module, with just an in-memory object store provided for prototyping and testing only. 
     29   The plugins provide a number of other implementations: a simple {{{./xml-persistor/index.html}XML}} persistor (for single user apps), a 
     30   {{{./sql-persistor/index.html}SQL}} persistor to persist directly to RDBMS (using JDBC), and a {{{./berkeley-persistor/index.html}BerkeleyDB}} persistor. 
     31   In addition, the {{{http://jpaobjects.sourceforge.net}JPA Objects}} sister projects uses JPA to persist to an RDBMS. 
    1932  
    2033 [] 
    2134  
    22  There are a number of other more fine-grained APIs that can also be implemented if required: 
     35Other APIs 
     36  
     37 As well as viewers and plugins, the framework provides a number of other more fine-grained APIs: 
    2338  
    2439 * authentication & authorization 
    2540  
    26    Out of the box Naked Objects provides a very simple file-based authentication and authorization. 
    27    Both of these can be substituted. 
     41   Naked Objects applications support authentication ("who are you"?) and authorization ("what can you do?"). 
     42   This allows the set of functionality to be restricted based upon the user's role, with no security knowledge 
     43   needing to be embedded within the domain objects.  The API is defined in {{{../core/runtime/index.html}runtime}},  
     44   along with two implementations, one file-based and one using LDAP. 
    2845  
    2946 * metamodel facets 
     
    3148   The Naked Objects metamodel is built up using a collection of <<<FacetFactory>>>s.  These are used to 
    3249   identify the classes and class members, and to decorate these class members with semantics.  It is 
    33    easy to write new <<<FacetFactory>>>s to support new programming conventions or, indeed, new languages 
    34    (see the {{{http://groovyobjects.sourceforge.net}Groovy Objects}} sister project). 
     50   easy to write new <<<FacetFactory>>>s to support new programming conventions or, indeed, new languages. 
     51    
     52   The <<<FacetFactory>>> API is defined in {{{../core/metamodel/index.html}metamodel}} module, along with implementations 
     53   to support the Java language.  The {{{http://groovyobjects.sourceforge.net}Groovy Objects}} sister project 
     54   provides implementations to allow Naked Objects to support domain objects written in {{{http://groovy.codehaus.org}Groovy}}. 
    3555  
    3656 * remoting transport protocol 
    3757  
     58   Client/server deployments require a transport protocol for network interactions.  The core API and a  
     59   basic <<<java.net.Socket>>> based implementation is defined in {{{../core/runtime/index.html}runtime}}.  
     60   An alternative HTTP-based implementation is available in {{{./http-remoting/index.html}http-remoting}}. 
     61  
    3862 * remoting marshalling mechanism 
    3963 
    40  * bytecode support 
    41   
     64   In addition to a transport, client/server remoting also requires a marshalling mechanism.  This is used to 
     65   "take apart" the domain objects and then reassemble them.  The core API and standard implementation for marshalling 
     66   is defined in {{{../core/runtime/index.html}runtime}}; an alternative Xstream-based implementation is available  
     67   in {{{./xstream-marshalling/index.html}xstream-marshalling}}. 
     68 
    4269 [] 
    4370  
    4471 The <plugins> module acts as the parent for the available plugins.  Note that plugins are versioned 
    45  separately from the main core framework. 
     72 separately from the main {{{../core/index.html}core}} framework. 
    4673  
  • framework/trunk/plugins/src/site/site.xml

    r14622 r14645  
    11<?xml version="1.0" encoding="ISO-8859-1"?> 
    22<project> 
    3         <bannerLeft> 
     3 
     4        <bannerLeft> 
    45                <name>Naked Objects</name> 
    56                <src>../images/banner-left.png</src> 
    6                 <href>http://www.nakedobjects.org/index.html</href> 
     7                <href>../index.html</href> 
    78        </bannerLeft> 
    89 
    910        <bannerRight> 
    10                 <src>../images/sflogo.gif</src> 
     11                <src>../images/sflogo.png</src> 
    1112                <href>http://sourceforge.net/projects/nakedobjects</href> 
    1213        </bannerRight> 
    13    
    14   <body> 
    15         <breadcrumbs> 
    16                 <item name="Naked Objects" href="../index.html" /> 
    17                 <item name="Plugins" href="index.html" /> 
    18         </breadcrumbs> 
    1914 
    20     <menu name="Plugins"> 
    21         <item name="About" href="index.html"/> 
    22     </menu> 
    23    
    24   </body> 
     15        <body> 
     16                <breadcrumbs> 
     17                        <item name="Naked Objects" href="../index.html" /> 
     18                        <item name="Plugins" href="index.html" /> 
     19                </breadcrumbs> 
     20 
     21                <menu name="Plugins"> 
     22                        <item name="About" href="index.html" /> 
     23                </menu> 
     24 
     25                <!-- 
     26                <menu name="Documentation"> 
     27                </menu> 
     28                --> 
     29 
     30                <!-- 
     31                <menu name="For Contributors"> 
     32                </menu> 
     33                --> 
     34 
     35        </body> 
    2536</project>