posts - 20,  comments - 7,  trackbacks - 0
http://www.jdon.com/idea/j2eebasic.htm

J2EE容器分为WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用Tomcat实现的。所以你开发的Web应用程序可以在上面两种容器运行,而你开发的Web+EJB应用则只可以在JBoss服务器上运行,商业产品Websphere/Weblogic等和JBoss属于同一种性质。

J2EE容器也称为J2EE服务器,大部分时它们概念是一致的。

http://www.douzhe.com/jerry/archive/archive1_cn.htm

容器:充当中间件的角色

WEB容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。

EJB容器:Enterprise Java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。

WEB容器和EJB容器在原理上是大体相同的,更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。

RMI/IIOP:远程方法调用/internet对象请求中介协议,他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是Java特有的。

JNDI:Java命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。

JMS:Java消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。

JavaMAIL:Java邮件服务。提供邮件的存储、传输功能。他是Java编程中实现邮件功能的核心。相当MS中的EXCHANGE开发包。

JTA:Java事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。

JAF:Java安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。

EAI:企业应用集成。是一种概念,从而牵涉到好多技术。J2EE技术是一种很好的集成实现。


EJB容器
  EJB容器用来容纳业务逻辑,并为业务逻辑截取请求。EJB容器支持EJB访问JMS、JAAS、JTA、JavaMail、JAXP、JDBC和连接器(Connector)。

Web容器
  Web容器截取通过HTTP、FTP、SMTP或其他协议发送的请求。Web应用容器为Servlet和JSP页面提供的资源与EJB容器提供的资源相同。

应用客户端容器
  客户端应用是独立的Java应用,它们在远程的独立JVM上运行(与Web容器和EJB容器所运行的JVM不同)。应用客户端容器为这些应用截取请求。
  运行在应用客户端容器上的程序非常类似于带有main()方法的Java程序,不过,程序不再由JVM控制,而是由一个容器(也就是应用客户端容器)控制。
  在应用客户端容器内运行的程序能够访问远程应用服务器上的JAXP、JDBC、JMS和JAAS资源。

Applet容器
  Applet容器是一个特殊的容器,它为在浏览器内运行的Java程序截取请求。Applet容器不提供任何对其他资源(比如JDBC或JMS)的访问。在Applet容器内运行的Applet必须自己直接向应用服务器请求资源(而不是把请求发送给容器,然后由容器发送请求给应用服务器)。
  对于Applet如何与EJB容器进行通信,EJB规范没有作出任何规定,但J2EE规范有这方面的规定。对于那些想要直接使用EJB的Applet,J2EE规范要求它们使用HTTP隧道。许多应用服务器提供某种形式的HTTP隧道,支持Applet直接使用EJB。

posted @ 2006-10-18 10:05 Lizzie 阅读(310) | 评论 (0)编辑 收藏
[肥肥世家]Linux由于开放源码衍生出大量的发行版,为用户提供丰富选择的同时又给初学者造成困惑,这么多发行版应该选择哪种才适合自已呢?下面这个网址会给出答案,它会向你提出一些有关Linux和你应用环境的问题,你只要一步步回答,最后它就会根据你的回答为你选择几款最适合你的发行版。

http://www.zegeniestudios.net/ldc/index.php?firsttime=true
posted @ 2006-10-08 15:43 Lizzie 阅读(432) | 评论 (1)编辑 收藏

第一句话是:优秀是一种习惯。
这句话是古希腊哲学家亚里士多德说的。如果说优秀是一种习惯,那么懒惰也是一种习惯。人出生的时候,除了脾气会因为天性而有所不同,其他的东西基本都是后天形成的,是家庭影响和教育的结果。所以,我们的一言一行都是日积月累养成的习惯。我们有的人形成了很好的习惯,有的人形成了很坏的习惯。所以我们从现在起就要把优秀变成一种习惯,使我们的优秀行为习以为常,变成我们的第二天性。让我们习惯性地去创造性思考,习惯性地去认真做事情,习惯性地对别人友好,习惯性地欣赏大自然。

注解:要会“装”,要持续的、不间断的“装”,装久了就成了真的了,就成了习惯了,比如准时到会,每次都按时到会,你装装看,你装30年看看,装的时间长了就形成了习惯。:)

