ECMS – Phase 2 Presentation

batterycopperInternet και Εφαρμογές Web

12 Νοε 2013 (πριν από 3 χρόνια και 7 μήνες)

97 εμφανίσεις

Team S07

Agenda


Scope
of
project


Global
use case diagram


Analysis
use cases


High
Level design (
Software Architecture)


Prototype
challenges faced and remaining


Technical
risks
mitigated


Transition
strategy


Management
Issues / Change
Requests


Management
Progress and
Tracking


Plans
for implementation
phase


Scope of project


Global use case diagram


Analysis Use Case # 1


Architectural changes and motivations behind the
changes

SNo

Change

Motivation

1

Traditional user interface
approach left and adopted
Rich User Interface


Customer requirement of having
enhanced UI with less number of
steps to perform an operations.


Intuitive UI.


Non
-
Blocking

UI

experience.



2

EJB centric
approach has
dropped, and
Web centric
approach adopted.



Support to Rich UI framework,
which does most of the processing
by using client resources such as
browser cache and client machine
processor which doesn’t need the
container to manage heavy EJB


Instead an efficient and light
weight container required to
service
Rich UI
components

Software Architecture

High
Level design

-

Software Architecture

Software Components

Third party Software Component and
libraries

Vendor

License

JDK/ JRE

Oracle

Sun License (most of it also
under GPL)

Spring Framework 3.0

Spring Source

Spring libraries are licensed
under the terms of the
Apache
License, Version 2.0
.

Ext JS 4.0

Sencha

ExtJs 4.0 is available in dual
licensing scheme; however, we
have used it under the licensing
terms of
GNU GPL license v3
.

Hibernate Core

JBOSS Community

The GNU Lesser General Public
License version 2.1 (LGPLv2.1)

Tomcat 7.0

Apache

Apache Tomcat is developed
under the
Apache License
version 2

Dual layer MVC architecture

UI Layer Data Package

JSON Parsing

Following are key features of Spring framework, which ECMS
application enjoys:


Annotation Driven Architecture.


IOC or Dependency Injection by its Component Scanning mechanism,
which saves the time for instantiation of user objects.


Decoupling between Dispatcher and Mapping and View resolving
mechanism.


Aspect Oriented Programming model


Spring in
-
built role based security.


Spring MVC Architectural View



Servlet Container

Front Controller

(DispatcherServlet)

User Defined
Controller
(handleReque
st())

View Template
(JSTL/PDF/XLS)

Respon
se w
ith
Model

Reques
t

Render
response

Return

Request

Response

Data Base Layer

Prototype Stage Challenges

Prototype
challenges (1)

Sno

Challenges

Action Performed
/Solutions

1

To reduce the number of steps taken to
complete a user operation


Requirement of having many CRUD operation
with less number of steps, this is challenging
to achieve if we proceed with a traditional
approach of UI using HTML forms and pages

Used Rich UI components
from third party open
source libraries with
AJAX

to provide enhanced user
interface, which capable of
operations without leaving
a page

2

To reduce the latency time for a User action


For non
-
blocking user experience of ECMS UI,
it requires to reduce the latency time, which is
time taken between data packets leaves and
receive, from and by the client browser for
given user command

Ajax

communication
between UI and Service
layer to meet this challenge

Prototype challenges
(2)

Sno

Challenges

Action Performed /Solutions


3

Technological evolution (UI layer
framework)


Ext JS framework was revised in April
2011 from 3.x to 4.x which includes the
MVC architecture.

This change has
required

us to move to ExtJS 4.x and
refactor the design at Client Tier to
exhibit MVC architecture introduced
in ExtJS 4.x.


䕸瑊E‴⹸ d潣畭敮瑡瑩on f潬oow敤

and revised the UI layer structure,
integrated ExtJS 4.x together with
ExtJS 3.x, to not to disturb existing
modules.


N敷 f敡瑵t敳 d敶敬潰浥湴⁷楴h 捡牲y
潮 畳楮朠䕸瑊E 㐮4 慮a 䕸琳⹸ f敡瑵t敳
shall be interchange with ExtJS4.x

4

Novelty of Technology


䕸E⁊匠 ⹸ 慮搠S灲楮朠fr慭敷潲k
3⹸ 慲e 湥n t散桮e汯l楥i w桩hh
桡ve r散敮瑬y r敬敡獥d

楮 ㈰ㄱ1


A
n⁩浰潲 慮a 畳u 捡獥
灲潴潴祰敤o

Technical
Risks and Mitigation

Technical Risks Mitigated (1)

Sno

Risk

Risk

Mitigation

1

Integration

of two new
frameworks at different layers
(
ExtJS

(UI)
and Spring
framework

(Service)), where
team has no prior experience.


䥮I敧e慴楮g

瑷o⁦ 慭a w潲歳
灥pf潲o敤e楮 獴数eⰠ慳 瑷o 畮歮o睮
fr慭敷潲歳 r敱畩r敤eg潯搠瑩浥 潦
獴畤y 慮搠慮慬y獩s.


啉Uy敲 楮t敧e慴敤eto 瑨t 獹獴敭
睩瑨 䕸瑊E fr慭敷潲欬 w桩hh
c潭浵o楣慴敳 to 瑨t 獥sv敲 畳u湧
Servlet technology
.

