【问题标题】:Deploying BEAN in OSGi plugin在 OSGi 插件中部署 BEAN
【发布时间】:2015-07-03 07:31:57
【问题描述】:

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

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

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

类似 FEATURE-faces-config.xml 的东西?

【问题讨论】:

  • 您能澄清一下“它似乎忽略了本地 faces-config”吗?您的意思是您尝试在 OSGi 插件中使用 Java 类并在 NSF 的 faces-config 中引用该类,但没有奏效?
  • 我有两个豆子。一种通过 OSGI 插件部署。我还把faces-config文件放到了插件的WEB-INF文件夹中。然后是我的一个 NSF 中的一个 BEAN,我也想使用来自插件的 BEAN。在我的 NSF 中,我将 bean 放入“本地”faces-config,但似乎一旦我有一个来自 OSGI 插件的本地 faces-config,它就会忽略本地 faces-config。
  • 他们是否同名?

标签: osgi xpages


【解决方案1】:

在插件中扩展 AbstractXspLibrary 的类中,您可以覆盖“getFacesConfigFiles”,它应该返回一个字符串数组,该数组表示插件内的路径,以加载任何名称的附加文件作为 faces-config 添加。例如:

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

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

【讨论】:

  • 这就是我要找的东西。
【解决方案2】:

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、页面控制器类中添加 Java 类的实例,或者您正在管理相关 XPage(如果 viewScope)或应用程序(如果 sessionScope /应用范围)。

【讨论】:

    猜你喜欢
    • 2017-12-07
    • 2017-01-19
    • 2019-12-14
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    相关资源
    最近更新 更多