第二句话是:生命是一种过程。
事情的结果尽管重要,但是做事情的过程更加重要,因为结果好了我们会更加快乐,但过程使我们的生命充实。人的生命最后的结果一定是死亡,我们不能因此说我们的生命没有意义。世界上很少有永恒。大学生谈恋爱,每天都在信誓旦旦地说我会爱你一辈子,这实际上是不真实的。统计数据表明,大学生谈恋爱的100对里有 90对最后会分手,最后结婚了的还有一半会离婚。你说爱情能永恒吗?所以最真实的说法是:“我今天,此时此刻正在真心地爱着你。”明天也许你会失恋,失恋后我们会体验到失恋的痛苦。这种体验也是丰富你生命的一个过程。


注解:生命本身其实是没有任何意义的,只是你自己赋予你的生命一种你希望实现的意义,因此享受生命的过程就是一种意义所在。

第三句话是:两点之间最短的距离并不一定是直线。

在人与人的关系以及做事情的过程中,我们很难直截了当就把事情做好。我们有时需要等待,有时需要合作,有时需要技巧。我们做事情会碰到很多困难和障碍,有时候我们并不一定要硬挺、硬冲,我们可以选择有困难绕过去,有障碍绕过去,也许这样做事情更加顺利。大家想一想,我们和别人说话还得想想哪句话更好听呢。尤其在中国这个比较复杂的社会中,大家要学会想办法谅解别人,要让人觉得你这个人很成熟,很不错,你才能把事情做成。


注解:如果你在考数学试题,一定要答两点之间直线段最短,如果你在走路,从A到B,明明可以直接过去,但所有人都不走,你最好别走,因为有陷阱。在中国办事情,直线性思维在很多地方要碰壁,这是中国特色的中国处事方式。

第四句话是:只有知道如何停止的人才知道如何加快速度。

我在滑雪的时候,最大的体会就是停不下来。我刚开始学滑雪时没有请教练,看着别人滑雪,觉得很容易,不就是从山顶滑到山下吗?于是我穿上滑雪板,哧溜一下就滑下去了,结果我从山顶滑到山下,实际上是滚到山下,摔了很多个跟斗。我发现根本就不知道怎么停止、怎么保持平衡。最后我反复练习怎么在雪地上、斜坡上停下来。练了一个星期,我终于学会了在任何坡上停止、滑行、再停止。这个时候我就发现自己会滑雪了,就敢从山顶高速地往山坡下冲。因为我知道只要我想停,一转身就能停下来。只要你能停下来,你就不会撞上树、撞上石头、撞上人,你就不会被撞死。因此,只有知道如何停止的人,才知道如何高速前进。

注解:用汽车来比喻,宝马可以上200公里,奇瑞却只能上120公里,为什么?发动机估计不相上下,差距在刹车系统,上了200公里刹不了车,呵呵,我的天!


第五句话是:放弃是一种智慧,缺陷是一种恩惠。

