【ITOO】--專案系統架構圖
一、專案流程及工具
簡單的介紹一下整個ITOO專案維護流程。首先是開發階段,使用Eclipse開發工具進行開發。
開發所需要的Jar包,通過Maven+Negiux進行統一的管理,Negiux將本地Maven倉庫和中央管理倉庫解耦和,先將中央倉庫中的某些資料下載到私服器(Negiux)上面,本地的Maven就可以直接訪問區域網中的Negiux,而無需遠端中央倉庫了。這樣好處就是節省網路頻寬,加速本地快速搭建。
開發的程式碼首先經過Junit測試,本地測試通過後才能提交到版本控制工具SVN上面。與此同時,專案進行過程中遇到的問題及解決方案、會議、技術點、管理經驗等等,都需要通過文件保留下來。這些文件統一由Confluence進行知識管理。
程式碼通過Jekins進行持續整合,Jekins各個子系統需要配置幾個重要的地址:1.SVN本模組的地址 2.Negiux在區域網中的位置資訊 3.Jboss的地址資訊。
程式碼可以邊整合,邊測試 ,我們通過禪道建立產品,關聯專案,建立測試用例,進行測試和bug修復工作。
二、系統框架
整個系統前臺web容器主要採用SpringMVC框架,有助於頁面顯示、業務邏輯的解耦,使整個Web頁面更加整潔。SpringMVC中的Bean通過IOC容器來進行管理。通過SET的方式進行IOC依賴注入。
後臺主要採用EJB容器,業務邏輯層主要採用的sessionBean中的無狀態會話Bean,當客戶端請求服務端的時候,無狀態會話bean處理單一請求或商務過程。無需從之前的請求中提取任何狀態。事務必須在一個方法中結束,通常資源佔有量小,可以被共享。
持久層採用的JPA規範的實現之一EclipseLink。它和Hibernate同屬於ORM思想的產物。它將EntityBean持久化到資料庫,並且支援多租戶。它對多租戶的支援細化到了表,很不錯的持久層框架。
三、程式碼級別的系統框架和各種配置檔案
itoo-basic-api:
1) jndi.properties檔案:
在進行JNDI查詢前,設定應用伺服器的上下文資訊(一般通過配置jndi.properties檔案實現),主要是設定JNDI驅動的類名(java.naming.factory.initial)和命名服務提供者的URL(java.naming.prvoider.url)
java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory
2)persistence.xml:
在EJB中,一個實體Bean應用由實體類和persistence.xml檔案檔案組成,共同完成持久化工作。
<span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<!-- Name屬性用於定義持久化單元的名字,transaction-type指定事務型別 -->
<persistence-unit name="MT_HOTEL_SERVICE"
transaction-type="JTA">
<!-- javax.persistence.PersistenceProvider介面的一個實現類(可選) -->
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<!-- Jta-data-source和 non-jta-data-source用於分別指定持久化提供商使用的JTA和/或non-JTA資料來源的全域性JNDI名稱(可選) -->
<jta-data-source>java:jboss/datasources/CloudMysqlDS</jta-data-source>
<!-- 廠商專有屬性(可選) -->
<properties>
<!-- 修改第一次載入時間長的問題 -->
<property name="eclipselink.deploy-on-startup" value="True" />
<property name="eclipselink.jdbc.allow-native-sql-queries"
value="true" />
<!-- 設定伺服器型別 -->
<property name="eclipselink.target-server" value="JBoss" />
<!-- logging -->
<property name="eclipselink.logging.level" value="FINE" />
<property name="eclipselink.weaving" value="static" />
<property name="eclipselink.session.customizer" value="com.tgb.itoo.base.util.uuid.UUIDSequence" />
</properties>
</persistence-unit>
</persistence>
</span>
3)MANIFEST.MF
Jar檔案資訊
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: itoo-basic-api
Bundle-SymbolicName: itoo-basic-api
Bundle-Version: 1.0.0.qualifier
Export-Package: com.tgb.itoo.basic.entity,
com.tgb.itoo.basic.service
4)pom.xml
POM包含了一個project所需要的所有資訊,當然也就包含了構建過程中所需要的外掛的配置資訊,事實上,這裡申明瞭"who","what",和"where",然而構建生命週期(buildlifecycle)s中說的是"when"和"how"。POM定義的三座標,標記了倉庫中的特定位置,groupId :artifactId:version
<span style="font-size:14px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 基本設定 -->
<parent>
<groupId>com.tgb</groupId>
<artifactId>itoo-basic-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../itoo-basic-parent/pom.xml</relativePath>
</parent>
<artifactId>itoo-basic-api</artifactId>
<packaging>ejb</packaging>
<dependencies>
<dependency>
<groupId>com.tgb</groupId>
<artifactId>itoo-base</artifactId>
</dependency>
<dependency>
<groupId>com.tgb</groupId>
<artifactId>itoo-tool</artifactId>
<!-- <version>${project.version}</version> -->
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>${org.eclipse.persistence.jpa.version}</version>
<!-- <scope>provided</scope> -->
</dependency>
</dependencies>
<!-- 構建的過程 -->
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>au.com.alderaan</groupId>
<artifactId>eclipselink-staticweave-maven-plugin</artifactId>
<version>1.0.3</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>weave</goal>
</goals>
<configuration>
<persistenceXMLLocation>META-INF/persistence.xml</persistenceXMLLocation>
<logLevel>FINE</logLevel>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
</build>
</project></span>
itoo-basic-course-ear:
1)jboss-deployment-structure.xml
目的找到War包裡面的jndi配置。
<span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<sub-deployment name="itoo-basic-course-web-0.0.1-SNAPSHOT.war">
<dependencies>
<module name="org.jboss.xnio" />
<module name="org.apache.shiro">
<imports>
<include path="META-INF**" />
<include path="org**" />
</imports>
</module>
<module name="org.jasig.cas.client">
<imports>
<include path="META-INF**" />
<include path="org**" />
</imports>
</module>
<module name="org.springframework.data">
<imports>
<include path="META-INF**" />
<include path="org**" />
</imports>
</module>
<module name="org.crazycake">
<imports>
<include path="META-INF**" />
<include path="org**" />
</imports>
</module>
<module name="commons-fileupload">
<imports>
<include path="META-INF**" />
<include path="org**" />
</imports>
</module>
<module name="org.codehaus.jackson">
<imports>
<include path="META-INF**" />
<include path="org**" />
</imports>
</module>
<module name="redis.clients">
<imports>
<include path="META-INF**" />
<include path="org**" />
</imports>
</module>
<module name="commons-lang">
<imports>
<include path="META-INF**" />
<include path="org**" />
</imports>
</module>
<module name="org.apache.commons.commons-pool2">
<imports>
<include path="META-INF**" />
<include path="org**" />
</imports>
</module>
<module name="org.springframework">
<imports>
<include path="META-INF**" />
<include path="org**" />
</imports>
</module>
</dependencies>
</sub-deployment>
</jboss-deployment-structure>
</span>
2)jboss-ejb-client.xml
配置遠端呼叫
<span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>
<jboss-ejb-client xmlns="urn:jboss:ejb-client:1.0">
<client-context>
<ejb-receivers>
<!--需要多個的話-->
<!--遠端呼叫基礎的配置-->
<remoting-ejb-receiver outbound-connection-ref="remote-ejb-connection-jc"/>
</ejb-receivers>
</client-context>
</jboss-ejb-client></span>
itoo-basic-course-web:
1)applicationContext-common.xml
這樣的目的是通過evn找到相應的JBOSS的配置,也就是需要遠端呼叫的JBOSS的ip,埠號,使用者名稱和密碼。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 這樣的目的是通過evn找到相應的JBOSS的配置,也就是需要遠端呼叫的JBOSS的ip,埠號,使用者名稱和密碼。 -->
<util:properties id="evn"
location="classpath:config/jboss-ejb-client.properties"></util:properties>
</beans>
2)Jboss-ejb-client.properties
主要是配置IP和埠號以及需要遠端呼叫的JBOSS的賬戶名和密碼,同時我們還可以再JBOSS中配置多個遠端呼叫的介面。
endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
org.jboss.ejb.client.scoped.context=true
jboss.naming.client.ejb.context=true
Context.URL_PKG_PREFIXES=org.jboss.ejb.client.naming
javax.naming.Context.INITIAL_CONTEXT_FACTORY=org.jboss.naming.remote.client.InitialContextFactory
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connectionprovider.create.options.org.xnio.Options.SSL_STARTTLS=false
jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT=false
remote.connections=one,two
remote.connection.one.host=192.168.24.115
remote.connection.one.port=4447
remote.connection.one.username=adminqx
remote.connection.one.password=!admin123
#add log
remote.connection.two.host=192.168.24.74
remote.connection.two.port=4447
remote.connection.two.username=adminjc
remote.connection.two.password=!admin123
3 )maven中的倉庫
分為兩種,snapshot快照倉庫和release釋出倉庫。snapshot快照倉庫用於儲存開發過程中的不穩定的版本,release正式倉庫則是用來儲存穩定的發行版本。
四、總結
整個框架很龐大,先巨集觀的鳥瞰一下,接下來就是各個擊破了。學習就是從巨集觀到細節,在細節實踐,然後再從回到巨集觀補充整個知識網的過程。
相關文章
- Android系統架構圖Android架構
- HDFS架構指南(分散式系統Hadoop的檔案系統架構)架構分散式Hadoop
- 垂釣文旅專案 SaaS系統整體架構架構
- 程式碼生成器專案架構圖架構
- ROS架構(三)——檔案系統ROS架構
- 軟考系統架構評估專項架構
- 【許曉笛】EOS 系統架構圖解架構圖解
- Android專案架構搭建Android架構
- 專案-整體架構架構
- 專案-安全架構架構
- Diagrams:使用圖表描述雲系統架構原型架構原型
- 圖書管理系統-專案介紹
- Tomcat系統架構Tomcat架構
- Kotlin/Native KMM專案架構Kotlin架構
- SpringMVC的專案架構思想SpringMVC架構
- Springboot專案架構設計Spring Boot架構
- Vue專案架構優化Vue架構優化
- 系統整合專案管理工程師筆記4 - 第四章 資訊系統架構專案管理工程師筆記架構
- 實驗專案四:圖書管理系統
- FACEBOOK 的系統架構架構
- 安卓系統架構安卓架構
- 系統架構演變架構
- 廣告系統架構架構
- IOS的系統架構iOS架構
- Android-系統架構Android架構
- Nginx-03-Nginx 專案架構Nginx架構
- 微服務架構專案淺析微服務架構
- React專案架構,掌握前端架構師的核心本領React架構前端
- 【Android系統】Android系統架構簡介Android架構
- 解決方案架構、系統架構和企業架構區別架構
- SaaS架構:中央庫存系統架構設計架構
- SaaS架構:多租戶系統架構設計架構
- COLA 4.0應用架構和DDD經典專案實踐:貨物運輸系統應用架構
- Feed流系統重構-架構篇架構
- 專案實戰之元件化架構元件化架構
- 小型專案的微服務架構指南微服務架構
- RAG系統架構介紹架構
- 推薦系統工程架構架構
- Linux系統——架構淺析Linux架構