在 OSGi 插件中部署 BEAN

Deploying BEAN in OSGi plugin

我目前正在将我的自定义控件部署为 OSGi 插件,我想对我的 bean 做同样的事情。我已经尝试将它们放入 OSGi 插件中并且它工作正常但我遇到的唯一问题是 faces-config。

似乎必须在 OSGi 插件中调用 faces-config 才能工作,但这意味着我不能再在 NSF 中使用 beans,因为它似乎忽略了本地 faces-config。

有没有办法在 OSGi 插件中更改 faces-config 的名称?

类似于 FEATURE-faces-config.xml?

NSF 运行 作为单独的、不同的 Java 应用程序。 OSGi 插件 运行 在 OSGi 层中,高于所有那些不同的 Java 应用程序,作为一个单一的代码库。因此,faces-config 仅在该级别。

可以使用从 XspContributor 加载的 ImplicitObjectFactory 动态加载它们。这就是在 OpenNTF Domino API 中所做的,例如userScope(这是一个存储在 NSF 的 applicationScope 中的 bean)。请参阅 org.openntf.domino.xsp.helpers.OpenntfDominoImplicitObjectFactory,它在 OpenntfDominoXspContributor 中引用,通过 "com.ibm.xsp.library.Contributor" 类型的扩展点加载。

一些注意事项:

  1. 如果您尝试使用开发人员也用于该范围内不同变量的名称注册您的 bean,您将无法控制会发生什么。
  2. 除非像我们一样添加代码来检查库是否已启用,否则您将把 bean 添加到服务器上的每个 数据库。
  3. 您仍然需要将该库添加到 NSF。据我所知,除非您还提供这些数据库都将使用的组件,否则您无法以编程方式添加它。

跳过 bean 方法并在 beforePageLoad、页面控制器 class 中添加 Java class 的实例可能更容易,或者您正在管理支持到相关的 XPage(如果是 viewScope)或应用程序(如果是 sessionScope / applicationScope)。

在扩展 AbstractXspLibrary 的插件中的 class 中,您可以覆盖 "getFacesConfigFiles",它应该 return 一个字符串数组,表示插件中到任何名称的其他文件的路径作为 faces-config 添加加载。例如:

@Override
public String[] getFacesConfigFiles() {
    return new String[] {
        "com/example/config/beans.xml"
    };
}

然后您可以将配置文件放在您的 Java 源文件夹(或 build.properties 中包含的另一个文件夹)中的该路径中,除了您的应用程序的正常面孔之外,它将被加载-config、bean 和所有。