2004年08月05日

 sourceforge http://www.sourceforge.net

java.net http://www.java.net

www.eclipse.org

www.opensource.org

 

Lomboz      http://www.objectlearn.com/index.jsp (J2EE plugin for Eclipse)
htmlArea    http://sourceforge.net/projects/itools-htmlarea/ (所见即所得的在线HTML编辑器)
XmlBuddy   http://www.xmlbuddy.com/ (XML Editor plugin for Eclipse)
JFreeChart http://www.jfree.org/ (用于生成图表的项目)
EclipseME   http://eclipseme.sourceforge.net/ (J2ME Developmnt Plugin for Eclipse)
mvnForum  http://sourceforge.net/projects/mvnforum/ (论坛)
jChatBox    http://www.javazoom.net/index.shtml (用servlet实现的WEB聊天引擎)
POI            http://jakarta.apache.org/poi/index.html (用于处理Excel,WORD等文档的项目)
FileUpload http://jakarta.apache.org/commons/fileupload/ (用于处理HTTP文件上传得项目)
PDFBox      http://sourceforge.net/projects/pdfbox/ (处理PDF文档的项目)
Lucene      http://jakarta.apache.org/lucene/index.html (搜索引擎)
Digester    http://jakarta.apache.org/commons/digester/ (处理XML信息的项目)
DBCP         http://jakarta.apache.org/commons/dbcp/  (数据库连接池)
AXIS          http://ws.apache.org/axis/ (WebService 的实现框架)
Jetspeed   http://portals.apache.org/jetspeed-1/ (Portal)
HSQLDB    http://sourceforge.net/projects/hsqldb/ (Im memory Database Engine)
CEWOLF   http://sourceforge.net/projects/cewolf/  (一套标签库实现Web报表,使用的是jFreeChart引擎)
Struts Menu http://sourceforge.net/projects/struts-menu/  (基于Struts的Web菜单项目)
htmlparser   http://sourceforge.net/projects/htmlparser/   (用于解析HTML信息的项目)
Mondrian     http://sourceforge.net/projects/mondrian/  (Open Source OLAP Database)
ProGuard     http://sourceforge.net/projects/proguard/ (Java的混淆器)
InfoGlue      http://sourceforge.net/projects/infoglue/  (J2EE 内容管理系统)
JPivot          http://sourceforge.net/projects/jpivot/  (基于WEB的OLAP 展现)
http://java-source.net/

转贴:

洪峰 发表于 01月25日 00:23。  

  历史是一面镜子,以史为鉴,可以避免前人曾经犯过的错误,少走弯路,或者避免走弯路。如果聪明的话,甚至可以充分利用前人的伟大智慧,干出一番惊天动地的事业来。

  学习历史当然少不了要阅读史书,在众多的史书中,我尤爱读司马迁所著的《史记》。 这部鸿篇巨制,洋洋洒洒共五十二万字,被称为“史家之绝唱、无韵之离骚”。 在全书一百三十篇中,给人印象最深的当数最后一篇“太史公自序第七十”,即太史公自作之列传。 《自序》先以自述家世开篇,接着又花了相当的篇幅谈经论道,特别对儒、道、墨、法、名及阴阳六家进行评判,其分析之精辟透彻,入木三分,其指陈得失,有若案断,虽经百世而无可比拟。其后又排出一百三十段,行行列列,整齐如一,每段均点明《史记》每篇之要旨,合而论之,其文势有如百川汇海,万壑朝宗,后世学者无不望洋向若之叹。
  实际上,这篇《自序》是太史公在教人读《史记》的方法。熟读了《自序》,则纲举目张,整部《史记》格外显得经络分明。 尽管其成书的年代久远,而且古文艰涩,但有了这些指导,我们后人依然有幸得以知晓该著作是怎样“究天人之际,通古今之变,成一家之言”的。 从软件业的角度来看,这篇文章是一个极其优秀的引导程序,而《史记》又可以视为一种为现代人准备的考察和了解古代历史的引导程序,而且,您不用向太史公交纳什么版税、许可证费,就能得到他对历史人物和历史事件的真知灼见。人类社会的文明之所以能一代接一代地传下来,生生不息,正是因为有这样一些伟大的著作。学习历史必须要认真研究这样的经典名著。
  言归正传,您手上所捧着的这本《开源软件文集》也是一本关于“历史”著作,只是书中所讨论的对象不是中国古代社会的历史,而是我们生活的这个时代一个特殊工业领域的发展史和其中蕴涵的方法论。

