andy~(猪猪)'s profile猪猪de家PhotosBlogLists Tools Help

andy~(猪猪)

Occupation
Location
Interests

猪猪de家

Photo 1 of 5
December 10

怀念大连

在大连的日子也不多了,差不多用拿手指头都能掰出来,回过头想一想,哇。。。10年了,不过说实话,到现在我还没把大连逛明白呢,谁要是把我给绑票了,我只定找不到回去的路。呵呵,我回想大连的,还有这里给我留下的一切,特别是我的那些朋友们
November 25

eclipse结构OSGI(弄点专业的吧学习学习)

eclipse结构OSGI

概述
Eclipse中最出彩的部分莫过于它的Plugin Framework,可以说Eclipse在一定程度上使得Plugin机制得以流行,当然,Eclipse的优势不仅仅在此,但正因为采用了Plugin机制,Eclipse才得以被不断的扩充,越来越强大。一直以来就想分析Eclipse的Plugin Framework,由于各种原因一直耽搁,刚好这个周末没什么事,下定决心对其进行了研究和分析,方法很原始,就是对Eclipse的启动过程进行分析,基于的是Eclipse 3.1的版本,分析过程就不在这说了,主要是说说分析出来的心得。
架构上来讲Eclipse基本采用的是Kernel+Core Plugins+Custom Plugins的结构体系,除了Kernel部分外均为Plugin,所以可称为all are plugins,凡是Plugin的部分都是可被替换的。

OSGI
Eclipse 3.0后采用的是OSGI来作为其Plugin Architecture实现的依据,鉴于此就得简单提提OSGI了,主要从Plugin的角度来分析OSGI,OSGI概念中主要分为了Bundle和Service,可以认为Bundle是一个模块的管理器,主要是通过BundleActivator管理模块的生命周期,而Service则是这个模块可暴露对外的服务对象,这里体现了OSGI和传统的Plugin Framework不同的一个地方,管理和静态结构分开,在OSGI中通过在manifest.mf文件中增加一些内容来发布Bundle,在其中描述了Bundle的提供商、版本、唯一ID、classpath、暴露对外的包、所依赖的包;每个Bundle拥有自己的ClassLoader以及context,通过context可进行服务的注册、卸载等,这些操作都会通过事件机制广播给相应的其他的Bundle;一般来说都为通过在Bundle中编写初始需要注册的服务的方法来完成Bundle可供外部使用的服务的暴露功能;如需要调用其他Plugin提供的服务可通过context的getServiceReference先获取Service的句柄,再通过context.getService(ServiceReference)的方法获取Service的实体。

Eclipse Plugin定义
Eclipse中的Plugin的概念为包含一系列服务的模块即为一个Plugin。既然是遵循OSGI的,也就意味着Plugin通常是由Bundle和N多Service共同构成的,在此基础上Eclipse认为Plugin之间通常存在两种关系,一种为依赖,一种为扩展,对于依赖可通过OSGI中元描述信息里添加需要引用的Plugin即可实现,但扩展在OSGI中是没有定义的,Eclipse采用了一个Extension Point的方式来实现Plugin的扩展功能。
结合OSGI
Eclipse遵循OSGI对于Plugin的ID、版本、提供商、classpath、所依赖的plugin以及可暴露对外的包均在manifest.mf文件中定义。
Plugin Extension Point
对于扩展,Eclipse采用Extension Point的方式来实现,每个Plugin可定义自己的Extension Point,同时也可实现其他Plugin的Extension Point,由于这个在OSGI中是未定义的,在Eclipse中仍然通过在plugin.xml中进行描述,描述的方法为通过<extension-point id="" name="" schema="">的形式来定义Plugin的扩展点,通过<extension point="">的形式来定义实现的其他Plugin的扩展点,所提供的扩展点通过schema的方式进行描述,详细见eclipse extension-point schema规范,为了更好的说明扩展点这个概念,举例如下,如工具栏就是工具栏Plugin提供的一个扩展点,其他的Plugin可通过此扩展点添加按钮至工具栏中,并可相应的添加按钮所对应的事件(当然,此事件必须实现工具栏Plugin此扩展点所要求的接口),工具栏的Plugin将通过callback的方式来相应的响应按钮的动作。可见通过Extension Point的方式可以很好的提供Plugin的扩展方式以及实现扩展的方式。

