天天看點

JAD開發架構簡介1      前言2      JAD項目簡介

JAD開發架構簡介

版 本:1.0.1

                     拟制人: hechuan

1      前言

JAD旨在為程式員提供一個高效的自動化開發平台,它涉及網際網路JAVA背景技術基礎架構的方方面面,比如持久化技術,緩存,分布式遠端調用與微服務等等。同時,它内置了大部分資訊化系統中所需要的會員管理、權限控制、流程管理、cms内容管理、oa辦公自動化等業務子產品供業務開發人員直接使用。

目前項目已經在開源中國碼雲平台上開源,

代碼位址:https://git.oschina.net/457049726/jad

eclipse插件下載下傳位址:http://pan.baidu.com/s/1c2nGXfq

官網網址:http://www.openjad.com:8080

背景示範網址:http://demo.openjad.com:8080/a

背景示範網址:http://demo.openjad.com/a

背景使用者名/密碼:admin/admn

背景dubbo服務治理使用者名/密碼:guest/guest

1.1 定義、術語及縮寫

縮寫 英文全稱 中文全稱
JAD Java Auto Develop java自動化開發平台

1.2 檔案修訂記錄

檔案修訂記錄

版本修改記錄  (A --- 增加    M --- 修改    D --- 删除)

目前版本 日期

修改位置

(圖、表、章節)

A/M/D

簡單描述

(原因和修改簡介)

修改人 評審人
1.0.1 2017-05-11 ALL A 建立 hechuan

2      JAD項目簡介

2.1 項目簡介

       JAD內建jeesite、dubbo、kisso等多個優秀的開源項目,重構整合而成的高效,高性能的開源Java EE快速開發平台。以“小項目做的快、大項目做的好”為原則,提供快速的層次清晰的漸進式業務開發模式,功能強大。

       JAD以Spring Framework為基礎架構,以Spring MVC為模型視圖控制器,在資料通路層上同時支援hibernaet、MyBatis及spring jpa,以Apache Shiro為權限授權層,以Activit為工作流引擎,在緩存方面,它同時支援Ehcahe、MemCache、Redis,開發團隊可以跟據自身的技術特性,選擇自己熟悉的技術組合作為自己的項目架構。

       JAD可用于企業資訊化領域,已内置企業資訊化系統的基礎功能子產品,包括:權限元件、資料字典元件、核心工具元件、工作流元件、CMS内容管理、OA辦工自動化、微信接口等。

       同時JAD可用于網際網路領域,自動生成rest ful風格的api文檔,友善前後端聯調。在架構上,JAD以“業務與邏輯相分離”為原則,做業務的隻寫業務代碼,做架構的隻負責架構。JAD不僅僅支援傳統的單體項目架構,也支援分布式微服務架構,具有很強的擴充性與可移植性。業務開發方面,JAD提供高度可定制化的Eclipse插件作為可視化ide,開發人員可以跟據自已項目的特性定制适合自己項目的代碼生成器,大大提高開業務開發效率。目前,JAD内置的代碼生成器主要有:建立項目、生成CURD代碼等等。

       綜上所述,JAD是快速完成項目的最佳基礎平台解決方案,也是想學習Java平台的最佳學習案例。

2.2 項目特色

       JAD項目內建多個優秀的開源項目于一體,功能強大,而且業務與邏輯似乎完全分離,可擴充性強。主要有以下特色:

2.2.1   采用業務與邏輯相分離的架構,具有很強的擴充性與可移值性。

       各個業務子產品之間互相獨立,系統管理、cms内容管理、bpm工作流、oa辦工自動化等子產品之間耦合度很底。建立項目時,開發人員可以跟據自己的需求,任意選擇不同的子產品組合,且不需要的業務子產品并不會出現在自己的項目代碼中,代碼幹淨清晰。

2.2.2   項目架構靈活,不僅支援傳統的單體項目架構,也支援基于dubbo的分布式微服務架構。

       本架構不僅僅支援傳統小項目的單體架構,也支援大項目的分布微服務架構(基于dubbo)。而且不同架構之間隻需要通過一些簡單的配置,及調整一下各子產品的依賴關系即可實作(無需修改任何業務代碼)。

2.2.3   采用自主研發的Eclipse插件來實作項目建立和代碼自動生成。

       開發人員,可以通過安裝本項目自帶的Eclipse插件,通過可視化界面來初始化自己的項目,并可通過相關界面自動生CURD相關代碼。