当你拥有六个苹果的时候,千万不要把它们都吃掉,因为你把六个苹果全都吃掉,你也只吃到了六个苹果,只吃到了一种味道,那就是苹果的味道。如果你把六个苹果中的五个拿出来给别人吃,尽管表面上你丢了五个苹果,但实际上你却得到了其他五个人的友情和好感。以后你还能得到更多,当别人有了别的水果的时候,也一定会和你分享,你会从这个人手里得到一个橘子,那个人手里得到一个梨,最后你可能就得到了六种不同的水果,六种不同的味道,六种不同的颜色,六个人的友谊。人一定要学会用你拥有的东西去换取对你来说更加重要和丰富的东西。所以说,放弃是一种智慧。
posted @ 2006-10-08 15:40 Lizzie 阅读(173) | 评论 (0)编辑 收藏
1、 罗密欧与朱丽叶效应

  罗密欧与朱丽叶相爱,但由于双方世仇,他们的爱情遭到了极力阻碍。但压迫并没有使他们分手,反而使他们爱得更深,直到殉情。这样的现象我们叫它罗密欧与朱丽叶效应。所谓罗密欧与朱丽叶效应,就是当出现干扰恋爱双方爱情关系的外在力量时,恋爱双方的情感反而会加强,恋爱关系也因此更加牢固。

  2、 从众现象

  一则笑话这样说到:一日闲逛街头,忽见一长队绵延,赶紧站到队后排队,唯恐错过什么购买紧缺必需品的机会。等到队伍拐过墙角,发现大家原来是排队上厕所,才不禁哑然失笑。这就是从众闹出的笑话。从众指个人的观念与行为由于群体的引导或压力,而向与多数人一致的方向变化的现象。用通俗的话说,从众就是“随大流”。可以表现为在临时的特定情境中对占优势的行为方式的采纳,也可以表现为长期性的对占优势的观念与行为方式的接受。

  3、 晕轮效应

  许多青少年因崇拜某位明星的某些特征,比如长相啊,歌声啊,于是就不顾一切模仿明星的行为,搜集他们用过的一切东西。这其实就是晕轮效应在作怪。晕轮效应就是一种以偏概全的倾向,即人们在对一个人的某种特征形成好的或坏的印象后,倾向于据此推论该人的其他方面的特征。平时说的“爱屋及乌”就是晕轮效应的一个突出表现。

  4、 鲇鱼效应

  水池里养着一群鱼,由于缺乏外界刺激,这些鱼变得死气沉沉,容易死亡。渔民偶然把几条鲇鱼放在这群鱼里,却发现一个奇怪的现象:由于鲇鱼喜欢挤来挤去,整个水池里的鱼都被带动起来而显得生机勃勃,所以渔民喜欢放几条鲇鱼在里面增加全体鱼的活力与寿命。

  在经济、文化等活动中引入竞争机制,也会产生鲇鱼效应。

   5、 马太效应

  《圣经·马太福音》有这样一则故事:一个富翁给他的三个仆人每人一锭银子去做生意。一年后他召集仆人想知道他们各自赚了多少,其中第一个人赚了十锭,第二个人赚了五锭,最后一个人用手巾包了那锭银子,捂了一年没赚一个子儿,这位富翁就命令后者把那锭银子交给赚钱最多者。该书第二十五章说:“凡有的,还要加给他叫他多余;没有的,连他所有的也要夺过来。”1973年,美国科学史研究者莫顿用这句话概括了一种社会心理现象:“对已有相当声誉的科学家作出的科学贡献给予的荣誉越来越多,而对那些未出名的科学家则不承认他们的成绩。”莫顿将这种社会心理现象命名为“马太效应”。

  6、 期望效应(皮格马利翁效应、罗森塔尔效应)

  皮格马利翁是古代塞浦路斯的一位善于雕刻的国王,由于他把全部热情和希望放在自己雕刻的少女雕像身上,后来竟使这座雕像活了起来。心理学家罗森塔尔(R. Rosenthal)和雅各布森L. F. Jacobson)称之为“皮格马利翁效应”。

  罗森塔尔及其同事,要求教师们对他们所教的小学生进行智力测验。他们告诉教师们说,班上有些学生属于大器晚成(lateblooming) 者,并把这些学生的名字念给老师听。罗森塔尔认为,这些学生的学习成绩可望得到改善。自从罗森塔尔宣布大器晚成者的名单之后,罗森塔尔就再也没有和这些学生接触过,老师们也再没有提起过这件事。事实上所有大器晚成者的名单,是从一个班级的学生中随机挑选出来的,他们与班上其他学生没有显著不同。可是当学期之末,再次对这些学生进行智力测验时,他们的成绩显著优于第一次测得的结果。这种结局是怎样造成的呢?罗森塔尔认为,这可能是因为老师们认为这些晚器大成的学生,开始崭露头角,予以特别照顾和关怀,以致使他们的成绩得以改善。

  皮格马利翁效应和罗森塔尔效应都反映了期望的作用,所以又称为期望效应。

  7、 安慰剂效应

  所谓安慰剂,是指既无药效、又无毒副作用的中性物质构成的、形似药的制剂。安慰剂多由葡萄糖、淀粉等无药理作用的惰性物质构成。安慰剂对那些渴求治疗、对医务人员充分信任的病人能产生良好的积极反应,出现希望达到的药效,这种反应就称为安慰剂效应。

  使用安慰剂时容易出现相应的心理和生理反应的人,称为“安慰剂反应者”。这种人的特点是:好与人交往、有依赖性、易受暗示、自信心不足,经常注意自身的各种生理变化和不适感,有疑病倾向和神经质。

  8、 首因效应与近因效应

  首因效应:人与人第一次交往中给人留下的印象,在对方的头脑中形成并占据着主导地位,这种效应即为首因效应。

  近因效应:与首因效应相反,是指交往中最后一次见面给人留下的印象,这个印象在对方的脑海中也会存留很长时间。在学习和人际交往中,这两种现象很常见。

  9、 霍桑效应

  为了调查研究各种工作条件对生产率的影响,美国西方电器公司霍桑工厂一个大车间的六名女工被选为实验的被试者。实验持续了一年多。这些女工的工作是装配电话机中的继电器。首先让她们在一个一般的车间里工作两星期,测出她们的正常生产率。然后把她们安排到一个特珠的测量室工作五星期,这里除了可以测量每个女工的生产情况外,其他条件都与一般车间相同,即工作条件没有变化。接着进入第三个时期,改变了对 女工们支付工资的方法。以前女工的薪水依赖于整个车间工人的生产量,现在只依赖于她们六个人的生产量。在第四个时期,在工作中安排女工上午、下午各一次5分钟的工问休息。第五个时期,把工间休息延长为10分钟。第六个时期,建立了六个5分钟休息时间制度。第七个时期,公司为女工提供一顿简单的午餐。在随后的三个时期每天让女工提前半小时下班。第十一个时期,建立了每周工作五天的制度。最后第十二个时期,原来的一切工作条件又全恢复了,重新回到第一个时期。老板是想通过这一实验未寻找一种提高工人生产效率的生产方式。的确,工作效率会受工作条件的影响,然而,出乎意料的是不管条件怎么改变,如增加或减少工间休息,延长或缩短工作日,每一个实验时期的生产率都比前一个时期要高,女工们的工作越来越努力,效率越来越高,根本就没关注过生产条件的变化。

  之所以会这样,一个重要的原因就是女工们感到自己是特殊人物,受到了格外好的待遇,她们引起了人们极大的注意,因而感到愉快,便遵照老板想要她们做的那样去做。她们知道这样做主要是为了测量她们的生产效率,这是人们关注的事情,因此,生产条件发生什么变化无关紧要,她们总把这些变化设想成为有利的,所以,她们工作越来越努力,每一次的改变都刺激着她们去提高生产效率。

  通过操纵一个人的环境,让他与众人分离,特别密切地关注他,使他感到很特别,都会对他产生很大的压力。如果他知道人们期望他干什么,只要没有想要拒绝的特别理由,他会尽一切努力按人们的期望去干好每一件事。霍桑工厂的女工们知道自己正在被研究,尽管她们想到的并不是老板期望的,但她们会尽自己最大的努力产生适当的效果。所以对个人施加压力说服他去做某件事的最有效方法之一就是使他愉快,向他显示出他正被关心着,被期待看做好某件事。这在心理学上被称为霍桑效应。

  霍桑试验的研究结果否定了传统管理理论对于人的假设,表明了工人不是被动的、孤立的个体,他们的行为不仅仅受工资的刺激;影响生产效率的最重要因素不是待遇和工作条件,而是工作中的人际关系。
