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

CSDN日报20170223——《作为开发者,你都听产品经理的,做的累不累?》       程序员1月书讯      【招募】Python学习班招生啦
 

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

  584人阅读  评论(13)  收藏  举报
  分类:
【项目经验】(32) 

目录(?)[+]


一、项目流程及工具

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

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

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

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

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

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



二、系统框架


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

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

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

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

      

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

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


itoo-basic-api:

1) jndi.properties文件:

 在进行JNDI查找前,设置应用服务器的上下文信息(一般通过配置jndi.properties文件实现),主要是设置JNDI驱动的类名(Java.naming.factory.initial)和命名服务提供者的URL(java.naming.prvoider.url)

[java]  view plain  copy
 
  1. java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory  

2)persistence.xml:

在EJB中,一个实体Bean应用由实体类和persistence.xml文件文件组成,共同完成持久化工作。

[html]  view plain  copy
 
  1. <span style="font-size:14px;">xml version="1.0" encoding="UTF-8"?>  
  2. <persistence version="2.0"  
  3.     xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">  
  5.       
  6.       
  7.     <persistence-unit name="MT_HOTEL_SERVICE"  
  8.         transaction-type="JTA">  
  9.           
  10.           
  11.         <provider>org.eclipse.persistence.jpa.PersistenceProviderprovider>  
  12.           
  13.         <jta-data-source>java:jboss/datasources/CloudMysqlDSjta-data-source>  
  14.           
  15.         <properties>  
  16.           
  17.             <property name="eclipselink.deploy-on-startup" value="True" />              
  18.             <property name="eclipselink.jdbc.allow-native-sql-queries"  
  19.                 value="true" />  
  20.               
  21.             <property name="eclipselink.target-server" value="JBoss" />  
  22.               
  23.             <property name="eclipselink.logging.level" value="FINE" />  
  24.             <property name="eclipselink.weaving" value="static" />  
  25.             <property name="eclipselink.session.customizer" value="com.tgb.itoo.base.util.uuid.UUIDSequence" />  
  26.         properties>  
  27.     persistence-unit>  
  28. persistence>  
  29. span>  


3)MANIFEST.MF

Jar文件信息

[html]  view plain  copy
 
  1. Manifest-Version: 1.0  
  2. Bundle-ManifestVersion: 2  
  3. Bundle-Name: itoo-basic-api  
  4. Bundle-SymbolicName: itoo-basic-api  
  5. Bundle-Version: 1.0.0.qualifier  
  6. Export-Package: com.tgb.itoo.basic.entity,  
  7.  com.tgb.itoo.basic.service  


4)pom.xml

POM包含了一个project所需要的所有信息,当然也就包含了构建过程中所需要的插件的配置信息,事实上,这里申明了"who","what",和"where",然而构建生命周期(buildlifecycle)s中说的是"when"和"how"。POM定义的三坐标,标记了仓库中的特定位置,groupId :artifactId:version

[html]  view plain  copy
 
  1. <span style="font-size:14px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0modelVersion>  
  4.       
  5.       
  6.     <parent>   
  7.         <groupId>com.tgbgroupId>  
  8.         <artifactId>itoo-basic-parentartifactId>  
  9.         <version>0.0.1-SNAPSHOTversion>  
  10.         <relativePath>../itoo-basic-parent/pom.xmlrelativePath>  
  11.     parent>  
  12.     <artifactId>itoo-basic-apiartifactId>  
  13.     <packaging>ejbpackaging>  
  14.   
  15.   
  16.     <dependencies>  
  17.         <dependency>  
  18.             <groupId>com.tgbgroupId>  
  19.             <artifactId>itoo-baseartifactId>  
  20.         dependency>  
  21.   
  22.         <dependency>  
  23.             <groupId>com.tgbgroupId>  
  24.             <artifactId>itoo-toolartifactId>  
  25.   
  26.         dependency>  
  27.    
  28.         <dependency>  
  29.             <groupId>org.codehaus.jacksongroupId>  
  30.             <artifactId>jackson-mapper-aslartifactId>  
  31.         dependency>  
  32.   
  33.         <dependency>  
  34.             <groupId>org.eclipse.persistencegroupId>  
  35.             <artifactId>org.eclipse.persistence.jpaartifactId>  
  36.             <version>${org.eclipse.persistence.jpa.version}version>  
  37.   
  38.         dependency>  
  39.           
  40.     dependencies>  
  41.   
  42.       
  43.     <build>  
  44.     <pluginManagement>  
  45.         <plugins>  
  46.             <plugin>  
  47.                 <groupId>au.com.alderaangroupId>  
  48.                 <artifactId>eclipselink-staticweave-maven-pluginartifactId>  
  49.                 <version>1.0.3version>  
  50.                 <executions>  
  51.                     <execution>  
  52.                         <phase>process-classesphase>  
  53.                         <goals>  
  54.                             <goal>weavegoal>  
  55.                         goals>  
  56.                         <configuration>  
  57.                             <persistenceXMLLocation>META-INF/persistence.xmlpersistenceXMLLocation>  
  58.                             <logLevel>FINElogLevel>  
  59.                         configuration>  
  60.                     execution>  
  61.                 executions>  
  62.                 <dependencies>  
  63.                     <dependency>  
  64.                         <groupId>org.eclipse.persistencegroupId>  
  65.                         <artifactId>eclipselinkartifactId>  
  66.                         <version>2.6.0version>  
  67.                     dependency>  
  68.                 dependencies>  
  69.             plugin>  
  70.         plugins>  
  71.         pluginManagement>  
  72.     build>  
  73. project>span>  



itoo-basic-course-ear:

1)jboss-deployment-structure.xml