开源软件浅释

  计算机是迄今人类最伟大的发明创造之一,它的应用领域已经从最初的数学计算扩展到社会的各个领域。今天的计算机不仅仅是一种计算工具,还可以是通信设备、娱乐工具、工业控制装置……
  从系统科学的观点来看,任何计算机都是由硬件系统和软件系统组成的。硬件是计算机技术的物质基础,自计算机发明以来,特别是在80年代和90年代,计算机的硬件性能得到了惊人的提高和改进。仅拿计算机芯片来说,其集成电路的集成规模越来越大,计算速度越来越快。 计算机硬件的生产具有工业时代的一切特征,而且表现得更加突出。 例如,芯片运算加快的速度和以月份为单位的时间之间要满足摩尔定律,硬件生产必须要追求大规模以降低成本,否则就会被残酷的市场淘汰出局。
  相比之下,计算机软件生产方式则原始得多,甚至可以说,软件的生产和研制至今仍然停留在手工作坊阶段:一个计算机程序在开发时要经历好几个步骤,而且每一个步骤都要靠人(一个或者多个开发人员、甚至一个或者多个开发小组协作)来操作完成。 通俗地讲,就是首先是编写源代码。所谓源代码,就是利用纯文本编写的一种特殊的“文章”。 无论源代码是用底层的汇编语言编写,还是用高级的编译语言来设计,或者是用可读性很高的脚本语言来生成,最终都是吩咐计算机按照您的意志干这干那。 计算机当然读不懂人编写出的源代码,所以我们要把由源代码组成的源文件编译或者汇编成为一条条计算机可执行机器指令,最后机器指令被转换成相应的电信号去驱动计算机完成各种各样的任务。
  在传统的开发模式下,源文件在编译之后形成的文件称为目标文件,最后,利用链接器将一个(或者多个)目标文件生成二进制的可执行文件。如果一切设计都是高质量的话,得到的二进制可执行文件是可以作为商品出售的。
  这些步骤对于作坊里一个的技巧娴熟工匠应该是很容易理解的。生产软件的方法在本质上与几个世纪前在手工作坊里制作一双靴子并没有什么两样,我坚信: 如果一个中世纪的优秀鞋匠能够活在今世,而且他年轻好学、有机会受到良好的教育和训练的话,他完全有可能成为一名优秀的程序开发人员。
  与生产皮鞋不同的是,同一个二进制可执行文件可以容易而且便宜地复制出许多个相同的拷贝,而设计精巧的好软件可以以很高的价格卖出数量惊人的拷贝,您现在看到的那些成功的软件公司一本万利的发财秘密就在这里。
  但是,这些商业性软件公司向您提供的只是二进制的可执行文件,他们不向您提供程序的源代码,您将无法得知他们的软件是怎样开发出来的(他们当然希望您不知道!)。当然,造诣精湛的软件工程师在一些场合下可能采用反向工程技术破解出程序的源代码来,可是几乎所有商业性软件公司在销售他们的商业性软件时都禁止您这样做,而且通行的法律一般规定这样的行为是非法的(您要是不相信的话,可以花时间亲自去阅读那些正版软件包中所附带的、冗长而且通常是用小字号字体印刷的软件版权许可证条款。)
  不过,如果您认为市场上所有的软件都是这样的话,那就是一叶障目,大错特错了。实际上,软件工业界中还存在大量的软件,它们的源代码是公开的,通过阅读这些源代码,您可以清楚地了解原来开发人员的设计思想和程序的详细结构,并且根据您的要求进行改进。现在软件工业界将这类软件称之为“开源软件”(注1)。

  开源软件是计算机工业最宝贵的财富

  专利、版权、技术诀窍、许可证等这些人类创造的用来保护知识产权的手段,尽管各有各的出现时间和适用范围,以及相关的法律法规,但是人类发明和利用它们的目的无非是在一定的程度上合理地保护发明人的各种利益。而且在一定的时间尺度上,适当地运用它们可以促进社会的繁荣和进步,这一点是毋庸置疑的。
  事物总是一分为二的,专利、版权、技术诀窍、许可证等,这些东西既可以促进文明的进步,也可以妨碍革新,因为这些手段有一个共性,就是“排他性”。各种法律法规实际上都是在围绕着“排他性”来定义着各项条文。
  如何处理排他性和社会整体进步的关系呢?各国的法律法规的做法不尽相同。但是,通行的做法一般都规定了某个年限,保护对象在保护年限之外便进入公用领域。
  接下的问题是您从什么角度来看待开源软件的许可证了。与目前流行的说法不同,开源软件是有版权的,而且许可证的形式有多种变形。但是无论如何,开源软件许可证的重点在于保护消费者的权利,对专利、版权、技术诀窍、许可证等的排他性进行批判和抛弃。应该说,开源软件与专有软件作为软件市场上的一对矛盾,具有对立性和统一性。传统的专有软件观念的持有者试图将排他性置于至高无上的权威地位,而置用户的合法权利于脑后而不顾,从而走向了一个极端。因此,如果没有开源软件的存在,而让专有软件独行天下,无限制地夸大专利、版权、技术诀窍、许可证等这些人类创造的中性工具的作用,那么从某种意义上说,等于用它们去扼杀创造的自由,禁锢了各种创新思想诞生的前提 —— 不难想象,禁止人与人之间相互交流和沟通、人与人没有合作而代之以相互之间拆台的社会将是一个什么样子呢? —— 人类社会失去了存在的基础。

  开源软件与中国

  开源软件本身是简单的,它无非是公开了源代码的计算机程序而已,它在电子计算机出现的同时就已经出现了,它的外在形式并没有什么值得大书特书的地方。但是开源软件运动的内涵却是博大精深的,因为它上关人作为消费者的权利和自由等法律和伦理学范畴,中跨经济学、管理学、自组织行为学等多个学科,下涉信息技术处理、计算机硬件与计算方法等众多技术专题。 国内业界的读者不应该对开源软件仅仅投以简单的实用主义观点,而是应该站在更高的层次上来看待,从它的内涵中吸取丰富的营养,以便帮助我们在哲理的层次上形成自己的思想,从而利用它作为行动的指南,在具体技理的百科千题上取得突破和领先。
  近一个世纪以来,特别是在新中国成立后,中国的科学技术水平有了长足的进步,与国外先进国家的差距正在不断缩小,科学技术的力量已经得到绝大多数人的肯定。 但是在另一方面,令人困惑的是,科技发展的前沿领域却很难或者鲜有革命性的新思想诞生在中国。 实际上, 在科学技术界,或者更具体一点,在软件工业界,我们的开发人员仍以工匠型居多,而能改变整个软件行业基础性的规则、开创新局面的大师级人才很罕见。在很多场合下弥漫着一种悲观论调,认为国内业界与西方先进同行的发展速度相比,仿佛是芝诺悖论中的飞毛腿和乌龟,我们拼命地追赶(而且应该说是速度奇快),但是总是追不上前面爬行的乌龟。
  正本清源,我认为沉疴与病根在于大多数人对现代技术的认识仅仅停留在“科学技术是有用的”这一表面层次上,而缺乏或者很少对现代科学技术所取得的成就背后的科学精神作出清晰全面和深入系统的思考。特别是随着近年来经济大潮的泛起,独立的科学精神研究活动几乎被生吞活剥了。
  科学精神的一项重要内容就是要敢于不断地怀疑一切(包括一些貌似权威的定论),唯有不断地怀疑已有的定论和思维定式,才能不断生成新的革命思想,而且科学精神还需要利用实践来不断地验证体现着科学精神的科学活动过程及其结果的真伪。科学精神的存在是毋庸置疑的,它在真善美禅的意识形态领域的大千世界里占据着其他角色不可替代的空间。纵观人类历史,文明的进程,在某种程度上讲,就是一部科学精神不断地提出怀疑观点、否定教条与陈规、有时还包括否定自身的进化史。
  一旦搞明白了这个道理,那么我们是否可以站在一个新的高度来评价开源软件运动呢?
  开源软件,作为一种媒介,可以帮助我们触及科学精神,帮助我们探索科学精神的实质。众所周知,科学本身就是一种开源的事业,开源软件的开发作为一种科学实践活动,它公开了程序的源代码,从而为其他人在不同的时间和不同的地点重复实践的过程提供了可能性,某个人或者某一群人的工作成果可以接受其他任何人的检验,如果任何人对程序的功能和特性表示怀疑,那么可以通过检查程序的源代码,来验证和改进原来的程序。只要您从事过任何一项开源开发项目,您就能体现到科学精神的存在,并且对它的巨大威力所震撼。在Internet 无孔不入的今天,体验这种科学精神、实施对科学精神的验证变得尤其容易了。
  本文集中所收录的各篇文章都是围绕开源软件这一主题展开的,它们均由当今世界在开源软件领域(或者与开源软件相关领域)中深具影响力的精英们撰写,他们之中既有对开源软件具有直接影响的先锋,例如自由软件基金会(FSF)的创始人Richard Stallman;也有发明了编程语言的高级程序设计大师,例如Perl的发明人Larry Wall;有的开发了操作系统内核,例如Linux的开发者Linus Torvalds;有的参与了非常成功的大众化基础性软件的开发,例如Apache的开发成员Brian Behlendorf;还有开源软件的支持者,例如以出版图书闻名于世的Tim O’Reilly等等(注2)。 尽管他们讨论的主题不同,但无论涉及什么,作者们均将他们的思想和难忘经历娓娓道出,其行文错落有致,累如贯珠,均为软件界精英们的扛鼎发奋之作。因此,我建议一切从事软件事业、关心计算机产业发展的朋友都来仔细研究一下这本文集,将这些精英们所表达的真传藏之于您的灵台兰室。
  细心的读者还不难发现,书中诸君关于开源软件的观点并非完全一致,这充分说明尽管开源运动已经存在多年,但是开源软件这一概念还是个新生事物,对于它的理解难免会有一些不同的看法。 “君子和而不同”,从某种意义上说,这本文集正好可以说他们是在从不同的侧面上来描述开源软件的全貌,他们的不同见解在某种程度上从内部又推动了开源软件运动向前发展。
  另外,在本书即将付印之际,美国的微软公司被联邦法院初步判定有违犯反托拉斯法的行为。 尽管这个诉讼案件的最后结局尚不明朗,但微软公司当初试图利用Windows一统PC操作系统天下的想法实施起来肯定会大打折扣,而这无疑是从外部给开源软件社团带来了一个好消息,至少像Linux或者FreeBSD这样一些开源的操作系统无疑会在今后有更加迅速的发展 —— 毕竟,软件市场的游戏规则变了。
  我希望这本书能抛砖引玉,让更多的人来关注和参与开源软件运动。 我期盼着本书的读者群体中能产生众多的软件精英,他们能站在这些巨人们的肩膀上继续往上攀登。一旦神州大地上有众多的开发人员参与到这一运动的行列中,那么开源软件运动在中国就将具有无比广阔的发展前景,我们的软件业一定会(或许以一种我们意想不到的方式)茁壮成长起来。我还期盼,读者能将本书当作是一把登天的梯子,就像《史记》引导您“究天人之际,通古今之变”一样,引导您探索开源软件运动的真谛,引导您进入开源软件的自由王国。
  意未尽,东方红。是为序。

 
