在OSGi插件中部署BEAN

时间:2015-07-03 07:31:57

标签: osgi xpages

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

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

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

像FEATURE-faces-config.xml?

2 个答案:

答案 0 :(得分:4)

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

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

然后,您可以将配置文件放在Java源文件夹(或build.properties中包含的其他文件夹)中的该路径中,除了应用程序的普通faces-config,beans和all之外,还将加载它。 / p>

答案 1 :(得分:1)

NSF作为独立的,独特的Java应用程序运行。 OSGi插件作为单个代码库在OSGi层中运行,在所有这些不同的Java应用程序之上运行。因此,faces-config仅在该级别。

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

一些警告:

  1. 如果您尝试使用开发人员也用于该范围内的其他变量的名称注册您的bean,您无法控制会发生什么。
  2. 除非您像我们一样添加代码以检查库是否已启用,否则您将把bean添加到服务器上的每个数据库。
  3. 您仍需要将库添加到NSF。除非您还提供了这些数据库都将使用的组件,否则就我所知,您无法以编程方式添加它。
  4. 跳过bean方法可能更容易,只需在beforePageLoad,页面控制器类中添加Java类的实例,或者您正在管理对相关XPage(如果是viewScope)或应用程序(如果是sessionScope /)的支持applicationScope)。