ITOO项目系统架构图--【ITOO】


一、项目流程及工具

   简单的介绍一下整个ITOO项目维护流程。首先是开发阶段,使用Eclipse开发工具进行开发。

        开发所需要的Jar包,通过Maven+Negiux进行统一的管理,Negiux将本地Maven仓库和中央管理仓库解耦和,先将中央仓库中的某些资料下载到私服器(Negiux)上面,本地的Maven就可以直接访问局域网中的Negiux,而无需远程中央仓库了。这样好处就是节省网络带宽,加速本地快速搭建。

  开发的代码首先经过Junit测试,本地测试通过后才能提交到版本控制工具SVN上面。与此同时,项目进行过程中遇到的问题及解决方案、会议、技术点、管理经验等等,都需要通过文档保留下来。这些文档统一由Confluence进行知识管理。

  代码通过Jekins进行持续集成,Jekins各个子系统需要配置几个重要的地址:1.SVN本模块的地址 2.Negiux在局域网中的位置信息 3.Jboss的地址信息。

       代码可以边集成,边测试 ,我们通过禅道创建产品,关联项目,创建测试用例,进行测试和bug修复工作。

ITOO项目系统架构图--【ITOO】_第1张图片



二、系统框架


ITOO项目系统架构图--【ITOO】_第2张图片

  整个系统前台web容器主要采用SpringMVC框架,有助于页面显示、业务逻辑的解耦,使整个Web页面更加整洁。SpringMVC中的Bean通过IOC容器来进行管理。通过SET的方式进行IOC依赖注入。

        后台主要采用EJB容器,业务逻辑层主要采用的sessionBean中的无状态会话Bean,当客户端请求服务端的时候,无状态会话bean处理单一请求或商务过程。无需从之前的请求中提取任何状态。事务必须在一个方法中结束,通常资源占有量小,可以被共享。

       持久层采用的JPA规范的实现之一EclipseLink。它和Hibernate同属于ORM思想的产物。它将EntityBean持久化到数据库,并且支持多租户。它对多租户的支持细化到了表,很不错的持久层框架。

     

三、代码级别的系统框架和各种配置文件

       ITOO项目系统架构图--【ITOO】_第3张图片


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的配置,也就是需要远程调用的JBOSSip,端口号,用户名和密码。

<?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正式仓库则是用来保存稳定的发行版本。


四、总结

  整个框架很庞大,先宏观的鸟瞰一下,接下来就是各个击破了。学习就是从宏观到细节,在细节实践,然后再从回到宏观补充整个知识网的过程。



你可能感兴趣的:(ITOO项目系统架构图--【ITOO】)