Eclipse Plugin Framework
那么Eclipse是如何做到Plugin机制的实现的呢??还是先讲讲Eclipse的设计风格,Eclipse在设计时有个重要的分层法则,即语言层相关和语言层无关的代码分开(如jdt.core和core),核心与UI分开(如workbench.ui和workbench.core)这两个分层法则,这个在Eclipse代码中处处可见,在Plugin Framework部分也充分得体现了这个,遵循OSGI,Eclipse首先是实现了一个OSGI Impl,这个主要通过它的FrameWork、BundleHost、ServiceRegistry、BundleContextImpl等对象来实现,如果关心的话大家可以看看这部分的代码,实现了Bundle的安装、触发、卸载以及Service的注册、卸载、调用,在Plugin机制上Eclipse采用的为lazy load的方式,即在调用时才进行实际的启动,采用的为句柄/实体的方式来实现,外部则通过OSGI进行启动、停止等动作,各Plugin则通过BundleContext来进行服务的注册、卸载和调用,这是OSGI的部分实现的简单介绍。
那么Extension Point方面Eclipse是如何实现的呢,在加载Plugin时,Eclipse通过对plugin.xml的解析获取其中的<extension-point>节点和<extension>节点,并相应的注册到ExtensionRegistry中,而各个提供扩展点的Plugin在提供扩展点的地方进行处理,如工具栏Plugin提供了工具栏的扩展点,那么在构成工具栏时Plugin将通过Platform.getPluginRegistry().getExtensionPoint(扩展点ID)的方法获取所有实现此扩展点的集合IExtensionPoint[],通过此集合可获取IConfigurationElement[],而通过这个就可以获取<extension point="">其中的配置,同时还可通过IConfigurationElement创建回调对象的实例,通过这样的方法Eclipse也就实现了对于Plugin的扩展以及扩展的功能的回调。在Plugin Framework中还涉及很多事件机制的使用,比如Framework的事件机制,以便在Bundle注册、Service注册的时候进行通知。

总结
通过对Eclipse启动过程的分析,可清晰的看到Eclipse Kernel+Core Plugins+Application Plugins的方式,在代码中分别对应为loadBasicBundles和registerApplicationServices,loadBasicBundles通过加载config.ini中的osgi.bundles完成基本的bundles的加载,去看看这个配置会发现是org.eclipse.core.runtime还有一个update,core.runtime又会通过IDEApplication来完成整个Eclipse的启动,同时会注册所有与workbench相关的plugin。
Eclipse由于以前版本的Plugin Framework是没有采用OSGI的,所以通过EclipseAdaptor的方式来实现与以往的兼容,目前新的Plugin采用的方式基本就是manifest.mf描述Plugin OSGI部分的信息,Plugin.xml描述扩展点的信息。
Eclipse中有非常多优秀的设计,这个在看它的代码时会有很深的感触,比如Contributing to Eclipse中提到的Extension Object/Interface的设计,确实是非常的不错,虽然看到你可能觉得很简单,关键是要想得到并合适的去使用。
总结陈词,^_^,Eclipse Plugin Framework是采用OSGI Impl+Plugin Extension-Point的方式来共同实现的,实现了Plugin的部署、编写、独立的Classloader和Context、Plugin中Service的注册、Plugin中Service的调用、Plugin的依赖、Plugin的扩展、Plugin生命周期的管理。

带来的思考
Eclipse Plugin Framework采用的是OSGI的实现,一定程度上我们也能看到OSGI的优点,那么JMX+IoC方式的Plugin Framework与其的比较又是在哪些方面呢?Eclipse Plugin Framework不足的地方又在哪里呢?哪些地方值得改进呢?

October 25

hoho

最讨厌的两种女人:
1  不诚实的女人
2  不自爱的女人
这两种女人是最可怕的。。。。。。
October 02

李嘉诚:你在做什么生意?(转载)