posted @ 2006-09-22 12:40 Lizzie 阅读(226) | 评论 (0)编辑 收藏
     摘要: J2EE/XML 开发者通常都是使用文档对象模型 (DOM)API 或简单的 API for XML(SAX) API 来分析 XML 文档。然而,这些 API 都有其缺点。其中, DOM API 的缺点之一是消耗大量的内存,因为在该 XML 文档可以被导航之前,必须创...  阅读全文
posted @ 2006-09-17 22:24 Lizzie 阅读(427) | 评论 (1)编辑 收藏

All about JAXP

http://www-128.ibm.com/developerworks/java/library/x-jaxp

Brett McLaughlin

 

Document Object Model (DOM)

Simple API for XML (SAX)

 

JDK1.4

javax.xml.parsers
javax.xml.transform
javax.xml.transform.dom
javax.xml.transform.sax
javax.xml.transform.stream

 

JDK5.0

javax.xml
javax.xml.datatype
javax.xml.namespace
javax.xml.parsers
javax.xml.transform
javax.xml.transform.dom
javax.xml.transform.sax
javax.xml.transform.stream
javax.xml.validation
javax.xml.xpath

 

 

严格来说, JAXP 并没有提供新的解析 XML 的方法,但是它使得我们更容易地使用 DOM 或者 SAX 来进行解析任务,更能以一种 vendor-neutral 的方式来使用 DOM SAX

 

JAXP SAX, DOM, JDOM dom4j (这四个都可以解析 XML )没有可比较性,它并没有提供一个新的解析 XML 的方法。

 

JAXP API, located in the javax.xml.parsers package. All of these classes sit on top of an existing parser. 其中的 6 个类都是建立在已有的解析上面的。

 

JDOM dom4j 都提供不同的模型来接受来自 SAX/DOM 的数据,他们从内部来讲都是使用了 SAX ,不过是做了些修改。

 

此外, Java 1.5 Xerces 的包 org.apache.xerces 被放到了 com.sun.org.apache.xerces.internal

 

First, com.sun.xml.tree.XMLDocument class is not part of JAXP. It is part of Sun's Crimson parser, packaged in earlier versions of JAXP.

 

Second, a major purpose of JAXP is to provide vendor independence when dealing with parsers. With JAXP, you can use the same code with Sun's XML parser, Apache's Xerces XML parser, and Oracle's XML parser.

 

