你能在不同的OSGi包中使用JSF自定义组件吗?

时间:2008-10-15 03:29:18

标签: java jsf osgi

有没有人一起使用OSGi和JSF?

我问,因为JSF使用类加载器魔术来查找自定义组件。从教程(强调我的):

  

此配置文件将结束   是的META-INF / faces-config.xml   代表这个的.jar文件   零件。 JSF会寻找这样的   每个.jar文件中的文件名   在运行时加载(在   .war文件的WEB-INF / lib目录)   并在其中使用它们中的每一个   组态。这样,多个   组件.jar文件可以组合   一个Web应用程序,以及所有   每个.jar中描述的组件   将可用于该应用程序。

我希望能够将JSF自定义组件作为OSGi包(即自定义组件与JSF运行时不同的OSGi包)以及JSF能够在运行时找到它们。

有没有人做过类似的事情?

2 个答案:

答案 0 :(得分:1)

我不确定它是否能完全解决您的问题,但我发现此线程关于Spring and osgi有趣,特别是此specific answer,其中依赖项和类路径捆绑在MANIFEST.MF中。

该线程还导致tutorial about Spring Dynamic Modules (DM) for OSGi™ Service Platforms的更新,这也可能是有意义的。

答案 1 :(得分:1)

可以通过以下方式:

  • 您的web osgi包必须在MANIFEST.MF中指向包含组件的包中的“Require-Bundle”
  • 你的组件jar必须有包含META-INF的Export-Package和META-INF的子包,其中有任何JSF相关文件(当然还有组件的标准包)。例如:Export-Package:META-INF,META-INF.resources ...

如果您使用maven-bundle插件,则必须使用撇号和等号来导出META-INF和子包。例如:

<Export-Package>
  a.b.c,
  '=META-INF',
  '=META-INF.resources',
  ...
</Export-Package>

在JSF Spec 2.2中,可能存在关于JSF-OSGI关系的部分内容。要查看进度,请参阅http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-942