目的找到War包里面的jndi配置。

[html]  view plain  copy
 
  1. <span style="font-size:14px;">xml version="1.0" encoding="UTF-8"?>  
  2. <jboss-deployment-structure>  
  3.     <sub-deployment name="itoo-basic-course-web-0.0.1-SNAPSHOT.war">  
  4.         <dependencies>  
  5.             <module name="org.jboss.xnio" />  
  6.             <module name="org.apache.shiro">  
  7.                 <imports>  
  8.                     <include path="META-INF**" />  
  9.                     <include path="org**" />  
  10.                 imports>  
  11.             module>  
  12.             <module name="org.jasig.cas.client">  
  13.                 <imports>  
  14.                     <include path="META-INF**" />  
  15.                     <include path="org**" />  
  16.                 imports>  
  17.             module>  
  18.             <module name="org.springframework.data">  
  19.                 <imports>  
  20.                     <include path="META-INF**" />  
  21.                     <include path="org**" />  
  22.                 imports>  
  23.             module>  
  24.             <module name="org.crazycake">  
  25.                 <imports>  
  26.                     <include path="META-INF**" />  
  27.                     <include path="org**" />  
  28.                 imports>  
  29.             module>  
  30.             <module name="commons-fileupload">  
  31.                 <imports>  
  32.                     <include path="META-INF**" />  
  33.                     <include path="org**" />  
  34.                 imports>  
  35.             module>  
  36.             <module name="org.codehaus.jackson">  
  37.                 <imports>  
  38.                     <include path="META-INF**" />  
  39.                     <include path="org**" />  
  40.                 imports>  
  41.             module>  
  42.             <module name="redis.clients">  
  43.                 <imports>  
  44.                     <include path="META-INF**" />  
  45.                     <include path="org**" />  
  46.                 imports>  
  47.             module>  
  48.             <module name="commons-lang">  
  49.                 <imports>  
  50.                     <include path="META-INF**" />  
  51.                     <include path="org**" />  
  52.                 imports>  
  53.             module>  
  54.             <module name="org.apache.commons.commons-pool2">  
  55.                 <imports>  
  56.                     <include path="META-INF**" />  
  57.                     <include path="org**" />  
  58.                 imports>  
  59.             module>  
  60.             <module name="org.springframework">  
  61.                 <imports>  
  62.                     <include path="META-INF**" />  
  63.                     <include path="org**" />  
  64.                 imports>  
  65.             module>  
  66.   
  67.         dependencies>  
  68.     sub-deployment>  
  69. jboss-deployment-structure>  
  70.         span>  


2)jboss-ejb-client.xml

配置远程调用

[html]  view plain  copy
 
  1. <span style="font-size:14px;">xml version="1.0" encoding="UTF-8"?>  
  2. <jboss-ejb-client xmlns="urn:jboss:ejb-client:1.0">  
  3.     <client-context>  
  4.         <ejb-receivers>                                  
  5.           
  6.           
  7.             <remoting-ejb-receiver outbound-connection-ref="remote-ejb-connection-jc"/>  
  8.               
  9.               
  10.         ejb-receivers>   
  11.     client-context>  
  12. jboss-ejb-client>span>  


itoo-basic-course-web:

1)applicationContext-common.xml

这样的目的是通过evn找到相应的JBOSS的配置,也就是需要远程调用的JBOSSip,端口号,用户名和密码。

[html]  view plain  copy
 
  1. xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:aop="http://www.springframework.org/schema/aop"   
  4.     xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xmlns:util="http://www.springframework.org/schema/util"   
  6.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  7.     xmlns:context="http://www.springframework.org/schema/context"  
  8.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  9.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  10.     http://www.springframework.org/schema/aop   
  11.     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
  12.     http://www.springframework.org/schema/tx    
  13.     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
  14.     http://www.springframework.org/schema/util   
  15.     http://www.springframework.org/schema/util/spring-util-3.0.xsd  
  16.     http://www.springframework.org/schema/context  
  17.     http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  18.       
  19.         <util:properties id="evn"  
  20.         location="classpath:config/jboss-ejb-client.properties">util:properties>  
  21.       
  22.       
  23. beans>  


2)Jboss-ejb-client.properties

主要是配置IP和端口号以及需要远程调用的JBOSS的账户名和密码,同时我们还可以再JBOSS中配置多个远程调用的接口。


[html]  view plain  copy
 
  1. endpoint.name=client-endpoint  
  2. remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false  
  3. org.jboss.ejb.client.scoped.context=true  
  4. jboss.naming.client.ejb.context=true  
  5. Context.URL_PKG_PREFIXES=org.jboss.ejb.client.naming  
  6. javax.naming.Context.INITIAL_CONTEXT_FACTORY=org.jboss.naming.remote.client.InitialContextFactory  
  7. remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false  
  8. remote.connectionprovider.create.options.org.xnio.Options.SSL_STARTTLS=false  
  9. jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT=false  
  10.   
  11. remote.connections=one,two  
  12. remote.connection.one.host=192.168.24.115  
  13. remote.connection.one.port=4447  
  14. remote.connection.one.username=adminqx  
  15. remote.connection.one.password=!admin123  
  16. #add log  
  17. remote.connection.two.host=192.168.24.74  
  18. remote.connection.two.port=4447  
  19. remote.connection.two.username=adminjc  
  20. remote.connection.two.password=!admin123   

3 )maven中的仓库

分为两种,snapshot快照仓库和release发布仓库。snapshot快照仓库用于保存开发过程中的不稳定的版本,release正式仓库则是用来保存稳定的发行版本。


四、总结

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


你可能感兴趣的:(ITOO学习,itoo)