先从 SAX 说起,我们只用继承 DefaultHandler (org.xml.sax.helpers 包中 ) 就能获得所有的 callbacks ,只用在需要的方法中加入实现的代码。

 

Here's the typical SAX routine:

1 Create a SAXParser instance using a specific vendor's parser implementation.

2 Register callback implementations (by using a class that extends DefaultHandler, for example).

3 Start parsing and sit back as your callback implementations are fired off.

 

SAX 必须 指定 XML 驱动(如 org.apache.xerces.parsers.SAXParser ),而 JAXP 提供了更好的选择,只要我们提供什么 XML 驱动(在 classpath 中配置),它就调用什么驱动,不需要改动代码。

   

new SAXParserFactory.newSAXParser() 就返回 JAXP SAXParser 类,这个类包装了 SAX parser (an instance of the SAX class org.xml.sax.XMLReader )

 

In Listing 1, you can see that two JAXP-specific problems can occur in using the factory: the inability to obtain or configure a SAX factory, and the inability to configure a SAX parser.

The first of these problems, represented by a FactoryConfigurationError, usually occurs when the parser specified in a JAXP implementation or system property cannot be obtained.

The second problem, represented by a ParserConfigurationException, occurs when a requested feature is not available in the parser being used. Both are easy to deal with and shouldn't pose any difficulty when using JAXP.

 

SAXParser parse 方法可以接受 SAX InputSource Java InputStream 或者 URL in String form

 

可以通过 SAXParser getXMLReader() 方法来获得底层的 SAX parser org.xml.sax.XMLReader 的实例),这样就可以使用各个 SAXParser 方法。 [ 参照 Listing2]

    

 

使用 DOM  

The only difference between DOM and SAX in this respect is that with DOM you substitute DocumentBuilderFactory for SAXParserFactory, and DocumentBuilder for SAXParser.

 

The major difference is that variations of the parse() method do not take an instance of the SAX DefaultHandler class. Instead they return a DOM Document instance representing the XML document that was parsed. The only other difference is that two methods are provided for SAX-like functionality:

  • setErrorHandler(), which takes a SAX ErrorHandler implementation to handle problems that might arise in parsing
  • setEntityResolver(), which takes a SAX EntityResolver implementation to handle entity resolution

JAXP 的使用

1. Source for input

The javax.xml.transform.Source interface is the basis for all input into JAXP and the transformation API. This interface defines only two methods -- getSystemId() and setSystemId(String systemId) .

 

 

JAXP 提供了三个实现 Source 接口的类:

  • javax.xml.transform.dom.DOMSource passes a DOM Node (and its children) into JAXP.
  • javax.xml.transform.sax.SAXSource passes the results of SAX callbacks (from an XMLReader ) into JAXP.
  • javax.xml.transform.stream.StreamSource passes XML wrapped in a File , InputStream , or Reader into JAXP.   

2. Result for output

  javax.xml.transform.Result 也有两个方法: getSystemId() setSystemId(String systemId) 同样有三个实现类:

  • javax.xml.transform.dom.DOMResult passes transformed content into a DOM Node .
  • javax.xml.transform.sax.SAXResult passes the results of a transformation to a SAX ContentHandler .
  • javax.xml.transform.stream.StreamResult passes the transformed *ML into a File , OutputStream , or Writer .

3. Performing transformations with JAXP

1)Getting a Factory     

2)Creating a Transformer   
3)Performing the transformation    
4)Caching XSL stylesheets

JAXP this way has two significant limitations:

  • The Transformer object processes the XSL stylesheet each and every time transform() is executed.
  • Instances of Transformer are not thread-safe. You can't use the same instances across multiple threads.

Transformer 实例不是线程安全的,不能通过多线程去使用同一个 Transformer 实例。

5)Loading a Template

javax.xml.transform.Templates .

 

The Templates interface is thread-safe (addressing the second limitation) and represents a compiled stylesheet (addressing the first limitation).

Templates 实例是线程安全的,可以处理一堆 XSL ,解决了上述两个限制。

6)From Transformer to Templates

如果只要对一个 stylesheet 进行一个 transformation ,那么用 Transformer 比较快,没有必要选择 Templates 对象。但是考虑到线程安全问题,还是推荐使用 Templates

7)Changing the XSL processor

JAXP 默认使用 Xalan-J ,如果要使用其它 parser ,可以通过 javax.xml.transform.TransformerFactory 修改。


java -D javax.xml.transform.TransformerFactory=[transformer.impl.class] TestTransformations 
simple.xml simple.xsl

 

