WebObjects/Web 应用程序/开发/框架
框架是 Apple 用于打包和分发共享功能的机制。框架不仅可以包含代码,还可以包含资源和 Web 服务器资源,就像一个完整的 WOA。
部署在框架中的图像
如果框架包含从主应用程序访问的图像,则必须记住更改某些 WOComponents 中的框架绑定。如果不这样做,则在开发过程中会变得很明显。默认值为“app”,但必须将其更改为框架的名称。在部署时,必须在部署机器上包含应用程序框架。如果只将框架放在此位置,图像似乎无法正确显示:/Library/Frameworks。您还需要将框架的 Web 服务器资源放在 /WebServer/Documents/WebObjects/Frameworks 文件夹中。我只是将整个 .framework 文件夹包含在该目录中,图像就会从 Web 服务器正确提供。所有上述路径均适用于 MacOS X。
我有一个框架,我想对其进行一些显式初始化。类似于在 Java 中执行类静态初始化器。在何处放置此代码?或者我可以使用类静态初始化器吗?
在框架的资源中添加一个名为 CustomInfo.plist 的文本文件。将此文本添加到文件中
{ NSPrincipalClass = MyFrameworkInitializer; }
创建一个 java 文件 MyFrameworkInitializer.java,并在该类的静态块中初始化框架中的任何类。当然,您可以将类命名为任何名称,只需确保在 .plist 文件中放入了完整的类名,包括包。
这是 NeXT 时代的遗留问题,如果框架永远消失,而 WO 切换到普通的 Java 部署,它可能会停止工作。基本上,框架加载器将以这种方式引用声明为 NSPrincipalClass? 的每个类。巧妙的是,您的框架在初始化时无需在应用程序构造函数中自己记住它。
我无法按照上述说明进行操作。问题
- 生成的 Info.plist 不包含该 NSPrincipalClass? 引用,并且显然什么也没发生。如果按照说明进行操作,您实际上最终会得到一个 CustomInfo.plist。我原本期望 CustomInfo.plist 合并到 Info.plist 中。我发现,如果您确实希望它合并到 Info.plist 中,则需要“项目 - 编辑活动目标”,然后在 Info.plist 折叠处有一个名为“Cocoa 特定”的条目。在那里,您找到“主类”的条目,然后在其中输入初始化器类。
- 初始化器类调用_非常_早。我预计它会像数据库连接一样工作;即在应用程序初始化之后。实际上,在我的情况下,框架是在 main 之后立即初始化的。如果您打开了运行日志,则初始化将在打印类路径列表后打印第一个
时发生。因此,我相信它没有发生,因为我在后来寻找初始化。
希望下一位勇敢的开发者能够得到帮助。顺便说一下,Xcode 的相关文档对于 WO 开发者来说只有边际作用。当您进行 WO 框架时,描述的面板实际上并不存在。但是,以必要条目形式描述的信息很有帮助。
提示:我经常让我的框架初始化器创建一个工作器对象来监听 ApplicationWillLaunchNotification 或 ApplicationDidLaunchNotification。如果我需要在 WOApplication 实例构建之前或之后进行初始化。