Javen – Just For Fun / Just Do It 说:
to   hdp:与开源共舞:      不好意思,昨天的调查我发现我填不了。  因为我没有参加过开源项目,也对国内的公司情况没有那么了解
hdp:与开源共舞 说:
没关系!
装配脑袋(当我的状态为忙碌,我就是真的忙碌,打扰请慎重) 说:
你们在干什么?
hdp:与开源共舞 说:
BEA的开源计划不知道大家又了解否?
hdp:与开源共舞 说:
蜂巢
hdp:与开源共舞 说:
昨天和BEA的朋友聊听,深感目前国内的软件公司和个人应该利用好开源这个机会
amazelinyuan@hotmail.com 说:
说来听听
装配脑袋(当我的状态为忙碌,我就是真的忙碌,打扰请慎重) 说:
尚未听说,我现在的消息停留在.NET阵营
hdp:与开源共舞 说:
他把WEBLOGIC的RUNTIME部分开放原始码了,给开源社区带来了企业级的构架
银狐999(三人行者,我师必存也) 说:
呵呵,open open open
hdp:与开源共舞 说:
和APACHE合作、50%的开发员来自BEA
Javen – Just For Fun / Just Do It 说:
哈哈,真有这样的消息了啊!   看来他也在向  IBM 学习了
Javen – Just For Fun / Just Do It 说:
eclipse 模式与  jboss  这二个模式是现在的发展趋势
Javen – Just For Fun / Just Do It 说:
估计会有越来越多的公司学习!  
hdp:与开源共舞 说:
另外,如有搞培训或项目管理的朋友,建议重点抓一下ECLIPSE&JBOSS&JONAS,应该很快会有市场的
hdp:与开源共舞 说:
JB系列盗版抓的紧
Javen – Just For Fun / Just Do It 说:
应该是的。  这二种开源模式的特点就在于:  留下了服务这个产业
Javen – Just For Fun / Just Do It 说:
哈哈,好消息啊。       
Javen – Just For Fun / Just Do It 说:
IT 服务也是趋势。   还是 IBM 在领潮流啊
银狐999(三人行者,我师必存也) 说:
以服务为趋势
hdp:与开源共舞 说:
SUGARCRM获得了创业投资,而SURGARCRM只是一个PHP的CRM,大家可以下载做成JSP的开源项目
银狐999(三人行者,我师必存也) 说:
服了····
hdp:与开源共舞 说:
消息:REDHAT捆绑JONAS OF OBJECTWEB,每年收取999$服务费,开始挑战BEA和IBM WAS
hdp:与开源共舞 说:
INTEL投资1000W$JBOSS,目前俺正在与JBOSS 渠道协商国内发展合作事宜
Javen – Just For Fun / Just Do It 说:
不错不错, 感觉 hdp 带来了些好消息!    先开源成熟、然后商业运作! 
  驼狗 说:
激动呀.
 
  bigluo(背朝黄土 面朝天) 已离开对话。
 
hdp:与开源共舞 说:
开源策略:程序员7有句话说开源不是为了盈利,而是要搞开放标准
银狐999(三人行者,我师必存也) 说:

银狐999(三人行者,我师必存也) 说:
开源是需要盈利的,但是不是通过产品,而是通过服务
hdp:与开源共舞 说:
不开源也可以通过服务盈利
Javen – Just For Fun / Just Do It 说:
赞!
hdp:与开源共舞 说:
但号称IT服务中国的神州数码,其IT服务只占2%
  驼狗 说:
服务对于大公司来说不错,可对于小公司来说,就不行了.
Javen – Just For Fun / Just Do It 说:
国内的企业修炼不够啊! 
amazelinyuan@hotmail.com 说:
服务应该是分层次的吧,只做培训应该是容易的,如果做顾问咨询就难一点,再往上走IT服务外包,就需要功力了
银狐999(三人行者,我师必存也) 说:
发展是慢慢来的···不可能一步而成。
amazelinyuan@hotmail.com 说:
神州的IT服务应该指IT外包吧,这个国内市场还不成熟,但从美国那边看,可能我们很快就会跟上,软件外包发展了,渠道就会建立起来,高层次的IT服务外包所需要的资源其实和软件外包类似–低成本的人力资源,所以我觉得过上一两年,这个就会发展起来
hdp:与开源共舞 说:
思路:由于SOA(SERVICE-ORIENTED ARCHITECTURE)将成为新一代软件构架方法论,因此 咨询——信息规划——服务构架——维护支持 将可能成为软件细分的模式,换句话说过去的CICS/TUXEDO又将上演王者归来的好戏,开源项目可以多参考适合SOA的WEBSERVICE/MOM(INFO BUS)/TPM等构架

2004年08月04日

看见绍佳一在伊拉克、伊朗两场比赛中下做的假率、裁判的不公平,这样的中国队获得冠军又有什么用呢?

2004年08月03日

