`
确实比较男
  • 浏览: 115327 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Guzz源码分析(一) guzz容器初始化过程

    博客分类:
  • Guzz
阅读更多

1. Guzz是什么?

百度Guzz http://baike.baidu.com/link?url=2ILIi8BXdhEUrVmVkYIDoYbehSN-jZ4F83iyJtNhl40zECi8_T7n_Br9acqJhKVhIdoxiyWh9sw2feqGJvq8la

2. 感觉Guzz的资料还是太少,但是还是有一篇很完整的帮助文档:

http://code.google.com/p/guzz/wiki/TutorialGuzzXml?wl=zh-Hans

3. 自己学习Guzz的时间也不长,由于资料比较少,所以就只有直接看源码,在这里记录下过程,供以后查看。

4. Guzz容器初始化的流程图:

5. 接着对应着流程图来查看源码:

5.1 首先servlet容器在初始化的时候会读取到我们在web.xml中的配置:

 

<listener>
        <listener-class>
            org.guzz.web.context.spring.GuzzWithSpringContextLoaderListener
        </listener-class>
</listener>    
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:applicationContext.xml</param-value>
</context-param>

所以直接就会执行到GuzzWithSpringContextLoaderListener。

5.2 在GuzzWithSpringContextLoaderListener中,首先去初始化了spring的容器,由于我们在applicationContext.xml中配置了guzzContext:

 

<!--GUZZ声明-->
<bean id="guzzContext" class="org.guzz.web.context.spring.GuzzContextBeanFactory" factory-method="createGuzzContext">
	<constructor-arg>
		<value>classpath:guzz.xml</value>
	</constructor-arg>
</bean>

在spring初始化的时候肯定是会创建guzzContext对象的,所以进入到了GuzzContextBeanFactory,只有一个方法把guzz.xml又传入到Configuration,然后调用newGuzzContext()

 

public static GuzzContext createGuzzContext(Resource springResource) throws Exception{
		File file = springResource.getFile() ;
		if(file == null){
			throw new IOException("file is null. spring resource:" + springResource) ;
		}
		return new Configuration(file.getAbsolutePath()).newGuzzContext() ;
	}

在newGuzzContext中创建了guzz中很重要的一个类对象GuzzContextImpl,然后调用了initFromMainConfig,传入了一个Resource(其实也就是guzz.xml)

 

public GuzzContext newGuzzContext() throws Exception{
		GuzzContextImpl gf =  new GuzzContextImpl() ;
		gf.initFromMainConfig(this.config) ;
		if(autoCloseResource){
			CloseUtil.close(config) ;
		}
		return gf ;
	}

5.3 在initFromMainConfig就是主要的初始化过程,主要是解析guzz.xml,初始化数据库数据类型,连接ConfigServer读取配置,初始化Service,初始化事务管理。内容很多,会在后面文章分析。
5.4 在完成了GuzzContextImpl后然后就会回到GuzzWithSpringContextLoaderListener,然后把spring容器通过SpringExtendedBeanFactory这个对象set给GuzzContextImpl,接着就是在创建ContextLoader对象,通过initGuzzContext方法把GuzzContextImpl对象放入到服务器的ServletContext中。

 

ApplicationContext applicationContext = org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext() ;
			GuzzContextImpl gc = (GuzzContextImpl) applicationContext.getBean("guzzContext") ;
			
			if(gc == null){
				throw new GuzzException("spring bean [guzzContext] not found.") ;
			}
			
			//必须在spring初始化完毕以后才能调用。
			SpringExtendedBeanFactory ebf = new SpringExtendedBeanFactory(applicationContext) ;
			gc.setExtendedBeanFactory(ebf) ;
			
			//启动guzz
			if(context == null){
				context = new ContextLoader() ;
				try {
					context.initGuzzContext(sc, gc) ;
				} catch (Exception e) {
					log.error("can't start guzz.", e) ;
					context = null ;
					onLoadError(e) ;
				}
			}

5.5 到此guzz初始化过程完成。这也只是一个大体的过程,很多的细节实现都是在GuzzContextImpl的initFromMainConfig里面

 

分享到:
评论

相关推荐

    guzz: a empty sample project build20110323.zip

    【Guzz:一个空的示例项目build20110323.zip】 Guzz是一个基于Java的高性能、轻量级的分布式数据处理框架,主要用于处理大规模数据流。这个"empty sample project build20110323.zip"是针对Guzz的学习资源,包含了...

    guzz的jar包

    guzz的jar包,工程下直接考过来的,可以直接使用

    guzz开发jar

    guzz是一套用来进行快速开发和高性能网站设计的java框架,通过ORM、多数据源数据管理、以及通用数据处理,为系统在数据层的设计提供一站式解决方案。用于替代或者补充hibernate或ibatis,并提供更多的大型系统架构...

    Guzz-crx插件

    【Guzz-crx插件】是一款专为Guzz平台设计的屏幕共享扩展程序,它使得用户能够在使用Guzz.io服务时轻松实现桌面屏幕共享功能。这一功能对于远程协作、在线会议、教育辅导以及团队沟通等场景具有极大的价值,极大地...

    guzz的「Guzz」-crx插件

    为Guzz启用屏幕共享。 此扩展程序允许www.guzz.io用户共享桌面屏幕 支持语言:English

    bicq代码

    8. **版本控制**:考虑到代码通常是通过版本控制系统(如Git)管理的,源码可能会包含提交历史,显示了软件的发展过程。 9. **构建系统**:为了编译和打包软件,开发者通常使用构建工具(如Make、CMake或Gradle)。...

    Java面试题全集(下)

    持久层框架则是实现数据持久化操作的一系列框架,常见的有Hibernate、MyBatis、TopLink、Guzz-jOOQ、SpringData和ActiveJDBC等。 3. Hibernate持久层框架:Hibernate是一个开源的ORM框架,它提供了一个完整的解决...

    java框架面试题

    它负责初始化和创建Session对象,并且通常在整个应用程序生命周期内只创建一次。 **2. Session的线程安全性** Session对象是非线程安全的,不能被多个线程共享。每个线程应该有自己的Session实例。为了避免频繁地...

    JAVA面试问题及标准答案.docx

    例如,Hibernate是一个流行的Java ORM框架,它可以自动将对象持久化到数据库中,或将数据库中的记录转换为Java对象。 持久层设计是另一个面试常问的话题。持久层是系统中处理数据持久化的部分,它的目标包括数据...

    InstallAnywhere 2008破解与自定义PlugIn陷阱经验分享

    NULL 博文链接:https://guzz.iteye.com/blog/256235

    轻松将一张大表分切到不同的机器中

    NULL 博文链接:https://guzz.iteye.com/blog/883225

    java框架方面面试题

    在当今Java开发领域,Java框架的知识无疑是面试过程中的重要组成部分,尤其在企业应用架构、大型网站架构和应用服务器优化等方面的知识,更是考察应聘者综合素质的关键。接下来,我们将深入探讨Java框架方面面试题中...

    Java面试题全集.docx

    它可以将程序中的对象自动持久化到关系数据库中或将数据库表中的行转换成Java对象,从而简化了数据操作过程。 - **工作原理**:ORM通过元数据(如XML或注解)来描述对象和数据库之间的映射关系。当对象的状态发生...

    JAVA面试问题及答案.docx

    常见的持久层框架有Hibernate、MyBatis、TopLink、Guzz、jOOQ、Spring Data和ActiveJDBC等,它们都为开发者提供了便捷的数据持久化解决方案。 在Hibernate中,Session提供了多种操作数据库的方法,如load()和get()...

    哀悼日变灰操作

    根据给定文件的信息,我们可以提炼出与“哀悼日变灰操作”相关的IT知识点,但首先需要澄清的是,文件内容似乎包含了一些不相关的代码片段和文档,这些内容涉及一个名为"Guzz"的全栈数据层解决方案框架,以及一系列与...

    bof:人类的HTTP客户端

    总结起来,Bof: 是用户友好的避免使用魔术字符串和数组进行配置:相反,它提供可由IDE自动完成的显式,类型化和文档化方法带有默认值:默认支持JSON,4xx和5xx响应抛出异常,默认情况下超时时间短符合PSR-7 未来的...

    php-sdk:用于连接到MultiSafepay REST API的默认PHP库

    您可以立即开始在线销售,并从一个地方管理所有交易。安装要安装SDK,请使用以下composer命令: composer require multisafepay/php-sdk警告:此PHP SDK不直接依赖于Guzzle或cURL。相反,它使用客户端抽象和工厂抽象...

Global site tag (gtag.js) - Google Analytics