如何设定实施Java法式圭臬标准的Linux沉静状况-1

 
企业 Java 专家 Dennis Sosnoski 从 Java 效力器技术如何相宜 Linux 来开端论说他的观念,然后给出在 Linux 上沉静地设定 Tomcat Java servlet 引擎的一点发起。
Linux 平台和 Java 平台有着久远的但有经常阅历曲折的关连。建置高效能捏造机械的同时又要跟上日益增进的焦点 Java API 荟萃,这样做所带来的庞大性在很大年夜程度上使开发 Java 平台的开放滥觞法式圭臬标准代码「Clean Room」实作的晚期措施困难重重。Java 技术的特许实作终极可用于 Linux,但这些实作并不是开放滥觞法式圭臬标准代码。因而,大年夜多数 Linux 分发版没有包罗该特许实作。
虽然有这些困难,Java 平台仍是供给了许多好处,从而招致在 Linux 上越来越多地运用该特许实作,尤其是关于效力器运用法式圭臬标准。在本文中,我回首了 Java 平台给效力器运用法式圭臬标准带来的好处,然后研讨了在 Linux 上简朴且沉静地安插 Java 效力所触及的成绩。作为一个现实范例,我将接头设定 Apache Software Foundation 的普及运用的 Tomcat Java servlet 引擎的过细信息以用于自力作业。
为什么运用 Java 平台?
有许多缘由可以注释为什么 Java 平台成为基于效力器的贸易运用法式圭臬标准的广为承受的选择。我将重要接头我认为关于该状况至关重要的三个缘由︰跨平台兼容性、受管实施时状况和易于开发。
Java 运用法式圭臬标准供给了跨多种操作体系和硬件平台的二进制兼容性。关于非 GUI 效力器运用法式圭臬标准尤其是这样,在此种别运用法式圭臬标准中,通常在现实目的体系中须要实施特别很是少的测试。义务人员可以在任何他们喜欢的平台上终止编码和除错,同时仍可以将这些运用法式圭臬标准安插到他们或许不克不及间接节制的状况中。
Java 捏造机械(Java Virtual Machine,JVM)状况的实施时特征以几种编制来加强');法式圭臬标准沉静性。最明白的方面之一是严格的种别型反省、数组边界反省和自动渣滓搜集的组合彻底防范了最具粉碎性情势的效力器法式圭臬标准代码抨击进击︰缓冲区溢位、重复开释的错误和游离的指针。Java 语言晚期用于 applet,经由不时展开,该语言尚有一个完满的体系,用于对那些已确信存在沉静性危害的措施终止纤细的存取节制。这些措施可供自力运用法式圭臬标准选择运用,但它们已建置在许多 Java 效力的架构中。
这些实施时法式圭臬标准沉静特征还供给了用 Java 语言开发的方便性。要对方便性这种别成绩作任何切确测量是困难的,但大年夜多数具有诸如 C 和 C 之种别语言背景而转向 Java 法式圭臬标准化的义务人员都招供在转变之后他们的损耗力前进了。其中部门是因为在编译时和实施时严格实施种别型确定,以及自动内存经管的简朴性。另一个要素是为 Java 平台开发的尺度 API 扩展的荟萃。这些 API 关于新的义务人员梗概是一个庞大年夜搬弄,但是一旦学会了,API 会为各种企业需求供给优异的跨平台支持。
固然,关于某些运用法式圭臬标准而言,Java 平台梗概是一个蹩脚的选择。虽然 JVM 体系机关在持续改善,但 Java 运用法式圭臬标准通常会比运用相反算法的 C 或 C 运用法式圭臬标准实施得稍微慢一点。按照我的阅历和测试,我估量这个速度差别关于在特许 JVM 上实施的大年夜多数效力器运用法式圭臬标准来说大年夜约是在 20% 到 50% 的范畴内,但是这很大年夜程度上取决于法式圭臬标准代码的质量。与自力法式圭臬标准比照,在这些 JVM 上实施的 Java 运用法式圭臬标准还忍受着相比慢的启动,但是这关于长功夫实施的效力器运用法式圭臬标准通常并不是一个庞大年夜成绩。在大年夜多数状况中,降低的效能和较慢的启动祇是为获得 Java 平台的加强');的沉静性和更快速的开发好地方付出的藐小价格。
开放滥觞码交换选择
除了尺度特许 JVM(无偿运用,但是滥觞码遭到限定;可用于 Sun、IBM、BEA 和 Blackdown 组织的 Linux)之外,关于 Linux 尚有别的几个交换选择。这些选择包罗「Clean Room」开放滥觞码 JVM 实作,其中运用最普及的梗概是 Kaffe(在许多 Linux 分发版中都包罗它)。Kaffe 是一个特别很是居心义的项目,它曾经完成了一些令人惊奇的义务,但它只能供接纳今朝特许 JVM 无限的兼容性。因而,它通常无法运用于本文所存眷的企业种别型的效力器运用法式圭臬标准。
用于 Java 法式圭臬标准的本机法式圭臬标准代码编译器的开放滥觞码义务也有几个交换选择。这里最重要的项目是 GNU 编译器集(GNU Compiler Collection)的 GCJ.运用诸如 CGJ 之类其他本机法式圭臬标准代码编译器会将自力于平台的 Java 字节码在其实施之前转换成特定于平台的法式圭臬标准代码(这与在 JVM 中实施成比照,在 JVM 中实施通常在实施时将字节码转换成特定于平台的法式圭臬标准代码)。
本机法式圭臬标准代码编译施展阐发出它极有梗概成为一种压抑在 JVM 中实施的 Java 运用法式圭臬标准启动较慢的措施。但是,运用这种措施的编译器通常都不克不及与当代特许 JVM 的动摇形状效能相立室。倘使 Java 运用法式圭臬标准运用 Java 平台的静态特征(如运用反射来存取字段或加载在实施时选择的种别),这种状况尤其凸起。按照所运用的实作和编译选项,本机法式圭臬标准代码编译或许还会削弱 Java 平台的许多实施时沉静特征。末了,因为容许证成绩,许多 Java API 不克不及与已编译的本机法式圭臬标准代码一同运用。因为这些限定,本机法式圭臬标准代码编译今朝还不是 Java 平台效力器运用法式圭臬标准的一个好选择。
C# 如何样?
与 Java 实施时状况有许多配合点的一个交换措施是 Microsoft 的 C# 语言和相干的公共语言实施时(Common Language Runtime,CLR)。C# 是 Java 语言的关连邃密精致的衍生物,CLR 梗概容许 C# 在许多平台上运用。CLR 还供给了 JVM 的许多实施时沉静特征(虽然有重要削弱沉静包管的逃离出口)。Microsoft .Net 实作还支持预编译本钱机法式圭臬标准代码的选项以获得更快速启动,这与 GCJ 对 Java 字节码所做的义务相反。固然,Linux 运用者并不克不及间接运用这项服从,因为 .Net 只实用于 Windows 体系。
Mono Project 正积极于为多种 Linux 产品建置「CLean Room」开放滥觞码 C# 和等价于 CLR 的产品。今朝,该项目中的 C# 编译器已开发完成,并且还完成了大年夜部门的 CLR,Microsoft 已公布将它用于尺度化。但是,无论从效能仍是服从角度来看,在它成为公道的 Java 平台交换选择之前尚有许多义务要做。CLR 只包罗了与 Java 焦点种别库等价的基本内容。在可以将它看作是企业软件开发的公道选项之前,还须要用许多特别 API 来弥补它。
Mono Project 正在积极于开发 CLR 以外的 .Net 别的部门的移植,倘使这些移植乐成了 ─ 并且倘使 Microsoft 纰谬 .Net 的这些部门强加它的专利权 ─ 那么它们会有助于合意 C# 成为 Linux 上效力器软件开发的靠得住平台的须要。但要使那些假定成为抱负,还须要做许多义务,同时,Java 法式圭臬标准的本机法式圭臬标准代码编译器和开放滥觞码 JVM 向那些的确想要压抑运用特许 JVM 并可以忍受无限服从性的运用者供给了相比动摇的交换选择。
Apache Tomcat
最普及存在的 Java 平台效力器运用法式圭臬标准之一是 Apache Tomcat.Tomcat 是基于末了由 Sun 援助的滥觞码的开放滥觞码项目。它是一个 HTTP 效力器,是 Sun 透过 Java Community Process 开发的、对普及运用的 servlet 和 JavaServer Page(JSP)技术的正式参考实作。我将在本文中运用 Tomcat 作为样本 Java 运用法式圭臬标准,将其安插成 Linux 上的一个效力。倘使您想要实施本人实施 Tomcat,那么您将须要在体系上安置 Java 开发工具箱(Java Development Kit,JDK),而不是安置更小的 Java 实施时状况(Java Runtime Environment,JRE)。
servlet 和 JSP 技术用于建构 HTTP 效力器运用法式圭臬标准。固然 servlet 技术中参与了许多特征(包罗存取沉静性、Session经管和实施绪节制),但它自身祇是简略地等价于为快速间接的 Java 语言呼叫而定制的 CGI 接口。JSP 技术供给了一种措置静态天生的 HTML 页面的轻巧措施,这些 HTML 页面被间接编译成 servlet 以用于快速实施时作业。
在这两种技术之外,Tomcat 还供给了别的许多特征。凭它自身的效能,它现实上是全服从 Web 效力器,但它通常在 Linux 体系上与 Apache Web 效力器前端配合运用。Apache 向 Tomcat 供给了许多进阶效能以相宜静态内容。关于静态内容所占比例相比高且运用率很高的 Web 运用法式圭臬标准,Apache 前端特别很是无效。但关于许多简朴的 Web 运用法式圭臬标准,就没须要运用它了,当更易于组态和经管时,零丁实施 Tomcat 就可供给充足的效能(至少关于畴前没有运用过 Apache 的义务人员来说是这样)。
衔接埠困难
零丁实施 Tomcat 的一个大年夜成绩是它无法存取尺度 HTTP 衔接埠 80,除非是作为 root 运用者实施。作为 root 运用者实施效力器运用法式圭臬标准的设法主意通常并不是上串流公司所接头的成绩,因而我将完全保持这个设法主意﹗运用除 80 以外的衔接埠是一个更好的选择(譬喻,Tomcat 缺省衔接埠 8080)。这通常实用于测试,但当运用者正在存取效力时,它会招致杂乱的 URL,因为须要在乞请中懂得地声名衔接埠号。运用非尺度衔接埠还意味着倘使须要内部存取,就须要从头组态一切的防火墙。
xinetd 措置方案
幸亏,Linux 支持一些哄骗 Tomcat(或任何别的运用者编制运用法式圭臬标准)措置衔接端口 80 乞请的轻巧编制。一种常用编制是透过 xinetd.xinetd 是带有普及存取节制和日志记录支持的因特网效力保卫法式圭臬标准,它还拥有方便的从头导向特征。从头导向让您将体系组态成承受一个衔接埠上的进入乞请,然后将乞请通报到另一个衔接埠梗概乃至另一个 IP 地点终止措置。
倘使您想要在体系上设定 Tomcat 以措置衔接埠 80 乞请,就须要参与 xinetd 组态文件来实作这一目的。假定按平凡在正常途径上安置了 xinetd,那么您可以透过对 /etc/xinetd.d 目录参与一个文件(以 root 运用者身份)来实施这一作业。清单 1 供给了用于 Tomcat 的一个样本组态文件。
清单 1. xinetd 从头导向组态
 
# Redirects any requests on port 80
# to port 8080 (where Tomcat is listening)
service tomcat
{
socket_type = stream
protocol = tcp
user = root
wait = no
port = 80
redirect = localhost 8080
disable = no
}
在参与了组态文件之后,须要从头启动 xinetd 来真正活化从头导向。在大年夜多数 Linux 安置上,透过以 root 运用者身份实施以下指令来从头启动 xinetd︰
/sbin/service xinetd restart
祇要将组态文件放在 /etc/xinetd.d 目录中,当从头启动体系时,从头导向就会自动启动。倘使没有将 Tomcat 设定成自动启动,那么在启动 Tomcat 之前,会回绝进入乞请。
 
 
来自: 新客网(www.xker.com) 详文参考:http://www.xker.com/page/e2007/0719/27918.html


版权声明: 原创作品,容许转载,转载时请务必以超链接情势标明文章 原始情由 、作者信息和本声明。不然将穷究司法责任。

posted @ 2011-03-07 18:25  蓝色的天空III  阅读(99)  评论(0编辑  收藏  举报