开源在中国还是新鲜的东东,大家都知道但少有人试过。为什么?首先是中国程序员每天忙项目都忙不完,中国程序员脑力工作量和做民工的体力工作量不相上下,加班是平常事,那还有精力去做开源软件。其次中国程序员很穷(至少本人很穷):买台电脑都会用去一个月以上的薪水,如辞职两个月专心做开源,只怕会饿死。另一方面技术落后:想三五年前JAVA国外风行时,国内还是C++和VB、Delphi的天下,JAVA鲜有人问津。现在Eclipse开发在国外热火朝天,但很多JAVA程序员还死抱着JBuilder不放,当然国内外程序员的这种距离也正不断的缩短。最近在CSDN上看到一遍文章说有某国(巴西?)开发了一种正开始普遍应用的语言是用纯ASNI C写的,于是借题就把国内现在热心学C#的狠批一通,说他们只会盲目追赶新技术。但孰不知,有多少系统是用ASNI C?你不可能开发个应用系统也用C来吧,C和C#完全是两个应用层面的事,搞C和C#也是两个方向的事,所以追踪最新最前沿的技术是绝对有必要的。累、穷、差都不是最终原因,要说累,外国程序也要工作,我估计也轻松不到那去;要说穷,BT的开发者每月靠申请新信用卡还旧信用卡的债来生存,这够穷了吧;要说技术差:勤能补拙,再说中国人程序员不比别人笨,实在技术不是很行,做一个简单一点的开源项目或者加入一个开源项目做个小兵总成吧,通过这个过程,还能学到不少东西呢。其次最后一个开源项目在中国不火的最重要原因是(很难以启齿)我认为是:中国人基本都用盗版,开源最大优势:免费,根本没法在中国体现,开源软件在中国市场需求力不够。

    开源项目有商业价值吗?它的商业价值在哪里?在服务。可以把做软件比喻成养鸡,这只鸡如果你关着养(不开放源代码),大都会因营养不足而发育不良,但如果放到水草肥美的山林(开放源代码),它将生长极度快速,而且肉质优良。开源让软件拥有了免费高质高量的开发队伍,这些样的队伍是不用监工盯着看是不是偷懒的,他们有着完全自发的热情。他们不会为了赶任务而编写流水帐式的代码,他们追求优质完美的代码实现,因为源代码是公开的,有千万双眼睛看着,没有那个程序员拿自己的尊严和荣誉开玩笑。更重要的是:因为开源免费,使用者极多,有更多的人免费为软件提供需求和BUG测试,软件推广速度极快,不需要任何宣传费用(微软windows系列的宣传费用N亿美元记)。当开源软件这只鸡快速成长后,我们就可以品尝它鲜美的蛋了,我们可以提供相应的软件服务(没有售后两字因为大家可以免费使用),可以提供软件附属相关项目的开发服务,可以提供咨询、提供教育培训……。更重要的是我们所开发的不再是那种开发一两月、卖给一两家、用它一两年,便永远寿终就寝的没有生命力的软件垃圾,我们开发是可以不断生长完善、广泛并长期使用的社会财富,而程序员自身的价值通过这样软件也得以实现。 

好了,说了这么多,为什么不选一个感兴趣的专题来尝试一下开源软件的开发模式呢?总之,我会认真的试试,不知诸位如何?

构架师之路
(2002.07.09)   来自:Java联盟  
 


胡德平◎《Java联盟》客栈论坛

构架师(Architecture)是目前很多软件企业最急需的人才,也是一个软件企业中薪水最高的技术人才。换句话说,构架师是企业的人力资本,与人力资源相比其能够通过构架、创新使企业获得新的产品、新的市场和新的技术体系。那么什么是构架师、构架师的作用、如何定位一个构架师和如何成为一个构架师呢?这是许多企业、许多程序员朋友希望知道的或希望参与讨论的话题内容。

我在此抛砖引玉,就上述几个问题把我的体会和理解做简单阐述。

所谓构架师通俗的说就是设计师、画图员、结构设计者,这些定义范畴主要用在建筑学上很容易理解。小时候到河中玩耍,经常干的事就是造桥,步骤如下:1、在沙滩上画图;2、选择形状好看、大小适合的石头;3、搭建拱桥。其中我们挑出来画图的那位光PP小孩就是传说中的“构架师”了。

在软件工程中,构架师的作用在于三方面:1、行业应用构架,行业构架师往往是行业专家,了解行业应用需求,其构架行为主要是将需求进行合理分析布局到应用模型中去,偏向于应用功能布局;2、应用系统技术体系构架,技术构架师往往是技术高手中的高手,掌握各类技术体系结构、掌握应用设计模式,其构架行为考虑软件系统的高效性、复用性、安全性、可维护性、灵活性、跨平台性等;3、规范构架师是通过多年磨砺或常年苦思顿悟后把某一类构架抽象成一套构架规范,当然也有专门研究规范而培养的规范构架师。他们的产物往往也分为应用规范和技术规范两类。

与建筑学类似,如果软件系统没有一个好的构架是不可能成为成功的软件系统的。没有图纸的建筑工地、没有设计的造桥工程都是不可以想象的混乱世界。建筑工程如是,软件工程中亦然!

由于国内合格、胜任的软件构架师极为少见,直接导致了我国民族软件产业水平的落后。在未来以信息产业为主导的社会,信息产业水平的低下将直接影响国家核心竞争力。究其原因,无企业非急功近利、个人缺乏引导。

企业的急功近利是有无法克服的原因的,那就是社会发展总体水平。“生存是第一位的,赚钱是第一位的”,多年来许多客户抱怨国内的软件公司无法信任、系统项目累做累败、公司越换越差,但因国外不可能给中国做应用系统项目还不得不找国内软件公司做。由于人月费用低、公司开发成本高,软件企业对于应用只能草草了事,拿钱走人(很多公司拿不到后期尾款)。这样的环境下,企业几乎无法投入更多资源培养自己的构架师,加上眼花缭乱的跳槽风气企业更是不愿投入……

那么要成为构架师的途径似乎只有现在较为流行的软件学院和个人自我培养了。关于软件学院我接触过不少,其宗旨绝大部分都是造就(or打造)企业需要的软件构架师(or程序员or人才)。教师来源与企业、学员来源与企业、人才输送到企业是他们办学的手段。尽管各个如雨后春笋般出现的软件口号差不多,但除了中科院、清华、北大等大院校可以相信一些之外,恐怕更多的就是为了圈钱卖学位了事……我有个朋友二十几个人的小公司也想搞软件学院:)

构架师不是通过理论学习可以搞出来的,不过不学习相关知识那肯定是不行的。参考软件企业构架师需求、结合北京网畅公司构架师培养计划以及目前构架师所需知识,我总结构架师自我培养过程大致如下仅供参考:

1、构架师胚胎(程序员)学习的知识是语言基础、设计基础、通信基础等,应该在大学完成,内容包括
java、c、c++、uml、RUP、XML、socket通信(通信协议)——学习搭建应用系统所必须的原材料。

2、构架师萌芽(高级程序员)学习分布式系统、组建等内容,可以在大学或第一年工作时间接触,包括
分布式系统原理、ejb、corba、com/com+、webservice(研究生可以研究网络计算机、高性能并发处理等内容)

3、构架师幼苗(设计师)应该在掌握上述基础之上,结合实际项目经验,透彻领会应用设计模式,内容包括
设计模式(c++版本、java版本)、ejb设计模式、J2EE构架、UDDI、软件设计模式等。在此期间,最好能够了解软件工程在实际项目中的应用以及小组开发、团队管理。

