【深读】网络技术大神庞俊英:网管,网工,Or 网络架构师?你觉得自己是哪一个?...

【编者按】曾经听过/看到庞俊英很多的技术分享,在网络方面的实践积累让人欣赏。这篇文章来自这位大神,所表达的观点值得再三品味。


2016-12-14 来源:高效运维 作者:庞俊英


作者简介

df67496b5642810d93b0e2ebeb53a722618d35c0

庞俊英

大河云联创始人/CEO,也是原来阿里巴巴集团的首席网络架构师。从事网络规划、运维、研发工作近二十年。 曾在Cisco、中国电信等公司任职,是中国获得CCIE认证的最早的女工程师,对网络规划、运维和研发有非常丰富的经验。曾任阿里巴巴集团首席网络架构师,也是集团技术保障部的架构委员会主席,她是阿里云网络基础架构的奠基人,也曾主导了中国最大规模的数据中心SDN网络的实践。她曾受邀登上全球开放网络峰会(ONS)主会场进行主题演讲。

前文

我的身份是一名网工,我做了十几年的网络工程师。入行就是网络工程师,创业仍然是在做网络的事情。为什么在前几年,很少有人讲网络运维这件事?因为在软件工程师的眼里,网络是一条线,在运营商眼里网络是一朵云,有幸的是我在思科待了小十年,在阿里待了6年,运营商也待过,每个角色都做过,现在自己创业。所以我把自己所理解的网络的昨天、今天、明天,以及为什么网络突然变重要了,网络运维为什么被大家提及并变得很重要做一个梳理,当然这也是我个人的理解。

在昨天:一切都很简单

图片里我是举了几个关键时间节点来梳理近十年网络架构的变迁。在2007年的时候,中国互联网起来了,这是一张2007年阿里巴巴B2B的网络拓扑图。它是一张过去真实的拓扑图。

8fbe68bc59a99ae50fd8e7b2034c36e94c2359de

那时候,网络工程师就是个网管

大家可以看到那个时候网络非常非常简单,当时网络圈对于互联网公司的网络工程师的理解就是一个网管。我在2009年加入阿里巴巴,之前在思科工作,思科同事说:“你最多待三个月,那个公司什么都没有,你就是一个网管。”其实回过头来看,这也不是件很奇怪的事情,在2007年的时候,互联网公司的网络很简单,网络工程师就是一个网管的能力要求。基本技能是懂得生成树、懂得静态路由,懂得 OSPF 就不错了,高级点技能是写个脚本、刷个 ACL。网络架构和运维配置、设备选型都是由设备厂家工程师做的,比如这张拓扑就是典型思科的三层网络架构。在2007年,互联网公司的网络现状是很挫。但是那时候运营商很牛逼,运营商的网络核心网络架构分为超级核心、普通核心,有大区,有省网,省网下面有本地网,有接入网。

7f3f41ec1a1a0d47a18dc70776a1cd2a985ebb9a

那时候我们用的设备是图片里这样的集群,当时我第一次到互联网公司看到一个分布式计算,看到Hadoop的时候我就很困惑,这个技术在思科2004、2005年我们搞的的集群式路由器 CRS 不就是这样吗?

那时候,运营商的网络工程师真的很厉害

用在中国电信核心区的集群路由器的样子就是这张照片。所以2007年作为一名运营商的网络工程师感觉很厉害,技术要求也不一样,工程师不但必须要懂ISIS、BGP、MPLS,要非常非常熟练 QOS、HQOS、Traffic Engineering 等等,2007年网络界工程师的高级技能懂点芯片、Serdes 等等这些很硬的知识。

那个时代作为一名运营商的工程师会经常向设备厂商提出来你给我做什么什么,我们的流量模型是什么什么样子,我们网络需要要做什么什么,这是2007年的时候。那时候运营商的网络工程师会认为 NOC 和 TAC 工程师是很厉害的技术工种,而互联网公司的网络工程师只是一名网管。在思科工作时,我们很尊重电信集团 NOC 的人,他们真的很厉害,被称为网络工程师。

此时,网络运维不再叫做网管了

在2012年情况发生了哪些变化,在2012年,互联网公司的数据中心网络演进成这样,这时候互联网公司的网络运维不再被称为网管而是被称为“互联网公司网络架构师、网络工程师”, 请注意称呼的改变一定是有外因的。

aa0360794fc7fa7582abcf1fb0024c77cc798c81

基本技能也潜移默化地发生改变, 精通 BGP,要懂,深谙硬件行业趋势,需要懂一些系统知识甚至会要求有能力写些代码。大家看到5年发生了一个巨变,这个巨变是什么带来的呢?是服务器的增长带来的。服务器在哪儿呢?服务器在互联网公司,所以互联网公司的网络发生了变化,那它也会带来一个工种的变化,即网管变网工。

多张网的时代

再看一下2014年运营商网络的情况,还是一个 NOC。工程师有什么技能变化呢?我列不出来技能的变化。“我有一张网、两张网、三张网”,“我要运维的网元越来越多”,“我们的人越来越少”,个人技能变化不大。理由是什么呢?

907c5c31b0dff5a2aaac2f030bee744a4a9392eb

图片来源于互联网,我们看一下中国两大T的骨干网,中国电信有一张 ChinaNet,有一张 CN2, 还有国家级的 DCI,可是这三张网为什么不能在一起呢?反正就是“我有一张网、两张网、三张网”,网多力量大。中国电信是多张网来适应多种业务要求,中国移动和中国联通是不是好一点?CU 也差不多,有169、A网和B网。之前我看到联通A网在做 SDN 的事情,中国电信也早几个月发布了2025网络重构,说明大家都是意识到,反正不发展就等死。无论主动还是被动的,变化都是好事。

从大概 2007年—2014年,我觉得运营商真的没变化,网络运维自己就是一个 NOC,没有什么核心的变化,因为没有什么外因推动运营商网络必须发生改变。互联网公司服务器变了,网络架构必须变,任何厂家都不能告诉我们网络长成什么样,因为他不知道我们有多少服务器、多少应用。OEM 设备厂家的核心技术能力是设备端口密度、散热、软件 Feature。网路架构要如何匹配成本、规模、应用性能发展到需要“用户”自己设计,于是这5年来,互联网公司的网络工程师从网管变成了一名网工。

在今天:我们背负巨大压力

远远超过我们的网络架构

再看看现在,当网络变成下图这样时,我们还能是一名网管吗,还能是一名网工吗?当然不能!

39ae99b98a6e3b6620605cef854cee34cc564dad

这是 Facebook 和 Google 的网络拓扑,在这种情况下我们如何做网络运维?你能一根根线去数有多少条链路吗?线上产生丢包、线上发现流量不对称,你怎么去查?业务告警、应用变慢了,如何定位问题?网工写了那么多故障预案,但发生故障时应该用哪个预案?可能对我们来说, Facebook 和 Google 的规模和技术超前我们八年不止。

今天的 BAT 网络架构虽然没有这么复杂也不会太简单,如果今天 BAT 在网络规模、运维遇到问题,可能再过两、三年其他的公司也会面临这样的问题。既然我们今天已经知道了未来两年内要遇到的网络运维的问题,那为什么我们今天不去改变呢。所以,在今天这个时间点,我们可以享受技术的红利,但是我们是不是也要为我们自己的工种,网络工程师的工种做一点事情。

不要让老板知道你是谁

最苦逼的网络运维团队的状况是这样的,如果不出故障,那么今年绩效中等或稍微好一点,出了事老板经常就知道了一个网络运维工程师的存在,说明这名网工今年总出故障;老板不知道你就是安全的。为了让老板认识,我们付出的代价很高。

当然也有好的例子,比如大概在几年前,淘宝运维团队每年的1月1号的凌晨老板会发一封邮件,表扬今年的变更王, 变更王一般就是新进来的小伙子,过一年变成老头,因为他一年需要变更200多次,每次都是凌晨。

