OSGi 捆绑包中的 Websphere 8.5 + CXF。可能吗?
Websphere 8.5 + CXF in OSGi bundle. Is it possible?
我正在为基于 Websphere 8.5 和 OSGi 的设计编写 PoC。
我需要获取 SOAP 网络服务 运行 我们作为 OSGi 捆绑包并使用应用程序中其他 OSGi 捆绑包公开的 OSGi 服务。
我坚持尝试在 OSGi 包中获取 JAX-WS 服务。
到目前为止我尝试了什么:
- 获取普通 servlet 运行 作为 OSGi 包(有效)
- 获取 JAX-RS 服务 运行 作为 OSGi 包(有效)
- 使用 Websphere 提供的 JAX-WS 运行时获取 JAX-WS 服务 运行 作为 OSGi 包。这似乎不适用于从 JAX-WS 运行时抛出的异常
- 获取 JAX-WS 服务 运行 作为 OSGi 捆绑包禁用 Websphere 提供的 JAX-WS 运行时并尝试使用 OSGi 捆绑包嵌入 CXF2 运行时。不适用于从 JAXB 抛出的异常(class 某种冲突)。
在我对异常等进行过多解释之前。在 Websphere 8.5 中将 JAX-WS 服务部署为一个 OSGi 包是否有人感到高兴?有关于在 Karaf 中执行此操作的资源,但我仅限于 Websphere。
回答我自己的问题,
似乎不支持从 OSGi 包中创建 JAX-WS 服务的方式与 Servlet 和 REST 服务相同。
编辑:
以上说法不实,请看WASDEV forum跟帖。这个答案的其余部分对于 OSGi 和 SCA 仍然有效(尽管 SCA 的服务似乎是用 Axis2 而不是 CXF 实现的)
支持的是使用 SCA.
将 OSGi 服务 公开为 SOAP 服务
此答案的其余部分假设:
- 您有一个 OSGi 应用程序,其中一个捆绑包通过 blueprint.xml 公开您希望通过 SOAP 公开的服务。
- 您的 Eclipse IDE 没有 SCA 工具。
- 您有 Eclipse IDE 和 Websphere 工具(为您提供 OSGi 工具)
- 您有权访问 WAS 控制台 Web 应用程序
这些是通过 SOAP Web 服务访问服务所需的步骤
正在准备 OSGi 应用程序
- 在OSGi应用工程的APPLICATION.MF中,将服务接口标记为Application-ExportService header:
Application-ExportService: service.ExternalService
- 在包含服务的 OSGi 包的
blueprint.xml
文件中,添加 <entry key="service.exported.interfaces" value="*"/>
属性,例如:
<service id="externalService" ref="externalServiceBean" interface="ccb.service.ExternalService">
<service-properties>
<entry key="service.exported.interfaces" value="*"/>
</service-properties>
</service>
- 将项目导出为 EBA
正在准备 SCA 工件
- 创建具有以下结构的Java项目
/service.composite
/META-INF/sca-contribution.xml
- sca-contribution.xml 可以如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0">
<deployable xmlns:ns1="http://www.example.com" composite="ns1:ServiceComposite" />
</contribution>
service.composite
可以是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
xmlns:scafp="http://www.ibm.com/xmlns/prod/websphere/sca/1.0/2007/06"
targetNamespace="http://www.example.com" name="ServiceComposite">
<component name="ServiceComponent">
<scafp:implementation.osgiapp
applicationSymbolicName="[Your OSGi Application name]" applicationVersion="1.0.0" />
<service name="[maching the ID of the service in the blueprint.xml]">
<binding.ws />
</service>
</component>
</composite>
将项目导出为 jar
通过 WAS 控制台部署全部
- 创建新的空 BLA
应用程序 -> 应用程序类型 -> Business-level 应用程序 -> 新
- 将 EBA 和 SCA jar 作为资产部署
应用程序 -> 应用程序类型 -> 资产 -> 导入
- 添加首先 EBA,然后添加 SCA jar 到业务级应用程序的已部署资产
应用程序 -> 应用程序类型 -> Business-level 应用程序 -> [你的应用程序] -> 添加(在 'Deployed assets' 下)
大功告成!您应该在服务器的日志
中看到端点 url
资源:
http://ianrobinson.blogspot.co.uk/2010/05/osgi-and-sca-come-together-in-websphere.html
http://www-01.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.osgi.doc/ae/ca_sca.html
我正在为基于 Websphere 8.5 和 OSGi 的设计编写 PoC。
我需要获取 SOAP 网络服务 运行 我们作为 OSGi 捆绑包并使用应用程序中其他 OSGi 捆绑包公开的 OSGi 服务。
我坚持尝试在 OSGi 包中获取 JAX-WS 服务。
到目前为止我尝试了什么:
- 获取普通 servlet 运行 作为 OSGi 包(有效)
- 获取 JAX-RS 服务 运行 作为 OSGi 包(有效)
- 使用 Websphere 提供的 JAX-WS 运行时获取 JAX-WS 服务 运行 作为 OSGi 包。这似乎不适用于从 JAX-WS 运行时抛出的异常
- 获取 JAX-WS 服务 运行 作为 OSGi 捆绑包禁用 Websphere 提供的 JAX-WS 运行时并尝试使用 OSGi 捆绑包嵌入 CXF2 运行时。不适用于从 JAXB 抛出的异常(class 某种冲突)。
在我对异常等进行过多解释之前。在 Websphere 8.5 中将 JAX-WS 服务部署为一个 OSGi 包是否有人感到高兴?有关于在 Karaf 中执行此操作的资源,但我仅限于 Websphere。
回答我自己的问题,
似乎不支持从 OSGi 包中创建 JAX-WS 服务的方式与 Servlet 和 REST 服务相同。
编辑: 以上说法不实,请看WASDEV forum跟帖。这个答案的其余部分对于 OSGi 和 SCA 仍然有效(尽管 SCA 的服务似乎是用 Axis2 而不是 CXF 实现的)
支持的是使用 SCA.
将 OSGi 服务 公开为 SOAP 服务此答案的其余部分假设:
- 您有一个 OSGi 应用程序,其中一个捆绑包通过 blueprint.xml 公开您希望通过 SOAP 公开的服务。
- 您的 Eclipse IDE 没有 SCA 工具。
- 您有 Eclipse IDE 和 Websphere 工具(为您提供 OSGi 工具)
- 您有权访问 WAS 控制台 Web 应用程序
这些是通过 SOAP Web 服务访问服务所需的步骤
正在准备 OSGi 应用程序
- 在OSGi应用工程的APPLICATION.MF中,将服务接口标记为Application-ExportService header:
Application-ExportService: service.ExternalService
- 在包含服务的 OSGi 包的
blueprint.xml
文件中,添加<entry key="service.exported.interfaces" value="*"/>
属性,例如:
<service id="externalService" ref="externalServiceBean" interface="ccb.service.ExternalService">
<service-properties>
<entry key="service.exported.interfaces" value="*"/>
</service-properties>
</service>
- 将项目导出为 EBA
正在准备 SCA 工件
- 创建具有以下结构的Java项目
/service.composite
/META-INF/sca-contribution.xml
- sca-contribution.xml 可以如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0">
<deployable xmlns:ns1="http://www.example.com" composite="ns1:ServiceComposite" />
</contribution>
service.composite
可以是这样的:<?xml version="1.0" encoding="UTF-8"?> <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:scafp="http://www.ibm.com/xmlns/prod/websphere/sca/1.0/2007/06" targetNamespace="http://www.example.com" name="ServiceComposite"> <component name="ServiceComponent"> <scafp:implementation.osgiapp applicationSymbolicName="[Your OSGi Application name]" applicationVersion="1.0.0" /> <service name="[maching the ID of the service in the blueprint.xml]"> <binding.ws /> </service> </component> </composite>
将项目导出为 jar
通过 WAS 控制台部署全部
- 创建新的空 BLA
应用程序 -> 应用程序类型 -> Business-level 应用程序 -> 新
- 将 EBA 和 SCA jar 作为资产部署
应用程序 -> 应用程序类型 -> 资产 -> 导入
- 添加首先 EBA,然后添加 SCA jar 到业务级应用程序的已部署资产
应用程序 -> 应用程序类型 -> Business-level 应用程序 -> [你的应用程序] -> 添加(在 'Deployed assets' 下)
大功告成!您应该在服务器的日志
中看到端点 url资源:
http://ianrobinson.blogspot.co.uk/2010/05/osgi-and-sca-come-together-in-websphere.html
http://www-01.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.osgi.doc/ae/ca_sca.html