??xml version="1.0" encoding="utf-8" standalone="yes"?>
[摘要] 本文主要对类和对象初始化全过E进行分析,通过一个实际问题引入,源代码转换?JVM 字节码后Q对 JVM 执行q程的关键点q行全面解析Qƈ在文中穿插入了相?JVM 规范?JVM 的部分内部理论知识,以理Z实际l合的方式介l对象初始化和类初始化之间的协作以及可能存在的冲H问题?br />
cȝ初始化和对象初始化是 JVM 理的类型生命周期中非常重要的两个环节,Google 了一遍网l,有关c装载机制的文章倒是不少Q然而类初始化和对象初始化的文章q不多,特别是从字节码和 JVM 层次来分析的文章更是鲜有所见?/p>
本文发表于IBM DW,详细正文误 解析JAVAcd对象的初始化q程
|址:http://www-128.ibm.com/developerworks/cn/java/j-lo-clobj-init/index.html
]]>Headius
http://headius.blogspot.com/2006/09/jruby-steps-into-sun.html
It's going to be a big news day for JRuby :)
The two core JRuby developers, myself and Thomas Enebo, will become employees at Sun Microsystems this month. Our charge? You guessed it...we're being hired to work on JRuby full-time.
Perhaps some of you may have seen this one coming. For others, it may be a pleasant surprise.
The primary goal is to give JRuby the attention it really needs. The potential for Ruby on the JVM has not escaped notice at Sun, and so we'll be focusing on making JRuby as complete, performant, and solid as possible. We'll then proceed on to help build out broader tool support for Ruby, answering calls by many in the industry for a "better" or "smarter" Ruby development experience. I'm also making it a personal priority to continue growing the JRuby community, foster greater cooperation between the Java and Ruby worlds, and work toward a "whole-platform" Ruby-on-JVM strategy for Sun.
And yes, JRuby will remain as open source as it is today. It just might start moving a bit faster (as if it weren't moving fast already!)
You can imagine how excited I am about this opportunity, and how pleased I am to know that Sun takes Ruby so seriously. Not only will I get to work on the project I've poured my heart into this past year, but I'll be able to do it while helping one of my favorite companies turn a technological corner. Naturally I've been talking with a myriad of folks at Sun over the past several weeks, so believe me when I say these guys really get it. The tide has turned and dynamic languages are on everyone's agenda. It's going to be quite a ride.
Thanks very much to Tim Bray, who has proven a fearless advocate for Ruby and dynamic languages at Sun. Thanks also to Gilad Bracha, Neal Gafter, James Gosling, Peter von der Ahé, and others fighting to improve Java and make the Java platform a dynlang-friendly place. Thanks also to my Sun interviewers for their excellent, thoughtful questions and ideas about the future of JRuby and dynlangs on the JVM. I'm looking forward to working with you all.
And finally, thanks to all you who use, contribute to, and blog about JRuby. You're a huge part of this, and I want you all to join us on this great Ruby adventure. Community involvement has gotten JRuby where it is today, and community involvement is vital to making Ruby on the JVM a reality.
]]>
我所在的目׃一期用的是一个公司的开发^収ͼ因ؓ其^台自w的功能限制无法扩展、难以维护且pȝ可控制度极低Q因此,客户方决定在二期重新设计架构q在新的架构上完全重新开发,而我正是在ؓ新的架构做技术预研,其中形Ş色色的问题ؕ如麻?br />
首先是JSFQ我们采用的是MyFaces的实玎ͼ服务器WAS5.1,JDK1.4.1.2Q在发布JSF应用时的W一个问题就是JSF容器无法正常初始化。这个问题很Ҏ定位Q就是由于Servlet 2.3规范对Lisener和Servlet的初始化序要求不严|从而不同厂商有着不同的实现导致的。但因ؓ有朋友也在用JSFQ且服务器版本也一_他们没有问题Q偏偏我整死也跑不通,所以,开始觉得自q判断可能不对Q但郁闷的是用google搜烦半天没搜到解x案,最后没折了Q只好自己去打开JAR包看看源代码Q结果发现里面有个MyFacesServletQ打开一看内容,直想一头撞死,原来该类解决?.3规范问题Q从而他可以替换Linsenercȝ初始化职责。他在被加蝲旉先会查StartupServletContextListener有没有正常初始化Q如果未初始化则调用StartupServletContextListenerq行初始化。看来有时候还真是不能偷半ҎQ要怿自己的判断?br />
其次是JSTLQ我最初用的是apache的参考实?.1版本Q结果整死都无法使用QL报taglib无法解析Q到|上查了半天Q没有一个h说具体的解决ҎQ没办法Q从来没用过JSTL啊,新手L会碰上一脸灰的,后来打开看Tablib的版本,天啦Qh家要求的是JSP 2.0Q而我的还是基?.3规范?.2Q当然无法解析了Q然后从C|上DOWN个jstl 1.0下来Q一跑就通!Q唉Q真是没办法Q在|络上,有些问题一搜就刎ͼ而有些看似简单的问题却能把h折腾个半死,l果发现你还是要自己定下心来LQ千万不要全指望别h。又受教了?br />
再次SpringWebflowQ到目前为此Qwebflowq处?.0早期版本Q现在还不能定1.0正式版何时推出,做ؓ我们来说Q也是一ơ大胆偿试,说实话,当前的webflow版本功能q不能以应用到目中来Q但我相信他的正式版应该会很快推出,所以就抢先偿试了,偿试中的问题׃说了Q就说说它现在的~陷吧,
1.支持程U变量创建,却无法给变量赋|郁闷Q这么重要的功能居然q没提供
2.调用POJOҎӞ必需要有参数Q且参数必需是在flowScope上下文里Q连静态常量参数都不支持,又狂郁闷了一把。在程里,q是再常用不q的功能了,居然没提供,希望正式版快快出来,q补上这些缺陗要不然Q他是不可能q入实际目应用的。偶现在真是想修改他的代码,把这些功能通通加q去。。,但最l还是得先抑制住冲动---再等{看吧。。?br /> 3.与JSF集成的JSP里的非受Bean的普通JSP参数无法在flowScope里获得,q一点不能肯定,有可能是转发方式的问题,希望能修改该问题?br /> 4.程里的表达式灵zL太差,管是采用OGNL做的解析Q但q是只能写一些极其简单的逻辑表达式,E微复杂一点的----别想。这一点,也有可能是我q没用好的缘故,需q一步证?br />
最后就是自定义Data Table UIlg了,我们要同时支持列表分,定制式的l合查询Q动态排序等Q这几功能点乍一听觉得应该不难,可一做v来,也ƈ非易事,我现在没有基于JSF的UI实现Q而是通过JSP TAG +XML+XSLT+AJAX的方式来实现的,其中最复杂的就是组件的参数l定和状态绑定的问题Q服务端是无状态模型,所有状态及参数都保存在客户端,解决如何能让自己的组仉的状态参C与其它组件或面上的其它参数发生冲突是个非常重要一环,另外是SQL的解析,l果模型的抽象,转换器的抽象Q对UI前端的命令解析及执行Q参数模型的装Q对不同的数据来源用不周的解析器{等Q都是要考虑的问题,q一块要说v来就太多了,{先把这个组件完全测通了后,再拿现来专门讨论讨论?br />
感想Q开发一个好的框架是一个非常考水q的事情Q他不是我们qx所惛_中的那样单地一些现成的开源框架拼凑v来就了事的,他涉及到了项目群的协模式Q系l架构,各层所选用的技术框架特性,业务集成{方斚w面,即使用Springq种几乎现成的框架来做ؓpȝ的主q骨Ӟ做ؓ框架设计者,你要做的事还很多Q你要从pȝM角度去考虑pȝ的逻辑模式Q与外部pȝ的协作模式,pȝ的可扩展性和低R入性;你要让开发h员尽可能的少做重复劳动;你还要保证你所选的技术方案能在开发过E中无障;你要做好解决开发过E中的所有技术难题的准备Q除了这些,更关键的是你q要能做好业务模型的抽象和设计,你要能及时或预先发现潜在风险和问题ƈ解决它。。。。等{,太多太多。。。,而我Q现在要行的路还长得?....
然后再是对系l分层,分包Q几乎没有多中间接口,怏层之间L紧耦合的调用,造成了层与层的改动牵q边q大?BR>
写出来的框架像工具包一P׃大堆看v来没有联pȝcdU而成?/P>
后来Q经历过一ơ大目后,开始关注一些徏模理Z及开源框Ӟ对先前的框架设计思想产生极大的冲击,开始关注系l的整体搭配Q接口解耦,代码重用Q自动化控制E度有所提高?BR>但感觉问题还是依然很严峻Q主要表现在Q对pȝ的把握层ơ仍然偏?从代码角度出?Q缺乏对pȝ整体的抽象能力和建模能力。对零散的业务规则难以抽象出很好的业务模型ƈ以与pȝ架构l合h?/P>
ȝ来说我经历了两个阶段Q?。以公用基础件ؓ核心的积木式开?2。以局部框架结?实现)v点,分层整合的泛式开?最明显的问题就是层层之间不成一体,目大到后期p松散变得来难以控?
目前Q开始将目光从系l业务层面出发,以架构ؓ主,逐步向框架结构设计过渡的方向发展Q但q时o我感到力不从心,毕境理论归理论,现实中还需要丰富的实践l验ȝU?/P>
首先引用说明一?/SPAN>Domain Model 的定义:
Domain Model Q?/SPAN> An object model of the domain that incorporates both behavior and data.
Domain Model 分两U:
1 Simple Domain Model (Active Record)
它的特点?/SPAN>POJO?/SPAN>TABLE STRUCTURE一一对应Q徏模基于数据库设计?/SPAN>Hibernate走的是q个路子Q说它血Q意思就是指它只?/SPAN>dataQ没?/SPAN>behavior?/SPAN>(但我们实际可以通过HBM文g的定义和映射Q在PO中适当的加入一些基本的业务逻辑的?/SPAN>)
在这U模式下Q?/SPAN>POJO自己?/SPAN>CRUD操作都应该放在自qc里面。其他复杂的业务逻辑会放到外面的Service layer?/SPAN>
2 Rich Domain Model (Data Mapper)
它的特点?/SPAN>POJO?/SPAN>TABLE STRUCTUREq不一一对应Q徏模天马行I,完全取决于业务逻辑?/SPAN>domain object?/SPAN>table之间?/SPAN>mappingQ由Data Mapper完成Q?/SPAN>domain object不用数据表是何{结构,甚至不用?/SPAN>Data Mapper怎么操作?/SPAN>
1.识别某种业务行ؓ的一个很定的原则:
domain logic只应该和q一?/SPAN>domain object?B style="mso-bidi-font-weight: normal">实例状?/B>(q“持久”状?/SPAN>)有关Q而不应该和一?/SPAN>domain object的状态有?/SPAN>.
q一步的_主要?/SPAN>logic是否只和q个object(注:指自w?/SPAN>)的状态有养I如果只和q个object(注:指自w?/SPAN>)有关Q就?/SPAN>domain logicQ如?/SPAN>logic是和一?/SPAN>domain object(注:指同cd的实?/SPAN>)的状态有养I׃?/SPAN>domain logicQ而是business logic?/SPAN>
2.Domain Model ?/SPAN> Hibernate PO 的区别:
领域模型的代码实现需要用一l互相协作的cL完成Q每一个或者一l类承担q个领域模型的某个特征。?/SPAN>Hibernate的实体类只不q是其中的一l类Q它承担的职责就是保持领域模型的状态的?/SPAN>
3.ZDomain Model 分析与设计的Ҏ规则Q?/SPAN>
应该?B style="mso-bidi-font-weight: normal">领域模型来驱动你的Y?B style="mso-bidi-font-weight: normal">内在规则Q由需?/B>驱动你的软g外在交互.
最后,我想补充的是Q根据目前的O/R Mapping技术,我们在实际项目开发中Q能真正做到 富领域模?/SPAN> q不现实(因ؓ我们q要考虑诸如性能、目?/SPAN>O/R持久化特性等{问?/SPAN>)Q更何况Q我们的MODEL DATA最l需要被持久化,因此Q我比较反对?/SPAN>DOMAIN MODEL 中直接通过M方式做Q何持久化操作Q因会让你所设计?/SPAN>MODEL无法独立化,难以单元试Qƈ且与加入了一些外界无关的东西Q这不符合对象的本质(对象本n是不能持久化?/SPAN>)。虽然我们做不到完整意义上的Domain Driving Model DevelopmentQ但我们可以在项目实际开发中因ؓ性能、结构简化等{上面得到补偿,q已l值得ƣ慰了?BR>
]]>