4、软件构架师的正是成型在于机遇、个人努力和天赋
软件构架师其实是一种职位,但一个程序员在充分掌握软构架师所需的基本技能后,如何得到这样的机会、如何利用所掌握的技能进行应用的合理构架、如何不断的抽象和归纳自己的构架模式、如何深入行业成为能够胜任分析、构架为一体的精英人才这可不是每个人都能够遇上的馅饼……

然而学海无涯,精力有限,个人如何能够很快将这些所谓的构架师知识掌握?这是秘密,每个人都有自己的独门家传秘笈就不敢一一暴露了。不过有一点就是广泛学习的基础之上一定要根据个人兴趣、从事领域确定一条自己的主线来努力。

你说呢?

 

                      2002年9月于中科院软件学院

Java传说之风云再起

—————————献给所有追求进步、热爱和平、热爱生命的朋友

胡德平(中国Java联盟/www.javaunion.org)

一、Java语言的发展历程
Java语言(简称Java)的诞生对IT产业带来了一次变革,从某些意义上讲对人们的日常生活也产生了深远的影响。Java作为一种类C/C++,但其平台无关性和与互联网发展紧密结合,预计未来必定成为互联网和计算机应用的主流。Java当之无愧地被纽约时报评为1995年的十大科技成果之一,Java将作为一项重大发明载入科技史册! 微软总裁比尔.盖茨曾在观察了一段时间后,十分惭愧地说:“Java是长时间以来最卓越的程序设计语言”,并确定微软整个软件开发的战略从PC单机时代向着以网络为中心的计算时代转移,而购买Java则是他的重大战略决策的实施部署。当然微软与SUN也曾为纯Java对峙法庭,微软必将直接或间接将Java技术融入到其产品体系中。SUN Microsoft公司的总裁Scott McNealy认为Java为Internet 和WWW开辟了一个崭新的时代。

环球信息网WWW的创始人Berners-Lee说:计算机事业发展的下一个浪潮就是Java,并且将很快发生。所以,使用Java已成大势所趋!

Microsoft和IBM两大公司都在Internet上销售用Java编写的软件,IBM著名Java开发集成环境Visual Age For Java、网站集成平台Webspere,Microsoft的VJ++都是目前主要常见的Java开发环境或产品。

另外,Apple、HP、IBM、Microsoft、Novell、SGI、SCO、Tandem等公司均在各自开发的操作系统中加入了Java开发运行环境,而负责开发并推广Java技术的Javasoft公司(这是SUN下属的一个子公司),通过颁发许可证的办法来允许各家公司把Java虚拟机和Java的Applets类库嵌入他们开发的操作系统, 这样各类开发人员就能更容易地选择多种平台来使用Java 语言编程, 不同的用户也就可以脱离Web浏览器来运行Java应用程序,这无疑是很受广大用户的欢迎的, 也为Java语言的应用开拓了极为广阔的前景。

1996年6月7日,由SUN公司和台湾经济事务部信息发展局、 台湾信息技术研究所等单位牵头,成立了一个“台湾Java联盟”,有多个台湾著名计算机公司参与,并在台北建立 “Java开发中心”,在新竹建立 “Java语言实验室”,以掀起台湾开发与应用Java语言的热潮。香港则在1996年4月就举行了全岛的Java杯比赛, 在计算机界掀起了学习Java的热潮(尤其是在大学生中,出现了一批Java迷)。1996至1998年,SUN公司与国内清华大学、北京大学的著名高校合作,成立10个“Java教育中心”;与中软、邮电部等机构合作成立培训中心、开发中心;在北京、天津和上海成立研究开发基地。每年一度的JavaOne大会几乎都会推出让Java更受人欢迎的新技术,曾经有人预言:Java将是网络上的“世界语”,将会被未来所证实。

1998年,由于Java在安全、性能等方面到了一个关键阶段,甚至Java被列入了世纪末十大必然死亡的技术之一,十大科技成果被预言必将死亡实在是幽了一个默。1998至今,随着Java2一系列新技术如JAVA2D、JAVA3D、 SWING、 JAVA SOUND、 EJB、 SERVLET、 JSP、 CORBA、XML、JNDI等等的引入以及JVM自身的安全策略完善、效率提高,新一轮Java热潮再次被掀起。目前,国内电子商务、金融、证券、邮电、电信等行业的大部分系统几乎都正在或者准备采用部分Java技术来实现。此外国内也出现了致力于Java技术推广和开发的非盈利组织中国“Java阵线联盟”(javaunion.org)以及一批作为该组织成员的个人Java技术网站,预计一两年内Java应用将被国内广大行业用户所接受,Java技术水平也将逐步与世界同步。

二、Java语言的特点

Java语言具有能独立于平台而运行、面向对象、可对动态画面进行设计与操作、坚固性等特点,又具有多线程、内置校验器用来防止病毒入侵等功能,所以用来在Internet上研制与开发软件时,特别受到用户的欢迎。

Java语言的有点主要表现在:简单、面向对象、自动的内存管理、分布计算、稳定、安全、解释执行、结构中立、平滑移植、多线程、以及异常处理等方面。

1、 简单
由于Java的结构类似于C和C++,所以一般的熟悉C与C++语言的编程人员稍加学习就不难掌握Java的编程技术了。Java所具有的自动内存管理机制也大大简化了Java程序设计开发。

2、 面向对象
简单的说,面向对象设计是一种以数据(对象)以及其接口为重心的程序设计技术,面向对象的设计可以说是定义程序模块如何“即插即用”的机制。Java的面向对象机制实际上可以看作是C++面向对象机制的延伸。Java提供了简单的类机制和动态的构架模型,对象中封装了它的状态变量和方法(函数、过程),实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或者重新定义父类或者超类所提供的过程,从而实现代码的复用。

3、 自动内存管理
Java的自动无用内存回收集(auto garbage collectino)实现了内存的自动管理,因此简化了Java程序开发的工作,早期的gc(garbage collectino)对系统资源抢占太多而影响整个系统的运行,Java2对gc进行的改良使Java的效率有了很大提高。Gc的工作机制是周期性的自动回收无用存储单元。Java的自动内存回收机制简化程序开发的同时,提高了程序的稳定性和可靠性。

4、 分布计算
Java为程序开发提供了java.net包,该包提供了一组使程序开发者可以轻易实现基于TCP/IP的分布式应用系统。此外,Java还提供了专门针对互联网应用的类库,如URL、Java mail等等。

5、 稳定性
人们最常见的应用程序错误就是“非法访问xxx内存”,其实质是程序指针使用出错。Java拥有一种指针(pointer)模型,能够排除发生内存被覆盖和毁损数据的可能性。Java不采用指针算术法,而是提供真正的数组(Array),运行程序下标检查;另外,它也不会发生有对象类型转换将一个任意数转换成指针的情形。Java的自动内存管理在减少编程工作的同时,大大减少了运行态错误。

6、 安全性
Java的设计目的是提供一个用于网络/分布式的计算环境。因此,Java强调安全性,如确保无病毒、小应用程序运行安全控制等等。Java的验证技术是以公钥(public-key)加密算法为基础,而且从环境变量、类加载器、文件系统、网络资源和名字空间等方面实施安全策略。