喝水还是挑杯子?
我们知道,水实现自己奔流入海的远大目标,并不是一蹴而就的,而是沿途汇聚涓涓细流、滔滔河水,绵绵不绝并逐渐形成宏大之势,方能畅行于漫长的旅途,最终成就自己东流入海的心愿。这是水的专注于长流的特征。
如果水在向大海行进的过程中,不是采用支流汇入主流形成浩大之势,而是取各自为战、多头并进之法,会是一种什么样的局面呢?可以预期的是:有的会被土壤吸收殆尽,有的会被太阳和空气蒸发而所剩无几,只有极少数的幸运水流能够抵达目标。当然,这是一种多元化的假设。

What business you are in?你在做什么生意?

如果让我们为水选择上述两种流行的方式,该怎样选择呢?毫无疑问,我们会选择前者。
但是,当我们自身面临多元或是专一的选择时,是否能做出这种正确的选择呢?
宁高宁曾说过一段意味深长的话:“我在美国上学,第一堂课是战略管理,第一个问题就是:‘What business you are in?(你在做什么生意?)’当时我想,这叫什么问题?美国人真简单。可是20年后才发现,仍然有很多人不懂得这个问题,而这个问题的重要性如何形容都不过分。”
许多人会想,我就是一个白领,一个打工的,多元还是专一,不是我考虑的问题,那是老板的问题。但是假如有人问你的工作经历:“What business you are in?(你在做什么生意?)”你可能会自豪地说:“我能力很强的,做过很多工作,从A公司跳槽到B公司,又从B公司跳槽到C公司……现在我暂时在做D公司工作,不过我又瞄上F公司啦。”
你瞧,问题就来了。你几乎成了一个复合型人才,你为自己选择了多元发展的职业道路,放弃了专一发展的职业道路。
多元还是专一,对我们个体而言,实际上面临的是如何面对职场诱惑的问题。中国古代的经典著作《大学》中有一句话叫“知止而后有定”。佛家也经常谈到舍得舍得,有舍有得,不舍不得。中国古代童蒙养正经典《****规》里谈到“居有常,业勿变”。这些大智慧者谈的都是“定力”的问题,也就是专一的问题。想一想,我们的“定力”有多少呢?
一家IT企业的老总谈到员工跳槽问题时,大伤脑筋。他说,不少年轻员工,往往很随便的事因都可能成为离职的理由。一个年轻女性辞职居然就是因为不喜欢单位的另一名同事。太累、家住得远、领导骂了自己、待遇不合理等等都成为特别普遍的理由。且不说,这些年轻的朋友没有想到企业对自己的培养付出的代价,自己的离职将给企业带来的损失,他们更没有为自己的职业生涯、事业发展做筹谋。
放弃一次事业机会,或许觉得自己还年轻,或许会认为还能有更好的机会。实际上,随意跳槽,不仅对企业是损失,对个人同样是损失。每次重新开始,就意味着此前在原单位的职场积累几乎归零,为自己向上发展所付出的工作成本基本变成“沉没成本”。长此以往,人生的投入成本越来越多,而收获未见明显增加,到老的时候拨弄算盘一算:唉!这一生岂不是亏大发了?
没有诚敬的对人、对事情的态度,没有责任心、责任感,什么样的机会也不会成为机会。
做加法还是做减法?
 
