Changeset 14645
- Timestamp:
- 07/08/10 01:30:47 (2 months ago)
- Location:
- framework/trunk/plugins/src/site
- Files:
-
- 2 added
- 2 modified
-
apt/index.apt (modified) (2 diffs)
-
resources/images/HexagonalArchitectureOverview.odg (added)
-
resources/images/HexagonalArchitectureOverview.png (added)
-
site.xml (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
framework/trunk/plugins/src/site/apt/index.apt
r14622 r14645 1 1 2 Plugins2 Viewers and Persistors 3 3 4 Naked Objects has a pluggable architecture, defining a set of APIs that can be used to customize its behaviour.5 The principle plugin6 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: 7 7 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 8 14 * viewer 9 15 10 The viewer mechanism provides different ways for domain objects to be rendered as an OOUI. For desktop-based11 viewers the framework provides a <<< ViewerInstaller>>> API; alternatively the viewer can use its own mechanism12 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}}. 13 19 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) 15 26 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. 19 32 20 33 [] 21 34 22 There are a number of other more fine-grained APIs that can also be implemented if required: 35 Other APIs 36 37 As well as viewers and plugins, the framework provides a number of other more fine-grained APIs: 23 38 24 39 * authentication & authorization 25 40 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. 28 45 29 46 * metamodel facets … … 31 48 The Naked Objects metamodel is built up using a collection of <<<FacetFactory>>>s. These are used to 32 49 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}}. 35 55 36 56 * remoting transport protocol 37 57 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 38 62 * remoting marshalling mechanism 39 63 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 42 69 [] 43 70 44 71 The <plugins> module acts as the parent for the available plugins. Note that plugins are versioned 45 separately from the main coreframework.72 separately from the main {{{../core/index.html}core}} framework. 46 73 -
framework/trunk/plugins/src/site/site.xml
r14622 r14645 1 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 2 <project> 3 <bannerLeft> 3 4 <bannerLeft> 4 5 <name>Naked Objects</name> 5 6 <src>../images/banner-left.png</src> 6 <href> http://www.nakedobjects.org/index.html</href>7 <href>../index.html</href> 7 8 </bannerLeft> 8 9 9 10 <bannerRight> 10 <src>../images/sflogo. gif</src>11 <src>../images/sflogo.png</src> 11 12 <href>http://sourceforge.net/projects/nakedobjects</href> 12 13 </bannerRight> 13 14 <body>15 <breadcrumbs>16 <item name="Naked Objects" href="../index.html" />17 <item name="Plugins" href="index.html" />18 </breadcrumbs>19 14 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> 25 36 </project>