7、 解释执行
Java解释器(interpreter)可以直接在任何已移植的解释器的机器上解释、执行Java字节代码,不需重新编译。当然,其版本向上兼容,因此如果是高版本环境下编译的Java字节吗到底版本环境下运行也许会有部分问题。

8、 跨异构环境
Java是网络空间的“世界语”,编译后的Java字节码是一种“结构中立性(architecture neutral)的目标文件格式,可以在所有提供Java虚拟机(JVM)的多种不同主机、不同处理器上运行。

9、 平滑移植
“write once,run every where!”也许是Java最诱人的特点。用Java开发而成的系统其移植工作几乎为零,一般情况下只需对配置文件、批处理文件作相应修改即可实现平滑移植。

10、 多线程
Java的多线程(multithreading)机制使程序可以并行运行。Java还有一组同步化基本单元,他们是以广泛使用的C.A.R.Hoare监视器与条件变量图为基础的。同步机制保证了对共享数据的正确操作。多线程使程序设计者可以用不同的线程分别实现各种不同的行为,而不需要采用全局的事件循环机制,因此,使用Java语言可以非常轻松地实现网络上的实时交互行为。

11、 异常处理
C语言程序员大都有使用goto语句来做条件跳转,Java编程中不支持goto语句。Java采用异常模型使程序的主流逻辑变得更加清晰明了,并且能够简化错误处理工作。

12、 可扩充
Java目前发布的j2EE标准主要为采用Java技术为企业提供全面解决方案提供了一个技术规范框架,规划了一个利用现有和未来各种java技术整合解决企业应用远景蓝图。

三、Java语言对软件开发技术的影响
曾有人预言:“Java语言的出现,将会引起一场软件革命”,这是因为Java语言能在执行码(二进制码)上兼容,这样以前所开发的软件就能运行在不同的机器上,只要所用的机器能提供Java语言解释器即可。时至今日,Java的优势已经不再仅限于跨平台和动态页面显示,更多的优势逐步在支持CORBA、WEB服务器后端处理以及应用整合等方面的到体现。

Java语言对现在以及未来软件工程和软件发展可能产生影响,可以从以下几个方面分析:
1. 软件工程
Java适用于WEB的许多特征比如平滑移植、安全、健壮和可扩展等为面向对象软件工程设计提供了实现工具和想向空间。遵循面向对象思想,软件生命周期的各个部分都将从面向对象的角度出发实现。比如用户需求分析将被划分成具有不同状态(数据)和行为的模块,不同模块之间的联系通过消息实现等等。

2.软件的开发方法
由于Java语言的面向目标的特性,越来越多的人在用O-O开发时都在选择使用Java技术与方法来开发,这与Java的面向对象特性、模块化特性、安全性以及适应IT技术发展密不可分。

3.WEB技术
Java提供的CGI、ASP替代方法servlet/jsp以及EJB都是与互联网发展需求相呼应的,由此可见Java在未来必然紧跟互联网发展趋势,采用Java解决企业基于WEB的应用是明智选择。

4.分布式计算
Java对CORBA、RMI(远程方法调用)、EJB、XML和网络处理的支持和应用,将使未来企业分布计算向其倾斜。

5.图形处理与多媒体效果
Java2以及以后版本提供了Swing、2D、3D、Sound等图形、图象和多媒体支持类库,弥补了早期Java版本在此方面的不足。Java的媒体处理能力使程序开发在的动画效果远比GUI技术更加逼真,尤其是利用WWW提供的巨大动画资源空间,可以共享全世界的动态画面的资源。

6. 产品开发
目前Java产品主要有基于WEB的实时信息发布系统、WEB邮件系统、用于企业分布式计算的消息传输系统、基于servlet/jsp/ejb开发的电子商务平台、提供servlet/jsp/ejb开发和运行环境的应用服务器、结合CORBA/XML等技术开发的分布计算支撑平台等等。另外用Java开发的多媒体软件可以实现集可视化、可听化、可操作化于一体的效果。

四、Java未来前景
由于Java语言具有上述优秀特性,所以其应用前景必然美好,未来发展肯定会与互联网的发展需求绑定:
1. 所有面向对象的应用开发;
2. 软件工程中需求分析、系统设计、开发实现和维护;
3. 中小型多媒体系统设计与实现;
4. 消息传输系统;
5. 分布计算交易管理应用(JTS/RMI/CORBA/JDBC等技术应用);
6. Internet的系统管理功能模块的设计,包括Web页面的动态设计、网站信息提供管理和交互操作设计等。
7. Intranet(企业内部网)上完全基于Java和WEB技术的应用开发;
8. WEB服务器后端与各类数据库连接管理器(队列、缓冲池);
9. 安全扫描系统(包括网络安全扫描、数据库安全扫描、用户安全扫描等);
10. 网络/应用管理系统;
11. 其它应用类型的程序。

五、学习建议
因为多种原因,目前我国对于Internet的研究与开发工作还是与国外尤其实美国有相对差距,但用Java语言进行开发的成功案例在各行各业还是有些,尤其实目前较为火热的电子商务网站系统。许多程序员或非程序员希望能够有目的、有步骤、系统的学习Java技术,我建议可以从以下层面来学习:

1、 Java语言基础
参加基础技术培训的目的在于此,该部分应该掌握内容有面向对象基础、Java语言基础语法、Java规范、Java虚拟机规范、编程规范以及常用开发工具使用等。

2、 全面了解Java高级技术概貌
全面了解Java高级技术概貌其实并不一定必须学习Java语言基础,有时需要知道将来可以学习什么、做什么是最重要的。Java高级技术目前大致有AWT工具使用、Swing组件使用、JavaBeans、Java2D、Drag-and-Drop、RMI-IIOP、JavaIDL、JDBC、JNDI、 JMAIL、JTS、Servlet/Jsp等,学习的最好方法不是到书店买书看,而是到Javasoft公司和其推荐的资源网站去阅读相关技术规范和API。

3、 有目的地选择深入掌握工作所需或感兴趣的技术方向
通常情况下,学习Java是因为对某些方面感兴趣或者是有方面的工作需求。因此无论为了个人兴趣还是更好的完成工作,几乎都只可能精于某几方面的技术,其它方面兼顾即可。

(注:如需引用、出版、发行请与作者联系,版权为中国Java阵线同盟所有)

胡德平
公元2000.08.10.21.30
于北京清华园

来源:
阅读:5578
日期:2000-11-14

J2EE编程起步

胡德平(hudeping@263.net, www.JavaUnion.org )

【编按】为了帮助国内J2EE初学者,将J2EE部分文档进行编译,期望能够对广大Java爱好者有所帮助。如有需要对发布在JavaUnion.org论坛中文章发表或转载需求,请与作者联系。