企业对多元还是单一的选择,与个人的选择有许多相似之处。
过去的十几年,是我国经济发展最迅速的时期,许多企业在这一阶段快速发展起来。近些年,我们经常会看到,许多良性成长的企业往往经不住多元化的诱惑,轻易放弃在自己已经形成优势的领域内进行深度开发,抛弃自己的核心能力和竞争优势,试图选取快速扩张的捷径而从事多元化经营。
实际上,多元化发展有时是一种捷径,但往往也会成为陷阱。前几年我们经常看到的现象是,一些企业无论自己的本行是什么,动辄就介入房地产、医药、保健品、金融、广告等热门领域:科技热了,就去投资科技;网络热了,就去投资网络;生物热了,就去投资生物……再加之以媒体的非理性炒作结果,企业失去了自己的个性和核心竞争力,动摇了原有的市场基础,丧失了固有的客户资源。
表面上看,企业的规模扩大了,经营领域也扩大了,似乎风险降低了。但是,由于企业在任何一个领域都没有自己的核心竞争优势,资源分散,领导层一心多用,实际上企业的风险增大了。最可怕的是,等一个个热点冷却下来之后,管理者心痛地发现,自己已经被深度“套牢”,成为“解套”遥遥无期的股东了。据统计,全球企业购并案的失败率非常高,统计数据显示,上个世纪九十年代以前的失败比例达三分之二,以后的情况有些好转,但失败率仍然高于50%。
“喝水还是挑杯子?”一位教育专家朋友的感悟让我很难忘记。她说有很多朋友整天忙忙碌碌,身心疲惫。本来,他们的忙碌是为了追求幸福的,但是却仿佛置身于一个惯性轨道,即使看到目标也没办法停下来,最后幸福反而越来越远。她举了一个例子:人们为了喝水,要去拿杯子,而在众多杯子面前却感到无所适从,因为杯子太多了。有纸杯、木杯,有陶瓷杯、玻璃杯,有钢杯、铜杯,甚至还有水晶杯、金杯子。挑选杯子需要确定目标,需要取舍。当他拿起了玻璃杯之后,发现周围很多人手里都拿着铜杯,于是,他感到很不舒服。当他换了铜杯之后,发现还有人端着水晶杯。他花费时间在挑选着水杯,忘记了自己的本意,实际上只是要喝水。
现实中,企业的很多战略抉择往往也是这样。我们经营企业,无非是在为社会创造价值的同时能够为股东带来利润。而很多企业开始的时候当然是为了追求赢利,但是当他们置入一种惯性轨道时,最容易被他们忽视的往往就是利润。他们忘记了,多元化只是发展的手段,最终的目标是获取利润,不少企业为了所谓的市场份额而进行血拼,如前面我们谈到的彩电业的价格大战,最后造成整个行业的凋敝。也有的企业为了迎合别人的胃口而盲目涉足自己并不了解的所谓科技产业。还有的公司因为购并,因为扩张,不仅没有赢得利润,反而把自身给拖垮了。
美国安然公司在扩张的过程中,不断进入新的领域,如风能源、水能源、宽带、纸、金属、数据存储、广告等行业。这样,安然的业务品种最多时一度达到一千四百多种。当公司经营的产品品种过多的时候,公司本应用于核心业务的精力,就会被分散并消耗到其他业务领域,很多业务都没有实现赢利,最终亏损过大造成破产。安然破产的时候,据估计财务亏损约达170亿美元。
新疆德隆的业务涉及矿业、旅游、零售、汽车、农业、食品、银行、证券、信托等数十个行业,“战线”拉得足够长。可是,德隆的产业投资回报周期长短搭配却不合理,没完没了地并购和随之带来的后续管理费用只能靠融资解决。同时它广揽人才,人才成本高企,而利息高达12%的拆借,更是大大增加了直接财务成本,巨大的资金压力成为德隆的死结。德隆系上市公司旗下数百亿的产业链,每年大约产生6亿元利润,只够勉强偿还银行贷款,但加上德隆每年产生的巨额管理费用和民间拆借资金成本,德隆的入不敷出就成了最终结果。最后,脆弱的链条只是一环崩裂,就满盘皆输了。
东方亮了,再亮西方。
 
