1

实际上我想将我的应用程序从 FUSE ESB 迁移到 WSO2esb。在我的 FUSE 应用程序中,我为 Logger 创建了一个 OSGI 包,并在 OSGI 注册表中注册了 Logger 服务。其他 OSGI 包可以通过引用它来获取该 OSGI 服务。

我使用 servicemix-camel-osgi artifactId 为 Logger 创建了一个 OSGI maven 项目。我使用了 Apache Camel 方法,因此创建了一个 MainRoute xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:osgi="http://www.springframework.org/schema/osgi"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
       http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">


    <bean id="Logger" class="com.logging.LoggerImpl" factory-method="getInstance"></bean>
    <osgi:service id="LoggerService" ref="Logger" interface="com.logging.Logger"></osgi:service>

  <camelContext autoStartup="true" xmlns="http://camel.apache.org/schema/spring"/>

</beans>

在这个文件中,我创建了 LoggerImpl 类的 Spring bean,并使用 SpringDM 将其注册为 OSGI 服务。然后我使用 servicemix-camel-osgi artifactId 创建了 ABC 的其他 Maven 项目,并且在该项目中我创建了一个路由文件。它看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:camel="http://camel.apache.org/schema/spring" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:osgi="http://www.springframework.org/schema/osgi"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
       http://www.springframework.org/schema/osgi  
       http://www.springframework.org/schema/osgi/spring-osgi.xsd">

    <import resource="classpath:spring-beans.xml" />

    <osgi:reference id="util_logger" interface="com.logging.Logger" bean-name="Logger"></osgi:reference>
    <camelContext trace="false" xmlns="http://camel.apache.org/schema/spring"/>

</bean>

所以如上面的文件所示,我已经使用 OSGI Refrence 获得了 Logger 服务。

这样做的主要动机是当我在注册表中注册 Logger OSGI 服务时,任何 OSGI 包都可以使用它的引用而不是导入包来使用该服务。同样的事情想在 WSO2 中实现,但无法得到任何解决方案。

如果有任何解决方案或建议,请建议我,以便我实现。谢谢。

4

0 回答 0