什么是java平台默认值?

时间:2009-09-08 20:06:52

标签: java

根据平台默认值,Java API的许多部分的工作方式不同,例如,从SAXParserFactory创建Sax解析器使用基于系统属性“javax.xml.parsers.SAXParserFactory”的不同Factory实现。但是,如果未定义该属性,则使用“平台默认值”。

我很难找到任何给定JVM /平台的平台默认 的内容。这对于了解何时需要部署到多个平台,或者在调试某些内容以及需要了解有关特定实现的更多信息时非常有用。

我在哪里可以找到这些默认值的列表(通常是系统属性名称)和各种平台的默认值?

3 个答案:

答案 0 :(得分:3)

Tolstoy.com曾经有一个页面,其中包含各种操作系统的默认值,但它现在已经消失......但您可以使用互联网回收机器检索它!

http://web.archive.org/web/20070724075948/http://tolstoy.com/samizdat/sysprops.html

答案 1 :(得分:1)

在大多数情况下,平台默认实现恰好是“平台”中始终可用的后备类。在这些情况下,平台已被解释(明智地,我必须添加)作为Java Runtime Environment安装。毕竟,只有平台提供商可以说明默认值应该是什么。对于应用程序服务器,可以扩展定义以包括应用程序服务器提供的环境,而不仅仅是Java运行时。

例如,Sun Java 5及更高版本中的JRE将使用“com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl”作为SAXParserFactory的回退实现。这主要是因为来自Sun的JRE(至少从Java 1.4开始)带有完整的JAXP实现。

您可以参考SAXParserFactory和FactoryFinder类的源代码(在javax.xml.parsers包中)来了解如何完成此操作。了解Sun在Java 1.3中曾经做过什么事情会很有趣,但我不确定这些资源是否可用。

由于在此上下文中已提及应用程序服务器,因此记住某些应用程序服务器(例如Weblogic)将设置SAXParserFactory以供服务器级别的所有应用程序使用将是一件好事。应用程序可以在应用程序级别覆盖它; Weblogic允许您通过weblog-application.xml configuration file执行此操作。它可以在服务器级别覆盖(多个服务器构成Weblogic域),或者在域级别本身,最低(最适用)配置优先。

获取平台默认值列表 (而不是尝试)

正如您现在可能已经想到的那样,获取不同平台的默认值可能很困难,尤其是当您不得不担心运行时环境时(Sun,IBM,Oracle有自己的运行时;您还有Apache Harmony,GCJ, Kaffe等添加到混合)和应用服务器也是如此。平台默认值也可能因平台而异,对于应用程序服务器而不是实际的Java运行时更是如此(IBM AIX上的应用程序服务器不会查找Sun Java平台回退)。

答案 2 :(得分:0)

作为一般性问题,这在很大程度上取决于讨论中的具体默认值。在SAX解析器的特定情况下,您必须意识到Java规范的编写理念不仅仅是Sun(现在的Oracle)将实现它。因此,当它说“平台默认”SAXParserFactory时,它意味着JVM实现者决定返回默认值。在Sun JVM案例中,它是一个经过修改的Apache Xerces实现。

我不知道任何JVM实现者的“这些是我们的默认实现”列表。但是对于给定的默认值,不难发现。

在其他情况下,平台默认可以指操作系统(如时区,文件分隔符等)。