来自开放百科 - 灰狐
2007年11月27日 (二) 14:23Allen (讨论 | 贡献)的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到: 导航, 搜索
Spago is a J2EE Framework: a reusable, semi-complete infrastructure to customize for developing your applications. A J2EE framework doesn't include user functionalities, but is a platform for developing distributed multi-tier applications, based on modular components. It uses several technologies, including JDBC, Enterprise Java Beans, Java Servlets, Java Server Pages and XML technologies. This allows the developer to create an Enterprise Application that is portable between platforms and scalable, while integrating with several legacy technologies.

Spago was developed by a community of architects and developers, each one with diverse knowledge and experience: the result is a framework providing multichannel and integration services towards external infrastructures. With Spago you can write an application integrating existing infrastructures (like: security, document management, workflow) and publishing services on different channels.

Spago Architecture

Spago implements the Model-View-Controller architectural pattern, organized by three tiers:

  • Presentation tier : HTTP to web container, SOAP, WAP, EJB, HTTP to portlet container
  • Business tier : controls, elaborations
  • Integration tier towards data source or transactional services.

Front Controllers act with the following collaborative objects:

  • Adapter - takes responsibility for acquiring request data from a specific channel, transforming request parameters into a format compliant with the Model module, and for choosing the correct view. It also makes the binding of conversational context in the specific container.
  • Dispatcher - takes responsibility for identifying one of the supported ways to carry out business logic, and for locating the right coordinator.
  • Coordinator - takes responsibility for coordinating business logic execution.
  • Business Factory - takes responsibility for retrieving rights references to business objects cooperating in the request execution.

Available adapters are:

  • AdapterHTTP (HTML/HTTP) - a servlet to manage client HTTP requests, arising from a browser or a WAP device
  • AdapterSOAP (XML/HTTP) - it is a component, stored as SOAP end-point, to manage requests arising from a SOAP client
  • AdapterEJB (XML/IOOP) - it is a statefull session bean to manage requests arising from IIOP client
  • AdapterJMS (XML/JMS) - it is a message driven bean to manage requests sent as JMS messages

default dispatchers are:

  • ActionDispatcher: - which verifies that business logic acts via actions: every business object corresponds to a request. The service coordinator is ActionCoordinator, which obtains action references from the ActionFactory.
  • ModuleDispatcher: - which verifies that business logic acts via modules: more cooperating business objects correspond to a request. The service coordinator is ModuleCoordinator which obtains module references from the ModuleFactory. A workflow describe the module's cooperation logic.


  • Multichannel : using Spago you can easily dispatch your services to different channels: HTTP, WAP, SOAP, EJB
  • Modules dispatching : more complex than action dispatching, you can use it for high code reuse. It's a very adaptable way of coding
  • Publishing : you can configure different means for information publishing, according to the channel you choose
  • Business logic distribution : you can configure service elaboration on a web container or EJB container: it's relevant for transaction process and doesn't impact on coding. You can choose the elaboration mode at deploy time
  • Navigation Handler : it is a specific service to simplify navigation at the cost of increasing session memory usage
  • Pagination : an easy pagination service using some forms and lists modules
  • XML Data : an object for an efficient elaboration (create/read/query of attributes or data) of XML data flows
  • Validation : you can validate form-data server side using a specific component. It supplies validation for standard data types and it's extensible with custom java validation classes