我负责一线运维时,我的手机短信半夜不停地响,甚至养成手机不响不习惯,感觉肯定出大事了,漏短信了或者是报警没发出来。这就是我们这些运维工程师的生活,我是觉得变更这件事情在互联网公司是尤其严重。可能运营商好一点,运营商 NOC 变更不是非常频繁,还有花钱请一些驻厂工程师、厂家工程师做些一线运维的工作。可是互联网公司的运维工程师没有办法,要为生产负责。如果我们今天不去改变运维的话,那我们的血、泪、白头发全是为机器做服务了。

98cbfb68798a688610ddbc470cc30ac03bf93381

网工是一个很厉害的专业工种,上次我开过一个玩笑,如果让某云在北京一个Region 整网脱网,要么地震了,要么是网络工程师作变更了。只可能这两件事儿才能让一个 Region 能够脱网。一条命令可以让一个 Region 脱网。

大家可以看到上图,如果找一些论据来证明过去的悲惨经历,大家可以看到的是,在所有的故障原因里面,敲错命令行是排第二的,硬件的问题是排第一的。这意味着网络运维是一个非常高危的工种,那怎么解决网络运维非常高危的问题呢,一定要把命令行消灭掉。不然的话一年200多天的变更,还是半夜去操作,你怎么变更都会有故障。

在明天:我们是一名网络架构师

ec51e2c81af8398da8222ba1d006e84b580204c2

我希望未来的网络工程师可以说我是一名网络架构师,我们很骄傲地说我是一名架构师,不是网管也不是网工。

一个网络架构师具备什么样的能力?

首先是成本的问题,网络架构师必须考虑整体成本而不是局部成本。前段时间我在微信上跟人讨论万兆光和电问题,表现为 AOC 这个产业的存在,我认为万兆光电之争没有绝对的对和错。与使用公司的体量和业务架构有关、跟产业时间点有关。我们不能说 Google 现在全部是光,国内的万兆网络就要选择光。

从网工的角度来说,一根 AOC 的线不贵;一个服务器的工程师说,一个网卡光口比电口便宜50块人民币,但是作为一名架构师同时需要考虑布线的成本、库存的成本、供应链的成本是什么,都要综合考量。作为一个架构师要去想整体成本是什么,而不是只关心自己本专业覆盖的成本。所以我列了整体成本和局部最优,架构师是考虑整体成本的最优,只有一个网管和网工才会考虑局部最优。

第二个是说用新技术颠覆成本还是躺在技术红利上的Cost Down。前面教主说了,我们软件写不过美国人,因为编译器是他们写的,编程语言是他们发明的,也就是说某些技术红利 Google 和 Facebook 先享受了,我们该如何看待和享受技术红利?

我认为技术团队应该不是让采购不停地讨价还价,让采购压榨市场供应链,让我们国家的每个人都很苦逼。我觉得做工程师要有情怀,要做一些颠覆性质的技术创新,以技术颠覆成本,而不是躺在那儿享受技术的伪红利,这是我对网络架构师的看法。

一种关于运维复杂度的情怀

还有一种情怀,关于运维复杂度和情怀,工程师很容易陷入技能情怀里,将简单的事情做复杂。我自己每年也会反思,做架构师是很纠结的事,有些技术选择是猜的而不是有什么理论模型。在这里面的选择要放弃一些情怀,不要将简单的事做复杂。

我还发现一个特点,所有的互联网公司都有一个神一样的运维工程师存在,所有的拓扑都在他脑子里,所有的IP地址都在他的脑子里。我觉得在未来的网络里不要神一样的运维工程师的存在,让机器去做重复和大规模的工作。

我觉得今天是应用在驱动改变,那作为一名网络架构师,应该考虑业务驱动改变。应用驱动业务,业务驱动基础设施。举个例子,在过去是厂家有什么、芯片有什么,我们就用什么。当我们面临发生Silence drop的时候,就会有芯片的厂家说他们的芯片有一个功能,可以告诉你什么时候丢包。通常再需要写个Tools来可视化“哪里丢包了”。

可是我们换位思考芯片发生 Silence Drop 是什么触发的?如果是芯片集成度的问题是不是下一代就能解决它,再反推在现在的时间点如何做技术取舍后的workaround,如今的运维团队里面有非常多的工具,这些工具使用频率低也没有人维护,作为网络架构师,需要从根本上思考如何解决本质问题。

还有一个期望,整个网络设备的上线、运维、配制管理是否可以像服务器一样?其实不是的,这不是语言的问题,是系统开放性的问题。当然这也是一个期望,可能需要推动用户驱动厂家开放,而不是等厂家主动说它如何开放,如果网络的上线、变更等等跟服务器一致,将会是多节省成本。

5d8bc0aa0c82ea73d42a0674ac022085c12470b6

最后,现在大家都在讲SDN,但是我很担心一件事情没有想清楚,会不会有一天网络运维团队运维的不是几百台路由器而是万把台服务器;一个网络运维团队运维的是一大堆服务器,这是一直比较困扰我的东西。我是坚定地站在 SDN、NFV 阵营的,但是 NFV 的运维形态如何?