posted @ 2006-09-08 13:15 Lizzie 阅读(536) | 评论 (1)编辑 收藏

Document E09
SourceForge.net: Subversion (Version Control for Source Code)

 

http://sourceforge.net/docman/display_doc.php?docid=31070&group_id=1

 

功能特性:

Subversion 官方网站,查看 http://subversion.tigris.org/

 

欣慰的是这里有个网站提供一本免费的、非常棒的 SVN 图书,可以选择在线查看或者下载 PDF SVN 使用者必读。 http://svnbook.red-bean.com/

 

各个版本控制系统功能比较的文章

http://better-scm.berlios.de/comparison/comparison.html

 

Subversion 使用手记 中文英文对照

http://robinlet.bokee.com/2866408.html

 

一篇文章介绍如何将 CVS Repository 转换成 SNV

http://up-u.com/?q=node/232

转换方法来自这个程序 http://cvs2svn.tigris.org/

 

官方的那本书是最好的教程,网上还有大量的安装和使用的文章可以借鉴,这里简单罗列几个 SVN 辅助的软件:

 

1 SubVersion ,从 http://subversion.tigris.org/

下载,是实现服务系统的软件,必装的。

 

2 TortoiseSVN ,从 http://tortoisesvn.tigris.org/

下载,是很不错的 SVN 客户端程序,为 windows 外壳程序集成到 windows 资源管理器和文件管理系统的 Subversion 客户端,用起来很方便。

 

3 SVNService.exe ,从 http://dark.clansoft.dk/~mbn/svnservice/

下载,是专为 SubVersion 开发的一个用来作为 Win32 服务挂接的入口程序。

 

4 AnkhSVN ,从 http://ankhsvn.tigris.org/

下载,这是一个专为 Visual Studio 提供 SVN 的插件。

 

5 Subversive ,从 http://www.polarion.org/p_subversive.php

下载,一个为 Eclipse 提供 SVN 的插件,据说已经和 Eclipse 自带的 CVS 功能有一拼。

 

6 、还有很多很多 SVN 相关的工具以及使用 TIP 介绍,大家可以上官方的相关链接页面中查看,地址: http://subversion.tigris.org/links.html

posted @ 2006-08-28 12:07 Lizzie 阅读(447) | 评论 (0)编辑 收藏

Linux 下有一个功能强大的软件安装卸载工具,名为 RPM 。它可以用来建立、安装、查询、更新、卸载软件。该工具是在命令行下使用的。在 Shell 的提示符后输入 rpm ,就可获得该命令的帮助信息。


Linux
下软件的安装主要有三种不同的形式。

第一种安装文件名为 xxx.tar.gz

第二种安装文件名为 xxx.i386.rpm

还有一种是 xxx.src.rpm

 

以第一种方式发行的软件多为以源码形式发送的;

第二种方式则是直接以二进制形式发送的;

第三种是 rpm 格式发布的源码。


对于第一种 [xxx.tar.gz] ,安装方法如下:
   1 . 首先,将安装文件拷贝至你的目录中。例如,如果你是以 root 身份登录上的,就将软件拷贝至 /root 中。
   #cp xxx.tar.gz /root
   2 . 由于该文件是被压缩并打包的 , 应对其解压缩。命令为:
   #tar xvzf filename.tar.gz
   3. 执行该命令后,安装文件按路径,解压缩在当前目录下。用 ls 命令可以看到解压缩后的文件。通常在解压缩后产生的文件中,有 “Install” 的文件。该文件为纯文本文件,详细讲述了该软件包的安装方法。
   4. 执行解压缩后产生的一个名为 configure 的可执行脚本程序。它是用于检查系统是否有编译时所需的库,以及库的版本是否满足编译的需要等安装所需要的系统信息。为随后的编译工作做准备。命令为: #./configure
   5. 检查通过后,将生成用于编译的 MakeFile 文件。此时,可以开始进行编译了。编译的过程视软件的规模和计算机性能的不同,所耗费的时间也不同。命令为: #make
   6. 成功编译后,键入如下的命令开始安装:
   #make install
   7. 安装完毕,应清除编译过程中产生的临时文件和配置过程中产生的文件。键入如下命令:
   #make clean
   #make distclean
  至此,软件的安装结束。
  
对于第二种 [xxx.i386.rpm] ,其安装方法要简单得多。
  同第一种方式一样,将安装文件拷贝至你的目录中。然后使用 rpm 来安装该文件。命令如下:
   #rpm -i filename.i386.rpm
   rpm 将自动将安装文件解包,并将软件安装到缺省的目录下。并将软件的安装信息注册到 rpm 的数据库中。参数 i 的作用是使 rpm 进入安装模式。
  

 