2.2.4   對常用的ORM架構進行了簡單的封裝和約定,同時支援hibernate、mybatis、spring jpa,并支援多表關聯。

       開發人中員可以跟據自己熟悉的ORM架構在hibernate、mybatis、spring jpa三者中任選一種,可跟據自己熟悉的ORM架構api寫出跟某一特定ORM相關的dao代碼,也可以按照本項目約定持久層規範寫出可以同時支援hibernate、mybatis、spring jpa的dao(在這種情況下,使用者并不需要修改任何業務代碼,隻通過配置即可在三者之間任意切換)。

2.2.5   對常見的緩存架構進行簡單的封裝,同時支援EhCache、MemCache、Redis等緩存引擎。

       開發人員可以從EhCache、MemCache、Redis三者中任選一種或幾種作為自己的緩存引擎。JAD對不同的緩存做了統一的封裝,并提供了統一的api來通路緩存。而且,開發人員無需修改任何代碼隻需簡單的配置一下,便可使項目在EhCache、MemCache、Redis三者之間進行切換。

       同時JAD通過對Spring Cache的內建,提供了緩存操作相關注解,開發人員無需寫緩存通路相關的邏輯代碼,而通過一些簡單的注解即可實作緩存操作。

2.2.6   權限認證方面,同時支援傳統的認證方式,也支援可跨域的單點登入。

       JAD對國内優秀的SSO架構kisso進行了內建,開發人員可跟據自己的需求選擇使用,并同時支援多種認證方式(可支援統傳的session、基于cookie的單點登入、基于加密cookie的跨域sso、基于統一認證中心的單點登入等方式)。

2.3 業務功能說明

       從業務功能上講,本架構提供的功能主要有以下方面:

2.3.1   基于角色的權限通路控制子產品

       采用流行的shiro實作在基于角色的權限通路,包括會員管理、角色管理、菜單管理、權限管理等子子產品。

2.3.2   cms内容管理子產品

本項目自帶cms内容管理子產品。

2.3.3   oa辦工自動化子產品

本項目通過內建activiti提供了工作流系統,作為oa辦工自動化子產品的流程引擎(開發中。。。)

2.3.4   微信接入子產品

本項目實作了微信接口(開發中。。。)

2.3.5   其它功能子產品

         以上列出的是本項目自帶的業務子產品,其中權限管理子產品和cms子產品業務成熟度比較高。其它子產品目前還沒有完全完善,開發人員人可以自行完善。

       同時,開發人員也可以通過Eclipse插件以建立項目的方式建立自己的業務子產品。

       以上各個業務子產品之間互相獨立,開發人員可以跟據自己的需要任意選擇自己的想要的子產品。并且可以以傳統的單體項目架構方式內建各個個子產品,也可以以微服務的方式分布式部署各個子產品。

2.4 邏輯功能說明

         從邏輯功能上講,本架構提供的功能主要有以下方面:

2.4.1   提供可高度定制化的Eclipse插件來自動建立和配置項目及自動生成CURD業務代碼

       本項目自帶一個可高度定制化的Eclipse插件來自動建立和配置項目,并且對業務的資料的增删改查等正常CURD業務作。

       之是以說本eclipse插件是高度定制化的,是因為考慮到了業務代碼的複雜性,在研發這個eclipse插件時,就從架構上為開發人員提供了自定義代碼生成器的邏輯接口。開發人員可以跟據自己的業務需求,自己定義一些适合自己項目的代碼生成器,即無需懂得Eclipse插件開發,也可以通過配置定制自己的代碼生成器界面并按照自己定制的規則生成任何自己想要的業務代碼。

       當然,本Eclipse插件也可以單獨用于任何其它java項目中,隻要項目被Eclipse正常導入,開發人員就可以使用本插件,通過自定義一些代碼生成器來生成自己的業務代碼。

2.4.2   可自動生成業務api,友善前後端連調與測試

       JAD通過對springfox-swagger的內建,具有自産api的能力。JAD使用的MVC架構是spring-mvc,每個action類可以用swagger相關注解辨別,進而可以自動生成api文檔,友善前後端連調與測試。

2.4.3   同時支援EhCache、MemCache、Redis等緩存引擎。

       開發人員可以從EhCache、MemCache、Redis三者中任選一種或幾種作為自己的緩存引擎。JAD對不同的緩存做了統一的封裝,并提供了統一的api來通路緩存。而且,開發人員無需修改任何代碼隻需簡單的配置一下,便可使項目在EhCache、MemCache、Redis三者之間進行切換。

       同時JAD通過對Spring Cache的內建,提供了緩存操作相關注解,開發人員無需寫緩存通路相關的邏輯代碼,而通過一些簡單的注解即可實作緩存操作。

2.4.4   權限認證方面,同時支援傳統的認證方式,也支援可跨域的單點登入。

       JAD對國内優秀的SSO架構kisso進行了內建,開發人員可跟據自己的需求選擇使用,并同時支援多種認證方式(可支援統傳的session、基于cookie的單點登入、基于加密cookie的跨域sso、基于統一認證中心的單點登入等方式)。