再引用下 Google 的一句话“要么发展,要么死”,也引申下今天的主题,我们要重新定义运维,而不是运维向运营转型。我不太相信一个运维团队说“我从成本中心变成效益中心、运营中心。”我认为运维是为运营服务的,所有运维得想怎样解放自己。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java架构148讲视频教程 │ ├─1-148视频教程 │ 第01节:整体课程概览.flv │ 第02节:分模块、分程管理.avi │ 第03节:多模块多Web应用合并War包.avi │ 第04节:Git基本原理和安装配置使用.avi │ 第05节:TortoiseGit的本地使用.avi │ 第06节:Egit的本地使用.avi │ 第07节:远程使用以及冲突解决.avi │ 第08节:基本业务功能和数据字典.avi │ 第09节:搭建基础的开发环境.avi │ 第10节:Spring+Mybatis实现DAO.avi │ 第11节:Mybatis的分页实现.avi │ 第12节:Service的实现以及模块化.avi │ 第13节:Spring MVC实现Web层开发.avi │ 第14节:新增和列表页面和分页tag.avi │ 第15节:带查询的分页、修改和删除页面.avi │ 第16节:Mybatis动态查询和Json自动拼装.avi │ 第17节:X-gen生成所需的DAO部分模板.avi │ 第18节:X-gen所需service、web层模板.avi │ 第19节:X-gen生成相应的Visitor.avi │ 第20节:X-gen生成需要的Action.avi │ 第21节:通过X-gen生成商品模块.avi │ 第22节:通过X-gen生成购物车模块.avi │ 第23节:通过X-gen来生成订单和库存模块.avi │ 第24节:加入ehcache,把程加入到Git.avi │ 第25节:实现前端的业务登录等功能.avi │ 第26节:测试并调整登录的业务功能.avi │ 第27节:实现index功能的开发.avi │ 第28节:Index、商品详细页和购物车.avi │ 第29节:完成下订单和修改库存的功能.avi │ 第30节:把应用部署到Linux服务器上.avi │ 第31节:Nginx简介、安装和基本运行.avi │ 第32节:Nginx的进程结构、基本配置.avi │ 第33节:Nginx常用核心模块指令.avi │ 第34节:Nginx的Http模块部分的指令.avi │ 第35节:Nginx的Location区段.avi │ 第36节:Nginx的反向代理模块.avi │ 第37节:反向代理和动静分离的实现.avi │ 第38节:Nginx的负载均衡模块.avi │ 第39节:Nginx的Rewrite模块.avi │ 第40节:更多模块的基本功能和配置.avi │ 第41节:Nginx的配置优化以及使用建议.avi │ 第42节:应用上Nginx过后的体系结构.avi │ 第43节:Varnish简介、安装和基本使用.avi │ 第44节:VCL基本语法和使用,负载均衡.avi │ 第45节:VCL实现健康检查、ACL访问控制.avi │ 第46节:Grace模式和Saint模式.avi │ 第47节:VCL常用的函数和Http头.avi │ 第48节:VCL的子程序和Request流程.avi │ 第49节:VCL的变量和常见的应用片断.avi │ 第50节:使用CLI来管理Varnish.avi │ 第51节:Varnishd命令和运行期参数.avi │ 第52节:Varnish的日志操作.avi │ 第53节:规划缓存大小和提高命中率.avi │ 第54节:性能调优和配置使用建议.avi │ 第55节:Nginx+Varnish组合应用.avi │ 第56节:Varnish对性能的提升和优化.avi │ 第57节:应用上Varnish后的体系结构.avi │ 第58节:Memcached入门和缓存的含义.avi │ 第59节:Memcached基本的作原理.avi │ 第60节:Memcached基本的操作命令.avi │ 第61节:理解Memcached的数据存储方式.avi │ 第62节:内存分配的Chunk、Slab演示.avi │ 第63节:Memcached的Java客户端开发.avi │ 第64节:理解Memcached的分布式方式.avi │ 第65节:Memcached内存调优.avi │ 第66节:Memcached的限制和使用建议.avi │ 第67节:分析如何使用Memcached开发.avi │ 第68节:Memcached结合业务功能开发.avi │ 第69节:Nginx+Varnish+基本业务功能+Memcached.avi │ 第70节:应用Memcached后的体系结构.avi │ 第71节:ActiveMQ入门和消息中间件.avi │ 第72节:JMS基本概念和模型.avi │ 第73节:JMS的可靠性机制.avi │ 第74节:JMS的API结构和开发步骤.avi │ 第75节:Broker的启动方式.avi │ 第76节:ActiveMQ结合Spring开发.avi │ 第77节:ActiveMQ支持的传输协议.avi │ 第78节:ActiveMQ消息存储持久化.avi │ 第79节:ActiveMQ的静态网络链接.avi │ 第80节:多线程consumer访问集群.avi │ 第81节:集群下的消息回流功能.avi │ 第82节:容错的链接和动态网络连接.avi │ 第83节:ActiveMQ的集群.avi │ 第84节:Destination高级特性一.avi │ 第85节:Destination高级特性二.avi │ 第86节:MessageDispatch高级特性一.avi │ 第87节:MessageDispatch高级特性二.avi │ 第88节:MessageDispatch高级特性三.avi │ 第89节:Message高级特性一.avi │ 第90节:Message高级特性二.avi │ 第91节:Consumer高级特性一.avi │ 第92节:Consumer高级特性二.avi │ 第93节:集成ActiveMQ和Tomcat.avi │ 第94节:AMQ优化和使用建议.avi │ 第95节:AMQ结合业务功能的开发一.avi │ 第96节:AMQ结合业务功能的开发二.avi │ 第97节:AMQ结合业务功能的开发三.avi │ 第98节:AMQ和业务功能组合测试.avi │ 第99节:基本的性能测试.avi │ 第100节:应用上AMQ后的体系结构.avi │ 第101节:MongoDB简介和NoSQL.avi │ 第102节:MongoDB安装和基本使用.avi │ 第103节:MongoDB基本概念.avi │ 第104节:MongoDB增删改操作一.avi │ 第105节:MongoDB增删改操作二.avi │ 第106节:MongoDB查询操作一.avi │ 第107节:MongoDB查询操作二.avi │ 第108节:聚合框架第一部分.avi │ 第109节:聚合框架第二部分.avi │ 第110节:聚合框架第三部分.avi │ 第111节:理解文档存储机制.avi │ 第112节:MongoDB的索引一.avi │ 第113节:MongoDB的索引二.avi │ 第114节:Capped集合和GridFS.avi │ 第115节:MongoDB的副本集一.avi │ 第116节:MongoDB的副本集二.avi │ 第117节:副本集的基本原理.avi │ 第118节:副本集管理和主从复制.avi │ 第119节:MongoDB的分片一.avi │ 第120节:MongoDB的分片二.avi │ 第121节:MongoDB的分片三.avi │ 第122节:MongoDB分片的片键选择.avi │ 第123节:MongoDB分片的管理.avi │ 第124节:监控状态和身份验证.avi │ 第125节:备份和恢复.avi │ 第126节:Java操作MongoDB.avi │ 第127节:MongoDB和Spring.avi │ 第128节:应用建议及最佳实践.avi │ 第129节:MongoDB结合应用开发一.avi │ 第130节:MongoDB结合应用开发二.avi │ 第131节:应用MongoDB后体系结构.avi │ 第132节:MogileFS简介和入门.avi │ 第133节:MogileFS安装和基本配置.avi │ 第134节:理解MogileFS的基本概念.avi │ 第135节:理解MogileFS的基本原理.avi │ 第136节:MogileFS的Java客户端开发.avi │ 第137节:基于MogileFS的小应用一.avi │ 第138节:基于MogileFS的小应用二.avi │ 第139节:基于MogileFS的小应用三.avi │ 第140节:基于MogileFS的小应用四.avi │ 第141节:MogileFS和Nginx的集成.avi │ 第142节:应用MogileFS后体系结构变化.avi │ 第143节:阶段一小结合构建的基本架构.avi │ 第144节:阶段一程整体打包部署.avi │ 第145节:测试Nginx、Varnish和MogileFS.avi │ 第146节:测试Memcached和MongoDB.avi │ 第147节:测试应用结合ActiveMQ的功能.avi │ 第148节:阶段一之后的发展和架构演变.avi │ ├─x-gen-ppt │ 使用外部主题.pdf │ 具体调用.pdf │ 分发调度.pdf │ 整体介绍.pdf │ 模板管理.pdf │ 生成代理.pdf │ 生成输出.pdf │ 自定义外部主题.pdf │ 配置管理.pdf │ ├─x-gen-projects │ └─project │ ├─.metadata │ │ │ .lock │ │ │ .log │ │ │ version.ini │ │ │ │ │ ├─.mylyn │ │ │ │ .tasks.xml.zip │ │ │ │ repositories.xml.zip │ │ │ │ tasks.xml.zip │ │ │ │ │ │ │ └─contexts │ │ └─.plugins │ │ ├─org.eclipse.core.resources │ │ │ ├─.history │ │ │ │ ├─0 │ │ │ │ ├─1 │ │ │ │ ├─10 │ │ │ │ ├─11 │ │ │ │ ├─12 │ │ │ │ ├─13 │ │ │ │ ├─14 │ │ │ │ ├─15 │ │ │ │ ├─16 │ │ │ │ ├─17 │ │ │ │ ├─18 │ │ │ │ ├─19 │ │ │ │ ├─1a │ │ │ │ ├─1b │ │ │ │ ├─1c │ │ │ │ ├─1d │ │ │ │ ├─1e │ │ │ │ ├─1f │ │ │ │ ├─2 │ │ │ │ ├─20 │ │ │ │ ├─21 │ │ │ │ ├─22 │ │ │ │ ├─23 │ │ │ │ ├─24 │ │ │ │ ├─25 │ │ │ │ ├─26 │ │ │ │ ├─27 │ │ │ │ ├─28 │ │ │ │ ├─29 │ │ │ │ ├─2a │ │ │ │ ├─2b │ │ │ │ ├─2c │ │ │ │ ├─2d │ │ │ │ ├─2e │ │ │ │ ├─2f │ │ │ │ ├─3 │ │ │ │ ├─30 │ │ │ │ ├─31 │ │ │ │ ├─32 │ │ │ │ ├─33 │ │ │ │ ├─34 │ │ │ │ ├─35 │ │ │ │ ├─36 │ │ │ │ ├─37 │ │ │ │ ├─38 │ │ │ │ ├─39 │ │ │ │ ├─3a │ │ │ │ ├─3b │ │ │ │ ├─3c │ │ │ │ ├─3d │ │ │ │ ├─3e │ │ │ │ ├─3f │ │ │ │ ├─4 │ │ │ │ ├─40 │ │ │ │ ├─41 │ │ │ │ ├─42 │ │ │ │ ├─43 │ │ │ │ ├─44 │ │ │ │ ├─45 │ │ │ │ ├─46 │ │ │ │ ├─47 │ │ │ │ ├─48 │ │ │ │ ├─49 │ │ │ │ ├─4a │ │ │ │ ├─4b │ │ │ │ ├─4c │ │ │ │ ├─4d │ │ │ │ ├─4e │ │ │ │ ├─4f │ │ │ │ ├─5 │ │ │ │ ├─50 │ │ │ │ ├─51 │ │ │ │ ├─52 │ │ │ │ ├─53 │ │ │ │ ├─54 │ │ │ │ ├─55 │ │ │ │ ├─56 │ │ │ │ ├─57 │ │ │ │ ├─58 │ │ │ │ ├─59 │ │ │ │ ├─5a │ │ │ │ ├─5b │ │ │ │ ├─5c │ │ │ │ ├─5d │ │ │ │ ├─5e │ │ │ │ ├─5f │ │ │ │ ├─6 │ │ │ │ ├─60 │ │ │ │ ├─61 │ │ │ │ ├─62 │ │ │ │ ├─63 │ │ │ │ ├─64 │ │ │ │ ├─65 │ │ │ │ ├─66 │ │ │ │ ├─67 │ │ │ │ ├─68 │ │ │ │ ├─69 │ │ │ │ ├─6a │ │ │ │ ├─6b │ │ │ │ ├─6c │ │ │ │ ├─6d │ │ │ │ ├─6e │ │ │ │ ├─6f │ │ │ │ ├─7 │ │ │ │ ├─70 │ │ │ │ ├─71 │ │ │ │ ├─72 │ │ │ │ ├─73 │ │ │ │ ├─74 │ │ │ │ ├─75 │ │ │ │ ├─76 │ │ │ │ ├─77 │ │ │ │ ├─78 │ │ │ │ ├─79 │ │ │ │ ├─7a │ │ │ │ ├─7b │ │ │ │ ├─7c │ │ │ │ ├─7d │ │ │ │ ├─7e │ │ │ │ ├─7f │ │ │ │ │ 40f32f632b3900121032a38527baf77d │ │ │ │ │ │ │ │ │ ├─8 │ │ │ │ ├─80 │ │ │ │ ├─81 │ │ │ │ ├─82 │ │ │ │ ├─83 │ │ │ │ ├─84 │ │ │ │ ├─85 │ │ │ │ ├─86 │ │ │ │ ├─87 │ │ │ │ ├─88 │ │ │ │ ├─89 │ │ │ │ ├─8a │ │ │ │ ├─8b │ │ │ │ ├─8c │ │ │ │ ├─8d │ │ │ │ ├─8e │ │ │ │ ├─8f │ │ │ │ ├─9 │ │ │ │ ├─90 │ │ │ │ ├─91 │ │ │ │ ├─92 │ │ │ │ ├─93 │ │ │ │ ├─94 │ │ │ │ ├─95 │ │ │ │ ├─96 │ │ │ │ ├─97 │ │ │ │ ├─98 │ │ │ │ ├─99 │ │ │ │ ├─9a │ │ │ │ ├─9b │ │ │ │ ├─9c │ │ │ │ ├─9d │ │ │ │ ├─9e │ │ │ │ ├─9f │ │ │ │ ├─a │ │ │ │ ├─a0 │ │ │ │ ├─a1 │ │ │ │ ├─a2 │ │ │ │ ├─a3 │ │ │ │ ├─a4 │ │ │ │ ├─a5 │ │ │ │ ├─a6 │ │ │ │ ├─a7 │ │ │ │ ├─a8 │ │ │ │ ├─a9 │ │ │ │ ├─aa │ │ │ │ ├─ab │ │ │ │ ├─ac │ │ │ │ ├─ad │ │ │ │ ├─ae │ │ │ │ ├─af │ │ │ │ ├─b │ │ │ │ ├─b0 │ │ │ │ ├─b1 │ │ │ │ ├─b2 │ │ │ │ ├─b3 │ │ │ │ ├─b4 │ │ │ │ ├─b5 │ │ │ │ ├─b6 │ │ │ │ ├─b7 │ │ │ │ ├─b8 │ │ │ │ ├─b9 │ │ │ │ ├─ba │ │ │ │ ├─bb │ │ │ │ ├─bc │ │ │ │ ├─bd │ │ │ │ ├─be │ │ │ │ ├─bf │ │ │ │ ├─c │ │ │ │ ├─c0 │ │ │ │ ├─c1 │ │ │ │ ├─c2 │ │ │ │ ├─c3 │ │ │ │ ├─c4 │ │ │ │ ├─c5 │ │ │ │ ├─c6 │ │ │ │ ├─c7 │ │ │ │ ├─c8 │ │ │ │ ├─c9 │ │ │ │ ├─ca │ │ │ │ ├─cb │ │ │ │ ├─cc │ │ │ │ ├─cd │ │ │ │ ├─ce │ │ │ │ ├─cf │ │ │ │ ├─d │ │ │ │ ├─d0 │ │ │ │ ├─d1 │ │ │ │ ├─d2 │ │ │ │ ├─d3 │ │ │ │ ├─d4 │ │ │ │ ├─d5 │ │ │ │ ├─d6 │ │ │ │ ├─d7 │ │ │ │ ├─d8 │ │ │ │ ├─d9 │ │ │ │ ├─da │ │ │ │ ├─db │ │ │ │ │ 709288fe9ef800111a0c80454ed7cb85 │ │ │ │ │ │ │ │ │ ├─dc │ │ │ │ ├─dd │ │ │ │ ├─de │ │ │ │ ├─df │ │ │ │ ├─e │ │ │ │ ├─e0 │ │ │ │ ├─e1 │ │ │ │ ├─e2 │ │ │ │ ├─e3 │ │ │ │ ├─e4 │ │ │ │ ├─e5 │ │ │ │ ├─e6 │ │ │ │ ├─e7 │ │ │ │ ├─e8 │ │ │ │ ├─e9 │ │ │ │ ├─ea │ │ │ │ ├─eb │ │ │ │ ├─ec │ │ │ │ ├─ed │ │ │ │ ├─ee │ │ │ │ ├─ef │ │ │ │ ├─f │ │ │ │ ├─f0 │ │ │ │ ├─f1 │ │ │ │ ├─f2 │ │ │ │ ├─f3 │ │ │ │ ├─f4 │ │ │ │ ├─f5 │ │ │ │ ├─f6 │ │ │ │ ├─f7 │ │ │ │ ├─f8 │ │ │ │ ├─f9 │ │ │ │ ├─fa │ │ │ │ ├─fb │ │ │ │ ├─fc │ │ │ │ ├─fd │ │ │ │ ├─fe │ │ │ │ │ 30ae34632b3900121032a38527baf77d │ │ │ │ │ │ │ │ │ └─ff │ │ │ ├─.projects │ │ │ │ ├─test │ │ │ │ │ │ .markers │ │ │ │ │ │ │ │ │ │ │ ├─org.eclipse.jdt.apt.core │ │ │ │ │ └─org.eclipse.jdt.core │ │ │ │ │ state.dat │ │ │ │ │ │ │ │ │ └─x-gen │ │ │ │ │ .markers │ │ │ │ │ │ │ │ │ ├─.indexes │ │ │ │ │ └─6e │ │ │ │ │ └─6b │ │ │ │ │ └─fe │ │ │ │ │ └─92 │ │ │ │ │ └─92 │ │ │ │ │ ├─40 │ │ │ │ │ │ └─6c │ │ │ │ │ │ history.index │ │ │ │ │ │ │ │ │ │ │ └─b9 │ │ │ │ │ history.index │ │ │ │ │ │ │ │ │ ├─org.eclipse.jdt.apt.core │ │ │ │ └─org.eclipse.jdt.core │ │ │ │ state.dat │ │ │ │ │ │ │ ├─.root │ │ │ │ │ 11.tree │ │ │ │ │ │ │ │ │ └─.indexes │ │ │ │ history.version │ │ │ │ properties.index │ │ │ │ properties.version │ │ │ │ │ │ │ └─.safetable │ │ │ org.eclipse.core.resources │ │ │ │ │ ├─org.eclipse.core.runtime │ │ │ └─.settings │ │ │ org.eclipse.core.resources.prefs │ │ │ org.eclipse.debug.ui.prefs │ │ │ org.eclipse.epp.usagedata.recording.prefs │ │ │ org.eclipse.jdt.core.prefs │ │ │ org.eclipse.jdt.launching.prefs │ │ │ org.eclipse.jdt.ui.prefs │ │ │ org.eclipse.jst.j2ee.webservice.ui.prefs │ │ │ org.eclipse.jst.jsp.core.prefs │ │ │ org.eclipse.mylyn.context.core.prefs │ │ │ org.eclipse.mylyn.java.ui.prefs │ │ │ org.eclipse.mylyn.monitor.ui.prefs │ │ │ org.eclipse.team.cvs.ui.prefs │ │ │ org.eclipse.team.ui.prefs │ │ │ org.eclipse.ui.editors.prefs │ │ │ org.eclipse.ui.ide.prefs │ │ │ org.eclipse.ui.prefs │ │ │ org.eclipse.ui.workbench.prefs │ │ │ org.eclipse.wst.jsdt.ui.prefs │ │ │ org.eclipse.wst.sse.core.prefs │ │ │ org.eclipse.wst.sse.ui.prefs │ │ │ org.eclipse.wst.ws.service.policy.prefs │ │ │ org.eclipse.wst.xml.ui.prefs │ │ │ │ │ ├─org.eclipse.debug.core │ │ │ └─.launches │ │ │ MyTest (1).launch │ │ │ MyTest.launch │ │ │ t.launch │ │ │ │ │ ├─org.eclipse.debug.ui │ │ │ dialog_settings.xml │ │ │ launchConfigurationHistory.xml │ │ │ │ │ ├─org.eclipse.epp.usagedata.recording │ │ │ upload0.csv │ │ │ upload1.csv │ │ │ upload10.csv │ │ │ upload11.csv │ │ │ upload12.csv │ │ │ upload13.csv │ │ │ upload14.csv │ │ │ upload15.csv │ │ │ upload16.csv │ │ │ upload17.csv │ │ │ upload18.csv │ │ │ upload19.csv │ │ │ upload2.csv │ │ │ upload20.csv │ │ │ upload21.csv │ │ │ upload22.csv │ │ │ upload23.csv │ │ │ upload24.csv │ │ │ upload25.csv │ │ │ upload26.csv │ │ │ upload27.csv │ │ │ upload28.csv │ │ │ upload29.csv │ │ │ upload3.csv │ │ │ upload30.csv │ │ │ upload31.csv │ │ │ upload32.csv │ │ │ upload33.csv │ │ │ upload34.csv │ │ │ upload35.csv │ │ │ upload36.csv │ │ │ upload37.csv │ │ │ upload38.csv │ │ │ upload39.csv │ │ │ upload4.csv │ │ │ upload40.csv │ │ │ upload41.csv │ │ │ upload42.csv │ │ │ upload43.csv │ │ │ upload44.csv │ │ │ upload45.csv │ │ │ upload46.csv │ │ │ upload47.csv │ │ │ upload48.csv │ │ │ upload49.csv │ │ │ upload5.csv │ │ │ upload50.csv │ │ │ upload51.csv │ │ │ upload52.csv │ │ │ upload53.csv │ │ │ upload54.csv │ │ │ upload55.csv │ │ │ upload56.csv │ │ │ upload57.csv │ │ │ upload58.csv │ │ │ upload59.csv │ │ │ upload6.csv │ │ │ upload7.csv │ │ │ upload8.csv │ │ │ upload9.csv │ │ │ usagedata.csv │ │ │ │ │ ├─org.eclipse.jdt.core │ │ │ 1285665056.index │ │ │ 1443231178.index │ │ │ 1583475091.index │ │ │ 1642086229.index │ │ │ 165780461.index │ │ │ 1836311715.index │ │ │ 2335302788.index │ │ │ 2424825842.index │ │ │ 2559444288.index │ │ │ 2926361562.index │ │ │ 3271193799.index │ │ │ 3561449303.index │ │ │ 3887831799.index │ │ │ 504403929.index │ │ │ 959717129.index │ │ │ externalLibsTimeStamps │ │ │ invalidArchivesCache │ │ │ javaLikeNames.txt │ │ │ nonChainingJarsCache │ │ │ participantsIndexNames.txt │ │ │ savedIndexNames.txt │ │ │ variablesAndContainers.dat │ │ │ │ │ ├─org.eclipse.jdt.launching │ │ │ .install.xml │ │ │ libraryInfos.xml │ │ │ │ │ ├─org.eclipse.jdt.ui │ │ │ dialog_settings.xml │ │ │ OpenTypeHistory.xml │ │ │ QualifiedTypeNameHistory.xml │ │ │ │ │ ├─org.eclipse.jst.jsp.core │ │ │ ├─jspsearch │ │ │ │ 4166850570.index │ │ │ │ 51038836.index │ │ │ │ │ │ │ ├─taglibindex │ │ │ │ 2926361562.dat │ │ │ │ 3271193799.dat │ │ │ │ │ │ │ └─translators │ │ ├─org.eclipse.ltk.core.refactoring │ │ │ └─.refactorings │ │ │ ├─.workspace │ │ │ │ └─2012 │ │ │ │ ├─11 │ │ │ │ │ └─48 │ │ │ │ │ refactorings.history │ │ │ │ │ refactorings.index │ │ │ │ │ │ │ │ │ ├─8 │ │ │ │ │ └─35 │ │ │ │ │ refactorings.history │ │ │ │ │ refactorings.index │ │ │ │ │ │ │ │ │ └─9 │ │ │ │ ├─36 │ │ │ │ │ refactorings.history │ │ │ │ │ refactorings.index │ │ │ │ │ │ │ │ │ └─37 │ │ │ │ refactorings.history │ │ │ │ refactorings.index │ │ │ │ │ │ │ ├─test │ │ │ │ └─2012 │ │ │ │ └─9 │ │ │ │ └─37 │ │ │ │ refactorings.history │ │ │ │ refactorings.index │ │ │ │ │ │ │ └─x-gen │ │ │ └─2012 │ │ │ ├─8 │ │ │ │ └─35 │ │ │ │ refactorings.history │ │ │ │ refactorings.index │ │ │ │ │ │ │ └─9 │ │ │ └─36 │ │ │ refactorings.history │ │ │ refactorings.index │ │ │ │ │ ├─org.eclipse.ltk.ui.refactoring │ │ │ dialog_settings.xml │ │ │ │ │ ├─org.eclipse.mylyn.bugzilla.core │ │ ├─org.eclipse.mylyn.tasks.ui │ │ ├─org.eclipse.pde.api.tools │ │ ├─org.eclipse.pde.core │ │ │ ├─.cache │ │ │ │ clean-cache.properties │ │ │ │ │ │ │ └─.p2 │ │ │ └─org.eclipse.equinox.p2.engine │ │ │ └─profileRegistry │ │ ├─org.eclipse.team.cvs.core │ │ ├─org.eclipse.ui.editors │ │ │ dialog_settings.xml │ │ │ │ │ ├─org.eclipse.ui.ide │ │ │ dialog_settings.xml │ │ │ │ │ ├─org.eclipse.ui.intro │ │ ├─org.eclipse.ui.workbench │ │ │ dialog_settings.xml │ │ │ workbench.xml │ │ │ workingsets.xml │ │ │ │ │ ├─org.eclipse.ui.workbench.texteditor │ │ │ dialog_settings.xml │ │ │ │ │ ├─org.eclipse.wst.common.modulecore │ │ ├─org.eclipse.wst.internet.cache │ │ │ cache.xml │ │ │ │ │ ├─org.eclipse.wst.jsdt.core │ │ │ │ externalLibsTimeStamps │ │ │ │ variablesAndContainers.dat │ │ │ │ │ │ │ ├─indexes │ │ │ └─libraries │ │ │ baseBrowserLibrary.js │ │ │ browserWindow.js │ │ │ dom5.js │ │ │ system.js │ │ │ xhr.js │ │ │ │ │ ├─org.eclipse.wst.jsdt.ui │ │ │ OpenTypeHistory.xml │ │ │ QualifiedTypeNameHistory.xml │ │ │ │ │ ├─org.eclipse.wst.server.core │ │ ├─org.eclipse.wst.sse.ui │ │ │ dialog_settings.xml │ │ │ │ │ └─org.eclipse.wst.xml.core │ │ default_catalog.xml │ │ system_catalog.xml │ │ │ ├─test │ │ │ .classpath │ │ │ .project │ │ │ │ │ ├─.settings │ │ │ org.eclipse.jdt.core.prefs │ │ │ │ │ ├─bin │ │ │ ├─cn │ │ │ │ └─javass │ │ │ │ ├─test │ │ │ │ │ │ MyTest.class │ │ │ │ │ │ │ │ │ │ │ └─test │ │ │ │ ├─themes │ │ │ │ │ ├─mytheme │ │ │ │ │ │ │ ThemeConf.xml │ │ │ │ │ │ │ │ │ │ │ │ │ ├─actions │ │ │ │ │ │ │ VoAction.class │ │ │ │ │ │ │ VoHbmXmlAction.class │ │ │ │ │ │ │ │ │ │ │ │ │ ├─decorators │ │ │ │ │ │ │ MyDecorator.class │ │ │ │ │ │ │ │ │ │ │ │ │ ├─outtype │ │ │ │ │ │ │ MyOutput.class │ │ │ │ │ │ │ │ │ │ │ │ │ ├─template │ │ │ │ │ │ │ └─vo │ │ │ │ │ │ │ Model.hbm.txt │ │ │ │ │ │ │ Model.txt │ │ │ │ │ │ │ │ │ │ │ │ │ └─visitors │ │ │ │ │ │ VoProperty.class │ │ │ │ │ │ VoPropertyGetterSetter.class │ │ │ │ │ │ VoPropertyHbmXml.class │ │ │ │ │ │ │ │ │ │ │ └─simple │ │ │ │ │ │ ThemeConf.xml │ │ │ │ │ │ │ │ │ │ │ ├─actions │ │ │ │ │ │ GenAddPageAction.class │ │ │ │ │ │ GenBusinessEbiAction.class │ │ │ │ │ │ GenBusinessEboAction.class │ │ │ │ │ │ GenDaoDaoAction.class │ │ │ │ │ │ GenDaoImplAction.class │ │ │ │ │ │ GenDeletePageAction.class │ │ │ │ │ │ GenHbmXmlAction.class │ │ │ │ │ │ GenListPageAction.class │ │ │ │ │ │ GenQueryModelAction.class │ │ │ │ │ │ GenQueryPageAction.class │ │ │ │ │ │ GenSpring2XmlAction.class │ │ │ │ │ │ GenStruts2XmlAction.class │ │ │ │ │ │ GenUpdatePageAction.class │ │ │ │ │ │ GenVoAction.class │ │ │ │ │ │ GenWebActionAction.class │ │ │ │ │ │ GenWebModelAction.class │ │ │ │ │ │ │ │ │ │ │ ├─decorators │ │ │ │ │ ├─outputtypes │ │ │ │ │ │ MyOutput.class │ │ │ │ │ │ │ │ │ │ │ ├─template │ │ │ │ │ │ ├─business │ │ │ │ │ │ │ Ebi.txt │ │ │ │ │ │ │ Ebo.txt │ │ │ │ │ │ │ │ │ │ │ │ │ ├─dao │ │ │ │ │ │ │ DAO.txt │ │ │ │ │ │ │ H3Impl.txt │ │ │ │ │ │ │ │ │ │ │ │ │ ├─pages │ │ │ │ │ │ │ add.txt │ │ │ │ │ │ │ delete.txt │ │ │ │ │ │ │ list.txt │ │ │ │ │ │ │ query.txt │ │ │ │ │ │ │ update.txt │ │ │ │ │ │ │ │ │ │ │ │ │ ├─vo │ │ │ │ │ │ │ Model.hbm.txt │ │ │ │ │ │ │ Model.txt │ │ │ │ │ │ │ QueryModel.txt │ │ │ │ │ │ │ │ │ │ │ │ │ ├─web │ │ │ │ │ │ │ Action.txt │ │ │ │ │ │ │ WebModel.txt │ │ │ │ │ │ │ │ │ │ │ │ │ └─xmls │ │ │ │ │ │ applicationContext.txt │ │ │ │ │ │ struts.txt │ │ │ │ │ │ │ │ │ │ │ └─visitors │ │ │ │ │ AddPageInputs.class │ │ │ │ │ GenH3ImplPreparedHql.class │ │ │ │ │ GenH3ImplSetHqlValue.class │ │ │ │ │ GetterAndSetter.class │ │ │ │ │ HbmProperties.class │ │ │ │ │ ListPageTitles.class │ │ │ │ │ ListPageValues.class │ │ │ │ │ QmGetterAndSetter.class │ │ │ │ │ QmPropertiesDesign.class │ │ │ │ │ QueryPageInputs.class │ │ │ │ │ ToStringStr.class │ │ │ │ │ UpdatePageInputs.class │ │ │ │ │ VoPropertiesDesign.class │ │ │ │ │ │ │ │ │ └─xgenconfxml │ │ │ │ GenConf.xml │ │ │ │ MyThemeDepGenConf.xml │ │ │ │ MyThemeUserGenConf.xml │ │ │ │ │ │ │ └─com │ │ │ └─abc │ │ │ └─myproject │ │ │ ├─dep │ │ │ │ └─vo │ │ │ │ DepModel.class │ │ │ │ DepModel.hbm.xml │ │ │ │ │ │ │ └─user │ │ │ └─vo │ │ │ UserModel.class │ │ │ UserModel.hbm.xml │ │ │ │ │ ├─build │ │ │ └─com │ │ │ └─abc │ │ │ └─myproject │ │ │ ├─dep │ │ │ │ └─vo │ │ │ │ DepModel.hbm.xml │ │ │ │ DepModel.java │ │ │ │ │ │ │ └─user │ │ │ └─vo │ │ │ UserModel.hbm.xml │ │ │ UserModel.java │ │ │ │ │ ├─lib │ │ │ bsh-2.0b4.jar │ │ │ x-gen-no-themes.jar │ │ │ │ │ └─src │ │ ├─cn │ │ │ └─javass │ │ │ ├─test │ │ │ │ │ MyTest.java │ │ │ │ │ │ │ │ │ └─test │ │ │ ├─themes │ │ │ │ ├─mytheme │ │ │ │ │ │ ThemeConf.xml │ │ │ │ │ │ │ │ │ │ │ ├─actions │ │ │ │ │ │ VoAction.java │ │ │ │ │ │ VoHbmXmlAction.java │ │ │ │ │ │ │ │ │ │ │ ├─decorators │ │ │ │ │ │ MyDecorator.java │ │ │ │ │ │ │ │ │ │ │ ├─outtype │ │ │ │ │ │ MyOutput.java │ │ │ │ │ │ │ │ │ │ │ ├─template │ │ │ │ │ │ └─vo │ │ │ │ │ │ Model.hbm.txt │ │ │ │ │ │ Model.txt │ │ │ │ │ │ │ │ │ │ │ └─visitors │ │ │ │ │ VoProperty.java │ │ │ │ │ VoPropertyGetterSetter.java │ │ │ │ │ VoPropertyHbmXml.java │ │ │ │ │ │ │ │ │ └─simple │ │ │ │ │ ThemeConf.xml │ │ │ │ │ │ │ │ │ ├─actions │ │ │ │ │ GenAddPageAction.java │ │ │ │ │ GenBusinessEbiAction.java │ │ │ │ │ GenBusinessEboAction.java │ │ │ │ │ GenDaoDaoAction.java │ │ │ │ │ GenDaoImplAction.java │ │ │ │ │ GenDeletePageAction.java │ │ │ │ │ GenHbmXmlAction.java │ │ │ │ │ GenListPageAction.java │ │ │ │ │ GenQueryModelAction.java │ │ │ │ │ GenQueryPageAction.java │ │ │ │ │ GenSpring2XmlAction.java │ │ │ │ │ GenStruts2XmlAction.java │ │ │ │ │ GenUpdatePageAction.java │ │ │ │ │ GenVoAction.java │ │ │ │ │ GenWebActionAction.java │ │ │ │ │ GenWebModelAction.java │ │ │ │ │ │ │ │ │ ├─decorators │ │ │ │ ├─outputtypes │ │ │ │ │ MyOutput.java │ │ │ │ │ │ │ │ │ ├─template │ │ │ │ │ ├─business │ │ │ │ │ │ Ebi.txt │ │ │ │ │ │ Ebo.txt │ │ │ │ │ │ │ │ │ │ │ ├─dao │ │ │ │ │ │ DAO.txt │ │ │ │ │ │ H3Impl.txt │ │ │ │ │ │ │ │ │ │ │ ├─pages │ │ │ │ │ │ add.txt │ │ │ │ │ │ delete.txt │ │ │ │ │ │ list.txt │ │ │ │ │ │ query.txt │ │ │ │ │ │ update.txt │ │ │ │ │ │ │ │ │ │ │ ├─vo │ │ │ │ │ │ Model.hbm.txt │ │ │ │ │ │ Model.txt │ │ │ │ │ │ QueryModel.txt │ │ │ │ │ │ │ │ │ │ │ ├─web │ │ │ │ │ │ Action.txt │ │ │ │ │ │ WebModel.txt │ │ │ │ │ │ │ │ │ │ │ └─xmls │ │ │ │ │ applicationContext.txt │ │ │ │ │ struts.txt │ │ │ │ │ │ │ │ │ └─visitors │ │ │ │ AddPageInputs.java │ │ │ │ GenH3ImplPreparedHql.java │ │ │ │ GenH3ImplSetHqlValue.java │ │ │ │ GetterAndSetter.java │ │ │ │ HbmProperties.java │ │ │ │ ListPageTitles.java │ │ │ │ ListPageValues.java │ │ │ │ QmGetterAndSetter.java │ │ │ │ QmPropertiesDesign.java │ │ │ │ QueryPageInputs.java │ │ │ │ ToStringStr.java │ │ │ │ UpdatePageInputs.java │ │ │ │ VoPropertiesDesign.java │ │ │ │ │ │ │ └─xgenconfxml │ │ │ GenConf.xml │ │ │ MyThemeDepGenConf.xml │ │ │ MyThemeUserGenConf.xml │ │ │ │ │ └─com │ │ └─abc │ │ └─myproject │ │ ├─dep │ │ │ └─vo │ │ │ DepModel.hbm.xml │ │ │ DepModel.java │ │ │ │ │ └─user │ │ └─vo │ │ UserModel.hbm.xml │ │ UserModel.java │ │ │ └─x-gen │ │ .classpath │ │ .project │ │ │ ├─.settings │ │ org.eclipse.jdt.core.prefs │ │ │ ├─bin │ │ └─cn │ │ └─javass │ │ │ MyTest.class │ │ │ │ │ ├─themes │ │ │ └─simple │ │ │ │ ThemeConf.xml │ │ │ │ │ │ │ ├─actions │ │ │ │ GenBusinessEbiAction.class │ │ │ │ GenVoAction.class │ │ │ │ │ │ │ ├─decorators │ │ │ ├─template │ │ │ │ ├─business │ │ │ │ │ Ebi.txt │ │ │ │ │ │ │ │ │ └─vo │ │ │ │ Model.txt │ │ │ │ │ │ │ └─visitors │ │ │ VoPropertiesDesign.class │ │ │ │ │ ├─xgen │ │ │ ├─dispatch │ │ │ │ │ GenFacade.class │ │ │ │ │ │ │ │ │ ├─command │ │ │ │ │ CmdInvoker.class │ │ │ │ │ DefaultCommand.class │ │ │ │ │ GenCommand.class │ │ │ │ │ │ │ │ │ └─executechain │ │ │ │ DefaultHandler.class │ │ │ │ GenHandler.class │ │ │ │ │ │ │ ├─genconf │ │ │ │ │ GenConfEbi.class │ │ │ │ │ GenConfEbo.class │ │ │ │ │ GenConfFactory.class │ │ │ │ │ │ │ │ │ ├─confmanger │ │ │ │ │ ConfManager.class │ │ │ │ │ │ │ │ │ ├─constants │ │ │ │ │ ExpressionEnum.class │ │ │ │ │ GenConfEnum.class │ │ │ │ │ ModuleGenConfEnum.class │ │ │ │ │ ThemeEnum.class │ │ │ │ │ │ │ │ │ ├─implementors │ │ │ │ │ │ GenConfImplementor.class │ │ │ │ │ │ ModuleGenConfImplementor.class │ │ │ │ │ │ ThemeImplementer.class │ │ │ │ │ │ │ │ │ │ │ ├─dynamicparse │ │ │ │ │ │ BeanShellStrategy.class │ │ │ │ │ │ ParseContext.class │ │ │ │ │ │ ParseStrategy.class │ │ │ │ │ │ PropertyReplaceStrategy.class │ │ │ │ │ │ │ │ │ │ │ └─xmlimpl │ │ │ │ │ CommonBuilder.class │ │ │ │ │ GenConfBuilder.class │ │ │ │ │ GenConfXmlImpl.class │ │ │ │ │ ModuleGenConfBuilder.class │ │ │ │ │ ModuleGenConfXmlImpl.class │ │ │ │ │ ThemeBuilder.class │ │ │ │ │ ThemeXmlImpl.class │ │ │ │ │ │ │ │ │ └─vo │ │ │ │ ExtendConfModel.class │ │ │ │ GenConfModel.class │ │ │ │ GenTypeModel.class │ │ │ │ ModuleConfModel.class │ │ │ │ NeedGenModel.class │ │ │ │ ThemeModel.class │ │ │ │ │ │ │ ├─geninvocation │ │ │ │ │ BaseGenAction.class │ │ │ │ │ DefaultGenInvocation.class │ │ │ │ │ GenInvocation.class │ │ │ │ │ GenInvocationFactory.class │ │ │ │ │ │ │ │ │ ├─decorator │ │ │ │ │ DefaultComponent.class │ │ │ │ │ GenComponent.class │ │ │ │ │ GenDecorator.class │ │ │ │ │ ReadTemplateContent.class │ │ │ │ │ ReplaceMethods.class │ │ │ │ │ ReplaceProperty.class │ │ │ │ │ │ │ │ │ └─state │ │ │ │ DefaultBeginState.class │ │ │ │ GenState.class │ │ │ │ OutState.class │ │ │ │ State.class │ │ │ │ │ │ │ ├─genproxy │ │ │ │ DefaultProxy.class │ │ │ │ GenProxyFactory.class │ │ │ │ │ │ │ ├─mediator │ │ │ │ CoreMediator.class │ │ │ │ │ │ │ ├─output │ │ │ │ │ GenOutputEbi.class │ │ │ │ │ │ │ │ │ └─types │ │ │ │ │ OutputToConsole.class │ │ │ │ │ OutputToFile.class │ │ │ │ │ │ │ │ │ └─outputtofile │ │ │ │ │ AbstractFactory.class │ │ │ │ │ GenOutPathPackages.class │ │ │ │ │ Outter.class │ │ │ │ │ │ │ │ │ └─plaintxt │ │ │ │ GenOutPathPackageImpl.class │ │ │ │ OutterImpl.class │ │ │ │ PlainTxtFactory.class │ │ │ │ │ │ │ ├─template │ │ │ │ │ DefaultTemplateEbo.class │ │ │ │ │ TemplateEbi.class │ │ │ │ │ TemplateFactory.class │ │ │ │ │ │ │ │ │ ├─flyweight │ │ │ │ │ DefaultTemplate.class │ │ │ │ │ TemplateFlyweight.class │ │ │ │ │ TemplateFlyweightFactory.class │ │ │ │ │ │ │ │ │ └─visitors │ │ │ │ TemplateElement.class │ │ │ │ Visitor.class │ │ │ │ │ │ │ └─util │ │ │ ├─file │ │ │ │ FileHelper.class │ │ │ │ │ │ │ └─readxml │ │ │ Context.class │ │ │ ElementExpression.class │ │ │ ElementsExpression.class │ │ │ ElementsTerminalExpression.class │ │ │ ElementTerminalExpression.class │ │ │ ParseCaretaker.class │ │ │ ParseMemento.class │ │ │ ParseModel.class │ │ │ Parser$MementoImpl.class │ │ │ Parser.class │ │ │ Parser2.class │ │ │ PropertysTerminalExpression.class │ │ │ PropertyTerminalExpression.class │ │ │ ReadXmlExpression.class │ │ │ XmlUtil.class │ │ │ │ │ └─xgenconfxml │ │ GenConf.xml │ │ UserGenConf.xml │ │ │ ├─build │ ├─lib │ │ bsh-2.0b4.jar │ │ │ └─src │ └─cn │ └─javass │ │ MyTest.java │ │ │ ├─themes │ │ └─simple │ │ │ ThemeConf.xml │ │ │ │ │ ├─actions │ │ │ GenBusinessEbiAction.java │ │ │ GenVoAction.java │ │ │ │ │ ├─decorators │ │ ├─template │ │ │ ├─business │ │ │ │ Ebi.txt │ │ │ │ │ │ │ └─vo │ │ │ Model.txt │ │ │ │ │ └─visitors │ │ VoPropertiesDesign.java │ │ │ ├─xgen │ │ ├─dispatch │ │ │ │ GenFacade.java │ │ │ │ │ │ │ ├─command │ │ │ │ CmdInvoker.java │ │ │ │ DefaultCommand.java │ │ │ │ GenCommand.java │ │ │ │ │ │ │ └─executechain │ │ │ DefaultHandler.java │ │ │ GenHandler.java │ │ │ │ │ ├─genconf │ │ │ │ GenConfEbi.java │ │ │ │ GenConfEbo.java │ │ │ │ GenConfFactory.java │ │ │ │ │ │ │ ├─confmanger │ │ │ │ ConfManager.java │ │ │ │ │ │ │ ├─constants │ │ │ │ ExpressionEnum.java │ │ │ │ GenConfEnum.java │ │ │ │ ModuleGenConfEnum.java │ │ │ │ ThemeEnum.java │ │ │ │ │ │ │ ├─implementors │ │ │ │ │ GenConfImplementor.java │ │ │ │ │ ModuleGenConfImplementor.java │ │ │ │ │ ThemeImplementer.java │ │ │ │ │ │ │ │ │ ├─dynamicparse │ │ │ │ │ BeanShellStrategy.java │ │ │ │ │ ParseContext.java │ │ │ │ │ ParseStrategy.java │ │ │ │ │ PropertyReplaceStrategy.java │ │ │ │ │ │ │ │ │ └─xmlimpl │ │ │ │ CommonBuilder.java │ │ │ │ GenConfBuilder.java │ │ │ │ GenConfXmlImpl.java │ │ │ │ ModuleGenConfBuilder.java │ │ │ │ ModuleGenConfXmlImpl.java │ │ │ │ ThemeBuilder.java │ │ │ │ ThemeXmlImpl.java │ │ │ │ │ │ │ └─vo │ │ │ ExtendConfModel.java │ │ │ GenConfModel.java │ │ │ GenTypeModel.java │ │ │ ModuleConfModel.java │ │ │ NeedGenModel.java │ │ │ ThemeModel.java │ │ │ │ │ ├─geninvocation │ │ │ │ BaseGenAction.java │ │ │ │ DefaultGenInvocation.java │ │ │ │ GenInvocation.java │ │ │ │ GenInvocationFactory.java │ │ │ │ │ │ │ ├─decorator │ │ │ │ DefaultComponent.java │ │ │ │ GenComponent.java │ │ │ │ GenDecorator.java │ │ │ │ ReadTemplateContent.java │ │ │ │ ReplaceMethods.java │ │ │ │ ReplaceProperty.java │ │ │ │ │ │ │ └─state │ │ │ DefaultBeginState.java │ │ │ GenState.java │ │ │ OutState.java │ │ │ State.java │ │ │ │ │ ├─genproxy │ │ │ DefaultProxy.java │ │ │ GenProxyFactory.java │ │ │ │ │ ├─mediator │ │ │ CoreMediator.java │ │ │ │ │ ├─output │ │ │ │ GenOutputEbi.java │ │ │ │ │ │ │ └─types │ │ │ │ OutputToConsole.java │ │ │ │ OutputToFile.java │ │ │ │ │ │ │ └─outputtofile │ │ │ │ AbstractFactory.java │ │ │ │ GenOutPathPackages.java │ │ │ │ Outter.java │ │ │ │ │ │ │ └─plaintxt │ │ │ GenOutPathPackageImpl.java │ │ │ OutterImpl.java │ │ │ PlainTxtFactory.java │ │ │ │ │ ├─template │ │ │ │ DefaultTemplateEbo.java │ │ │ │ TemplateEbi.java │ │ │ │ TemplateFactory.java │ │ │ │ │ │ │ ├─flyweight │ │ │ │ DefaultTemplate.java │ │ │ │ TemplateFlyweight.java │ │ │ │ TemplateFlyweightFactory.java │ │ │ │ │ │ │ └─visitors │ │ │ TemplateElement.java │ │ │ Visitor.java │ │ │ │ │ └─util │ │ ├─file │ │ │ FileHelper.java │ │ │ │ │ └─readxml │ │ Context.java │ │ ElementExpression.java │ │ ElementsExpression.java │ │ ElementsTerminalExpression.java │ │ ElementTerminalExpression.java │ │ ParseCaretaker.java │ │ ParseMemento.java │ │ ParseModel.java │ │ Parser.java │ │ Parser2.java │ │ PropertysTerminalExpression.java │ │ PropertyTerminalExpression.java │ │ ReadXmlExpression.java │ │ XmlUtil.java │ │ │ └─xgenconfxml │ GenConf.xml │ UserGenConf.xml │ └─架构一代码和ppt ActiveMQ快速上手.pdf Git快速上手.pdf Maven补充.pdf Memcached快速上手.pdf MogileFS快速上手.pdf MongoDB快速上手.pdf Nginx快速上手.pdf Varnish快速上手.pdf 基本业务功能.pdf 基础业务的建表语句.sql 最终的project源码.rar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值