软件的卸载
   1. 软件的卸载主要是使用 rpm 来进行的。卸载软件首先要知道软件包在系统中注册的名称。键入命令:
   #rpm -q -a
  即可查询到当前系统中安装的所有的软件包。


   2. 确定了要卸载的软件的名称,就可以开始实际卸载该软件了。键入命令:
   #rpm -e [package name]
  即可卸载软件。参数 e 的作用是使 rpm 进入卸载模式。对名为 [package name] 的软件包进行卸载。由于系统中各个软件包之间相互有依赖关系。如果因存在依赖关系而不能卸载, rpm 将给予提示并停止卸载。你可以使用如下的命令来忽略依赖关系,直接开始卸载:
   #rpm -e [package name] -nodeps

 

忽略依赖关系的卸载可能会导致系统中其它的一些软件无法使用


对于第三种 [xxx.src.rpm] ,安装也很简单
拷贝到目标目录,然后执行
#rpmbuild --rebuild xxx.src.rpm
编译文件
然后进入 #cd /usr/src/redhat(or other)/RPMS/i386/
执行 #rpm -ivh xxxxx.rpm 安装


上面的方法是对 Redhat 8.0 以及 Mandrake9.0 来说的,如果是低于这个版本。应该用
#rpm --rebuild *.src.rpm

posted @ 2006-08-23 16:57 Lizzie 阅读(525) | 评论 (0)编辑 收藏
x86是一个intel通用计算机系列的编号,也标识一套通用的计算机指令集合。

早期intel的CPU编号都是如8086,80286,由于这整个系列的CPU都是指令兼容的,所以都用X86来标识所使用的指令集合。

如今的奔腾,P2,P4,赛扬系列都是支持X86指令系统的,所以都属于X86家族。

x86 family 6 model 65意思是这个CPU属于x86家族的第6代产品,采用65ns的工艺制造。

AT/AT COMPATIBLE 这个的意思应该是说兼容AT/AT指令。

i386是指intel发布的通用处理器类型,适合386,486,586,686的CPU。有些rpm包还区分了这些类型。
posted @ 2006-08-23 12:16 Lizzie 阅读(4620) | 评论 (4)编辑 收藏
     摘要: 常用中国姓氏读法 中 文     日 文               中 文     日 文 ___...  阅读全文
posted @ 2006-08-22 21:15 Lizzie 阅读(489) | 评论 (0)编辑 收藏
     摘要: Original Author: 夏昕<xiaxin@gmail.com>本文是由笔者2003 年底一个咨询项目中,为客户做的持久层设计培训文案整理而来。其中的内容涉及Hibernate 的使用,以及一部分笔者实际咨询项目中的经验积累,另一方面,大部分是笔者在Hibernate 的官方论坛中与众多技术专家交流所得。既来于斯,则归于斯。希望能聊有所用。本文并非试图替代Hibernate ...  阅读全文
posted @ 2006-08-22 09:03 Lizzie 阅读(1452) | 评论 (0)编辑 收藏
面向对象的脚本语言Ruby
http://rubycn.ce-lab.net/20020101.html

RUBY文档中心
http://www.moer.net/ruby/doc/


TCL脚本
http://www.tclchina.com/


Python快速入门
http://wiki.woodpecker.org.cn/moin/WeiZhong/2006-01-17

Python 研究(Dive Into Python)
http://www.woodpecker.org.cn/diveintopython/


Perl
http://www.perl.cn/

Perl 学习手札
http://perl.hcchien.org/TOC.html

Perl精华文章 - ChinaUnix.net
http://www.chinaunix.net/jh/25/

Perl常见问题集
http://www.cnool.net/tianyige/computer/perlfaq/


Spring专题
http://www.javafan.net/special/spring/

SpringFramework中文论坛 首页
http://spring.jactiongroup.net/

Java开源项目
http://dev.yesky.com/javaopen/spring/


Hibernate
http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=833

HUIHOO_Hibernate
http://www.huihoo.com/framework/hibernate/


轻量级J2EE架构(Spring+Struts+Hibernate)
http://dev.csdn.net/develop/article/71/71975.shtm


AJAX专题
http://www.csdn.net/subject/ajax/
posted @ 2006-08-22 09:00 Lizzie 阅读(279) | 评论 (0)编辑 收藏

 