2.4.5   內建dubbo,可用分布式微服務架構部署項目。

       JAD不但提供了傳統的單體項目架構模式,還提供了分布式服務架構方式。它是通過對dubbo的內建來實作。并且,它提供了dubbo自帶的服務管理控制台,以及一個建議的監控中心。

2.4.6  提供應用層waf防火牆,防止sql注入及xss腳本攻擊。

       使用者可以用過配置決定是否使用 waf。

2.4.7  提供測試架構

       JAD采用testng架構進行單元測試和內建測試,單元測試時service與dao可單獨測試。比如要測試會員子產品,對于UserService類,可以寫一個UserServiceTest來測試它。

       JAD提供了測試用例類所需的一些基類,并自動加載spring上下文,測試人員無需自已加載spring context。

       (基于maven的特性,測試代碼在項目打包的過程中會被自動去掉,無需擔心測試代碼被釋出到項目安裝包中。)

2.4.8  提供常用工具類

       提供常用的字元串、日期、http請求、JSON處理、加解密等常用工具類

2.4.9  提供項目Demo以及快速生成項目的向導

       JAD提供兩種架構的項目Demo,分别是傳統單體項目的demo,也提供微服務架構的可分布部署的項目Demo。開發人員,可以直接複制demo項目,然後修改成自己的項目。

       當然,demo項目中可能包括了本架構内置的所有業務元件(包括oa,cms等等),并不建議開發人員這樣做。本架構推薦的一種做法就是采用本項目提供的Eclipse插件内置的“建立JAD項目”的向導來自動建立項目,在通過向導建立項目的過程中,使用者可以自行選擇所需的業務子產品,以及orm、cache等技術選型。

2.5 項目架構

       JAD項目各個業務子產品之間互相獨立,各層之間耦合度底,跟據項目的規模和業務量的大小。系統架構師可以選擇性的使用傳統的單體項目架構,或者分布式的微服務架構。

2.5.1  總體架構

JAD項目總體架構圖如下:

JAD開發架構簡介1      前言2      JAD項目簡介

圖:JAD項目總體架構

2.5.2  單體項目架構

       在傳統的簡單項目中,各個業務子產品都是內建在同一個項目中一起部署,這種項目簡單粗暴,易于部署和釋出。JAD單體項目架構圖如下所示:

JAD開發架構簡介1      前言2      JAD項目簡介

圖:JAD單體項目架構圖

2.5.3  微服務架構

         如果項目子產品比較複雜,業務量比較龐大,可考慮采用微服務架構模式。在這種架構下,每個業務子產品被單獨部署為一個獨立的服務提供者,采用dubbo暴露成服務,并将之釋出到注冊中心,架構圖如下:

JAD開發架構簡介1      前言2      JAD項目簡介

圖:JAD微服務架構圖

2.6 核心技術

       JAD架構用到的技術比較多,但并不是所有技術都需要掌握,開發人員可跟據自己的項目需要選用相應子產品,并跟據需要去學習和了解其依賴的技術。

2.6.1       後端技術選型

核心架構:SpringFramework 4.2.8.RELEASE

安全架構:Apache Shiro1.2

視圖架構:Spring MVC4.1

服務端驗證:HibernateValidator 5.2

布局架構:SiteMesh 2.4

工作流引擎:Activiti 5.21

任務排程:Spring Task4.1

持久層架構:MyBatis 3.2、Hibernate 5.1.0.Final、Spring jpa 1.10.5.RELEASE

資料庫連接配接池:Alibaba Druid1.0

資料庫:目前僅支援mysql

緩存架構:Ehcache 2.6、Redis、Memcache 2.5.1

日志管理:SLF4J 1.7、Log4j

服務架構:Dubbo 2.5.3

2.6.2       前端技術選型

JS架構:jQuery 1.9。

CSS架構:TwitterBootstrap 2.3.1(穩定是背景,UI方面根據需求自己更新改造)。

用戶端驗證:JQueryValidation Plugin 1.11。

富文本線上編輯:CKEditor

線上檔案管理:CKFinder

動态頁簽:Jerichotab

手機端架構:Jingle

資料表格:jqGrid

對話框:jQuery jBox

下拉選擇框:jQuerySelect2

樹結構控件:jQuery zTree

日期控件:My97DatePicker

2.7 特别鳴謝

Jeesite作者和它的團隊

Kisso作者和它的團隊

koala作者和它的團隊

dubbo作者和它的團隊

湖南祁東縣禅歌傳媒團隊

想了解更多資訊及時獲得項目動态,請掃碼關注作者公衆号:

JAD開發架構簡介1      前言2      JAD項目簡介