WebObjects/Web 应用程序/部署/Windows
(修订版 1.3;2002-08-29,查看完整修订版列表) 本文档的最新版本可以在 http://www.tetlabors.de/wo/setup_webobjects_on_windows.html 找到。
您可以对本操作指南做任何您想做的事,但风险自负。我对此概不负责。如果您不是这方面的专家,我建议您先为测试目的设置一个新系统,然后再将您新获得的知识应用到实际系统中。
本操作指南介绍了 WebObjects 5.1 在 Windows 上的安装。它最初是关于在 WinNT 上安装 WebObjects 5.x 的电子邮件帮助,后来不断发展。它涵盖了在以下版本的 Windows 上安装和配置 WebObjects 5.1 的大多数常见问题,包括开发和部署。
- Windows NT,工作站和服务器版
- Windows 2000,专业版和服务器版
- Windows XP Professional
本操作指南的主要内容是针对 Win2000 Server 上的开发安装。文本中将简要说明其他配置的差异。这仍然比 Linux/WO 部署更难,在 Linux/WO 部署中,您只有一个配置。
本操作指南不涉及 WebObjects 安装后出现的部署问题。它以启动 Monitor 结束。但是,可以通过以正确的方式安装 WebObjects 来解决许多问题 :-),因此您仍然可以阅读本操作指南。
如果您发现错误或想要提出建议、改进等,请通过此处联系我。
为了减少延迟,请准备好以下内容:
- 来自 Sun 的 Java2-SDK (http://java.sun.com/j2se/1.4/download.html)
- WebObjects 5.1 CD(请从 http://store.apple.com/ 获取)
- 有效的序列号(来自 WO 5.0 或 WO 5.1)
- WebObjects 5.1 的最新更新;完整的补丁列表位于 http://docs.info.apple.com/article.html?artnum=70037
- 一些补丁来完成本操作指南(请从此处下载)
- WebObjects 4.x CD(仅在您已安装 WebObjects 5.0 之前的版本时才需要)
如果您计划在新机器上安装,则还需要
- Windows CD(WinNT、Win2000 或 WinXP)
- 驱动程序 CD 或从互联网上更新的驱动程序(如果您必须使用特殊硬件)
- Windows NT Option Pack CD(如果您计划在 WinNT 上安装 IIS)
- Windows 2000/XP CD(如果您想安装恢复控制台)
- 您所用 Windows 版本的最新 Service Pack/汇总包和修补程序(数量太多,无法一一列举,请从 http://www.microsoft.com/ 开始搜索)
在本操作指南中,您会多次看到“打开 Shell”这一术语。这意味着您应该进入“开始”菜单,点击“运行...”并输入 cmd,然后按回车键。一个新的、空的窗口,带有命令提示符,应该会打开。当然,如果已经打开了一个 Shell,只需使用它即可……
本操作指南以 Windows 2000 Server 的安装为例,但应适用于上述所有版本的 Windows。如果有什么特别不同之处,文本中会有简要说明。安装过程基本是自解释的,我只提及需要格外注意的步骤。
如果您计划在 Windows 上进行实际部署,请忘记 Windows 的非服务器版本。由于 Windows 许可证限制,工作站/专业版版本只允许 10 个并发连接到机器——通过网络共享打开的文件也计入连接。设置部署当然可以工作,但性能会非常差,您应该考虑购买 Windows Server 版本,或者使用 Linux/Apache 作为 Web 服务器,只在 Windows 上部署应用程序。
首先是“基本设置”:插入 Windows CD 并启动。如果您有启动软盘、网络文件夹或其他作为安装文件来源的内容,请使用它。在某些 OEM 版本或无人值守安装中,可能只需要一些或无需任何输入——在这种情况下,只需跳过相应的步骤即可。
<仅限 nt4 服务器> 如果安装程序询问服务器的角色,请选择“单服务器”。除非您知道自己在做什么,否则不要选择“域控制器”角色之一。在网络设置期间,您可以选择安装 Internet Information Server (IIS)。不要这样做,因为它是一个过时的版本。请务必_取消选中_该复选框!不要使用 DHCP!请参见下面的“网络设置”了解解释。</仅限 nt4 服务器>
仅安装万维网服务器、Internet Information Services 管理单元和所有必需的文件。除非您确实需要,否则不要安装 FTP、NNTP、SMTP。如果配置不正确,这些服务会为攻击者提供极好的攻击手段。
如果您安装了多个操作系统,请禁用除第一个操作系统之外的所有操作系统的夏令时,否则您会在一年中的两次时间里遇到很多麻烦……
选择自定义网络设置,并输入 IP 地址、子网掩码、网关和 DNS 服务器设置。不建议在服务器上使用 DHCP,因为某些服务依赖于永久 IP 地址。如果您必须使用 DHCP(它毕竟是一个很棒的服务),请配置 DHCP 服务器,使您的 WebObjects 机器始终获得相同的地址(地址保留、IP 到 MAC 地址映射)。
为了能够查看周围的其他计算机,输入的 WORKGROUP 名称必须与其他系统的 workgroup 名称匹配。如果您进行基于域的设置,则不会有任何问题,只需将机器添加到您的域即可。
Win2000/XP 存在一个令人尴尬的习惯,即当网络适配器没有连接到网络时,会释放其配置。因此,在启动任何服务,尤其是在启动过程中,请务必确保网络电缆已连接到活动站(其他机器或集线器/交换机)。如果不是这种情况,某些服务将在本地主机(127.0.0.1)上运行,当您尝试连接时会遇到奇怪的错误。
<仅适用于 Win2000 服务器> 第一次登录 Windows 时,您会看到“配置您的服务器”对话框。除非您知道自己在做什么,否则我建议您选择“稍后配置此服务器。”并单击“下一步”。在下一页,取消选中“启动时显示此屏幕”,然后关闭对话框窗口。如果需要,您可以稍后通过“开始,程序,管理工具,配置您的服务器”返回。</仅适用于 Win2000 服务器>
如果您需要安装额外的驱动程序(例如图形卡),请立即安装。否则,您已完成基本 Windows 设置。以下是一些您现在可能想做的事情
如果您有多处理器系统,您应该能够只启用一个处理器(单 CPU HAL)来启动 Windows。如果您在以后遇到硬件问题,并且必须在仅支持一个 CPU 的主板上进行紧急引导,这将非常有用。此外,某些应用程序不能在多处理器系统上运行。要获得单 CPU 支持,请在 c:\boot.ini 中添加一个新条目,并在末尾添加一个“/onecpu”开关。不要从本指南中复制粘贴,因为磁盘和分区号可能因您的安装而异,只需复制已存在的条目。
[operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows 2000 Server" /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows 2000 Server (one CPU)" /fastdetect /onecpu
您可能需要取消 c:\boot.ini 的写保护才能添加条目。打开 shell 并输入以下命令
attrib -r -s c:\boot.ini
无需事后添加写保护。
另一个有用的工具是 Windows 恢复控制台,尤其是在 Windows 在启动期间崩溃时(蓝屏、错误的驱动程序、错误的配置、在添加新的硬盘后无法引导等)。Win2000 版本的恢复控制台可以在所有版本的 Windows 上使用,而 WinXP 版本不能在仅运行 WinNT 的机器上使用。要添加它,请插入 Windows 2000/XP 光盘,打开 shell 并输入以下内容
cd /d <cdrom>:\i386 winnt32 /cmdcons
将向 c:\boot.ini 添加一个新条目,可以在安装的操作系统列表中选择该条目。
截至撰写本文时,WinXP 尚未提供 Service Pack。根据需要安装修补程序。对于 Win2000,请安装 Service Pack 2 和所有必要的修补程序。对于 NT4,请安装 Service Pack 6,然后安装 SP6 后面的汇总包。这将为您提供 128 位加密强度。
插入 Windows NT Option Pack 光盘并安装 Internet Explorer 4.01(或更高版本)。
完成后
启动 <cdrom>:\setup.exe
安装程序会警告您,Option Pack 未在 Service Pack 4 之后版本的 Service Pack 上测试过。单击“是”以继续。
选择“自定义”作为安装类型。
在下一个窗口中,取消选中所有组件,并对可能的警告回答“是”。
然后转到“Internet Information Server (IIS)”,然后单击“显示子组件…”。
移至新选择列表的末尾,然后选中“万维网服务器”。您可能想选中“文档”(位于列表的开头)。所有依赖软件组件将自动选中。
为了避免安全问题,除非您需要它并知道自己在做什么,否则不要安装以下内容
- FTP、SMTP、NNTP 服务器
- 索引服务器
- FrontPage 98 服务器扩展
- 证书服务器
- Microsoft 脚本调试器
- Windows 脚本宿主
如果安装程序要求您指定 WWW 服务的文件夹,您可以使用建议的“c:\inetpub\wwwroot”。
对于 Microsoft 事务服务器,只需单击“下一步”两次。Option Pack 安装程序最终应该完成。之后,您可能需要重新安装 WinNT 的所有 Service Pack/更新,因为某些文件可能已被 Option Pack 安装程序覆盖。
开箱即用的 NT/IIS 运行非常危险,因此我建议您使用此区域提供的安全指南之一。安全 IIS 安装对于简单的内部测试并不需要,但如果将未受保护的机器连接到互联网,则应将其视为自杀行为。您已被警告。以下是一些可能有帮助的链接:www.microsoft.com/security/(然后从那里深入了解)http://www.intersectalliance.com/projects/WinNTConfig/index.html(保护 WinNT)http://www.intersectalliance.com/projects/Win2kConfig/index.html(保护 Win2000)http://www.shebeen.com/iis4_nt4sec.htm(保护 NT 上的 IIS)http://www.intersectalliance.com/projects/IIS4Config/index.html(保护 IIS)有关更多信息,请在 Google 中搜索“hardening+iis+against+attack”。
现在您已经拥有一个运行的 Windows 计算机 - 希望是安全的 :),我们可以为 WebObjects 安装做准备。本部分中的内容适用于 WebObjects 5.0 和 5.1。
如果您使用的是带有旧版本的 WebObjects 的现有机器,则必须在安装 WebObjects 5.1 之前卸载它。在 WebObjects 4.5 光盘上,在 <cdrom>:\development\Windows\Uninstall 下,您会找到几个目录
- UninstallWO3.51
- UninstallWO4.0
- UninstallWO4.5
使用适合您版本的那个。要卸载 WebObjects 5.0,请使用“开始,控制面板,添加/删除程序”。
内置于 WinNT 的 shell 根本无法与 WebObjects 配合使用。对于 Win2000 版本,如果命令行由于大量使用框架而超过 2000 个字符,则存在一些问题。因此,您必须替换 shell。好消息是,您可以在每个版本的 Windows 上使用每个版本的 CMD.EXE,因此基本思想是从 WinXP 安装中获取 CMD.EXE 并用它替换默认 shell - 除非您运行 WinXP :)。
如果您没有 Win2000/XP 光盘,您至少可以下载 Win2000 Service Pack 2(或 Windows XP Service Pack 1,因为它即将发布),并从中提取 CMD.EXE。由于您可以免费下载 Service Pack,因此应该没有法律问题。
在尝试替换 shell 之前,请确保切断对安装文件或 Windows 文件保护的访问,否则 Windows 文件保护将在几秒钟内恢复旧版本。如果您是从光盘安装的,请移除 Windows 安装光盘。如果您通过网络安装,请在开始替换之前拔下网络电缆。Windows 文件保护在 WinNT 上不存在,您不必担心。
在附加文件包中(在这里下载),有一个脚本可以为您进行替换。如果您对提供的 CMD.EXE 感到不舒服,请随意获取您自己的 CMD.EXE 版本。
- 关闭所有打开的 shell 窗口,因为如果 CMD.EXE 正在运行,则无法替换它。
- 双击与脚本一起提供的 CMD.EXE;这将打开一个新的(本地)shell,可用于替换默认 shell。
- 在打开的窗口中,输入:shellReplace
- 脚本将备份 CMD.EXE 的原始版本到 CMD.EXE.ORIGINAL,然后用新版本替换它。一秒钟后,Windows 文件保护将打开一个对话框,要求您插入 Windows 安装光盘。在这里按“取消”,然后在弹出的下一个窗口中回答“是”。
现在关闭 shell 并打开一个新的 shell,方法是“开始,运行…,输入 cmd 并按回车键”。查看第一行显示的内容
使用原始版本,shell 中的第一行应如下所示
- WinNT:Microsoft(R) Windows NT(TM)
- Win2000:Microsoft Windows 2000 [版本 5.00.2195]
- WinXP:Microsoft Windows XP [版本 5.1.2600]
如果您得到以下内容:Microsoft Windows XP [版本 4.0.1381],这意味着您实际上是在 WinNT 4.0 安装(4.0.1381)上运行来自 WinXP 的 CMD.EXE。其他可能的组合留给读者作为练习。 :-) 这是好事,很棒,而且所有人都爱它
现在,您应该更改 Dr.Watson 的配置,Dr.Watson 是 Windows 的集成崩溃记录器和调试器,以便它在没有用户交互的情况下运行。打开 shell 并输入
drwtsn32 -i
这将安装 Dr. Watson 作为默认的应用程序调试器,如果您安装了 Visual Studio Debugger 并且此调试器在每次应用程序崩溃后出现,这将很有用。
之后,输入
drwtsn32
将弹出一个对话框窗口。您应该在此处使用以下设置
启用(选中)
- ‘转储符号表’
- ‘转储所有线程上下文’
- ‘追加到现有日志文件’
禁用(取消选中)
- ‘创建崩溃转储文件’
- ‘视觉通知’
- ‘声音通知’
这些设置指示 Dr. Watson 收集尽可能多的信息并在没有用户交互的情况下完成。否则,崩溃的应用程序将不会终止,直到用户单击“确定”。
- ‘指令数量’:20
- ‘要保存的错误数量’:50
这将保存最后 50 个错误,每个错误的最后 20 条指令。
- ‘日志文件路径’:将其设置为简短且易于记忆的路径。也许你已经有一个用于日志文件的文件夹;我一直使用 TEMP 文件夹。
接下来安装 Java-SDK。SDK 的版本必须大于或等于 1.3.1,SDK 1.3.0 将不起作用。此外,你必须安装 SDK,仅安装运行时环境 (JRE) 将不起作用。
我建议使用 SDK 1.4.0 或更高版本,除非你遇到问题(有人提到过时间戳的问题)。特别是在多处理器系统上,1.4.0 的并发垃圾收集是一个很大的优势。如果你进行跨平台开发 (OSX/Windows),请确保从 Sun 下载完整的国际 SDK(最大的软件包),因为只有此版本包含来自 Mac 的所有字体编码。否则,你将收到异常,说明找不到 NSMacOSRomanStringEncoding。
运行 SDK 安装程序。
使用建议的路径(例如 c:\j2sdk1.4.0)。
你可以取消选中“源代码”和“示例”,它们对于 WO 部署来说不是必需的。如果你需要,安装 Java 插件。
SDK 设置完成后,打开 shell 并输入
java -version
你应该看到类似这样的输出
java version "1.4.0" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92) Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
干得好!你现在可以安装 WebObjects 了。
所有内容都已设置并正常运行,现在可以安装 WebObjects 了。确保以具有管理员权限的用户身份登录。此部分也适用于 WebObjects 5.0 和 5.1。
在你的硬盘上创建一个新文件夹,并将 WebObjects 安装 CD 的内容复制到该文件夹。不要使用网络上的共享文件夹,因为 Setup 需要在完成一半时重启,如果它找不到 CD 的内容,就会失败;会产生不良影响,你将留下一个无法使用的 WO 安装……类似 c:\cdrom 的空文件夹就可以了。
支持文件包包含多个版本的 NMServer.reg。选择你需要的版本
- NMServer.reg.deployment - 如果安装 WO 部署,则适用于所有版本的 Windows(原始版本存在错误)
- NMServer.reg.nt4-devel - 用于在 NT4 上进行 WO 开发(原始版本仅在 Win2000/XP 上运行)
- NMServer.reg.win2k-devel - 用于在 Win2000/XP 上进行 WO 开发(WO 默认包含的版本)
将适当的文件重命名为 NMServer.reg 并将其复制到
- c:\cdrom\Deployment\Windows\Install\NMServer.reg(用于部署)或
- c:\cdrom\Developer\Windows\Install\NMServer.reg(用于开发)。
根据安装类型,运行
- 用于开发安装:c:\cdrom\Developer\Windows\Setup.exe
- 用于部署安装:c:\cdrom\Deployment\Windows\Setup.exe
要完成本操作说明中的所有步骤(如编译适配器),需要进行开发设置。正如某人说得好
开发 = 部署 + 开发工具
如果你只想安装部署,只需跳过不需要的步骤。请注意,如果你只安装部署,你将无法编译 ISAPI 适配器(它有一个丑陋的错误)。请务必也设置开发安装(可能在另一台机器上)。
接受许可协议。
输入用户名、公司名称以及你的设置的相应序列号(在本例中为开发)。
我只在 WinNT 上见过这种情况,但它也可能在其他版本上发生:虽然你已经安装了 Java2-SDK 1.4.0,但 Setup 却抱怨说没有 JRE,你需要安装 Sun Java 1.3 或更高版本。在这种情况下,退出 Setup 并从支持文件包中导入 jresettings.reg 文件(只需双击它即可)。你可能需要先用文本编辑器打开它(记事本就可以了),然后修改其中的路径设置。默认情况下,它指向 c:\j2skd1.4.0。如果你已将 SDK 安装到该位置,则无需修改 jresettings.reg。
选择“自定义安装”。
选择 C:\Apple 作为目标文件夹。你可以指定另一个驱动器号,但不要将 Apple 文件夹放在根文件夹以外的任何位置。如果你这样做,就会遇到路径过长的问题。此外,绝不要在路径中使用空格!
在“选择组件”中,不要更改任何内容;只需单击“下一步”。
<仅限 winnt> 在此对话框之后,可能会弹出一个“ComponentAddItemError”对话框。只需单击“确定”并从 Web 服务器列表中选择“其他”;然后单击“下一步”。</winnt only>
‘CGI-BIN 目录’:指定 IIS 脚本文件夹的路径,该文件夹通常位于 c:\inetpub\scripts。你可以使用“浏览...”按钮来避免输入错误。
‘文档根目录’:IIS wwwroot 文件夹的路径,通常为 c:\inetpub\wwwroot。
在所有后续对话框窗口中单击“下一步”。Setup 应该开始将所有需要文件复制到正确的位置。然后它会要求你重启。执行重启并再次登录,使用与之前相同的用户名。Setup 将继续安装,并最终完成。在此之前不要中断它,这会使安装变得毫无用处!
Setup 完成后,安装你使用的 WebObjects 版本的最新更新。当被要求重启时,重启系统。
恭喜!WO Setup 已完成。
将所有 WebObjects 文件放在硬盘上并不意味着阳光马上就会到来。这就是我所说的“WebObjects 安装后的步骤”。
打开“服务”
- 在 WinNT 上:‘开始,控制面板,服务’
- 在 Win2000/XP 上:打开 shell 并输入
%systemroot%\system32\services.msc /s 你会发现以下与 WebObjects 相关的服务。服务的名称写在了括号中 - 你可以使用该名称从命令行启动/停止这些服务。
这两个服务在开发和部署中都已安装
- Apple WebObjects 任务守护程序 5 (wotaskd5)
此服务管理所有正在运行的应用程序实例。它应该被设置为在开发和部署中自动启动。
- Apple WebObjects 监控程序 5 (womonitor5)
此服务提供了一个用户界面来创建新应用程序实例和管理现有应用程序实例,相当于 wotaskd 的前端。它不是启动和管理应用程序实例所必需的,应该(出于安全原因)被设置为手动运行。要启动它,打开 shell 并输入
net start womonitor5
在启动需要的时间(通常只有几秒钟)之后,你可以打开浏览器并指向 http://<myhost>:56789 以查看第一页。为了提高安全性,请转到“首选项”选项卡并设置访问监控程序的密码。然后像平时一样使用它。要停止使用,请输入
net stop womonitor5
在 WebObjects 5.0 中,wotaskd 和 Monitor 默认情况下不会作为服务安装。若要更改此设置,你需要使用支持文件包中的 instsrv 和 srvany 工具。以下是如何将 wotaskd 和 Monitor 安装为服务的快速分步指南,有关更多信息,请参阅 srvany.exe 附带的 srvany.doc
- 右键单击“开始”菜单按钮,然后选择“浏览所有用户”。在打开的资源管理器窗口中,转到“程序,启动”。
将“启动任务守护程序”快捷方式从启动文件夹中移出,以阻止 wotaskd 在你登录时启动。我一直将其放在“WebObjects”文件夹中,但你也可以删除它。
- 将 srvany.exe 复制到易于记忆的位置,如 C:\Apple(或 C:\WinNT)。
打开 shell 并输入 instsrv wotaskd c:\apple\srvany.exe
- 打开 RegEdit 并转到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wotaskd
将 DisplayName 属性更改为“Apple WebObjects 任务守护程序”。如果 Start 属性不是 2,则将其更改为 2。这意味着该服务应该自动启动。
- 在 wotaskd 键下,添加一个新的子键,并将其命名为 Parameters。
在此子键下,创建一个新的 Application 属性(类型为字符串),其值为:C:\Apple\Library\WebObjects\JavaApplications\wotaskd.woa\StartWOTaskD.exe 不要在这里使用 %NEXT_ROOT% - 当服务即将启动时,此变量可能还不存在,从而导致失败。请改用 WebObjects 根文件夹的绝对路径名。
- 创建第二个字符串值属性 AppDirectory,其值为 C:\Apple\Library\WebObjects\JavaApplications\wotaskd.woa
- 重启系统
重启后,你应该能够从另一台机器上查看 http://<myhost>:1085,而无需登录到 Windows 计算机。如果这能正常工作,说明你已正确完成所有操作。
如果你还想将 Monitor 安装为服务,请执行以下操作。
- 打开 shell 并输入:instsrv womonitor c:\apple\srvany.exe
- 打开 RegEdit 并转到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\womonitor
将 DisplayName 更改为“Apple WebObjects 监控程序”。将 Start 更改为 3,这意味着“手动启动”。如果你不需要关心安全性,可以将其设置为 2(自动启动)。
- 在 womonitor 键下,添加一个新的子键,并将其命名为 Parameters。
在此子键下,创建一个新的 Application 属性(类型为字符串),其值为:C:\Apple\Library\WebObjects\JavaApplications\JavaMonitor.woa\JavaMonitor.cmd
- 创建一个第二个字符串属性 AppDirectory,其值为
C:\Apple\Library\WebObjects\JavaApplications\JavaMonitor.woa
- 要每次在端口 56789 上启动 Monitor,请添加第三个字符串属性 AppParameters,其值为:
-WOPort 56789
您也可以在这里指定更多命令行参数。现在,尝试启动 Monitor。打开一个 shell 并输入 net start womonitor 等待几秒钟后,打开您的浏览器并访问 http://<myhost>:56789。您应该会看到 Monitor 的起始页。
- Apple Mach Daemon (Apple_Mach_Daemon) 和 Apple Netname Server (Apple_Netname_Server)
这两个服务(以及 Pasteboard Server 和 Window Server)为在 Windows 上运行 YellowBox 应用程序(大多数 WebObjects 开发者工具)提供了基础。您不必关心它们,只需将它们设置为自动启动即可。
- openexec (openexec)
此服务启动 Openbase 数据库引擎并提供几个示例数据库。如果您不想使用 OpenBase,您可以将启动类型设置为“手动”来节省内存,这将阻止此服务自动启动。要删除当前正在运行的 Openbase 进程,您可以重新启动或使用“kill”工具(包含在支持文件包中)杀死所有相关进程。打开一个 shell 并输入
kill OpenBase.exe kill pgroup.exe kill databackup.exe kill openinfo.exe
除非您确信自己要做什么,否则永远不要将条目的启动类型设置为“禁用”!“手动”服务可以根据需要从系统启动,而“禁用”服务根本无法启动(除非您选择其他启动类型)。禁用错误的服务可能会阻止系统启动,不建议这样做。
除了所有这些服务之外,对于开发安装,在“所有用户”启动文件夹中还有两个快捷方式,它们具有以下设置
- Pasteboard Server
Target: %NEXT_ROOT%\Library\Frameworks\AppKit.framework\Resources\pbs.exe Start in: %NEXT_ROOT%\Library\Frameworks\AppKit.framework\Resources Run: Minimized
- Window Server
Target: %NEXT_ROOT%\Library\System\WindowServer.exe Start in: %NEXT_ROOT%\Library\System Run: Minimized
“Pasteboard Server”和“Window Server”会在每次新用户登录时启动。使用快速用户切换,可以同时登录多个用户,导致 Pasteboard Server 和 Window Server 启动多次。这两个程序都不喜欢这种情况,会停止工作,进而导致开发者工具(ProjectBuilder、EOModeler、WOBuilder)也停止工作。 ;-(
解决方法:如果机器上只有一个用户使用 WebObjects 进行开发,请将 Pasteboard Server 和 Window Server 的快捷方式从“所有用户”启动文件夹移动到相应用户的个人启动文件夹。如果机器上有多个用户使用 WebObjects 进行开发,请确保他们不要同时登录。如果其他方法都不奏效,您可以禁用快速用户切换。
安装 WebObjects 更新时至少存在两个错误
- 您自己更改的文件不会更新,更新程序只会静默跳过它们。因此,如果您想确保某个文件已更新,请将其重命名(例如,为 <filename.extension.OLD>),然后再次运行更新。
- 每次运行更新时,都会将 WebObjects 相关文件夹添加到 PATH 变量中。根据更新安装的频率,这可能会导致路径变得非常长。更新完成后,请手动清理 PATH 变量。
在控制面板中打开“系统”。在“高级”选项卡上,单击“环境变量”,然后单击要更改的用户变量或系统变量的名称,如下所示:单击“新建/编辑/删除”添加/更改/删除新的变量名称和值。您可能需要关闭并重新打开正在运行的程序,以使新的设置生效。要使用新值更新所有正在运行的服务,最好(也是更不容易出错)重新启动机器一次。
WO 设置完成后,应存在以下环境变量
- LIB
其中包含 WebObjects 开发者工具使用的几个库的路径,应指向 C:\Apple\Developer\Libraries。您通常不必在这里更改任何内容,这里只是为了完整性而提及。
- NEXT_ROOT
新建:不要将 NEXT_ROOT 中的斜杠更改为反斜杠!保持原样即可。如果您这样做,适配器源代码的编译将失败。我之前版本中建议过其他方法,这是我的错。
- PATH
以下三个条目是 WebObjects 唯一需要的条目,但通常会通过运行 WebObjects Update 进行复制。这不会造成损害,只是会使 PATH 变量变得过长。确保只包含以下条目一次(假设您已将 WebObjects 安装到 C:\Apple):C:\Apple\Library\Executables; C:\Apple\Library\JDK\bin; C:\Apple\bin;
- TEMP
对于用于开发和运行 WebObjects 应用程序的用户帐户,请从用户变量部分中删除 TMP 和 TEMP,并将它们添加到所有用户部分。将 TEMP 和 TMP 更改为没有空格的路径,例如 c:\temp。如果您尚未创建 c:\temp,则可能需要创建它。我认为,这样可以更容易地找到启动脚本僵尸、日志文件和其他 WebObjects 临时内容。
要清理僵尸,您也可以使用您编写的任何应用程序,并在带有“clean”参数的 shell 中启动它
cd myapp.woa myapp.cmd clean
- WEBOBJECTS_JAVA_EXTENSIONS
这包含用于附加 JAR 文件的扩展文件夹的路径。典型的路径是 C:/PROGRA~1/Java/J2RE14~1.0/lib/ext。请确保这里不要使用空格,要么将您的 JRE 移动到另一个文件夹,要么使用短名称(8dot3 符号,如旧的 MSDOS)。
- WEBOBJECTS_JAVA_HOME
这指定了您编写的 WebObjects 应用程序使用的 SDK 的路径。典型的路径是 C:/J2SDK1~1.0。与上面一样,路径名称中不要使用空格。
与您在此处指定的 SDK 不同,WebObjects 开发者工具始终使用 %NEXT_ROOT%\Library\JDK 中的 JDK 1.1.8 - 您不必关心这一点。
如果您已安装 WebObjects Development 但想充分利用其部署功能(例如多个实例、无限制请求等),则必须将您的许可证升级到部署版本。有两种方法可以做到这一点。第一种方法是使用许可证升级程序。打开一个 shell 并输入
%NEXT_ROOT%\Demos\JavaWebObjectsLicenseUpgrader.app\JavaWebObjectsLicenseUpgrader.exe
或者,您可以通过“开始,程序,WebObjects,WebObjects 5 许可证升级程序”打开它。第二种方法(如果许可证升级程序没有启动)是使用文本编辑器(记事本就可以了)编辑密钥文件。只需启动编辑器并打开
%NEXT_ROOT%\Library\Frameworks\JavaWebObjects.framework\Resources\License.key
删除旧的许可证密钥并插入新的许可证密钥。
您必须重新启动 wotaskd 和(如果正在运行)Monitor,以使更改生效
net stop wotaskd5 net stop womonitor5 net start wotaskd5 net start womonitor5
IIS 适配器中存在一个严重的错误,当它承受重负载时会极大地降低性能。您每秒将达到大约 3 到 5 个请求,内存会以极快的速度被占用,导致在创建几个会话后出现 OutOfMemoryExceptions。无论何时使用 ISAPI 适配器,即使您的应用程序在使用不同操作系统的另一台机器上运行,也会发生这种情况。
幸运的是,Karl Hsu 找到了一个解决方法,我对此非常感谢。感谢 Karl!Karl 指出,只有在遇到严重性能问题时才应合并此修复程序,因此请在修补之前进行一些测试。Apache Benchmark 工具 ab(包含在支持文件包中)可用于此目的。
这两个文件 request.h 和 request.c 都位于 %NEXT_ROOT%\Developer\Examples\WebObjects\Source\Adaptors\Adaptor 中
包含以下代码的 request.h 和 request.c 的修补版本也包含在支持文件包中。如果您没有对这两个文件进行过更改,则可以将它们复制到 %NEXT_ROOT%\Developer\Examples\WebObjects\Source\Adaptors\Adaptor 并立即开始编译。
否则,在 request.h 中,搜索 #include "WOURLCUtilities.h" 并将以下行添加到其下方
#include "wastring.h"
在 request.c 中,搜索方法 'int req_sendRequest' 的开头(大约在第 217 行),并在 _before_ 添加以下代码块
#ifdef WIN32 static void req_appendHeader(const char *key, const char *val, String *headers) { int valLength = strlen(val); while (val[valLength - 1] == '\r' || val[valLength - 1] == '\n') { valLength--; } str_append(headers, key); str_appendLiteral(headers, ": "); str_appendLength(headers, val, valLength); str_appendLiteral(headers, "\r\n"); } int req_sendRequest(HTTPRequest *req, net_fd socket) { struct iovec *buffers; int bufferCount, result; String *headersString; buffers = WOMALLOC(3 * sizeof(struct iovec)); headersString = str_create(req->request_str, 0); if (headersString) { st_perform(req->headers, (st_perform_callback)req_appendHeader, headersString); } buffers[0].iov_base = headersString->text; buffers[0].iov_len = headersString->length; buffers[1].iov_base = "\r\n"; buffers[1].iov_len = 2; bufferCount = 2; if (req->content_length > 0) { bufferCount++; buffers[2].iov_base = req->content; buffers[2].iov_len = req->content_length; } result = transport->sendBuffers(socket, buffers, bufferCount); str_free(headersString); WOFREE(buffers); if (result == 0) result = transport->flush_connection(socket); else WOLog(WO_ERR, "error sending request"); return result; } #else
现在,在这个 #else 之后是原始的 req_sendRequest 方法。转到此方法的末尾,并在下一行插入一个 #endif。当您成功修补源文件后,就该...。
下一个错误:makefile 预期 OS 环境变量为空或包含字符串“WINDOWS”。不幸的是,OS 的值是 WINDOWS_NT 而不是 WINDOWS,因此 make 进程将无法编译 ISAPI 适配器。你可以修改 makefile 使其兼容 WINDOWS_NT,但你需要进行很多修改。
相反,让我们直接修改 OS 变量。但是,不要通过控制面板永久更改它,因为我不知道它是否在其他地方需要。只需在编译前将其设置为正确的值即可。打开一个 shell 并输入
cd /d %NEXT_ROOT%\Developer\Examples\WebObjects\Source\Adaptors set OS=WINDOWS make clean make
如果编译成功(没有错误消息),我们现在应该拥有 WebObjects 适配器作为 EXE(CGI)和 DLL(ISAPI)文件。这两个文件应该被复制到正确的位置(将 c:\inetpub 更改为匹配你的系统)。
net stop w3svc copy /y cgi\webobjects.exe c:\inetpub\scripts copy /y iis\webobjects.dll c:\inetpub\scripts net start w3svc
在复制之前停止 IIS 可以防止 ISAPI 适配器出现可能的共享冲突,因为如果 IIS 已经加载了该文件,你无法覆盖它。
现在你已经编译了 ISAPI 适配器,你需要配置它。对于单服务器部署(IIS 和 wotaskd 在同一台机器上),无需进一步配置。但是,如果你在另一台机器上运行 wotaskd,或者想要使用多个应用程序服务器,你需要告诉适配器在哪里寻找它们。对我来说始终有效的做法是通过注册表中的主机列表。
打开 Regedit(打开一个 shell 并输入 regedit)并转到
HKEY_LOCAL_MACHINE\SOFTWARE\Apple\WebObjects\
如果它不存在,创建一个新的子键并将其命名为“Configuration”。然后转到
HKEY_LOCAL_MACHINE\SOFTWARE\Apple\WebObjects\Configuration
并添加以下两个键(类型为 REG_SZ)
CONF_INTERVAL 10
这意味着 ISAPI 适配器每 10 秒将与 wotaskd 通信并重新读取配置。
CONF_URL http://host1:1085,http://host2:1085,http://host3:1085
这是一个所有运行 wotaskd 的主机的逗号分隔列表。1085 是默认端口。只需添加所有应用程序服务器,并确保不要在逗号后面加空格 - WO 不喜欢空格。如果你有固定的 IP 地址,你可以指定它们,否则使用主机名并确保 IIS 机器可以将主机名解析为有效的地址。如果所有机器都运行 Windows,这应该不成问题,否则你需要使用 DNS 服务器或主机文件。
现在一切都应该设置好了,是时候进行一个小测试了。首先,让我们看看 wotaskd 是否正在运行。
打开浏览器并转到 http://<myhost>:1085
If it works, you should see the host's configuration displayed in the browser. Now, open a shell and start Monitor if it is not already running: net start womonitor5
等待几秒钟,然后将浏览器指向 http://<myhost>:56789
你应该会看到 Monitor 的主窗口。现在你可以开始编写和部署应用程序了。玩得开心!
问:运行 WO 应用程序时,我一直收到以下异常
java.io.UnsupportedEncodingException: NSMacOSRomanStringEncoding
答:确保 charsets.jar 库位于你的 Java 运行时路径中。它安装在 JDK 中,但不一定安装在 JRE 中。
1.3: 2002-08-29 - 删除了将 NEXT_ROOT 中的斜杠更改为反斜杠的建议,因为这会破坏适配器源代码的编译
1.2: 2002-07-26 - 在 WebObjects 5.0 中添加了将 wotaskd 和 Monitor 安装为服务的步骤
1.1: 2002-07-10 - 为 WinNT 上的 WebObjects 设置期间出现的错误添加了两个解决方法
1.0: 2002-07-09 - 首次公开发布
0.9: 2002-06-28 - 开发中