本文将通过简单例子,描述如何利用EJB开发、部署和运行一个客户机/服务器应用。例子的客户端作为Java独立应用运行,由ConverterClient.java类实现。它实现一个简单的实时会话,主要通过客户端应用调用服务器端EJB类ConverterEJB.java来实现。如果你已经安装了J2EE,则可以在doc/guides/ejb/examples/converter目录中找到这些例子。
为了实现本文所描述的简单例子,你需要完成以下任务:
·编写和编译EJB程序
·创建J2EE应用
·打包EJB(.jar)
·部署J2EE应用
·编写和编译客户端程序
·运行客户端
下面章节我们将就上述工作任务以及所涉及的知识点进行简单阐述。
前提
实现本文提供例子的前提是您安装了Javasoft.com或相关操作系统厂商网站下载的J2SE SDK,以及安装了相应操作系统版本的J2EE SDK(www.javasoft.com下载)并进行了正确配置。关于J2SE和J2EE的安装、配置和其它进一步信息,请参阅产品相关文档。
EJB编码
每个EJB程序必须要求编写下述代码:
·远程接口(Remote interface )
·本地接口(Home interface )
·实现组件(Enterprise bean class )
远程接口编码
远程接口定义了客户端能够调用的商业方法,这些商业方法是有服务器端的企业组件实现的,本文所涉及的Converter.java编码如下:
import javax.ejb.EJBObject;//引入必须的包
import java.rmi.RemoteException;

public interface Converter extends EJBObject {//必须继承EJBObject类
/*定义客户端可以调用的方法*/
public double dollarToYen(double dollars) throws RemoteException;
public double yenToEuro(double yen) throws RemoteException;
}
本地接口编码
本地接口定义了员徐客户端创建、查找或移动EJB的方法,本文所涉及的本地接口类ConverterHome接口只定义了一个create方法,返回远程接口类型,编码如下:
import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;

public interface ConverterHome extends EJBHome {

Converter create() throws RemoteException, CreateException;
}
企业组件类(EJB)编码
本文中的企业组件(EJB)是一个无状态会话组件,命名为ConverterEJB.java,该组件实现了两个商业方法:dollarToYen和yenToEuro,与远程接口Converter所定义客户端可访问方法一致,该类编码如下:
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class ConverterEJB implements SessionBean {

public double dollarToYen(double dollars) {

return dollars * 121.6000;
}

public double yenToEuro(double yen) {

return yen * 0.0077;
}

public ConverterEJB() {}
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
}
编译EJB
现在需要对上述三个类进行编译,在UNIX平台和NT/9X平台上的编译略有区别,分别如下编译:
UNIX:
1. 在下面的脚本compileEJB.sh中,将该成实际J2EE安装目录。
#!/bin/sh

J2EE_HOME=
CPATH=.:$J2EE_HOME/lib/j2ee.jar

javac -classpath “$CPATH” ConverterEJB.java ConverterHome.java Converter.java
2. 运行compileEJB.sh 脚本
Windows:
1. 在下面的compileEJB.bat批处理文件中,将 该为实际J2EE安装目录。
set J2EE_HOME=
set CPATH=.;%J2EE_HOME%\lib\j2ee.jar

javac -classpath %CPATH% ConverterEJB.java ConverterHome.java Converter.java
2. 运行批处理文件compileEJB.bat。
创建J2EE应用
你不能够直接将企业组件(EJB)部署到J2EE服务器,必须将组件加到一个J2EE 应用中然后再部署。在本节,你将创建一个叫做ConverterApp的新J2EE应用并保存为ConverterApp.ear。
1. 在命令行提示符下启动J2EE服务器:
j2ee ?verbose
(停止服务器命令 j2ee -stop.)

2. 在另一个终端窗口运行部署工具:
deploytool
(按F1获取部署工具帮助)

3. 创建新的J2EE应用
a. 在部署工具中选择“文件”菜单
b. 从“文件”菜单中选择“新应用”
c. 点击浏览
d. 在文件选择框中定位存放.ear文件的目录
e. 文件命名为ConverterApp.ear.
f. 点击“新应用”
g. 点击“确定”
企业组件(EJB)打包
本部分你将运行部署工具的创建EJB向导来完成下述任务:
·创建组件部署描述符
·将描述符和组件类打包为.jar文件
·将EJB.jar文件打包到J2EE应用ConverterApp.ear 文件
从“文件”菜单中选择创建EJB来开始创建新的EJB,这个向导将显示下面的对话框:
介绍对话框:
a. 阅读向导特性说明文档
b. 点击“下一步”
EJB JAR 对话框:
a. 在标有”Enterprise Bean will go in,” 的组合框中选择ConverterApp.
b.在JAR Display Name域输入ConverterJAR,声明EJB .jar文件包含该组件,该名字会在树形应用结构中呈现。
c. 点击增加内容文本域
d. 在内容编辑对话框顶部,输入包含.class文件的目录
e. 选择该目录下相关.class加入:Converter.class, ConverterEJB.class, 和ConverterHome.class.
f. 点击确定
g. 点击下一步
综合对话框:
a. 在组件类型中选择“会话”
b. 选择“无状态”
b. 在EJB类组合框中选择ConverterEJB.
c. 在本地接口组合框中选择ConverterHome.
d. 在远程接口组合框中选择Converter.
e. 在企业组件命名域中输入ConverterBean.
f. 点击下一步
环境入口对话框:
因为你可以跳过后面的对话框,所以可以点击完成结束创建EJB应用任务。
部署J2EE应用
现在J2EE应用中已经包含企业组件(EJB)了,可以对其进行部署。
1.指定企业组件的JNDI名字
a. 在应用部署波农工具中,在应用树形结构中选择ConverterApp
b. 选择JNDI名字标签
c. 在JNDI 名字域中,输入MyConverter并确认。 客户端将使用该名字来定位本地接口。
2.部署J2EE应用
a. 从工具菜单中选择“部署”
b. 在第一个对话框中选择ConverterApp为部署对象,Localhost为目标服务器
c. 选择标有”Return Client Jar.” 的选择框
d. 在文本域中敲入ConverterAppClient.jar的确切目录,如J2EE的例子目录doc/guides/ejb/examples/converter
e. 点击下一步
f. 在第二个对话框中,核实ConverterBean 的JNDI命名为MyConverter.
g.点击下一步
h. 在第三个对话框中点击结束
i. 在部署进程对话框中,点击OK完成部署
开发客户端
客户端程序ConverterClient是一个独立运行的Java应用,创建ConverterClient主要包括以下步骤:
1. 客户端编码
2. 客户端编译
客户端编码
ConverterClient.java 源码展示了EJB客户端最基本的任务实现,即:
·定位本地接口
·创建企业组件(EJB)
·调用商业方法
定位本地接口
ConverterHome接口定义了EJB声明周期方法如create,在中ConverterClient 可以调用create方法之前ConverterHome对象必须被实例化,包括三个步骤:
1. 创建JNDI命名上下文
Context initial = new InitialContext();
2. 查找与JNDI命名MyConverter绑定的对象
java.lang.Object objref = initial.lookup(“MyConverter”);
3. 限定指向ConverterHome对象的参考
ConverterHome home =
(ConverterHome) PortableRemoteObject.narrow(objref,
ConverterHome.class);
创建企业组件(EJB)实例
客户端通过调用本地接口ConvertHome对象的create方法创建ConverterEJB类对象, create 方法返回组件Converter类型的对象。然后,远程方法定义的在ConverterEJB实现的商业方法可以被客户端调用。当客户端调用create 方法时,EJB容器将实例化ConverterEJB,然后调用ConverterEJB.ejbCreate 方法。
Converter currencyConverter = home.create();
调用商业方法
完成上述任务后,调用商业方法就比较简单了。你调用Converter对象的方法, EJB容器将相应的调用运行在J2EE服务器中的ConverterEJB 实例的方法。客户端调用商业方法dollarToYen的代码如下:
double amount = currencyConverter.dollarToYen(100.00);
ConverterClient源码
下面是ConverterClient.java的完整源码:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

