我一直在做关于将Eclipse插件公开为Web服务的研究,但是我感到困惑。如何将Eclipse插件作为Web服务公开?
我的要求基本上是为一组Web服务构建一个Equinox后端。 我将大量使用EMF和相关项目,所以考虑到这一目标,我一直在阅读关于Equinox/OSGI以及构建我所需的选项。
但是,有一些神秘的观点,总体来说还有大量的项目。鉴于下面的调查结果,我想听听你的建议。也许有一个选项我错过了,或者你以前做过。这里是被提名者(鼓点)
在Web容器中托管Equinox。使用bridge.war,插件可以暴露一个servlet。问题是,为了使用像RESTEasy这样的好REST框架(我最喜欢的),REST框架需要是一个生活在Equionox运行时的osgi包。我花了3天时间,并且由于类加载器问题,这不起作用。我现在确信我无法在Equinox中拥有RestEasy。我可以在Web容器中使用RestEasy,并使用XML序列化/反序列化将Web容器中的代码与Equionox中的代码进行对话,但是这样感觉像是浪费了资源。不过,这可能会起作用。
另一种选择似乎是ECF,它是分布式OSGI的实现,它似乎支持SOAP/Rest。但是,我找不到一个将Equinox托管的功能公开为Web服务的清晰教程。所以这仍然迫使我不要使用RestEasy,但至少它似乎给了我一个适合Equinox的框架。我可能仍然需要将其保存在Web收件人的可扩展性中。
然后是Eclipse处女座,它似乎支持托管Web应用程序以及OSGI运行时,显然Web容器托管的代码可以与OSGI运行时代码交谈。不过,我不确定是否可以传递类,因为在Web容器下创建的Jaxb注释类型A可能使用与OSGI运行时插件不同的类加载器。此外,这种设置将我锁定在处女座,我宁愿与JBoss等一起用于生产。
因此,鉴于这些选项以及可能更多我目前不知道的内容,您将如何将EMF和其他基于Eclipse框架的项目公开为Web服务?
编辑: 基于我希望添加更多的好回应。问题的部分细节,部分评论不适合评论部分。
我在问题后的研究让我与接受的答案完全相同:Apache CXF现在是分布式OSGI的实现,这很好。我放弃了RestEasy。我目前的担心是,我已经有一个XSD创建了我的类。 RestEasy使暴露这些变得非常容易,我必须在这里做同样的事情。我的插件将不得不使用这些基于JAXB的类。在最坏的情况下,我可能会尝试使用提供JAXB支持的Eclipse Link项目,以创建XML内容,并通过基本的servlet使用或基于CXF的字符串值传递它。所以这里讨论的解决方案并不完美,但我认为这是目前最好的解决方案。
非常好的答案,非常感谢您的详细回复。请参阅我的“原始问题”的补充,该问题在“编辑:”之后开始。 – mahonya
另一个关键问题是:那么建议如何公开OSGI?如果不在网络servlet中运行Equionox? – mahonya
推荐的方法是将Web/servlet容器嵌入到OSGI容器中。这并不总是可能的,但是并不是所有的web容器都有OSGI实现。 – EJK