李嘉诚以他数十年的商业经验,为那些沉湎于多元化策略中的领导者指点迷津。他说,领袖管理团队要知道什么是正确的“杠杆”心态……不知从什么时候开始,把这概念简单扭曲为叫人迷思的“四两拨千斤”,教人以小博大。聪明的管理者专注研究精算出的是支点的位置,支点的正确无误才是达到较好结果的核心。这门功夫倚仗你的专业知识和综合力,能否洞察出那些看不见的联系之层次和次序。很多公司只看见千斤和四两的直接可能,而忽视支点的可能性,因过度扩张而陷入困境。
那么,“支点”在哪里?
国内的企业谈起多元化,动辄拿GE(美国通用电器公司)说事儿。实际上,GE虽然是一家成功的多元化公司,但它成功的理由并不在于它有多大的规模及占有多少行业种类,而是在于它拥有自己合理的“支点”聚合——统一的战略制订、执行标准与体系以及比较完善的企业文化。多元中的各个单元,在共同的商业模式、统一的价值观和企业文化覆盖下实现有机地融合,绝不是一般性的叠加关系。
比较而言,海尔的多元化道路有一定的借鉴意义。张瑞敏提出:东方亮了,再亮西方。他的思路是,我们立足于先把一个产品做好,有了这个名牌效应,再向其他产品扩张。所以,我们从冰箱到冰柜,再到空调、洗衣机,都没多大问题。但每上一个产品,要打海尔的牌子,必须经过内部认证,这个认证分5级,有的产品差不多过了一年之后才打海尔的品牌。这样,海尔每推出一个产品,消费者就觉得跟海尔原来的产品没有什么区别,因为名牌的内涵是完全一致的。由于家电产品的相关度较高,所以家电产品的多元化虽然使得总成本是上升的,但分散到每一个产品的成本是下降的。
俗话说:东方不亮西方亮。很多企业实施多元化战略时,内心深处就抱着这种侥幸心理。但张瑞敏却有自己独特的理念:东方亮了,再亮西方。所以,他给海尔的多元化经营制定了两大原则:第一,先把自己最熟悉的行业做好、做大、做强,在这个前提下,再进入与这个行业相关的行业经营。第二,进入一个新的行业,做到一定规模之后,一定要进入这个行业的前3名。
以纵向排列、实行产品的跟进式推进,是海尔多元化经营“东方亮了,再亮西方”的又一策略。占领国内市场是这样,占领国际市场海尔也准备这样。排在这个金字塔形阵列第一位的,无疑是海尔冰箱,随后是冷柜、空调、洗衣机,然后是微波炉、热水器、电话、彩电、传真机等等。张瑞敏说:“这种纵向排列就像一把尖刀,它的最大好处是,可以最有效地减少杀伤。”
实际上,海尔实施的是“专业化”的“多元化”,多元化经营中包含着更多的专业化经营的成分。
宁高宁出任中粮集团董事长后,许多人都猜测,一向在资本市场上长袖善舞的宁高宁会把这种惯性带到中粮。但事实却与猜测相左。
在一次中粮内部的高层战略研讨会上,宁高宁明确地表达了自己的两点思想:一、从中粮现有的资产和架构上讲,中粮的定位没有很多选择,就是要有限度、相关多元化、业务单元专业化。二、中粮的行业战略是一个投资资产组合管理的战略,不是一个真正面对市场、面对客户的产品竞争战略。这种理念最终达成中粮管理层的共识。
中粮集团随后下发的《中粮集团党组关于集团使命和战略加快改革发展若干重大问题的决定》中解释了这一新理念:在“有限度”方面,中粮今后不过度多元化,新进任何行业都将慎重,集团的第一要务是“发展好主营业务”;在“相关多元”方面,中粮虽然有分类和多元,但行业之间一定要具备相关、协同性,有逻辑关系,相互支持,形成合力;在“专业化”方面,中粮的每一个业务单元要形成自身发展目标和行业竞争战略,找准行业标杆,明确自身定位,寻求符合自身发展的商业模式,在自身行业中形成行业领导地位。
张瑞敏和宁高宁的高明之处在于,即使从河流的干流派生出若干支流从而形成“多元流”,但干流业已形成的博大势力和充足养分也会随时影响和供应那些支流,这样,支流被土壤彻底吸收或被太阳和空气蒸发掉的可能性就会降到最低限度。
September 26

随笔

最近好累,因为快毕业的缘故吧,心情变得比较浮躁`容易发脾气。每天都在书本中度过,放弃了周末,女人,悠闲时间......
一直徘徊在继续升本科念还是找工作的问题上不能自拔,疯了。不过这几天有了个初步的想法了,11月的软件设计师考试通过的话`毕业,没过的话就什么都别想,认真准备升本考试 。妈妈以为我不升本科念了呢,昨天打电话告诉我说在深圳买房子了,方便我明年毕业在深圳工作,压力又来了,有时候也挺害怕的,不知道明年6月份的我是什么样子,有个好工作?烂工作?还是没工作??再说:其爱的妈妈啊!我还没下定决心一定要到深圳工作呢。真是有太多的选择等着我去选呢。
早在一年前就有不升本的念头了,那时也只是想想而已,现在想工作的愿望更强烈了,不想老让家里掏钱养我了,其实想升本也不过是想给自己在玩两年机会罢了,本科生就一定能力比专科生强吗?不见得
所以,努力吧,不过一年而已嘛,挺过去,未来是美好的,哈哈
不管一年后我是在大连还是深圳,我相信我的生活会更好的......我亲爱的朋友们给俺加油吧!!