According to the three amigos "architecture is the set of significant decisions about the organization of a software system." Here are some of the more significant decisions that have been made in the development of Roller. Some are questionable, some are bad and have been reversed, and some, as longtime followers of Roller internals will note, are new.
Presentation Layer
- Editor UI will be implemented as Struts actions and JSP pages.
- JSP pages will use Struts tags, JSTL wherever possible, and custom tags as needed.
- Header and footer includes will be used (rather than Struts Tiles).
- JSP custom tags are to be preferered over JSP Scriplets.
- HTML Forms will be implemented with Struts form tags.
- Struts form tags will be generated via XDoclet from business layer POJOs.
- Each Struts form bean can copyTo a POJO or copyFrom a POJO
- copyTo POJO methods will only copy primitives (String, Boolean, boolean, Integer, int, etc.).
- Weblog pages and RSS feeds will be implemented via Velocity templates.
- Users will use Velocity templates to define pages of weblog.
- Weblog page macros will be implemented as Veloci-Macros.
- Deployment descriptors
- struts-config.xml will be generated by XDoclet.
- web.xml and roller.tld will be generated by XDoclet.
- Interface with Business Layer
- Presentation Layer will depend on Business Layer via interfaces only.
- Performance
- Weblog pages and RSS feeds will be cached via Servlet Filter version of OSCache.
- RSS feeds will obey HTTP IF-MODIFIED-SINCE header.
- Main page will be cached via OSCache custom JSP taga
- Bad decision, reversed: Struts form beans will each wrap a POJO.
- Bad decision, not yet fully reversed: Editor UI will be implemented via large grained custom JSP tags.
Business Layer
- Business Layer will be defined by a set of interfaces.
- Business Layer objects will be implemented as hand-coded POJOs.
- Business Layer will be Presentation Layer and persistence engine independent
- Business Layer will not depend on presentation APIs (eg. Struts, Servlet API).
- Business Layer will use a Persistence Strategy interface
- Persistence strategy will be implemented for both Hibernate and Castor.
- Hibernate and Castor mapping files will be generated by XDoclet from POJOs.
- Bad decision, reversed: POJOs will be generated by EJBDoclet from abstract EJB bean classes.
- Bad decision, reversed: Each Business Layer method will open, commit or rollback, and close it's own persistence session.
Persistence Layer
- Open Session in View pattern will be used to ensure maximum of one persistence session per request.
- At the start of each request, persistence session will be opened via Servlet Filter.
- At the end of each request, persistence session will be rolled-back and closed via Servlet Filter.
- Persistence Layer actions must exlicitly commit changes.
- Persistence sessions will be managed via Thread Local Storage (similar to Thread Local Session).
- Load object by ID will return null if object not found.
Dave, your wiki text isn't rendering correctly in the RSS feed. I'm seeing the wiki format not readable text. For example, your link displays as
I'm pretty sure this isn't what you want.
Posted by Jeff Duska on November 17, 2003 at 08:22 PM EST #
Posted by Dave Johnson on November 17, 2003 at 08:32 PM EST #
Posted by jimmy on May 05, 2011 at 11:12 PM EDT #