2.
Spring Controller accessed by JSP at
front end.

3.
JSP interchanged with Java Script
and Servlet interchanged with
Spring MVC Controller to finally
integrate both layer MVCs

2

Exchanging

Objects between
layers


偲潴潴祰敤

by 獥湤楮朠䩓低Jfr潭⁕䤠
Lay敲 to⁓敲v敲 慮搠瑲慮獦潲o to⁊ VA
潢o散e 慴⁓敲v楣e⁌ay敲 慮搠v楣e v敲獡s

Technical Risks Mitigated
(2)

Sno

Risk

Risk Mitigation

3

Managing large number of
records at UI Layer on general

user queries (Risk realized
proactively
)


Pagination

Feature prototyped to
mitigate the risk.


Pagination

send
Ajax request
to
get the limited number of records
on Java Script load.


Hibernate
Callback

implemented

to get the limited number of
records.

4

Analysis

boundary objects
realization using Java Script
Components


M慩n

J潢 畳u 捡獥 業灬敭敮e敤e
畳u湧 䕸瑊E 慮搠a灲楮朠䵖䌮

Transition Strategy

User Interface Layer

Static Structure (1)

UIController
Ext.app.Controller
Ext.application
+name
+appFolder
+launch()
*
1
UIView
+title
+extend
+alias
+store
+initComponent()
Ext.Component
+store
*
1
*
*
UIStore
+fields
+data
Ext.data.Store
JSON
XML
UIModel
+fields
Ext.data.Model
Static Structure
(2)

Component
Panel
Tree
Grid
UIView
+title
+extend
+alias
+store
+initComponent()
Ext.data.Model
UIModel
+fields
UIStore
+fields
+data
UIModel
+fields
Proxy
Dynamic Structure

: Java Script Engine
Ext.Application
: UIController
: UIView
: UIModel
: UIStore
1 : launch()
2 : init()
3 : initComponent()
4
<<create>>
5
<<create>>
Asynchronous
calls to
server


AJAX

Engine

UI

Server


Input



Input



Response



Data
Communication

Data
Communication

Response

Response

Communication Between UI and
Service Layer

Transition Strategy

Service Layer

Static Structure

DispatcherServlet
org.springframework.web.servlet
HttpServlet
UseCaseController
+handleRequest()
Controller
org.springframework.web.servlet.mvc
HandlerMapping
ViewResolver
View
UseCaseView
+getContentType()
+render()
UseCaseViewResolver
+resolveViewName()
+setPrefix()
+setSuffix()
resolve controller
dispatch request
set state for resolver
Dynamic Structure

DispatcherServlet
: HandlerMapping
UseCaseHadlerMapping
UseCaseController
UseCaseResourceViewResolver
JstlView
1 : getHandler()
2 : resolve controller mapping()
3 : handleRequest()
@RequestMapping annotation to be
used to resolve the Controller
Application can use default mappers
as per provided by spring framework.
Application can use default view resolver
as per provided by spring framework.
4 : process request and generate view()
5 : setSuffix()
6 : setPRefix()
7 : resolveViewName()
8
<<create>>
9 : render response()
10 : getContentType()
11 : render()
Transition Strategy

Persistence Layer

Static Structure

UseCaseController
UseCaseService
<<control>>
+createSomeDTO()
-getListFromJSON(): List<SomeDTO>
-getFromJSON(): Entity
+getAllSomeDTOList()
+getSomeDTOById()
+delete(data: Object)
-getListIdFromJSON(data: Object): List<Integer>
+update(data: Object)
Entity
+attribute
+id
+setAttribute()
+getAttribute()
+getId()
+setId()
SomeDAO
ISomeDAO
+saveOrUpdate()
+delete(id: Integer)
+update()
+getAll()
+getById()
<<uses>>
<<uses>>
<<creates>>
spring::HibernateTemplate
+saveOrUpdate()
+find()
+load(classType: Class, id: Integer): Class
+delete(object: Object)
net.sf.json::JSONArray
+fromObject(data: Object): JSONArray
+toCollection(jsonArray: JSONArray, objectClass: Class): List<Class>
<<uses>>
net.sf.json::JSONObject
+fromObject(data: Object): JSONObject
+toBean(jsonObject: JSONObject, objClass: Class): Class
<<uses>>
Dynamic Structure

: HibernateTemplate
: UseCaseController
: UseCaseService
: SomeDAO
: JSONArray
: SomeDTO
<<entity>>
: JSONObject
1 : createSomeDTO(): void
2 : getListFromJSON(): List<SomeDTO>
3 : fromObject(Object): JSONArray
4 : toCollection(JSONArray, Class): List<Class>
5 : //converts the objects to SomeDTO()
6 : getFromJSON(): SomeDTO
If multiple data is sent in as a list
If single set of data is sent
Save all the data in the list
7 : fromObject(Object): JSONObject
8 : toBean(JSONObject, Class): Class
9 : //typecast as SomeDTO()
10 : saveOrUpdate(): void
11 : saveOrUpdate(): void
Deployment Structure

System Administrator
Printer
Internet
Operation Staff
LAN
Email SMTP Server
Production Server
Proxy Server
Staging Server
Development Server
Firewall
Marketing Staff
Customer Service Staff
Management Issues


Change Requests


Management Progress and
Tracking


Plans for implementation phase


Expected implementation issues