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
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.
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
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
实例。
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
,解决了上述两个限制。
如果只要对一个
stylesheet
进行一个
transformation
,那么用
Transformer
比较快,没有必要选择
Templates
对象。但是考虑到线程安全问题,还是推荐使用
Templates
。
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 阅读(534) |
评论 (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 阅读(4619) |
评论 (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.htmlRUBY文档中心
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=833HUIHOO_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) |
编辑 收藏