import Converter;
import ConverterHome;

public class ConverterClient {

public static void main(String[] args) {
try {
Context initial = new InitialContext();
Object objref = initial.lookup(“MyConverter”);

ConverterHome home =
(ConverterHome)PortableRemoteObject.narrow(objref,
ConverterHome.class);

Converter currencyConverter = home.create();

double amount = currencyConverter.dollarToYen(100.00);
System.out.println(String.valuesOf(amount));
amount = currencyConverter.yenToEuro(100.00);
System.out.println(String.valuesOf(amount));

currencyConverter.remove();

} catch (Exception ex) {
System.err.println(“Caught an unexpected exception!”);
ex.printStackTrace();
}
}
}
编译客户端代码
UNIX:
1. 在下面脚本compileClient.sh, 对 根据J2EE实际安装目录作相应改动。
#!/bin/sh

J2EE_HOME=
CPATH=.:$J2EE_HOME/lib/j2ee.jar

javac -classpath “$CPATH” ConverterClient.java
2. 运行脚本文件compileClient.sh
Windows:
1. 在下面批处理文件compileClient.bat中,对根据实际J2EE安装目录进行修改。
set J2EE_HOME=
set CPATH=.;%J2EE_HOME%\lib\j2ee.jar

javac -classpath %CPATH% ConverterClient.java
2. 运行批处理文件compileClient.bat
运行客户端
运行客户端你需要ConverterAppClient.jar文件,该文件包含允许客户端与EJB容器中EJB实例通信所需的存根类, ConverterAppClient.jar 文件在部署J2EE应用过程中创建。
UNIX:
1. 在下面脚本testClient.sh, 对 根据J2EE实际安装目录作相应改动。
#!/bin/sh

J2EE_HOME=
CPATH=$J2EE_HOME/lib/j2ee.jar:ConverterAppClient.jar:.

java -classpath “$CPATH” ConverterClient
2. 运行脚本文件testClient.sh
Windows:
1. 在下面批处理文件testClient.bat中,对根据实际J2EE安装目录进行修改。
set J2EE_HOME=
set CPATH=.;%J2EE_HOME%\lib\j2ee.jar;ConverterAppClient.jar

java -classpath “%CPATH%” ConverterClient
2. 运行批处理文件 testClient.bat
常见问题处理
当运行ConverterClient 时发现下面错误:
1. java.lang.ClassCastException
可能无法找到ConverterAppClient.jar文件。
2. java.lang.NoClassDefFoundError: ConverterClient
无法定位ConverterClient.class 文件。
3. java.lang.NoClassDefFoundError: javax/naming/Context
无法找到所需的j2ee.jar 文件,确认CLASSPATH设置。
4. javax.naming.NameNotFoundException: Lookup of name MyConverter failed.
J2EE服务器无法定位JNDI名字MyConverter所绑定的组件。
5. javax.naming.NamingException: Error accessing repository: Cannot connect to ORB at . . . .
J2EE服务器没有运行。

目前,国内开源运动的状况可以用“开源运动的发展无法满足日益增长的开源需求”来描述。开源软件开发是继操作系统、数据库、中间件之后的又一次软件变革,是中国软件业发展的又一个机遇。要抓住这个机遇,需要针对中国实际国情,应以发展国内开源社区与开源项目为主,积极参与国际开源社区,研发适合国内推广的开源软件。

       开源软件要在国内得到普及和应用推广,必须以操作系统Linux为主、开发包括数据库、中间件、办公软件、开发工具、娱乐软件和工具软件等软件组成的立体化开源软件体系。缺乏外围应用,靠政府采购在服务器端和桌面端推广Linux最终结果只会导致用户越来越难以接受“不可用”的Linux

       要推动开源运动在国内发展,形成良性开源产业,需要从以下几个方面解决目前存在的问题:

 

?        标准制定   参与或组织制定Linux操作系统、中间件、数据交换接口标准           

?        开源引导   通过媒体、高校讲座、开源项目比赛普及开源知识

?        社区支持   对开源社区提供主机、带宽服务,培育和支持开源社区,最终使

社区能够起到培育、聚集和发现人才和创建、开发、推广开源项目的积极作用

“Open Source”(开放源码)被非赢利软件组织(美国的Open Source Initiative协会)注册为认证标记,并对其进行了正式的定义,用于描述那些源码可以被公众使用的软件,并且此软件的使用、修改和发行也不受许可证的限制。开放源码软件通常是有版权 ( copyright ) .它的许可证可能包含这样一些限制:着意地保护它的开放源码状态,著者身份的公告,或者开发的控制,授权方式主要包括GPLMPLBSD等。

 

从安全、可控制、节省等因素考虑,目前美国、德国、法国、丹麦、印度、马来西亚、新加坡、日本、奥地利、秘鲁等国家和地区在教育、政府、军队等部门制定支持使用开源软件的政策来推广开源软件的使用。

 

在中国,开源软件也受到政府和企业的重视,政府相关部门在linux研发支持上持续投入并成立了Linux标准工作组负责Linux技术体系标准制定。部分公司开始从事基于开源软件研发,如红旗LinuxTurboLinux、深圳Pocketix公司等。但目前开源在中国的发展还处于早期阶段,其主要特征:

 

1.      没有形成一个自由程序员阶层.

   目前中国的程序员数量并不少,但自由程序员却寥寥无几,目前在国际上有影响的自由软件计划中由中国人带队的只有LVS Linux Virtual Server,章文嵩)LIDSLinux Intrusion Detection System谢华刚)还有 MiniGUI ( MiniGUI, 魏永明),SBM(Smart Boot Manager,苏哲)四个,主要原因在于程序员生存压力、unix/linux下程序员少、语言障碍和开源技能缺乏。

 

2.      自由软件社区尚不成熟

国内的自由软件社区不多,主要有freesof.cei.gov.cnLinuxforum Linuxaid 等论坛和下载基地,但是总体而言,社区的力量和影响还是很小,表现在对媒体和大众的影响不大。

 

3.      公司开源开发存在盲目性

在政府引导和支持下,中软、红旗、共创开源、新华、冲浪、拓林思等多家Linux桌面、办公系统开发商。但存在标准不统一、开发规模小、低水平重复工作多、缺乏中间件与应用方案支持等问题。

此外中国的盗版软件横行,知识产权法的推广不力,个人版权意识淡漠也造成了在中国单纯模仿外国的开源公司的模式是完全行不通的。