C C++ 编写的程序不同, Java 程序并不是一个可执行文件,而是由许多独立的类文件组成,每一个文件对应于一个 Java 类。此外,这些类文件并非立即全部都装入内存,而是根据程序需要装入内存。 ClassLoader JVM 中将类装入内存的那部分。而且, Java ClassLoader 就是用 Java 语言编写的。这意味着创建您自己的 ClassLoader 非常容易,不必了解 JVM 的微小细节。 Java classloader 不但可以使你运行本地得 class , 你也可以定制 classloader 运行来自远程的字节代码 .

 

ClassLoader 的基本目标是对类的请求提供服务。当 JVM 需要使用类时,它根据名称向 ClassLoader 请求这个类,然后 ClassLoader 试图返回一个表示这个类的 Class 对象。

 

通过覆盖对应于这个过程不同阶段的方法,可以创建定制的 ClassLoader 。通常当你需要动态加载资源的时候 , 你至少有三个 ClassLoader 可以选择 :

1.       系统类加载器(应用类加载器)

(system classloader or application classloader)

2.       当前类加载器

3.       当前线程类加载器

 

第一种 : 系统类加载器

 

系统类加载器 (system classloader). 这个类加载器处理 -classpath 下的类加载工作 , 可以通过 ClassLoader.getSystemClassLoader() 方法调用 .

 

ClassLoader 下所有的 getSystemXXX() 的静态方法都是通过这个方法定义的 . 在你的代码中 , 你应该尽量少地调用这个方法 , 以其它的类加载器作为代理 . 否则你的代码将只能工作在简单的命令行应用中 , 这个时候系统类加载器 (system classloader) JVM 最后创建的类加载器 . 一旦你把代码移到 EJB, Web 应用或 Java Web Start 应用中 , 一定会出问题 .

 

Class.loadClass( String name, boolean resolve );

name 参数指定了 JVM 需要的类的名称,该名称以包表示法表示,如 Foo   java.lang.Object

resolve 参数告诉方法是否需要解析类。在准备执行类之前,应考虑类解析。并不总是需要解析。如果 JVM 只需要知道该类是否存在或找出该类的超类,那么就不需要解析。

 

方法 defineClass ClassLoader 的主要诀窍。

该方法接受由原始字节组成的数组并把它转换成 Class 对象。原始数组包含如从文件系统或网络装入的数据。

defineClass 管理 JVM 的许多复杂、神秘和倚赖于实现的方面 -- 它把字节码分析成运行时数据结构、校验有效性等等。不必担心,您无需亲自编写它。事实上,即使您想要这么做也不能覆盖它,因为它已被标记成最终的。

 

方法 findSystemClass

findSystemClass 方法从本地文件系统装入文件。它在本地文件系统中寻找类文件,如果存在,就使用 defineClass 将原始字节转换成 Class 对象,以将该文件转换成类。当运行 Java 应用程序时,这是 JVM 正常装入类的缺省机制 .

   如果 ClassLoader 不能找到类,它会请求父代 ClassLoader 来执行此项任务。所有 ClassLoaders 的根是系统 ClassLoader ,它会以缺省方式装入类 -- 即,从本地文件系统。

 

方法 findLoadedClass 充当一个缓存

当请求 loadClass 装入类时,它调用该方法来查看 ClassLoader 是否已装入这个类,这样可以避免重新装入已存在类所造成的麻烦。应首先调用该方法。

 

让我们看一下如何组装所有方法。

loadClass 实现示例执行以下步骤:

(这里,我们没有指定生成类文件是采用了哪种技术,它可以是从 Net 上装入、或者从归档文件中提取、或者实时编译。无论是哪一种,那是种特殊的神奇方式,使我们获得了原始类文件字节。)

1.   调用 findLoadedClass 来查看是否存在已装入的类。

2.   如果没有,那么采用那种特殊的神奇方式来获取原始字节。

3.   如果已有原始字节,调用 defineClass 将它们转换成 Class 对象。

4.   如果没有原始字节,然后调用 findSystemClass 查看是否从本地文件系统获取类。

5.   如果 resolve 参数是 true ,那么调用 resolveClass 解析 Class 对象。

6.   如果还没有类,返回 ClassNotFoundException

7.   否则,将类返回给调用程序。

 

第二种选择 : 当前上下文环境下的类加载器 .

根据定义,当前类加载器就是你当前方法所属的类的加载器。在运行时类之间动态联编,即调用 Class.forName() Class.getResource() 等类似方法时,这个类加载器会被隐含地使用。
posted @ 2006-08-20 20:59 Lizzie 阅读(255) | 评论 (0)编辑 收藏

<2006年8月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

搜索

  •  

最新评论

阅读排行榜

评论排行榜